diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000000..391283c46aee --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,23 @@ +{ + "name": "Kubernetes - Minikube-in-Docker", + "image": "mcr.microsoft.com/devcontainers/base:bullseye", + "runArgs": [ + "--privileged", + "--device", + "/dev/kvm" + ], + "features": { + "ghcr.io/devcontainers/features/docker-in-docker:2": { + "enableNonRootDocker": "true", + "moby": "true" + }, + "ghcr.io/devcontainers/features/kubectl-helm-minikube:1": { + "version": "latest", + "helm": "latest", + "minikube": "latest" + }, + "ghcr.io/devcontainers/features/go:1": { + "version": "latest" + } + } +} \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000000..641c1ef6561d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +# Prevent Git from altering line endings for test fixtures; enforce LF for YAML/JSON under any testdata directory. +**/testdata/**/*.yaml text eol=lf +**/testdata/**/*.yml text eol=lf +**/testdata/**/*.json text eol=lf \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/__en-US.md b/.github/ISSUE_TEMPLATE/__en-US.md deleted file mode 100644 index c930965aa515..000000000000 --- a/.github/ISSUE_TEMPLATE/__en-US.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: English -about: Report an issue ---- - -**Steps to reproduce the issue:** - -1. -2. -3. - -**Full output of `minikube logs` command:** -
- - -
- - -**Full output of failed command:** -
- - -
diff --git a/.github/ISSUE_TEMPLATE/__en-US.yaml b/.github/ISSUE_TEMPLATE/__en-US.yaml new file mode 100644 index 000000000000..491b66599d31 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/__en-US.yaml @@ -0,0 +1,56 @@ +name: English +description: Report an issue +body: + - type: textarea + id: problem + attributes: + label: What Happened? + description: | + Tip: Add the "--alsologtostderr" flag to the command-line for more logs + validations: + required: true + - type: textarea + id: logs + attributes: + label: Attach the log file + description: | + Tip: Run `minikube logs --file=log.txt` then drag & drop `log.txt` file to the browser. + **WARNING:** If you're using the HyperKit driver, please look through your logs and remove any environment variables that may contain sensitive information (ex. access tokens or secrets). + All environment variables will be stripped as of minikube `1.26.0` but any prior versions will have to be removed manually. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Operating System + description: What is your OS? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Driver + description: What driver do you use? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/ar.md b/.github/ISSUE_TEMPLATE/ar.md deleted file mode 100644 index eddc8cf42992..000000000000 --- a/.github/ISSUE_TEMPLATE/ar.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: عربى -about: بلغ عن خطأ -labels: l/ar ---- - - -**الأوامر المطلوبة لإعادة إظهار المشكلة**: - -**النتيجة الكاملة للأمر الذي تعذّر تنفيذه**:
- - -
- -**نتيجة الأمر `minikube logs`**:
- - -
- -**إصدار نظام التشغيل المُستخدَم**: diff --git a/.github/ISSUE_TEMPLATE/ar.yaml b/.github/ISSUE_TEMPLATE/ar.yaml new file mode 100644 index 000000000000..3b8839749cb1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/ar.yaml @@ -0,0 +1,56 @@ +name: العربية +description: الإبلاغ عن مشكلة +body: + - type: textarea + id: problem + attributes: + label: ماذا حدث؟ + description: | + نصيحة: أضف العلم "--alsologtostderr" إلى سطر الأوامر للحصول على مزيد من السجلات + validations: + required: true + - type: textarea + id: logs + attributes: + label: أرفق ملف السجلات + description: | + نصيحة: شغّل الأمر `minikube logs --file=log.txt` ثم قم بسحب وإفلات ملف `log.txt` في المتصفح. + **تحذير:** إذا كنت تستخدم برنامج التشغيل HyperKit، يُرجى مراجعة السجلات وإزالة أي متغيرات بيئية قد تحتوي على معلومات حساسة (مثل رموز الوصول أو الأسرار). + تتم إزالة جميع المتغيرات البيئية تلقائيًا بدءًا من الإصدار `1.26.0` من minikube، ولكن في الإصدارات السابقة يجب إزالتها يدويًا. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: نظام التشغيل + description: ما هو نظام التشغيل لديك؟ + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: برنامج التشغيل + description: ما هو برنامج التشغيل الذي تستخدمه؟ + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/bg.yaml b/.github/ISSUE_TEMPLATE/bg.yaml new file mode 100644 index 000000000000..07c6b0d38e92 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bg.yaml @@ -0,0 +1,56 @@ +name: Български +description: Докладвай проблем +body: + - type: textarea + id: problem + attributes: + label: Какво се случи? + description: | + Съвет: Добавете флага "--alsologtostderr" към командния ред за повече логове. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Прикачи лог файл + description: | + Съвет: Стартирайте `minikube logs --file=log.txt`, след това плъзнете и пуснете файла `log.txt` в браузъра. + **ВНИМАНИЕ:** Ако използвате драйвера HyperKit, проверете логовете си и премахнете всички променливи на средата, които могат да съдържат чувствителна информация (например токени за достъп или тайни). + Всички променливи на средата ще бъдат премахнати автоматично от версия `1.26.0` на minikube, но при по-ранни версии трябва да бъдат премахнати ръчно. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Операционна система + description: Каква е вашата ОС? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Driver + description: Кой драйвър използвате? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000000..a49eab2f6b99 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/de.yaml b/.github/ISSUE_TEMPLATE/de.yaml new file mode 100644 index 000000000000..3ab65e59d78b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/de.yaml @@ -0,0 +1,56 @@ +name: Deutsch +description: Problem melden +body: + - type: textarea + id: problem + attributes: + label: Was ist passiert? + description: | + Tipp: Fügen Sie das Flag "--alsologtostderr" zur Befehlszeile hinzu, um weitere Logs zu erhalten. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Log-Datei anhängen + description: | + Tipp: Führen Sie `minikube logs --file=log.txt` aus und ziehen Sie dann die Datei `log.txt` in den Browser. + **WARNUNG:** Wenn Sie den HyperKit-Treiber verwenden, überprüfen Sie bitte Ihre Logs und entfernen Sie alle Umgebungsvariablen, die sensible Informationen enthalten könnten (z. B. Zugriffstoken oder Secrets). + Ab Minikube-Version `1.26.0` werden alle Umgebungsvariablen automatisch entfernt, bei früheren Versionen müssen diese manuell gelöscht werden. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Betriebssystem + description: Welches Betriebssystem verwenden Sie? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Treiber + description: Welchen Treiber verwenden Sie? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/es.md b/.github/ISSUE_TEMPLATE/es.md deleted file mode 100644 index 9492378578ea..000000000000 --- a/.github/ISSUE_TEMPLATE/es.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Español -about: Reportar un problema -labels: l/es ---- - - -**Los comandos necesarios para reproducir la incidencia**: - -**El resultado completo del comando que ha fallado**:
- - - -
- -**El resultado del comando `minikube logs`**:
- - - -
- -**La versión del sistema operativo que utilizaste**: diff --git a/.github/ISSUE_TEMPLATE/es.yaml b/.github/ISSUE_TEMPLATE/es.yaml new file mode 100644 index 000000000000..8a759ffbf950 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/es.yaml @@ -0,0 +1,56 @@ +name: Español +description: Reportar un problema +body: + - type: textarea + id: problem + attributes: + label: ¿Qué ocurrió? + description: | + Consejo: añade el indicador "--alsologtostderr" en la línea de comandos para obtener más registros. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Adjunta el archivo de registro + description: | + Consejo: ejecuta `minikube logs --file=log.txt` y luego arrastra y suelta el archivo `log.txt` en el navegador. + **ADVERTENCIA:** Si estás usando el controlador HyperKit, revisa tus registros y elimina cualquier variable de entorno que pueda contener información sensible (por ejemplo, tokens de acceso o secretos). + Todas las variables de entorno se eliminarán automáticamente a partir de la versión `1.26.0` de minikube, pero en versiones anteriores deberán eliminarse manualmente. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Sistema operativo + description: ¿Cuál es tu sistema operativo? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Controlador + description: ¿Qué controlador utilizas? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/fa.md b/.github/ISSUE_TEMPLATE/fa.md deleted file mode 100644 index 973186dce223..000000000000 --- a/.github/ISSUE_TEMPLATE/fa.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: فارسی -about: مشكلی را گرزارش كن -labels: l/fa ---- - - -**کامندی که مشکل را به وجود می آورد**: - -**خروجی کامل کامند مورد مشکل:**:
- - - -
- -**`minikube logs` خروجی کامل دسستور**:
- - - -
- -**سیستم عامل مورد استفاده با ذکر ورژن**: diff --git a/.github/ISSUE_TEMPLATE/fa.yaml b/.github/ISSUE_TEMPLATE/fa.yaml new file mode 100644 index 000000000000..e60a88e30ed5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/fa.yaml @@ -0,0 +1,56 @@ +name: فارسی +description: گزارش یک مشکل +body: + - type: textarea + id: problem + attributes: + label: چه اتفاقی افتاد؟ + description: | + نکته: برای دریافت گزارش‌های بیشتر، پرچم "--alsologtostderr" را به خط فرمان اضافه کنید. + validations: + required: true + - type: textarea + id: logs + attributes: + label: فایل گزارش را پیوست کنید + description: | + نکته: دستور `minikube logs --file=log.txt` را اجرا کرده و سپس فایل `log.txt` را در مرورگر بکشید و رها کنید. + **هشدار:** اگر از درایور HyperKit استفاده می‌کنید، لطفاً گزارش‌های خود را بررسی کرده و هر متغیر محیطی که ممکن است شامل اطلاعات حساس (مانند توکن‌های دسترسی یا اسرار) باشد را حذف کنید. + از نسخه `1.26.0` به بعد در minikube، تمام متغیرهای محیطی به‌طور خودکار حذف می‌شوند، اما در نسخه‌های قبلی باید به صورت دستی حذف شوند. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: سیستم‌عامل + description: سیستم‌عامل شما چیست؟ + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: درایور + description: از کدام درایور استفاده می‌کنید؟ + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/fr.md b/.github/ISSUE_TEMPLATE/fr.md deleted file mode 100644 index 8ef71cf5d071..000000000000 --- a/.github/ISSUE_TEMPLATE/fr.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: Français -about: Signaler un problème -labels: l/fr ---- - -**Étapes pour reproduire le problème:** - -1. -2. -3. - -**Sortie complète de la commande `minikube logs`:** -
- - -
- - -**Sortie complète de la commande échouée:** -
- - -
diff --git a/.github/ISSUE_TEMPLATE/fr.yaml b/.github/ISSUE_TEMPLATE/fr.yaml new file mode 100644 index 000000000000..c514b3178b12 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/fr.yaml @@ -0,0 +1,56 @@ +name: Français +description: Signaler un problème +body: + - type: textarea + id: problem + attributes: + label: Que s’est-il passé ? + description: | + Astuce : ajoutez le paramètre "--alsologtostderr" à la ligne de commande pour obtenir davantage de journaux. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Joindre le fichier de journal + description: | + Astuce : exécutez `minikube logs --file=log.txt`, puis faites glisser et déposez le fichier `log.txt` dans le navigateur. + **AVERTISSEMENT :** Si vous utilisez le pilote HyperKit, veuillez vérifier vos journaux et supprimer toute variable d’environnement susceptible de contenir des informations sensibles (par ex. jetons d’accès ou secrets). + Toutes les variables d’environnement seront automatiquement supprimées à partir de la version `1.26.0` de minikube, mais pour les versions antérieures, elles doivent être supprimées manuellement. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Système d’exploitation + description: Quel est votre système d’exploitation ? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Pilote + description: Quel pilote utilisez-vous ? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/id.md b/.github/ISSUE_TEMPLATE/id.md deleted file mode 100644 index f7692ee87431..000000000000 --- a/.github/ISSUE_TEMPLATE/id.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Bahasa Indonesia -about: Laporkan masalah -labels: l/id ---- - - -**Perintah yang diperlukan untuk merekonstruksi masalah**: - -**Output penuh dari perintah yang gagal**:
- - -
- -**Output dari perintah `minikube logs`**:
- - -
- -**Versi sistem operasi yang digunakan**: diff --git a/.github/ISSUE_TEMPLATE/id.yaml b/.github/ISSUE_TEMPLATE/id.yaml new file mode 100644 index 000000000000..2b318f5ef124 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/id.yaml @@ -0,0 +1,56 @@ +name: Bahasa Indonesia +description: Laporkan masalah +body: + - type: textarea + id: problem + attributes: + label: Apa yang terjadi? + description: | + Tips: Tambahkan flag "--alsologtostderr" pada baris perintah untuk mendapatkan lebih banyak log. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Lampirkan file log + description: | + Tips: Jalankan `minikube logs --file=log.txt` lalu seret dan jatuhkan file `log.txt` ke peramban. + **PERINGATAN:** Jika Anda menggunakan driver HyperKit, harap periksa log Anda dan hapus variabel lingkungan apa pun yang mungkin berisi informasi sensitif (misalnya token akses atau rahasia). + Semua variabel lingkungan akan dihapus secara otomatis mulai dari versi `1.26.0` minikube, tetapi pada versi sebelumnya harus dihapus secara manual. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Sistem Operasi + description: Apa sistem operasi Anda? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Driver + description: Driver apa yang Anda gunakan? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/it.yaml b/.github/ISSUE_TEMPLATE/it.yaml new file mode 100644 index 000000000000..fe9e2ec98227 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/it.yaml @@ -0,0 +1,56 @@ +name: Italiano +description: Segnala un problema +body: + - type: textarea + id: problem + attributes: + label: Cosa è successo? + description: | + Suggerimento: Aggiungi il flag "--alsologtostderr" al comando per ottenere più log. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Allegare il file di log + description: | + Suggerimento: Esegui `minikube logs --file=log.txt` e poi trascina il file `log.txt` nel browser. + **ATTENZIONE:** Se stai usando il driver HyperKit, controlla i tuoi log e rimuovi eventuali variabili d'ambiente che potrebbero contenere informazioni sensibili (ad es. token di accesso o segreti). + Tutte le variabili d'ambiente saranno rimosse automaticamente a partire da minikube `1.26.0`, ma nelle versioni precedenti devono essere rimosse manualmente. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Sistema operativo + description: Qual è il tuo sistema operativo? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Driver + description: Quale driver stai usando? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/ja.yaml b/.github/ISSUE_TEMPLATE/ja.yaml new file mode 100644 index 000000000000..328c1396a01a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/ja.yaml @@ -0,0 +1,56 @@ +name: 日本語 +description: 問題を報告する +body: + - type: textarea + id: problem + attributes: + label: 何が起こりましたか? + description: | + ヒント: 追加のログを取得するには、コマンドラインに "--alsologtostderr" フラグを付けて実行してください。 + validations: + required: true + - type: textarea + id: logs + attributes: + label: ログファイルを添付 + description: | + ヒント: `minikube logs --file=log.txt` を実行し、ブラウザに `log.txt` ファイルをドラッグ&ドロップしてください。 + **警告:** HyperKit ドライバーを使用している場合は、ログを確認し、機密情報(アクセストークンやシークレットなど)が含まれる環境変数を削除してください。 + minikube バージョン `1.26.0` 以降では、すべての環境変数が自動的に削除されますが、それ以前のバージョンでは手動で削除する必要があります。 + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: オペレーティングシステム + description: ご使用のOSは何ですか? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: ドライバー + description: どのドライバーを使用していますか? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/ku.md b/.github/ISSUE_TEMPLATE/ku.md deleted file mode 100644 index 97b52ae62f8d..000000000000 --- a/.github/ISSUE_TEMPLATE/ku.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Kurdî -about: Girêftek gozarîş bike -labels: l/ku ---- - - -**Rêk ew kommandey be karit henawe, bo dubara kirdin girifteke**: - -**Tewawi berhem (output) kommandeke**:
- - -
- -**Berhemî kommandi `minikube logs`**:
- - -
- -**Jor o virjênî operating system**: diff --git a/.github/ISSUE_TEMPLATE/ku.yaml b/.github/ISSUE_TEMPLATE/ku.yaml new file mode 100644 index 000000000000..1ee94622e159 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/ku.yaml @@ -0,0 +1,56 @@ +name: Kurdî (Kurmanji) +description: Raportkirina pirsgirêkekê +body: + - type: textarea + id: problem + attributes: + label: Çi bû? + description: | + Rêwîtiya bikar: Ji bo ku zêdetir log bistînin, flag "--alsologtostderr" li ser rêza fermana xwe zêde bikin. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Pelê logê bikeve + description: | + Rêwîtiya bikar: Run `minikube logs --file=log.txt` û paşê pelê `log.txt` ji browser ve drag & drop bikin. + **HİZAR:** Heke hûn driverê HyperKit têkiliyê dikin, ji kerema xwe logên xwe kontrol bikin û her guhertoyekî env ku dikare agahiyên sezayî (mînak: token-an an şîfre) heye, jê bidin. + Hemû guhertoyên env ji minikube `1.26.0` ve bi awayê otomatik hate rakirin, lê di guhertoyên berê de divê bi destan jêbirin. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Pergala Operasyonê + description: Pergala Operasyonê te çi ye? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Driver + description: Hûn çi driverê têkiliyê dikin? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/pt-BR.md b/.github/ISSUE_TEMPLATE/pt-BR.md deleted file mode 100644 index 4d823098f291..000000000000 --- a/.github/ISSUE_TEMPLATE/pt-BR.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: Português -about: Comunicar um problema -labels: l/pt-BR ---- - -  -**Os comandos necessários para reproduzir o problema**: -  -**A saída completa do comando que apresentou falha**:
- - - -
- -**A saída do comando `minikube logs`**:
- - -
- -**A versão do sistema operacional usado**: diff --git a/.github/ISSUE_TEMPLATE/pt-BR.yaml b/.github/ISSUE_TEMPLATE/pt-BR.yaml new file mode 100644 index 000000000000..f3ce576713b8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/pt-BR.yaml @@ -0,0 +1,56 @@ +name: Português (Brasil) +description: Reportar um problema +body: + - type: textarea + id: problem + attributes: + label: O que aconteceu? + description: | + Dica: Adicione a flag "--alsologtostderr" na linha de comando para obter mais logs. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Anexe o arquivo de log + description: | + Dica: Execute `minikube logs --file=log.txt` e depois arraste e solte o arquivo `log.txt` no navegador. + **AVISO:** Se você estiver usando o driver HyperKit, verifique seus logs e remova quaisquer variáveis de ambiente que possam conter informações sensíveis (ex.: tokens de acesso ou segredos). + Todas as variáveis de ambiente serão removidas automaticamente a partir da versão `1.26.0` do minikube, mas em versões anteriores será necessário removê-las manualmente. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Sistema Operacional + description: Qual é o seu sistema operacional? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Driver + description: Qual driver você usa? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/ru.yaml b/.github/ISSUE_TEMPLATE/ru.yaml new file mode 100644 index 000000000000..ab61963ee371 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/ru.yaml @@ -0,0 +1,54 @@ +name: Сообщить о проблеме +description: Отчет о проблеме на русском +body: + - type: textarea + id: problem + attributes: + label: Что произошло? + description: | + Подсказка: Добавьте флаг "--alsologtostderr", чтобы получить более подробные логи + validations: + required: true + - type: textarea + id: logs + attributes: + label: Приложите логи + description: | + Подсказка: Выполните `minikube logs --file=log.txt` и перетащите файл `log.txt` в браузер. + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: Операционная система + description: Какая у вас ОС? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: Драйвер + description: Какой драйвер используете? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/zh-CN.md b/.github/ISSUE_TEMPLATE/zh-CN.md deleted file mode 100644 index 00fd749e7af6..000000000000 --- a/.github/ISSUE_TEMPLATE/zh-CN.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: 中文 (Chinese) -about: 报告问题 -labels: l/zh-CN ---- - - -**重现问题所需的命令**: - -**失败的命令的完整输出**:
- - -
- - -**`minikube logs`命令的输出**:
- - -
- - -**使用的操作系统版本**: diff --git a/.github/ISSUE_TEMPLATE/zh-CN.yaml b/.github/ISSUE_TEMPLATE/zh-CN.yaml new file mode 100644 index 000000000000..1cd58d3abb66 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/zh-CN.yaml @@ -0,0 +1,56 @@ +name: 中文 (Chinese) +description: 报告一个问题 +body: + - type: textarea + id: problem + attributes: + label: 发生了什么? + description: | + 提示:在命令行中添加 "--alsologtostderr" 参数以获取更多日志。 + validations: + required: true + - type: textarea + id: logs + attributes: + label: 附上日志文件 + description: | + 提示:运行 `minikube logs --file=log.txt`,然后将 `log.txt` 文件拖放到浏览器中。 + **警告:** 如果你使用 HyperKit 驱动,请检查日志并删除可能包含敏感信息(例如访问令牌或密钥)的环境变量。 + 从 minikube `1.26.0` 版本开始,所有环境变量将自动清除,但在之前的版本中需要手动删除。 + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: 操作系统 + description: 你的操作系统是什么? + options: + - macOS (Default) + - Windows + - Ubuntu + - Redhat/Fedora + - Other + validations: + required: false + - type: dropdown + id: driver + attributes: + label: 驱动程序 + description: 你使用哪个驱动程序? + options: + - N/A + - Docker + - Podman + - HyperKit + - Hyper-V + - KVM2 + - VirtualBox + - None (Baremetal) + - SSH + - VMware + - Parallels + - QEMU + - vfkit + - krunkit + validations: + required: false \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 61634d5a45f2..31d630fd3e7b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,3 +5,9 @@ updates: directory: "/" schedule: interval: "weekly" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + ignore: + - dependency-name: "vedantmgoyal2009/winget-releaser" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c9c14c92dd83..1ab34d9d50c6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,16 +12,18 @@ on: - "!deploy/iso/**" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.25.5' +permissions: + contents: read + jobs: build_minikube: - runs-on: ubuntu-18.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: go-version: ${{env.GO_VERSION}} - stable: true - name: Download Dependencies run: go mod download - name: Build Binaries @@ -37,18 +39,17 @@ jobs: echo workspace $GITHUB_WORKSPACE echo "end of debug stuff" echo $(which jq) - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f with: name: minikube_binaries path: out lint: - runs-on: ubuntu-18.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: go-version: ${{env.GO_VERSION}} - stable: true - name: Install libvirt run: | sudo apt-get update @@ -61,13 +62,12 @@ jobs: run: make test continue-on-error: false unit_test: - runs-on: ubuntu-18.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: go-version: ${{env.GO_VERSION}} - stable: true - name: Install libvirt run: | sudo apt-get update diff --git a/.github/workflows/dependabot-gomodtidy.yml b/.github/workflows/dependabot-gomodtidy.yml new file mode 100644 index 000000000000..f5477f292582 --- /dev/null +++ b/.github/workflows/dependabot-gomodtidy.yml @@ -0,0 +1,38 @@ +name: "dependabot-gomodtidy" +on: + pull_request_target: + types: [opened, synchronize, reopened] + paths: + - "go.mod" + - "go.sum" + +permissions: + contents: write + pull-requests: write + +jobs: + dependabot-gomodtidy: + if: github.actor == 'dependabot[bot]' && github.event.pull_request.head.repo.full_name == 'kubernetes/minikube' + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref }} + token: ${{ secrets.MINIKUBE_BOT_PAT }} + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version-file: 'go.mod' + + - name: Run make gomodtidy + run: | + make gomodtidy + if [[ -n $(git status --porcelain) ]]; then + git config --global user.name "minikube-bot" + git config --global user.email "minikube-bot@google.com" + git add . + git commit -m "update go.mod and go.sum" + git push origin HEAD:${{ github.event.pull_request.head.ref }} + fi diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index dc6e2dc3936d..1081560ee8c8 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -3,27 +3,34 @@ on: workflow_dispatch: push: branches: - - master + - master env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.25.5' +permissions: + contents: read + jobs: generate-docs: - runs-on: ubuntu-18.04 + if: github.repository == 'kubernetes/minikube' + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: go-version: ${{env.GO_VERSION}} - stable: true - name: Generate Docs id: gendocs run: | make generate-docs - echo "::set-output name=changes::$(git status --porcelain)" + c=$(git status --porcelain) + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$c" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" - name: Create PR if: ${{ steps.gendocs.outputs.changes != '' }} - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 with: token: ${{ secrets.MINIKUBE_BOT_PAT }} commit-message: Update auto-generated docs and translations @@ -33,10 +40,11 @@ jobs: push-to-fork: minikube-bot/minikube base: master delete-branch: true - title: 'Update auto-generated docs and translations' + title: 'docs: Update auto-generated docs and translations' body: | Committing changes resulting from `make generate-docs`. This PR is auto-generated by the [gendocs](https://github.com/kubernetes/minikube/blob/master/.github/workflows/docs.yml) CI workflow. + ``` ${{ steps.gendocs.outputs.changes }} ``` diff --git a/.github/workflows/functional_test.yml b/.github/workflows/functional_test.yml new file mode 100644 index 000000000000..dae30805de47 --- /dev/null +++ b/.github/workflows/functional_test.yml @@ -0,0 +1,464 @@ +# Functional Test is a subset of minikube integration test, testing the most essential features of minikube. +name: Functional Test +on: + workflow_dispatch: + pull_request: + paths: + - "go.mod" + - "**.go" + - "Makefile" + - .github/workflows/functional_test.yml + - "!site/**" + - "!**.md" + - "!**.json" + push: + branches: [ master ] + paths: + - "go.mod" + - "**.go" + - "Makefile" + - "!site/**" + - "!**.md" + - "!**.json" +# Limit one functional test job running per PR/Branch +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + # For example, if you push multiple commits to a pull request in quick succession, only the latest workflow run will continue + cancel-in-progress: true +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read +jobs: + # build-test-binaries job runs before all other jobs and produces binaries/test-data per arch to be shared by all following jobs + build-test-binaries: + strategy: + fail-fast: false + matrix: + include: + - name: build-test-binaries-x86 + arch: amd64 + runs-on: ubuntu-24.04 + make-targets: e2e-linux-amd64 + - name: build-test-binaries-arm + arch: arm64 + runs-on: ubuntu-24.04-arm + make-targets: e2e-linux-arm64 + runs-on: ${{ matrix.runs-on }} + name: ${{ matrix.name }} + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + cache: true + - name: Download Dependencies + run: go mod download + - name: Build minikube and e2e test binaries + run: | + make ${{ matrix.make-targets }} + cp -r test/integration/testdata ./out + - name: Upload Test Binaries + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f + with: + name: binaries-${{ matrix.arch }} + path: out + functional-test: + name: ${{ matrix.name }} + needs: build-test-binaries + runs-on: ${{ matrix.os }} + permissions: + contents: none + strategy: + fail-fast: false + matrix: + include: + - name: docker-docker-ubuntu24.04-x86 + driver: docker + cruntime: docker + os: ubuntu-24.04 + arch: amd64 + test-timeout: 15m + - name: docker-docker-ubuntu24.04-arm + driver: docker + cruntime: docker + os: ubuntu-24.04-arm + arch: arm64 + test-timeout: 15m + - name: docker-containerd-ubuntu-24.04-x86 + driver: docker + cruntime: containerd + extra-start-args: --container-runtime=containerd + os: ubuntu-24.04 + arch: amd64 + test-timeout: 15m + - name: docker-containerd-ubuntu-24.04-arm + driver: docker + cruntime: containerd + extra-start-args: --container-runtime=containerd + os: ubuntu-24.04-arm + arch: arm64 + test-timeout: 15m + - name: docker-containerd-rootless-ubuntu-24.04-x86 + driver: docker + cruntime: containerd + os: ubuntu-24.04 + extra-start-args: --container-runtime=containerd --rootless + rootless: true + arch: amd64 + test-timeout: 17m + - name: podman-docker-ubuntu-24.04-x86 + driver: podman + cruntime: docker + os: ubuntu-24.04 + arch: amd64 + test-timeout: 18m + - name: baremetal-docker-ubuntu-24.04-x86 + driver: none + cruntime: docker + os: ubuntu-24.04 + arch: amd64 + test-timeout: 10m + - name: baremetal-docker-ubuntu-24.04-arm + driver: none + cruntime: docker + os: ubuntu-24.04-arm + arch: arm64 + test-timeout: 10m + - name: baremetal-containerd-ubuntu-24.04-x86 + driver: none + cruntime: containerd + os: ubuntu-24.04 + arch: amd64 + extra-start-args: --container-runtime=containerd + test-timeout: 10m + - name: baremetal-containerd-ubuntu-24.04-arm + driver: none + cruntime: containerd + os: ubuntu-24.04-arm + arch: arm64 + extra-start-args: --container-runtime=containerd + test-timeout: 10m + steps: + - id: info-block + uses: medyagh/info-block@main + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + cache: true + - name: Install gopogh + shell: bash + run: | + GOPOGH_VERSION=v0.29.0 + GOOS=$(go env GOOS) + GOARCH=$(go env GOARCH) + URL="https://github.com/medyagh/gopogh/releases/download/${GOPOGH_VERSION}/gopogh-${GOOS}-${GOARCH}" + echo "Downloading ${URL}" + curl -fsSL "${URL}" -o gopogh + sudo install -m 0755 gopogh /usr/local/bin/gopogh + rm gopogh + command -v gopogh + gopogh -version || true + - name: Set up cgroup v2 delegation (rootless) + if: ${{ matrix.rootless }} + run: | + sudo mkdir -p /etc/systemd/system/user@.service.d + cat </dev/null 2>&1 && jq . || cat; } || true + + echo "=== Running Containers ===" + docker ps -a || true + + echo "=== Images ===" + docker images || true + fi + - name: Install podman + if: matrix.driver == 'podman' + shell: bash + run: | + sudo apt -q update + sudo apt install -q -y podman + lsb_release -a || true + echo "=== podman version ===" + podman version || true + echo "=== podman info ===" + podman info || true + echo "=== podman system df ===" + podman system df || true + echo "=== podman system info (JSON) ===" + podman system info --format='{{json .}}' || true + echo "=== podman ps ===" + podman ps || true + - name: Install kubectl + uses: azure/setup-kubectl@v4 + - name: Install qemu and socket_vmnet (macos) + if: contains(matrix.os, 'macos') && matrix.driver == 'qemu' + run: | + brew install qemu socket_vmnet + HOMEBREW=$(which brew) && sudo ${HOMEBREW} services start socket_vmnet + - name: Install vfkit and vmnet_helper (macos) + if: matrix.driver == 'vfkit' + run: | + brew install vfkit + curl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | sudo VMNET_INTERACTIVE=0 bash + - name: Download Test Binaries + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 + with: + name: binaries-${{ matrix.arch }} + - name: Disable AppArmor for MySQL + if: runner.os == 'Linux' + run: | + sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ + sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld + - name: Install containerd (baremetal only) + if: matrix.driver == 'none' && matrix.cruntime == 'containerd' + run: | + sudo apt-get update + sudo apt-get install -y containerd + # Configure containerd + sudo mkdir -p /etc/containerd + containerd config default | sudo tee /etc/containerd/config.toml + sudo systemctl restart containerd + - name: Run Functional Test + id: run_test + continue-on-error: true + shell: bash + run: | + set -x + mkdir -p report + chmod a+x ./e2e-* + chmod a+x ./minikube-* + ./minikube-$(go env GOOS)-$(go env GOARCH) delete --all --purge + START_TIME=$(date -u +%s) + ./e2e-$(go env GOOS)-$(go env GOARCH) -minikube-start-args=" --driver=${{ matrix.driver }} ${{ matrix.extra-start-args }} -v=6 --alsologtostderr" -test.run TestFunctional -test.timeout=${{ matrix.test-timeout }} -test.v -binary=./minikube-$(go env GOOS)-$(go env GOARCH) 2>&1 | tee ./report/testout.txt + END_TIME=$(date -u +%s) + TIME_ELAPSED=$(($END_TIME-$START_TIME)) + min=$((${TIME_ELAPSED}/60)) + sec=$((${TIME_ELAPSED}%60)) + TIME_ELAPSED="${min} min $sec seconds " + # make variables available for next step + echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV + - name: Generate Gopogh HTML Report + if: always() + shell: bash + run: | + go tool test2json -t < ./report/testout.txt > ./report/testout.json || true + STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${{ matrix.name }} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true + # Check if the test step failed AND the log contains "timed out" + if [[ "${{ steps.run_test.outcome }}" == "failure" && $(grep -c "panic: test timed out" ./report/testout.txt) -gt 0 ]]; then + # If it was a timeout, set your custom message + RESULT_SHORT="⌛⌛⌛ Test Timed out ${TIME_ELAPSED} ⌛⌛⌛" + else + PassNum=$(echo $STAT | jq '.NumberOfPass') + FailNum=$(echo $STAT | jq '.NumberOfFail') + TestsNum=$(echo $STAT | jq '.NumberOfTests') + + if [ "${FailNum}" -eq 0 ]; then + STATUS_ICON="✓" + else + STATUS_ICON="✗" + fi + if [ "${PassNum}" -eq 0 ]; then + STATUS_ICON="✗" + fi + + # Result in one sentence + RESULT_SHORT="${STATUS_ICON} Completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" + fi + + echo "RESULT_SHORT=${RESULT_SHORT}" >> $GITHUB_ENV + echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV + echo 'STAT<> $GITHUB_ENV + echo "${STAT}" >> $GITHUB_ENV + echo 'EOF' >> $GITHUB_ENV + - name: Set PR or Branch label for report filename + id: vars + run: | + if [ "${{ github.event_name }}" = "pull_request" ]; then + echo "PR_OR_MASTER=PR${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT + else + echo "PR_OR_MASTER=Master" >> $GITHUB_OUTPUT + fi + echo "COMMIT_SHA=${GITHUB_SHA:0:7}" >> $GITHUB_OUTPUT + RUN_ID_SHORT="$GITHUB_RUN_ID" + if [ ${#RUN_ID_SHORT} -gt 7 ]; then + RUN_ID_SHORT="${RUN_ID_SHORT: -7}" + fi + echo "RUN_ID_SHORT=${RUN_ID_SHORT}" >> $GITHUB_OUTPUT + - name: Upload Gopogh report + id: upload_gopogh + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f + with: + name: functional-${{ matrix.name }}-${{ steps.vars.outputs.PR_OR_MASTER }}-sha-${{ steps.vars.outputs.COMMIT_SHA }}-run-${{ steps.vars.outputs.RUN_ID_SHORT}} + path: ./report + - name: The End Result Summary ${{ matrix.name }} + shell: bash + run: | + summary="$GITHUB_STEP_SUMMARY" + Print_Gopogh_Artifact_Download_URL() { + ARTIFACT_NAME="functional-${{ matrix.name }}-${{ steps.vars.outputs.PR_OR_MASTER }}-sha-${{ steps.vars.outputs.COMMIT_SHA }}" + ARTIFACT_ID='${{ steps.upload_gopogh.outputs.artifact-id }}' + if [ -n "$ARTIFACT_ID" ]; then + URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts/$ARTIFACT_ID" + echo "Gopogh report artifact ($ARTIFACT_NAME): $URL" + echo "📥 [Download Gopogh Report]($URL)" >> "$summary" + else + echo "Could not determine artifact ID (action version may not expose it). Find artifact named: $ARTIFACT_NAME" + echo "Report artifact name: $ARTIFACT_NAME" | tee -a "$summary" + fi + } + + Print_Gopogh_Artifact_Download_URL + echo "-------------------- RESULT SUMMARY --------------------" + echo "$RESULT_SHORT" | tee -a "$summary" + echo "Time Elapsed: ${TIME_ELAPSED}" | tee -a "$summary" + + numFail=$(echo "$STAT" | jq -r '.NumberOfFail // 0') + numPass=$(echo "$STAT" | jq -r '.NumberOfPass // 0') + numSkip=$(echo "$STAT" | jq -r '.NumberOfSkip // 0') + + # Print test counts only if they are non-zero + print_test_counts_only() { + if [ -n "${numFail}" ]; then + echo "Failed: ${numFail}" | tee -a "$summary" + fi + if [ -n "${numPass}" ]; then + echo "Passed: ${numPass}" | tee -a "$summary" + fi + if [ -n "${numSkip}" ]; then + echo "Skipped: ${numSkip}" | tee -a "$summary" + fi + } + + print_test_counts_only + + # Prints lits of test names grouped by result status + print_test_names_by_status() { + local count="$1" header="$2" sym="$3" field="$4" to_summary="$5" + (( count > 0 )) || return 0 + local line="------------------------ ${count} ${header} ------------------------" + if [ "$to_summary" = "yes" ]; then + echo "$line" | tee -a "$summary" + jq -r ".${field}[]? | \" ${sym} \(.)\"" <<<"$STAT" | tee -a "$summary" + else + echo "$line" + jq -r ".${field}[]? | \" ${sym} \(.)\"" <<<"$STAT" + fi + } + + print_test_names_by_status "${numFail:-0}" "Failed" "✗" "FailedTests" yes + print_test_names_by_status "${numPass:-0}" "Passed" "✓" "PassedTests" no + print_test_names_by_status "${numSkip:-0}" "Skipped" "•" "SkippedTests" yes + echo $summary >> $GITHUB_STEP_SUMMARY + decide_exit_code() { + # Allow overriding minimum expected passes for when some tests pass and others are timed out + local min_pass="${MIN_PASS_THRESHOLD:-45}" + local timeout_pattern="Test Timed out" + + echo "---------------------------------------------------------" + + # Timeout detection + if echo "$RESULT_SHORT" | grep -iq "$timeout_pattern"; then + echo "*** Detected test timeout ${TIME_ELAPSED} ⌛: '$timeout_pattern' ***" + exit 3 + fi + + # Any failures + if [ "${numFail:-0}" -gt 0 ]; then + echo "*** ${numFail} test(s) failed ***" + exit 2 + fi + + # Zero passes (likely setup issue) + if [ "${numPass:-0}" -eq 0 ]; then + echo "*** No tests passed ***" + exit 4 + fi + + # Insufficient passes safeguard + if [ "${numPass:-0}" -lt "$min_pass" ]; then + echo "*** Only ${numPass} passed (< required ${min_pass}) ***" | tee -a "$summary" + exit 5 + fi + + echo "Exit criteria satisfied: ${numPass} passed, ${numFail} failed, ${numSkip} skipped." + } + + decide_exit_code diff --git a/.github/workflows/go-mod-tidy.yml b/.github/workflows/go-mod-tidy.yml new file mode 100644 index 000000000000..189870d964d8 --- /dev/null +++ b/.github/workflows/go-mod-tidy.yml @@ -0,0 +1,50 @@ +name: "go-mod-tidy" +on: + workflow_dispatch: + push: + branches: + - master +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + go-mod-tidy: + if: github.repository == 'kubernetes/minikube' + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Tidy Go Modules + id: gmodtidy + run: | + make gomodtidy + c=$(git status --porcelain) + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$c" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.gmodtidy.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: Update auto-generated docs and translations + committer: minikube-bot + author: minikube-bot + branch: gomodtidy + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'build: go mod tidy' + body: | + Committing changes resulting from `make gomodtidy`. + This PR is auto-generated by the [gendocs](https://github.com/kubernetes/minikube/blob/master/.github/workflows/go-mod-tidy.yml) CI workflow that runs on every push to master. + + ``` + ${{ steps.gmodtidy.outputs.changes }} + ``` diff --git a/.github/workflows/hide-minikube-bot-comments.yml b/.github/workflows/hide-minikube-bot-comments.yml new file mode 100644 index 000000000000..c3d16a0308e6 --- /dev/null +++ b/.github/workflows/hide-minikube-bot-comments.yml @@ -0,0 +1,13 @@ +name: hide-minikube-bot-comments +on: issue_comment +permissions: + contents: read + +jobs: + hide-comments: + if: ${{ github.event.issue.pull_request }} + runs-on: ubuntu-22.04 + steps: + - uses: spowelljr/hide-minikube-bot-comments@6ef419ab40a17cf0bdc1f98f2442bf19b72d911d + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} diff --git a/.github/workflows/leaderboard.yml b/.github/workflows/leaderboard.yml index 38c118625f5c..f5d9ea117ff2 100644 --- a/.github/workflows/leaderboard.yml +++ b/.github/workflows/leaderboard.yml @@ -4,42 +4,48 @@ on: push: tags-ignore: - 'v*-beta.*' - release: - types: [published] env: - GO_VERSION: '1.16.7' + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + jobs: update-leaderboard: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: go-version: ${{env.GO_VERSION}} - stable: true - name: Update Leaderboard id: leaderboard run: | make update-leaderboard - echo "::set-output name=changes::$(git status --porcelain)" + c=$(git status --porcelain) + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$c" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" env: GITHUB_TOKEN: ${{ secrets.MINIKUBE_BOT_PAT }} - name: Create PR if: ${{ steps.leaderboard.outputs.changes != '' }} - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 with: token: ${{ secrets.MINIKUBE_BOT_PAT }} - commit-message: Update leaderboard + commit-message: 'Add leaderboard for ${{ github.ref_name }}' committer: minikube-bot author: minikube-bot branch: leaderboard push-to-fork: minikube-bot/minikube base: master delete-branch: true - title: 'Update leaderboard' + title: 'site: Add leaderboard for ${{ github.ref_name }} (Post-release)' body: | Committing changes resulting from `make update-leaderboard`. This PR is auto-generated by the [update-leaderboard](https://github.com/kubernetes/minikube/blob/master/.github/workflows/leaderboard.yml) CI workflow. + ``` ${{ steps.leaderboard.outputs.changes }} ``` diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000000..2236408de12b --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,76 @@ +name: Lint +on: + workflow_dispatch: + pull_request: + push: + branches: [ master ] + +# Limit one unit test job running per PR/Branch +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + # For example, if you push multiple commits to a pull request in quick succession, only the latest workflow run will continue + cancel-in-progress: true +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read +jobs: + Lint-: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + cache: true + - name: Download Dependencies + run: go mod download + # needed because pkg/drivers/kvm/domain.go:28:2: + - name: Install libvirt (Linux) + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y libvirt-dev + - name: Lint + timeout-minutes: 8 + env: + TESTSUITE: lint + run: make test + continue-on-error: false + Boilerplate: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + cache: true + - name: Boilerplate check + timeout-minutes: 2 + env: + TESTSUITE: boilerplate + run: make test + continue-on-error: false + Gomodtidy: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + cache: true + - name: Verify go mod tidy + timeout-minutes: 2 + continue-on-error: false + run: | + echo "::group::go mod tidy" + make gomodtidy + echo "::endgroup::" + if ! git diff-index --quiet HEAD; then + echo "::group::diff" + git --no-pager diff + echo "::endgroup::" + echo "::notice::Please run 'make gomodtidy' and commit the changes" + exit 1 + fi diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml deleted file mode 100644 index d735338d83a3..000000000000 --- a/.github/workflows/master.yml +++ /dev/null @@ -1,1033 +0,0 @@ -name: Master -on: - workflow_dispatch: - push: - branches: - - master - paths: - - "go.mod" - - "**.go" - - "**.yml" - - "**.yaml" - - "Makefile" - - "!deploy/kicbase/**" - - "!deploy/iso/**" -env: - GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' -jobs: - # Runs before all other jobs - # builds the minikube binaries - build_minikube: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Download Dependencies - run: go mod download - - name: Build Binaries - run: | - make cross - make e2e-cross - cp -r test/integration/testdata ./out - whoami - echo github ref $GITHUB_REF - echo workflow $GITHUB_WORKFLOW - echo home $HOME - echo event name $GITHUB_EVENT_NAME - echo workspace $GITHUB_WORKSPACE - echo "end of debug stuff" - echo $(which jq) - - uses: actions/upload-artifact@v1 - with: - name: minikube_binaries - path: out - lint: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install libvirt - run: | - sudo apt-get update - sudo apt-get install -y libvirt-dev - - name: Download Dependencies - run: go mod download - - name: Lint - env: - TESTSUITE: lintall - run: make test - continue-on-error: false - unit_test: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install libvirt - run: | - sudo apt-get update - sudo apt-get install -y libvirt-dev - - name: Download Dependencies - run: go mod download - - name: Unit Test - env: - TESTSUITE: unittest - run: make test - continue-on-error: false - # Run the following integration tests after the build_minikube - # They will run in parallel and use the binaries in previous step - functional_docker_ubuntu: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info --format='{{json .}}'|| true - echo "--------------------------" - docker ps || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ - sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--vm-driver=docker -test.run TestFunctional -test.timeout=10m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_ubuntu - path: minikube_binaries/report - - name: The End Result functional_docker_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_containerd_ubuntu: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_containerd_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info --format='{{json .}}'|| true - echo "--------------------------" - docker ps || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ - sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args="--vm-driver=docker --container-runtime=containerd" -test.run TestFunctional -test.timeout=30m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_containerd_ubuntu - path: minikube_binaries/report - - name: The End Result functional_docker_containerd_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - - functional_podman_ubuntu: - needs: [ build_minikube ] - env: - TIME_ELAPSED: time - JOB_NAME: functional_podman_ubuntu - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-20.04 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - - name: Install Podman - shell: bash - run: | - sudo apt update - sudo apt install -y podman - echo "--------------------------" - podman version || true - echo "--------------------------" - podman info || true - echo "--------------------------" - podman system df || true - echo "--------------------------" - podman system info --format='{{json .}}'|| true - echo "--------------------------" - podman ps || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ - sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--vm-driver=podman -v=6 --alsologtostderr -test.run TestFunctional -test.timeout=10m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: functional_podman_ubuntu - path: minikube_binaries/report - - name: The End Result functional_podman_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - - functional_virtualbox_macos: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_virtualbox_macos" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: macos-10.15 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-darwin-amd64 - sudo install gopogh-darwin-amd64 /usr/local/bin/gopogh - - name: Install docker - shell: bash - run: | - brew install docker-machine docker - sudo docker --version - - name: Info - shell: bash - run: | - hostname - VBoxManage --version - sysctl hw.physicalcpu hw.logicalcpu - - name: Disable firewall - run: | - sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off - sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-darwin-amd64 -minikube-start-args=--vm-driver=virtualbox -test.run "TestFunctional" -test.timeout=35m -test.v -timeout-multiplier=1.5 -binary=./minikube-darwin-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: functional_virtualbox_macos - path: minikube_binaries/report - - name: The End Result functional_virtualbox_macos - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "----------------${numFail} Failures :(----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 33 ];then echo "*** Failed to pass at least 33 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_windows" - GOPOGH_RESULT: "" - STAT: "" - runs-on: [self-hosted, windows-10-ent, 8CPUs] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - .\minikube-windows-amd64.exe delete -p $_.Name - Suspend-VM $_.Name - Stop-VM $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - docker system prune --volumes -f - - name: Info - shell: powershell - run: | - echo $env:computername - echo "------------------------" - docker info - echo "------------------------" - docker volume ls - echo "------------------------" - docker system info --format '{{json .}}' - echo "------------------------" - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=docker" --test.timeout=15m --timeout-multiplier=1 --test.v --test.run=TestFunctional --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Generate HTML Report - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - Get-Content .\report\testout.txt -Encoding ASCII | go tool test2json -t | Out-File -FilePath .\report\testout.json -Encoding ASCII - $STAT=(gopogh -in .\report\testout.json -out .\report\testout.html -name "${Env:JOB_NAME} ${Env:GITHUB_REF}" -repo "${Env:GITHUB_REPOSITORY}" -details "${Env:GITHUB_SHA}") - echo status: ${STAT} - $FailNum=$(echo $STAT | jq '.NumberOfFail') - $TestsNum=$(echo $STAT | jq '.NumberOfTests') - $GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${Env:TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "STAT=${STAT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo ${GOPOGH_RESULT} - $numFail=(echo $STAT | jq '.NumberOfFail') - $failedTests=( echo $STAT | jq '.FailedTests') - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTest - echo "-------------------------------------------------------" - $numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*** $numPass Passed ***" - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_windows - path: minikube_binaries/report - - name: The End Result functional_docker_windows - shell: powershell - run: | - $numFail=(echo $Env:STAT | jq '.NumberOfFail') - $failedTests=( echo $Env:STAT | jq '.FailedTests') - $numPass=$(echo $Env:STAT | jq '.NumberOfPass') - $passedTests=( echo $Env:STAT | jq '.PassedTests') - echo "*******************${numPass} Passes :) *******************" - echo $passedTests - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTests - echo "-------------------------------------------------------" - If ($numFail -gt 0){ exit 2 } - If ($numPass -eq 0){ exit 2 } - If ($numPass -lt 33){ exit 2 } - If ($numFail -eq 0){ exit 0 } - functional_hyperv_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_hyperv_windows" - GOPOGH_RESULT: "" - runs-on: [self-hosted, windows-10-ent, Standard_D16s_v3, hyperv] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - Stop-VM -Name $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - docker system prune --volumes -f - - name: Info - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - echo $env:computername - Get-WmiObject -class Win32_ComputerSystem - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=hyperv" --test.timeout=20m --timeout-multiplier=1.5 --test.v --test.run=TestFunctional --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Generate HTML Report - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - Get-Content .\report\testout.txt -Encoding ASCII | go tool test2json -t | Out-File -FilePath .\report\testout.json -Encoding ASCII - $STAT=(gopogh -in .\report\testout.json -out .\report\testout.html -name "${Env:JOB_NAME} ${Env:GITHUB_REF}" -repo "${Env:GITHUB_REPOSITORY}" -details "${Env:GITHUB_SHA}") - echo status: ${STAT} - $FailNum=$(echo $STAT | jq '.NumberOfFail') - $TestsNum=$(echo $STAT | jq '.NumberOfTests') - $GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${Env:TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "STAT=${STAT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo ${GOPOGH_RESULT} - $numFail=(echo $STAT | jq '.NumberOfFail') - $failedTests=( echo $STAT | jq '.FailedTests') - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTest - echo "-------------------------------------------------------" - $numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*** $numPass Passed ***" - - uses: actions/upload-artifact@v1 - with: - name: functional_hyperv_windows - path: minikube_binaries/report - - name: The End Result functional_hyperv_windows - shell: powershell - run: | - $numFail=(echo $Env:STAT | jq '.NumberOfFail') - $failedTests=( echo $Env:STAT | jq '.FailedTests') - $numPass=$(echo $Env:STAT | jq '.NumberOfPass') - $passedTests=( echo $Env:STAT | jq '.PassedTests') - echo "*******************${numPass} Passes :) *******************" - echo $passedTests - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTests - echo "-------------------------------------------------------" - If ($numFail -gt 0){ exit 2 } - If ($numPass -eq 0){ exit 2 } - If ($numPass -lt 33){ exit 2 } - If ($numFail -eq 0){ exit 0 } - functional_baremetal_ubuntu18_04: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_baremetal_ubuntu18_04" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - # conntrack is required for kubernetes 1.18 and higher - # socat is required for kubectl port forward which is used in some tests such as validateHelmTillerAddon - - name: Install tools for none - shell: bash - run: | - sudo apt-get update -qq - sudo apt-get -qq -y install conntrack - sudo apt-get -qq -y install socat - VERSION="v1.17.0" - curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz - sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome sudo -E ./e2e-linux-amd64 -minikube-start-args=--driver=none -test.timeout=10m -test.v -timeout-multiplier=1.5 -test.run TestFunctional -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: none_ubuntu18_04 - path: minikube_binaries/report - - name: The End Result - None on Ubuntu 18:04 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 26 ];then echo "*** Failed to pass at least 26 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_ubuntu_arm64: - needs: [ build_minikube ] - runs-on: [ self-hosted, arm64 ] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_ubuntu_arm64" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - steps: - - name: Install tools - shell: bash - run: | - sudo apt update - sudo apt install -y jq docker git cron - sudo usermod -aG docker $USER - - - name: Init - shell: bash - run: | - if [[ -f /var/run/reboot.in.progress ]]; then - echo "reboot in progress" - exit 1 - fi - sudo touch /var/run/job.in.progress - rm -rf cleanup.sh install_cleanup.sh - # after this PR is merged, update URLs to get the scripts from github master - wget https://storage.googleapis.com/minikube-ci-utils/cleanup.sh - wget https://storage.googleapis.com/minikube-ci-utils/install_cleanup.sh - chmod +x cleanup.sh install_cleanup.sh - ./install_cleanup.sh - - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-arm64 - sudo install gopogh-linux-arm64 /usr/local/bin/gopogh - - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info --format='{{json .}}'|| true - echo "--------------------------" - docker ps || true - echo "--------------------------" - whoami || true - echo "--------------------------" - hostname || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - - name: Pre-cleanup - continue-on-error: true - run: | - minikube_binaries/minikube-linux-arm64 delete --all --purge || true - docker kill $(docker ps -aq) || true - docker system prune --volumes --force || true - - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-arm64 -minikube-start-args=--vm-driver=docker -test.run TestFunctional -test.timeout=25m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-arm64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_ubuntu_arm64 - path: minikube_binaries/report - - - name: The End Result - functional_docker_ubuntu_arm64 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - # After all integration tests finished - # collect all the reports and upload them - upload_all_reports: - if: always() - needs: - [ - functional_docker_ubuntu, - functional_docker_containerd_ubuntu, - functional_docker_ubuntu_arm64, - functional_podman_ubuntu, - functional_virtualbox_macos, - functional_docker_windows, - functional_hyperv_windows, - functional_baremetal_ubuntu18_04, - ] - runs-on: ubuntu-18.04 - steps: - - name: download all reports - uses: actions/download-artifact@v2-preview - - name: upload all reports - shell: bash {0} - continue-on-error: true - run: | - mkdir -p all_reports - ls -lah - cp -r ./functional_docker_ubuntu ./all_reports/ - cp -r ./functional_docker_containerd_ubuntu ./all_reports/ - cp -r ./functional_docker_ubuntu_arm64 ./all_reports/ - cp -r ./functional_podman_ubuntu ./all_reports/ - cp -r ./functional_virtualbox_macos ./all_reports/ - cp -r ./functional_docker_windows ./all_reports/ - cp -r ./functional_hyperv_windows ./all_reports/ - cp -r ./functional_baremetal_ubuntu18_04 ./all_reports/ - - - uses: actions/upload-artifact@v1 - with: - name: all_reports - path: all_reports diff --git a/.github/workflows/minikube-image-benchmark.yml b/.github/workflows/minikube-image-benchmark.yml new file mode 100644 index 000000000000..60553eb2a4a0 --- /dev/null +++ b/.github/workflows/minikube-image-benchmark.yml @@ -0,0 +1,30 @@ +name: "publish image benchmark" +on: + workflow_dispatch: + schedule: + # every day at 7am & 7pm pacific + - cron: "0 2,14 * * *" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + image-benchmark: + if: github.repository == 'kubernetes/minikube' + runs-on: ubuntu-22.04 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: 'us-west-1' + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Run Benchmark + run: | + ./hack/benchmark/image-build/publish-chart.sh + + diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml deleted file mode 100644 index 1b1c36b1734f..000000000000 --- a/.github/workflows/pr.yml +++ /dev/null @@ -1,1040 +0,0 @@ -name: PR -on: - workflow_dispatch: - pull_request: - paths: - - "go.mod" - - "**.go" - - "**.yml" - - "**.yaml" - - "Makefile" - - "!deploy/kicbase/**" - - "!deploy/iso/**" -env: - GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' -jobs: - # Runs before all other jobs - # builds the minikube binaries - build_minikube: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Download Dependencies - run: go mod download - - name: Build Binaries - run: | - make cross - make e2e-cross - cp -r test/integration/testdata ./out - whoami - echo github ref $GITHUB_REF - echo workflow $GITHUB_WORKFLOW - echo home $HOME - echo event name $GITHUB_EVENT_NAME - echo workspace $GITHUB_WORKSPACE - echo "end of debug stuff" - echo $(which jq) - - uses: actions/upload-artifact@v1 - with: - name: minikube_binaries - path: out - lint: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install libvirt - run: | - sudo apt-get update - sudo apt-get install -y libvirt-dev - - name: Download Dependencies - run: go mod download - - name: Lint - env: - TESTSUITE: lintall - run: make test - continue-on-error: false - unit_test: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install libvirt - run: | - sudo apt-get update - sudo apt-get install -y libvirt-dev - - name: Download Dependencies - run: go mod download - - name: Unit Test - env: - TESTSUITE: unittest - run: make test - continue-on-error: false - # Run the following integration tests after the build_minikube - # They will run in parallel and use the binaries in previous step - functional_docker_ubuntu: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info --format='{{json .}}'|| true - echo "--------------------------" - docker ps || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ - sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld - MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-amd64 delete --all --purge - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--vm-driver=docker -test.run TestFunctional -test.timeout=10m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_ubuntu - path: minikube_binaries/report - - name: The End Result functional_docker_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_containerd_ubuntu: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_containerd_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info --format='{{json .}}'|| true - echo "--------------------------" - docker ps || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ - sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld - MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-amd64 delete --all --purge - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args="--vm-driver=docker --container-runtime=containerd" -test.run TestFunctional -test.timeout=30m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_containerd_ubuntu - path: minikube_binaries/report - - name: The End Result functional_docker_containerd_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - - functional_podman_ubuntu: - needs: [ build_minikube ] - env: - TIME_ELAPSED: time - JOB_NAME: functional_podman_ubuntu - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-20.04 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - - name: Install Podman - shell: bash - run: | - sudo apt update - sudo apt install -y podman - echo "--------------------------" - podman version || true - echo "--------------------------" - podman info || true - echo "--------------------------" - podman system df || true - echo "--------------------------" - podman system info --format='{{json .}}'|| true - echo "--------------------------" - podman ps || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ - sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld - MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-amd64 delete --all --purge - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--vm-driver=podman -v=6 --alsologtostderr -test.run TestFunctional -test.timeout=10m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: functional_podman_ubuntu - path: minikube_binaries/report - - name: The End Result functional_podman_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - - functional_virtualbox_macos: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_virtualbox_macos" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: macos-10.15 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-darwin-amd64 - sudo install gopogh-darwin-amd64 /usr/local/bin/gopogh - - name: Install docker - shell: bash - run: | - brew install docker-machine docker - sudo docker --version - - name: Info - shell: bash - run: | - hostname - VBoxManage --version - sysctl hw.physicalcpu hw.logicalcpu - - name: Disable firewall - run: | - sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off - sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - MINIKUBE_HOME=$(pwd)/testhome ./minikube-darwin-amd64 delete --all --purge - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-darwin-amd64 -minikube-start-args=--vm-driver=virtualbox -test.run "TestFunctional" -test.timeout=35m -test.v -timeout-multiplier=1.5 -binary=./minikube-darwin-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: functional_virtualbox_macos - path: minikube_binaries/report - - name: The End Result functional_virtualbox_macos - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "----------------${numFail} Failures :(----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 33 ];then echo "*** Failed to pass at least 33 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_windows" - GOPOGH_RESULT: "" - STAT: "" - runs-on: [self-hosted, windows-10-ent, 8CPUs] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - .\minikube-windows-amd64.exe delete -p $_.Name - Suspend-VM $_.Name - Stop-VM $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - docker system prune --volumes -f - - name: Info - shell: powershell - run: | - echo $env:computername - echo "------------------------" - docker info - echo "------------------------" - docker volume ls - echo "------------------------" - docker system info --format '{{json .}}' - echo "------------------------" - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=docker" --test.timeout=15m --timeout-multiplier=1 --test.v --test.run=TestFunctional --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Generate HTML Report - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - Get-Content .\report\testout.txt -Encoding ASCII | go tool test2json -t | Out-File -FilePath .\report\testout.json -Encoding ASCII - $STAT=(gopogh -in .\report\testout.json -out .\report\testout.html -name "${Env:JOB_NAME} ${Env:GITHUB_REF}" -repo "${Env:GITHUB_REPOSITORY}" -details "${Env:GITHUB_SHA}") - echo status: ${STAT} - $FailNum=$(echo $STAT | jq '.NumberOfFail') - $TestsNum=$(echo $STAT | jq '.NumberOfTests') - $GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${Env:TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "STAT=${STAT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo ${GOPOGH_RESULT} - $numFail=(echo $STAT | jq '.NumberOfFail') - $failedTests=( echo $STAT | jq '.FailedTests') - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTest - echo "-------------------------------------------------------" - $numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*** $numPass Passed ***" - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_windows - path: minikube_binaries/report - - name: The End Result functional_docker_windows - shell: powershell - run: | - $numFail=(echo $Env:STAT | jq '.NumberOfFail') - $failedTests=( echo $Env:STAT | jq '.FailedTests') - $numPass=$(echo $Env:STAT | jq '.NumberOfPass') - $passedTests=( echo $Env:STAT | jq '.PassedTests') - echo "*******************${numPass} Passes :) *******************" - echo $passedTests - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTests - echo "-------------------------------------------------------" - If ($numFail -gt 0){ exit 2 } - If ($numPass -eq 0){ exit 2 } - If ($numPass -lt 33){ exit 2 } - If ($numFail -eq 0){ exit 0 } - functional_hyperv_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_hyperv_windows" - GOPOGH_RESULT: "" - runs-on: [self-hosted, windows-10-ent, Standard_D16s_v3, hyperv] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - Stop-VM -Name $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - docker system prune --volumes -f - - name: Info - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - echo $env:computername - Get-WmiObject -class Win32_ComputerSystem - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=hyperv" --test.timeout=20m --timeout-multiplier=1.5 --test.v --test.run=TestFunctional --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Generate HTML Report - continue-on-error: true - shell: powershell - run: | - cd minikube_binaries - Get-Content .\report\testout.txt -Encoding ASCII | go tool test2json -t | Out-File -FilePath .\report\testout.json -Encoding ASCII - $STAT=(gopogh -in .\report\testout.json -out .\report\testout.html -name "${Env:JOB_NAME} ${Env:GITHUB_REF}" -repo "${Env:GITHUB_REPOSITORY}" -details "${Env:GITHUB_SHA}") - echo status: ${STAT} - $FailNum=$(echo $STAT | jq '.NumberOfFail') - $TestsNum=$(echo $STAT | jq '.NumberOfTests') - $GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${Env:TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo "STAT=${STAT}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - echo ${GOPOGH_RESULT} - $numFail=(echo $STAT | jq '.NumberOfFail') - $failedTests=( echo $STAT | jq '.FailedTests') - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTest - echo "-------------------------------------------------------" - $numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*** $numPass Passed ***" - - uses: actions/upload-artifact@v1 - with: - name: functional_hyperv_windows - path: minikube_binaries/report - - name: The End Result functional_hyperv_windows - shell: powershell - run: | - $numFail=(echo $Env:STAT | jq '.NumberOfFail') - $failedTests=( echo $Env:STAT | jq '.FailedTests') - $numPass=$(echo $Env:STAT | jq '.NumberOfPass') - $passedTests=( echo $Env:STAT | jq '.PassedTests') - echo "*******************${numPass} Passes :) *******************" - echo $passedTests - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $failedTests - echo "-------------------------------------------------------" - If ($numFail -gt 0){ exit 2 } - If ($numPass -eq 0){ exit 2 } - If ($numPass -lt 33){ exit 2 } - If ($numFail -eq 0){ exit 0 } - functional_baremetal_ubuntu18_04: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_baremetal_ubuntu18_04" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - runs-on: ubuntu-18.04 - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - # conntrack is required for kubernetes 1.18 and higher - # socat is required for kubectl port forward which is used in some tests such as validateHelmTillerAddon - - name: Install tools for none - shell: bash - run: | - sudo apt-get update -qq - sudo apt-get -qq -y install conntrack - sudo apt-get -qq -y install socat - VERSION="v1.17.0" - curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz - sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-amd64 delete --all --purge - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome sudo -E ./e2e-linux-amd64 -minikube-start-args=--driver=none -test.timeout=10m -test.v -timeout-multiplier=1.5 -test.run TestFunctional -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: none_ubuntu18_04 - path: minikube_binaries/report - - name: The End Result - None on Ubuntu 18:04 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 26 ];then echo "*** Failed to pass at least 26 ! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - functional_docker_ubuntu_arm64: - needs: [ build_minikube ] - runs-on: [ self-hosted, arm64 ] - env: - TIME_ELAPSED: time - JOB_NAME: "functional_docker_ubuntu_arm64" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - steps: - - name: Install tools - shell: bash - run: | - sudo apt update - sudo apt install -y jq docker git cron - sudo usermod -aG docker $USER - - - name: Init - shell: bash - run: | - if [[ -f /var/run/reboot.in.progress ]]; then - echo "reboot in progress" - exit 1 - fi - sudo touch /var/run/job.in.progress - rm -rf cleanup.sh install_cleanup.sh - # after this PR is merged, update URLs to get the scripts from github master - wget https://storage.googleapis.com/minikube-ci-utils/cleanup.sh - wget https://storage.googleapis.com/minikube-ci-utils/install_cleanup.sh - chmod +x cleanup.sh install_cleanup.sh - ./install_cleanup.sh - - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-arm64 - sudo install gopogh-linux-arm64 /usr/local/bin/gopogh - - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info --format='{{json .}}'|| true - echo "--------------------------" - docker ps || true - echo "--------------------------" - whoami || true - echo "--------------------------" - hostname || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - - name: Pre-cleanup - continue-on-error: true - run: | - minikube_binaries/minikube-linux-arm64 delete --all --purge || true - docker kill $(docker ps -aq) || true - docker system prune --volumes --force || true - - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-arm64 delete --all --purge - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-arm64 -minikube-start-args=--vm-driver=docker -test.run TestFunctional -test.timeout=25m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-arm64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - - uses: actions/upload-artifact@v1 - with: - name: functional_docker_ubuntu_arm64 - path: minikube_binaries/report - - - name: The End Result - functional_docker_ubuntu_arm64 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - - - name: finalize - shell: bash - run: sudo rm -rf /var/run/job.in.progress - # After all integration tests finished - # collect all the reports and upload them - upload_all_reports: - if: always() - needs: - [ - functional_docker_ubuntu, - functional_docker_containerd_ubuntu, - functional_podman_ubuntu, - functional_docker_ubuntu_arm64, - functional_virtualbox_macos, - functional_docker_windows, - functional_hyperv_windows, - functional_baremetal_ubuntu18_04, - ] - runs-on: ubuntu-18.04 - steps: - - name: download all reports - uses: actions/download-artifact@v2-preview - - name: upload all reports - shell: bash {0} - continue-on-error: true - run: | - mkdir -p all_reports - ls -lah - cp -r ./functional_docker_ubuntu ./all_reports/ - cp -r ./functional_docker_containerd_ubuntu ./all_reports/ - cp -r ./functional_podman_ubuntu ./all_reports/ - cp -r ./functional_docker_ubuntu_arm64 ./all_reports/ - cp -r ./functional_virtualbox_macos ./all_reports/ - cp -r ./functional_docker_windows ./all_reports/ - cp -r ./functional_hyperv_windows ./all_reports/ - cp -r ./functional_baremetal_ubuntu18_04 ./all_reports/ - - - uses: actions/upload-artifact@v1 - with: - name: all_reports - path: all_reports diff --git a/.github/workflows/pr_verified.yaml b/.github/workflows/pr_verified.yaml deleted file mode 100644 index 46f69ae0e790..000000000000 --- a/.github/workflows/pr_verified.yaml +++ /dev/null @@ -1,1033 +0,0 @@ -name: PR_Verified -on: - workflow_dispatch: - pull_request: - paths: - - "go.mod" - - "**.go" - - "**.yml" - - "**.yaml" - - "Makefile" - - "!deploy/kicbase/**" - - "!deploy/iso/**" - types: - - labeled - - opened - - synchronize - label: - types: - - created - - edited - - deleted -env: - GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' - -jobs: - # Runs before all other jobs - # builds the minikube binaries - build_minikube: - if: contains(github.event.pull_request.labels.*.name, 'pr_verified') - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Download Dependencies - run: go mod download - - name: Build Binaries - run: | - sudo apt-get update - sudo apt-get install -y libvirt-dev - MINIKUBE_BUILD_IN_DOCKER=y make cross e2e-cross debs - cp -r test/integration/testdata ./out - whoami - echo github ref $GITHUB_REF - echo workflow $GITHUB_WORKFLOW - echo home $HOME - echo event name $GITHUB_EVENT_NAME - echo workspace $GITHUB_WORKSPACE - echo "end of debug stuff" - echo $(which jq) - - uses: actions/upload-artifact@v1 - with: - name: minikube_binaries - path: out - pkg_install_amd64: - needs: [ build_minikube ] - runs-on: ubuntu-18.04 - env: - TIME_ELAPSED: time - JOB_NAME: "pkg_install_amd64" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - steps: - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - - name: Install Go - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Install tools - shell: bash - run: | - sudo apt update - sudo apt install -y jq - - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -test.run TestDebPackageInstall -test.timeout=10m -test.v -timeout-multiplier=1.5 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out ./report/testout.html -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - - uses: actions/upload-artifact@v1 - with: - name: pkg_install_amd64 - path: minikube_binaries/report - - - name: The End Result - pkg_install_amd64 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - pkg_install_arm64: - needs: [ build_minikube ] - runs-on: [ self-hosted, arm64 ] - env: - TIME_ELAPSED: time - JOB_NAME: "pkg_install_arm64" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - steps: - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-arm64 - sudo install gopogh-linux-arm64 /usr/local/bin/gopogh - - - name: Install Go - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Install tools - shell: bash - run: | - sudo apt update - sudo apt install -y jq - - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-arm64 -test.run TestDebPackageInstall -test.timeout=10m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-arm64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out ./report/testout.html -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - - uses: actions/upload-artifact@v1 - with: - name: pkg_install_arm64 - path: minikube_binaries/report - - - name: The End Result - pkg_install_arm64 - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 0 ];then echo "*** Failed to pass at least 20! ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi - addons_certs_docker_ubuntu: - runs-on: ubuntu-18.04 - env: - TIME_ELAPSED: time - JOB_NAME: "addons_certs_docker_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info || true - echo "--------------------------" - docker ps || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=docker -test.run "(TestAddons|TestCertOptions|TestSkaffold)" -test.timeout=30m -test.v -timeout-multiplier=1.2 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: addons_certs_docker_ubuntu - path: minikube_binaries/report - - name: The End Result - addons_certs_docker_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 6 ];then echo "*** Failed to pass at least 6 ! ***";exit 2;fi - addons_certs_virtualbox_macos: - runs-on: macos-10.15 - env: - TIME_ELAPSED: time - JOB_NAME: "addons_certs_virtualbox_macos" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-darwin-amd64 - sudo install gopogh-darwin-amd64 /usr/local/bin/gopogh - - name: Install docker - shell: bash - run: | - brew install docker-machine docker - sudo docker --version - - name: Info - shell: bash - run: | - hostname - VBoxManage --version - sysctl hw.physicalcpu hw.logicalcpu - - name: Disable firewall - run: | - sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off - sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - cp minikube-darwin-amd64 minikube - chmod a+x minikube* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-darwin-amd64 -minikube-start-args=--vm-driver=virtualbox -test.run "(TestDownloadOnly|TestAddons|TestCertOptions|TestSkaffold)" -test.timeout=30m -test.v -timeout-multiplier=1.2 -binary=./minikube-darwin-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: addons_certs_virtualbox_macos - path: minikube_binaries/report - - name: The End Result - addons_certs_virtualbox_macos - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 6 ];then echo "*** Failed to pass at least 6 ! ***";exit 2;fi - multinode_docker_ubuntu: - runs-on: ubuntu-18.04 - env: - TIME_ELAPSED: time - JOB_NAME: "multinode_docker_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info || true - echo "--------------------------" - docker ps || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - - name: Install gopogh - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ - sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=docker -test.run "TestMultiNode" -test.timeout=15m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: multinode_docker_ubuntu - path: minikube_binaries/report - - name: The End Result - multinode_docker_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 5 ];then echo "*** Failed to pass at least 5 ! ***";exit 2;fi - multinode_virtualbox_macos: - runs-on: macos-10.15 - env: - TIME_ELAPSED: time - JOB_NAME: "multinode_virtualbox_macos" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-darwin-amd64 - sudo install gopogh-darwin-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Info - shell: bash - run: | - hostname - VBoxManage --version - sysctl hw.physicalcpu hw.logicalcpu - - name: Disable firewall - run: | - sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off - sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-darwin-amd64 -minikube-start-args=--driver=virtualbox -test.run "TestDownloadOnly|TestMultiNode" -test.timeout=45m -test.v -timeout-multiplier=1.2 -binary=./minikube-darwin-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: multinode_virtualbox_macos - path: minikube_binaries/report - - name: The End Result - multinode_virtualbox_macos - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 7 ];then echo "*** Failed to pass at least 7 ! ***";exit 2;fi - preload_dockerflags_docker_ubuntu: - # TestPause was removed due to https://github.com/kubernetes/minikube/issues/9568 - runs-on: ubuntu-18.04 - env: - TIME_ELAPSED: time - JOB_NAME: "preload_dockerflags_docker_ubuntu" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - - name: Docker Info - shell: bash - run: | - echo "--------------------------" - docker version || true - echo "--------------------------" - docker info || true - echo "--------------------------" - docker system df || true - echo "--------------------------" - docker system info || true - echo "--------------------------" - docker ps || true - echo "--------------------------" - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64 - sudo install gopogh-linux-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Run Integration Test - continue-on-error: true - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=docker -test.run "(TestDockerFlags|TestPreload)" -test.timeout=30m -test.v -timeout-multiplier=1.2 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: preload_dockerflags_docker_ubuntu - path: minikube_binaries/report - - name: The End Result - preload_dockerflags_docker_ubuntu - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 2 ];then echo "*** Failed to pass at least 2 ! ***";exit 2;fi - pause_preload_dockerflags_virtualbox_macos: - runs-on: macos-10.15 - env: - TIME_ELAPSED: time - JOB_NAME: "pause_preload_dockerflags_virtualbox_macos" - GOPOGH_RESULT: "" - SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643 - needs: [build_minikube] - steps: - - name: Install kubectl - shell: bash - run: | - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl - sudo install kubectl /usr/local/bin/kubectl - kubectl version --client=true - # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308 - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install gopogh - - shell: bash - run: | - curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-darwin-amd64 - sudo install gopogh-darwin-amd64 /usr/local/bin/gopogh - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Info - shell: bash - run: | - hostname - VBoxManage --version - sysctl hw.physicalcpu hw.logicalcpu - - name: Disable firewall - run: | - sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off - sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k - - name: Run Integration Test - continue-on-error: false - # bash {0} to allow test to continue to next step. in case of - shell: bash {0} - run: | - cd minikube_binaries - mkdir -p report - mkdir -p testhome - chmod a+x e2e-* - chmod a+x minikube-* - START_TIME=$(date -u +%s) - KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-darwin-amd64 -minikube-start-args=--vm-driver=virtualbox -test.run "(TestPause|TestPreload|TestDockerFlags)" -test.timeout=30m -test.v -timeout-multiplier=1.2 -binary=./minikube-darwin-amd64 2>&1 | tee ./report/testout.txt - END_TIME=$(date -u +%s) - TIME_ELAPSED=$(($END_TIME-$START_TIME)) - min=$((${TIME_ELAPSED}/60)) - sec=$((${TIME_ELAPSED}%60)) - TIME_ELAPSED="${min} min $sec seconds " - echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV - - name: Generate HTML Report - shell: bash - run: | - cd minikube_binaries - export PATH=${PATH}:`go env GOPATH`/bin - go tool test2json -t < ./report/testout.txt > ./report/testout.json || true - STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}" -details "${GITHUB_SHA}") || true - echo status: ${STAT} - FailNum=$(echo $STAT | jq '.NumberOfFail') - TestsNum=$(echo $STAT | jq '.NumberOfTests') - GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}" - echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV - echo 'STAT<> $GITHUB_ENV - echo "${STAT}" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - uses: actions/upload-artifact@v1 - with: - name: pause_preload_dockerflags_virtualbox_macos - path: minikube_binaries/report - - name: The End Result - pause_preload_dockerflags_virtualbox_macos - shell: bash - run: | - echo ${GOPOGH_RESULT} - numFail=$(echo $STAT | jq '.NumberOfFail') - numPass=$(echo $STAT | jq '.NumberOfPass') - echo "*******************${numPass} Passes :) *******************" - echo $STAT | jq '.PassedTests' || true - echo "*******************************************************" - echo "---------------- ${numFail} Failures :( ----------------------------" - echo $STAT | jq '.FailedTests' || true - echo "-------------------------------------------------------" - if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi - if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi - if [ "$numPass" -lt 9 ];then echo "*** Failed to pass at least 9 ! ***";exit 2;fi - scheduled_stop_docker_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "scheduled_stop_docker_windows" - GOPOGH_RESULT: "" - STAT: "" - runs-on: [self-hosted, windows-10-ent, 8CPUs] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - .\minikube-windows-amd64.exe delete -p $_.Name - Suspend-VM $_.Name - Stop-VM $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - - name: Info - shell: powershell - run: | - echo $env:computername - echo "------------------------" - docker info - echo "------------------------" - docker volume ls - echo "------------------------" - docker system info --format '{{json .}}' - echo "------------------------" - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=docker" --test.timeout=15m --timeout-multiplier=1 --test.v --test.run=TestScheduledStopWindows --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - scheduled_stop_hyperv_windows: - needs: [build_minikube] - env: - TIME_ELAPSED: time - JOB_NAME: "scheduled_stop_hyperv_windows" - GOPOGH_RESULT: "" - runs-on: [self-hosted, windows-10-ent, Standard_D16s_v3, hyperv] - steps: - - name: Clean up - continue-on-error: true - shell: powershell - run: | - echo $env:computerName - ls - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - .\minikube-windows-amd64.exe delete --all --purge - Get-VM | Where-Object {$_.Name -ne "DockerDesktopVM"} | Foreach { - Stop-VM -Name $_.Name -Force - Remove-VM $_.Name -Force - } - cd .. - Remove-Item minikube_binaries -Force -Recurse - ls - - name: Download Binaries - uses: actions/download-artifact@v1 - with: - name: minikube_binaries - - name: Start Docker Desktop - shell: powershell - continue-on-error: true - run: | - $ErrorActionPreference = "SilentlyContinue" - docker ps 2>&1 | Out-Null - $docker_running = $? - if (!$docker_running) { - Write-Output "Starting Docker as an administrator" - Start-Process 'C:/Program Files/Docker/Docker/Docker Desktop.exe' -Verb runAs - } - while (!$docker_running) { - Start-Sleep 5 - docker ps 2>&1 | Out-Null - $docker_running = $? - } - Write-Output "Docker is running" - docker system prune -f - - name: Info - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - cd minikube_binaries - ls - echo $env:computername - Get-WmiObject -class Win32_ComputerSystem - - uses: actions/setup-go@v2 - with: - go-version: ${{env.GO_VERSION}} - stable: true - - name: Install tools - continue-on-error: true - shell: powershell - run: | - $ErrorActionPreference = "SilentlyContinue" - (New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\ProgramData\chocolatey\bin\gopogh.exe") - choco install -y kubernetes-cli - choco install -y jq - choco install -y caffeine - if (Test-Path 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe') { Remove-Item 'C:\Program Files\Docker\Docker\resources\bin\kubectl.exe' }; - - name: Run Integration Test in powershell - shell: powershell - run: | - cd minikube_binaries - New-Item -Force -Path "report" -ItemType Directory - New-Item -Force -Path "testhome" -ItemType Directory - $START_TIME=(GET-DATE) - $env:KUBECONFIG="${pwd}\testhome\kubeconfig" - $env:MINIKUBE_HOME="${pwd}\testhome" - $ErrorActionPreference = "SilentlyContinue" - .\e2e-windows-amd64.exe --minikube-start-args="--driver=hyperv" --test.timeout=20m --timeout-multiplier=1.5 --test.v --test.run=TestScheduledStopWindows --binary=./minikube-windows-amd64.exe | Tee-Object -FilePath ".\report\testout.txt" - $END_TIME=(GET-DATE) - echo $END_TIME - $DURATION=(NEW-TIMESPAN -Start $START_TIME -End $END_TIME) - echo $DURATION - $SECS=($DURATION.TotalSeconds) - $MINS=($DURATION.TotalMinutes) - $T_ELAPSED="$MINS m $SECS s" - echo "----" - echo $T_ELAPSED - echo "----" - echo "TIME_ELAPSED=$T_ELAPSED" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - # After all integration tests finished - # collect all the reports and upload them - upload_all_reports: - needs: - [ - pkg_install_amd64, - pkg_install_arm64, - addons_certs_virtualbox_macos, - multinode_docker_ubuntu, - multinode_virtualbox_macos, - preload_dockerflags_docker_ubuntu, - pause_preload_dockerflags_virtualbox_macos, - ] - runs-on: ubuntu-18.04 - steps: - - name: download all extra reports - uses: actions/download-artifact@v2-preview - - name: upload all extra reports - shell: bash {0} - continue-on-error: true - run: | - mkdir -p all_reports - cp -r ./pkg_install_amd64 ./all_reports/ - cp -r ./pkg_install_arm64 ./all_reports/ - cp -r ./scheduled_stop_docker_windows ./all_reports/ - cp -r ./scheduled_stop_hyperv_windows ./all_reports/ - cp -r ./addons_certs_docker_ubuntu ./all_reports/ - cp -r ./addons_certs_virtualbox_macos ./all_reports/ - cp -r ./multinode_docker_ubuntu ./all_reports/ - cp -r ./multinode_virtualbox_macos ./all_reports/ - cp -r ./preload_dockerflags_docker_ubuntu ./all_reports/ - cp -r ./pause_preload_dockerflags_virtualbox_macos ./all_reports/ - - uses: actions/upload-artifact@v1 - with: - name: all_reports - path: all_reports diff --git a/.github/workflows/sbom.yml b/.github/workflows/sbom.yml new file mode 100644 index 000000000000..7b5d62304c64 --- /dev/null +++ b/.github/workflows/sbom.yml @@ -0,0 +1,25 @@ +name: Generate SBOM +on: + workflow_dispatch: + release: + types: [published] +permissions: + contents: write +jobs: + generate_sbom_action: + runs-on: ubuntu-latest + name: Install bom and generate SBOM + steps: + - name: Checkout repository + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - name: Install bom + uses: kubernetes-sigs/release-actions/setup-bom@8af7b2a5596dff526de9db59b2c4b8457e9f52a1 # main + - name: Generage SBOM + run: | + bom generate -o minikube_${{github.ref_name}}_sbom.spdx \ + --dirs=.\ + - name: Upload SBOM + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload ${{github.ref_name}} minikube_${{github.ref_name}}_sbom.spdx diff --git a/.github/workflows/smoke-test.yml b/.github/workflows/smoke-test.yml new file mode 100644 index 000000000000..53d2fa22bb26 --- /dev/null +++ b/.github/workflows/smoke-test.yml @@ -0,0 +1,120 @@ +# Boot Smoke Test only tests Bare VM (start,stop,delete) and not any minikube/kubernetes functionality. +name: Smoke Test +on: + push: + branches: [ master ] + paths: + - "go.mod" + - "**.go" + - "Makefile" + - "!hack/**" + - "!site/**" + - "!**.md" + - "!**.json" + pull_request: + paths: + - "go.mod" + - "**.go" + - "Makefile" + - ".github/workflows/smoke-test.yml" + - "!hack/**" + - "!site/**" + - "!**.md" + - "!**.json" + workflow_dispatch: +env: + GOPROXY: https://proxy.golang.org + LOG_ARGS: --v=8 --alsologtostderr + +permissions: + contents: read +# Limit one unit test job running per PR/Branch +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + # For example, if you push multiple commits to a pull request in quick succession, only the latest workflow run will continue + cancel-in-progress: true +jobs: + minikube-vm-boot: + name: Boot + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - driver: qemu + os: macos-15-intel + network_flag: --network socket_vmnet + - driver: vfkit + os: macos-15-intel + network_flag: --network vmnet-shared + - driver: docker + os: ubuntu-24.04 + network_flag: "" + - driver: docker + os: ubuntu-24.04-arm + network_flag: "" + steps: + - id: info-block + uses: medyagh/info-block@main + - name: Load avg and free memory + run: | + echo "memory_gb=${{ steps.info-block.outputs.memory_gb }}" + echo "cpu_cores=${{ steps.info-block.outputs.cpu_cores }}" + echo "load_average=${{ steps.info-block.outputs.load_average }}" + echo "free_mem=${{ steps.info-block.outputs.free_mem }}" + load_avg=${{ steps.info-block.outputs.load_average }} + cores=${{ steps.info-block.outputs.cpu_cores }} + if (( $(echo "$load_avg / $cores > 2" | bc -l) )); then + echo "Load average per core is above 2; stopping job early." + exit 1 + fi + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version-file: go.mod + cache: true + - name: Download Golang Dependencies + run: go mod download + - name: Build Binaries + run: make + - name: Update brew (macos) + if: contains(matrix.os, 'macos') + run: brew update + - name: Install tools (macos) + if: contains(matrix.os, 'macos') + run: brew install tree + - name: Install vfkit and vmnet-helper (macos) + if: matrix.driver == 'vfkit' + run: | + brew install vfkit + curl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | sudo VMNET_INTERACTIVE=0 bash + - name: Install qemu and socket_vmnet (macos) + if: contains(matrix.os, 'macos') && matrix.driver == 'qemu' + run: | + brew install qemu socket_vmnet + HOMEBREW=$(which brew) && sudo ${HOMEBREW} services start socket_vmnet + - name: Start minikube (1st boot) + run: | + ./out/minikube start \ + --no-kubernetes \ + --memory 4gb \ + --driver ${{ matrix.driver }} \ + ${{ matrix.network_flag }} \ + ${{ env.LOG_ARGS }} + - name: Inspect minikube + if: always() + run: | + tree -h ~/.minikube + machine="$HOME/.minikube/machines/minikube" + machine_logs=$(find "$machine" -name "*.log") + minikube_logs="$HOME/.minikube/logs/lastStart.txt" + for f in $machine_logs $minikube_logs /var/db/dhcpd_leases; do + echo "==> $f <==" + head -n 1000 "$f" || true + done + - name: Stop minikube + run: ./out/minikube stop ${{ env.LOG_ARGS }} + - name: Start minikube again (2nd boot) + run: ./out/minikube start ${{ env.LOG_ARGS }} + - name: Delete minikube + run: ./out/minikube delete ${{ env.LOG_ARGS }} diff --git a/.github/workflows/sync-minikube.yml b/.github/workflows/sync-minikube.yml new file mode 100644 index 000000000000..3d25e9154846 --- /dev/null +++ b/.github/workflows/sync-minikube.yml @@ -0,0 +1,39 @@ +name: Sync docker images of minikube to Alibaba Cloud +on: + workflow_dispatch: + schedule: + # every day at 7am & 7pm pacific + - cron: "0 2,14 * * *" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + sync-images: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./image-syncer + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + with: + repository: denverdino/image-syncer + path: ./image-syncer + + - name: Set up Go + uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Build + run: make + + - name: Synchronize images to Alibaba Cloud Container Registry Service + env: + ACR_USER: ${{ secrets.ALIBABA_CLOUD_ACR_USER }} + ACR_PASSWORD: ${{ secrets.ALIBABA_CLOUD_ACR_PASSWORD }} + DOCKER_HUB_USER: ${{ secrets.DOCKER_HUB_USER }} + DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }} + + run: ./image-syncer --auth=auth.json --images=images.json --days=2 --proc=2 diff --git a/.github/workflows/time-to-k8s-public-chart.yml b/.github/workflows/time-to-k8s-public-chart.yml index a41de2aa068b..3947e20a3dae 100644 --- a/.github/workflows/time-to-k8s-public-chart.yml +++ b/.github/workflows/time-to-k8s-public-chart.yml @@ -6,25 +6,54 @@ on: - cron: "0 2,14 * * *" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.25.5' +permissions: + contents: read + jobs: - time-to-k8s-public-chart: - runs-on: ubuntu-latest + time-to-k8s-public-chart-docker: + if: github.repository == 'kubernetes/minikube' + runs-on: ubuntu-22.04 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: 'us-west-1' steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: go-version: ${{env.GO_VERSION}} - stable: true - - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@master + - name: Benchmark time-to-k8s for Docker driver with Docker runtime + run: | + ./hack/benchmark/time-to-k8s/public-chart/public-chart.sh docker docker + - name: Benchmark time-to-k8s for Docker driver with containerd runtime + run: | + ./hack/benchmark/time-to-k8s/public-chart/public-chart.sh docker containerd + time-to-k8s-public-chart-virtualbox: + if: github.repository == 'kubernetes/minikube' + runs-on: macos-12 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: 'us-west-1' + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - name: Install kubectl + shell: bash + run: | + curl -LO "https://dl.k8s.io/release/$(curl -sSL https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl" + sudo install kubectl /usr/local/bin/kubectl + kubectl version --client=true + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: - project_id: ${{ secrets.GCP_PROJECT_ID }} - service_account_key: ${{ secrets.GCP_TIME_TO_K8S_SA_KEY }} - export_default_credentials: true - - name: Benchmark time-to-k8s for Docker + go-version: ${{env.GO_VERSION}} + - name: Disable firewall + run: | + sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off + sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k + - name: Benchmark time-to-k8s for VirtualBox driver with Docker runtime run: | - ./hack/benchmark/time-to-k8s/public-chart/public-chart.sh docker - - name: Benchmark time-to-k8s for Containerd + ./hack/benchmark/time-to-k8s/public-chart/public-chart.sh virtualbox docker + - name: Benchmark time-to-k8s for VirtualBox driver with containerd runtime run: | - ./hack/benchmark/time-to-k8s/public-chart/public-chart.sh containerd + ./hack/benchmark/time-to-k8s/public-chart/public-chart.sh virtualbox containerd diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml index 791b2a19c9fc..2584ef0d6783 100644 --- a/.github/workflows/time-to-k8s.yml +++ b/.github/workflows/time-to-k8s.yml @@ -5,32 +5,36 @@ on: types: [released] env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.25.5' +permissions: + contents: read + jobs: benchmark: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - name: Checkout submodules - run: git submodule update --init - - uses: actions/setup-go@v2 - with: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - name: Checkout submodules + run: git submodule update --init + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: go-version: ${{env.GO_VERSION}} - stable: true - - name: Benchmark - run: | + - name: time-to-k8s Benchmark + id: timeToK8sBenchmark + run: | ./hack/benchmark/time-to-k8s/time-to-k8s.sh - echo "::set-output name=version::$(minikube version --short)" - - name: Create PR - uses: peter-evans/create-pull-request@v3 - with: - token: ${{ secrets.MINIKUBE_BOT_PAT }} - commit-message: add time-to-k8s benchmark for ${{ steps.gendocs.outputs.version }} - committer: minikube-bot - author: minikube-bot - branch: addTimeToK8s${{ steps.gendocs.outputs.version }} - push-to-fork: minikube-bot/minikube - base: master - delete-branch: true - title: Add time-to-k8s benchmark for ${{ steps.gendocs.outputs.version }} - body: Updating time-to-k8s benchmark as part of the release process + echo "version=$(minikube version --short)" >> "$GITHUB_OUTPUT" + - name: Create PR + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: add time-to-k8s benchmark for ${{ steps.timeToK8sBenchmark.outputs.version }} + committer: minikube-bot + author: minikube-bot + branch: addTimeToK8s${{ steps.timeToK8sBenchmark.outputs.version }} + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: "site: Add time-to-k8s benchmark for ${{ steps.timeToK8sBenchmark.outputs.version }} (Post-release)" + body: Updating time-to-k8s benchmark as part of the release process diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml index 98605138e656..d3225318b799 100644 --- a/.github/workflows/translations.yml +++ b/.github/workflows/translations.yml @@ -6,16 +6,18 @@ on: - "translations/**" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.25.5' +permissions: + contents: read + jobs: unit_test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: go-version: ${{env.GO_VERSION}} - stable: true - name: Install libvirt run: | sudo apt-get update diff --git a/.github/workflows/twitter-bot.yml b/.github/workflows/twitter-bot.yml index 1a7c97b56a1b..eaaf3cdc5de2 100644 --- a/.github/workflows/twitter-bot.yml +++ b/.github/workflows/twitter-bot.yml @@ -1,18 +1,17 @@ name: "Tweet the release" on: workflow_dispatch: - push: - tags: - - 'v*' release: types: [published] +permissions: + contents: read jobs: twitter-release: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - - uses: ethomson/send-tweet-action@v1 + - uses: ethomson/send-tweet-action@288f9339e0412e3038dce350e0da5ecdf12133a6 with: - status: "A new minikube version just released ! check it out https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md" + status: "minikube ${{github.ref_name}} was just released! Check it out: https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md" consumer-key: ${{ secrets.TWITTER_API_KEY }} consumer-secret: ${{ secrets.TWITTER_API_SECRET }} access-token: ${{ secrets.TWITTER_ACCESS_TOKEN }} diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml new file mode 100644 index 000000000000..9afac50f1d09 --- /dev/null +++ b/.github/workflows/unit-test.yml @@ -0,0 +1,73 @@ +name: Unit Test +on: + workflow_dispatch: + push: + branches: [ master ] + paths: + - .github/workflows/unit-test.yml + - .gitattributes + - go.mod + - Makefile + - '**/*.go' + - '**/testdata/**/*.yaml' + - '**/testdata/**/*.yml' + - '**/testdata/**/*.json' + - '!hack/**' + - '!site/**' + - '!**/*.md' + - '!**/*.json' + pull_request: + paths: + - .github/workflows/unit-test.yml + - .gitattributes + - go.mod + - Makefile + - '**/*.go' + - '**/testdata/**/*.yaml' + - '**/testdata/**/*.yml' + - '**/testdata/**/*.json' + - '!hack/**' + - '!site/**' + - '!**/*.md' + - '!**/*.json' +# Limit one unit test job running per PR/Branch +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + # For example, if you push multiple commits to a pull request in quick succession, only the latest workflow run will continue + cancel-in-progress: true +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read +jobs: + unit_test: + strategy: + fail-fast: false + matrix: + os: [ubuntu-22.04, macos-15, windows-2022] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + cache: true + - name: Download Dependencies + run: go mod download + # needed because pkg/drivers/kvm/domain.go:28:2: + - name: Install libvirt (Linux) + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y libvirt-dev + - name: Install make (Windows) + if: runner.os == 'Windows' + run: choco install make -y + # TODO: add gopogh reports for unit tests too + - name: unit test + timeout-minutes: 15 + env: + TESTSUITE: unittest + run: make test + continue-on-error: false diff --git a/.github/workflows/update-all.yml b/.github/workflows/update-all.yml new file mode 100644 index 000000000000..7e3950425325 --- /dev/null +++ b/.github/workflows/update-all.yml @@ -0,0 +1,42 @@ +name: "update-all" +on: + workflow_dispatch: +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read +jobs: + update-all: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump versions + id: bumpVersions + run: | + MAKEALL_OUTPUT=$(make _update-all) + echo "changes<> "$GITHUB_OUTPUT" + echo "$MAKEALL_OUTPUT" >> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpVersions.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update dependency versions' + committer: minikube-bot + author: minikube-bot + branch: bump_iso_image_versions + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'chore: (debug pr) update all dependencies' + body: | + Changelog: + ${{ steps.bumpVersions.outputs.changes }} diff --git a/.github/workflows/update-amd-gpu-device-plugin-version.yml b/.github/workflows/update-amd-gpu-device-plugin-version.yml new file mode 100644 index 000000000000..d1d8ce180f7a --- /dev/null +++ b/.github/workflows/update-amd-gpu-device-plugin-version.yml @@ -0,0 +1,48 @@ +name: "update-amd-gpu-device-plugin-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-amd-gpu-device-plugin-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump amd-gpu-device-plugin version + id: bumpAmdDevicePlugin + run: | + echo "OLD_VERSION=$(DEP=amd-device-gpu-plugin make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-amd-device-plugin-version + echo "NEW_VERSION=$(DEP=amd-device-gpu-plugin make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpAmdDevicePlugin.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon amd-gpu-device-plugin: Update amd/k8s-device-plugin image from ${{ steps.bumpAmdDevicePlugin.outputs.OLD_VERSION }} to ${{ steps.bumpAmdDevicePlugin.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_amd_device_plugin_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon amd-gpu-device-plugin: Update amd/k8s-device-plugin image from ${{ steps.bumpAmdDevicePlugin.outputs.OLD_VERSION }} to ${{ steps.bumpAmdDevicePlugin.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [k8s-device-plugin](https://github.com/ROCm/k8s-device-plugin) project released a new k8s-device-plugin image + + This PR was auto-generated by `make update-amd-device-plugin-version` using [update-amd-gpu-device-plugin-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-amd-gpu-device-plugin-version.yml) CI Workflow. diff --git a/.github/workflows/update-buildkit-version.yml b/.github/workflows/update-buildkit-version.yml new file mode 100644 index 000000000000..d811ec0def89 --- /dev/null +++ b/.github/workflows/update-buildkit-version.yml @@ -0,0 +1,71 @@ +name: "update-buildkit-version" +on: + workflow_dispatch: + schedule: + # every Wednesday at around 3 am pacific/10 am UTC + - cron: "0 10 * * 3" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-buildkit-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump buildkit Version + id: bumpBuildkit + run: | + echo "OLD_VERSION=$(DEP=buildkit make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-buildkit-version + echo "NEW_VERSION=$(DEP=buildkit make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpBuildkit.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update buildkit from ${{ steps.bumpBuildkit.outputs.OLD_VERSION }} to ${{ steps.bumpBuildkit.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_buildkit_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update buildkit from ${{ steps.bumpBuildkit.outputs.OLD_VERSION }} to ${{ steps.bumpBuildkit.outputs.NEW_VERSION }}' + body: | + The buildkit project released a [new version](https://github.com/moby/buildkit/releases) + + This PR was auto-generated by `make update-buildkit-version` using [update-buildkit-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-buildkit-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpBuildkit.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpBuildkit.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-calico-version.yml b/.github/workflows/update-calico-version.yml new file mode 100644 index 000000000000..76ef79b19440 --- /dev/null +++ b/.github/workflows/update-calico-version.yml @@ -0,0 +1,48 @@ +name: "update-calico-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-calico-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump calico version + id: bumpCalico + run: | + echo "OLD_VERSION=$(DEP=calico make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-calico-version + echo "NEW_VERSION=$(DEP=calico make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpCalico.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'CNI: Update calico from ${{ steps.bumpCalico.outputs.OLD_VERSION }} to ${{ steps.bumpCalico.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_calico_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CNI: Update calico from ${{ steps.bumpCalico.outputs.OLD_VERSION }} to ${{ steps.bumpCalico.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The calico project released a [new version](https://github.com/projectcalico/calico) + + This PR was auto-generated by `make update-calico-version` using [update-calico-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-calico-version.yml) CI Workflow. diff --git a/.github/workflows/update-cilium-version.yml b/.github/workflows/update-cilium-version.yml new file mode 100644 index 000000000000..9f4b8c671132 --- /dev/null +++ b/.github/workflows/update-cilium-version.yml @@ -0,0 +1,48 @@ +name: "update-cilium-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-cilium-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump cilium version + id: bumpCilium + run: | + echo "OLD_VERSION=$(DEP=cilium make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-cilium-version + echo "NEW_VERSION=$(DEP=cilium make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpCilium.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'CNI: Update cilium from ${{ steps.bumpCilium.outputs.OLD_VERSION }} to ${{ steps.bumpCilium.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_cilium_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CNI: Update cilium from ${{ steps.bumpCilium.outputs.OLD_VERSION }} to ${{ steps.bumpCilium.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The cilium project released a [new version](https://github.com/cilium/cilium) + + This PR was auto-generated by `make update-cilium-version` using [update-cilium-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-cilium-version.yml) CI Workflow. diff --git a/.github/workflows/update-cloud-spanner-emulator-version.yml b/.github/workflows/update-cloud-spanner-emulator-version.yml new file mode 100644 index 000000000000..7f52f06e0914 --- /dev/null +++ b/.github/workflows/update-cloud-spanner-emulator-version.yml @@ -0,0 +1,48 @@ +name: "update-cloud-spanner-emulator-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-cloud-spanner-emulator-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump cloud-spanner-emulator version + id: bumpCloudSpannerEmulator + run: | + echo "OLD_VERSION=$(DEP=cloud-spanner-emulator make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-cloud-spanner-emulator-version + echo "NEW_VERSION=$(DEP=cloud-spanner-emulator make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpCloudSpannerEmulator.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon cloud-spanner: Update cloud-spanner-emulator/emulator image from ${{ steps.bumpCloudSpannerEmulator.outputs.OLD_VERSION }} to ${{ steps.bumpCloudSpannerEmulator.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_cloud_spanner_emulator_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon cloud-spanner: Update cloud-spanner-emulator/emulator image from ${{ steps.bumpCloudSpannerEmulator.outputs.OLD_VERSION }} to ${{ steps.bumpCloudSpannerEmulator.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The cloud-spanner-emulator project released a [new version](https://github.com/GoogleCloudPlatform/cloud-spanner-emulator) + + This PR was auto-generated by `make update-cloud-spanner-emulator-version` using [update-cloud-spanner-emulator-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-cloud-spanner-emulator-version.yml) CI Workflow. diff --git a/.github/workflows/update-cni-plugins-version.yml b/.github/workflows/update-cni-plugins-version.yml new file mode 100644 index 000000000000..87586f986895 --- /dev/null +++ b/.github/workflows/update-cni-plugins-version.yml @@ -0,0 +1,71 @@ +name: "update-cni-plugins-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-cni-plugins-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump cni-plugins Version + id: bumpCNIPlugins + run: | + echo "OLD_VERSION=$(DEP=cni-plugins make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-cni-plugins-version + echo "NEW_VERSION=$(DEP=cni-plugins make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpCNIPlugins.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update cni-plugins from ${{ steps.bumpCNIPlugins.outputs.OLD_VERSION }} to ${{ steps.bumpCNIPlugins.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_cni_plugins_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update cni-plugins from ${{ steps.bumpCNIPlugins.outputs.OLD_VERSION }} to ${{ steps.bumpCNIPlugins.outputs.NEW_VERSION }}' + body: | + The cni-plugins project released a [new version](https://github.com/containernetworking/plugins/releases) + + This PR was auto-generated by `make update-cni-plugins-version` using [update-cni-plugins-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-cni-plugins-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpCNIPlugins.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpCNIPlugins.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-containerd-version.yml b/.github/workflows/update-containerd-version.yml new file mode 100644 index 000000000000..e9e893d4a3fd --- /dev/null +++ b/.github/workflows/update-containerd-version.yml @@ -0,0 +1,71 @@ +name: "update-containerd-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-containerd-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump containerd Version + id: bumpContainerd + run: | + echo "OLD_VERSION=$(DEP=containerd make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-containerd-version + echo "NEW_VERSION=$(DEP=containerd make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpContainerd.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update containerd from ${{ steps.bumpContainerd.outputs.OLD_VERSION }} to ${{ steps.bumpContainerd.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_containerd_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update containerd from ${{ steps.bumpContainerd.outputs.OLD_VERSION }} to ${{ steps.bumpContainerd.outputs.NEW_VERSION }}' + body: | + The containerd project released a [new version](https://github.com/containerd/containerd/releases) + + This PR was auto-generated by `make update-containerd-version` using [update-containerd-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-containerd-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpContainerd.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpContainerd.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-cri-dockerd-version.yml b/.github/workflows/update-cri-dockerd-version.yml new file mode 100644 index 000000000000..96bfab5b457c --- /dev/null +++ b/.github/workflows/update-cri-dockerd-version.yml @@ -0,0 +1,61 @@ +name: "update-cri-dockerd-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-cri-dockerd-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump cri-dockerd version + id: bumpCriDockerd + run: | + echo "OLD_VERSION=$(DEP=cri-dockerd make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-cri-dockerd-version + echo "NEW_VERSION=$(DEP=cri-dockerd make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpCriDockerd.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update cri-dockerd from ${{ steps.bumpCriDockerd.outputs.OLD_VERSION }} to ${{ steps.bumpCriDockerd.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_cri_dockerd_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update cri-dockerd from ${{ steps.bumpCriDockerd.outputs.OLD_VERSION }} to ${{ steps.bumpCriDockerd.outputs.NEW_VERSION }}' + body: | + The cri-dockerd project released a [new version](https://github.com/Mirantis/cri-dockerd) + + This PR was auto-generated by `make update-cri-dockerd-version` using [update-cri-dockerd-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-cri-dockerd-version.yml) CI Workflow. + + A minikube maintainer needs to checkout this PR, run `make build-and-upload-cri-dockerd-binaries`, and then comment `ok-to-build-image`. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpCriDockerd.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-cri-o-version.yml b/.github/workflows/update-cri-o-version.yml new file mode 100644 index 000000000000..5ec1a8805bc0 --- /dev/null +++ b/.github/workflows/update-cri-o-version.yml @@ -0,0 +1,72 @@ +name: "update-cri-o-version" +on: + workflow_dispatch: + # Uncomment after crictl/cri-o issue resolved: https://github.com/kubernetes/minikube/issues/18359 + # schedule: + # every Friday at around 3 am pacific/10 am UTC + # - cron: "0 10 * * 5" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-cri-o-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump cri-o Version + id: bumpCrio + run: | + echo "OLD_VERSION=$(DEP=cri-o make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-cri-o-version + echo "NEW_VERSION=$(DEP=cri-o make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpCrio.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update cri-o from ${{ steps.bumpCrio.outputs.OLD_VERSION }} to ${{ steps.bumpCrio.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_cri-o_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update cri-o from ${{ steps.bumpCrio.outputs.OLD_VERSION }} to ${{ steps.bumpCrio.outputs.NEW_VERSION }}' + body: | + The cri-o project released a [new version](https://github.com/cri-o/cri-o/releases) + + This PR was auto-generated by `make update-cri-o-version` using [update-cri-o-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-cri-o-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpCrio.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpCrio.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-crictl-version.yml b/.github/workflows/update-crictl-version.yml new file mode 100644 index 000000000000..1cf308f52d78 --- /dev/null +++ b/.github/workflows/update-crictl-version.yml @@ -0,0 +1,72 @@ +name: "update-crictl-version" +on: + workflow_dispatch: + # Uncomment after crictl/cri-o issue resolved: https://github.com/kubernetes/minikube/issues/18359 + # schedule: + # every Wednesday at around 3 am pacific/10 am UTC + # - cron: "0 10 * * 3" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-crictl-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump crictl Version + id: bumpCrictl + run: | + echo "OLD_VERSION=$(DEP=crictl make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-crictl-version + echo "NEW_VERSION=$(DEP=crictl make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpCrictl.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update crictl from ${{ steps.bumpCrictl.outputs.OLD_VERSION }} to ${{ steps.bumpCrictl.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_crictl_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update crictl from ${{ steps.bumpCrictl.outputs.OLD_VERSION }} to ${{ steps.bumpCrictl.outputs.NEW_VERSION }}' + body: | + The crictl project released a [new version](https://github.com/moby/crictl/releases) + + This PR was auto-generated by `make update-crictl-version` using [update-crictl-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-crictl-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpCrictl.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpCrictl.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-crun-version.yml b/.github/workflows/update-crun-version.yml new file mode 100644 index 000000000000..8e6e7f181674 --- /dev/null +++ b/.github/workflows/update-crun-version.yml @@ -0,0 +1,71 @@ +name: "update-crun-version" +on: + workflow_dispatch: + schedule: + # every Wednesday at around 3 am pacific/10 am UTC + - cron: "0 10 * * 3" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-crun-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump crun Version + id: bumpCrun + run: | + echo "OLD_VERSION=$(DEP=crun make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-crun-version + echo "NEW_VERSION=$(DEP=crun make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpCrun.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update crun from ${{ steps.bumpCrun.outputs.OLD_VERSION }} to ${{ steps.bumpCrun.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_crun_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update crun from ${{ steps.bumpCrun.outputs.OLD_VERSION }} to ${{ steps.bumpCrun.outputs.NEW_VERSION }}' + body: | + The crun project released a [new version](https://github.com/containers/crun/releases) + + This PR was auto-generated by `make update-crun-version` using [update-crun-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-crun-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpCrun.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpCrun.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-debian-version.yml b/.github/workflows/update-debian-version.yml new file mode 100644 index 000000000000..6ef36f4fea24 --- /dev/null +++ b/.github/workflows/update-debian-version.yml @@ -0,0 +1,59 @@ +name: "update-debian-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-ubuntu-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump Ubuntu version + id: bumpBaseOsImage + run: | + echo "OLD_VERSION=$(DEP=debian make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-debian-version + echo "NEW_VERSION=$(DEP=debian make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpBaseOsImage.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase: Bump debian:bookworm from ${{ steps.bumpBaseOsImage.outputs.OLD_VERSION }} to ${{ steps.bumpBaseOsImage.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_debian_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase: Bump debian:bookworm from ${{ steps.bumpBaseOsImage.outputs.OLD_VERSION }} to ${{ steps.bumpBaseOsImage.outputs.NEW_VERSION }}' + body: | + The debian:bookworm image released a new version + + This PR was auto-generated by `make update-debian-version` using [update-debian-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-debian-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpBaseOsImage.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) diff --git a/.github/workflows/update-docker-buildx-version.yml b/.github/workflows/update-docker-buildx-version.yml new file mode 100644 index 000000000000..057e18e2d826 --- /dev/null +++ b/.github/workflows/update-docker-buildx-version.yml @@ -0,0 +1,60 @@ +name: "update-docker-buildx-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-docker-buildx-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump docker-buildx Version + id: bumpDockerBuildx + run: | + echo "OLD_VERSION=$(DEP=docker-buildx make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-docker-buildx-version + echo "NEW_VERSION=$(DEP=docker-buildx make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpDockerBuildx.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'ISO: Update docker-buildx from ${{ steps.bumpDockerBuildx.outputs.OLD_VERSION }} to ${{ steps.bumpDockerBuildx.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_docker_buildx_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'ISO: Update docker-buildx from ${{ steps.bumpDockerBuildx.outputs.OLD_VERSION }} to ${{ steps.bumpDockerBuildx.outputs.NEW_VERSION }}' + body: | + The docker-buildx project released a [new version](https://github.com/docker/buildx/releases) + + This PR was auto-generated by `make update-docker-buildx-version` using [update-docker-buildx-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-docker-buildx-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpDockerBuildx.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-docker-version.yml b/.github/workflows/update-docker-version.yml new file mode 100644 index 000000000000..44542a2c53ef --- /dev/null +++ b/.github/workflows/update-docker-version.yml @@ -0,0 +1,71 @@ +name: "update-docker-version" +on: + workflow_dispatch: + schedule: + # every Thursday at around 3 am pacific/10 am UTC + - cron: "0 10 * * 4" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-docker-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump docker Version + id: bumpDocker + run: | + echo "OLD_VERSION=$(DEP=docker make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-docker-version + echo "NEW_VERSION=$(DEP=docker make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpDocker.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update docker from ${{ steps.bumpDocker.outputs.OLD_VERSION }} to ${{ steps.bumpDocker.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_docker_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update docker from ${{ steps.bumpDocker.outputs.OLD_VERSION }} to ${{ steps.bumpDocker.outputs.NEW_VERSION }}' + body: | + The docker project released a [new version](https://github.com/moby/moby/releases) + + This PR was auto-generated by `make update-docker-version` using [update-docker-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-docker-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpDocker.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpDocker.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-docsy-version.yml b/.github/workflows/update-docsy-version.yml new file mode 100644 index 000000000000..d480130c7cba --- /dev/null +++ b/.github/workflows/update-docsy-version.yml @@ -0,0 +1,45 @@ +name: "update-docsy-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-docsy-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump Docsy version + id: bumpDocsy + run: | + echo "NEW_VERSION=$(make update-docsy-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpDocsy.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'site: Update docsy version to ${{ steps.bumpDocsy.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_docsy_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'site: Update docsy version to ${{ steps.bumpDocsy.outputs.NEW_VERSION }}' + body: | + Docsy project released a [new version](https://github.com/google/docsy/releases), + + This PR was auto-generated by `make update-docsy-version` using [update-docsy-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-docsy-version.yml) CI Workflow. diff --git a/.github/workflows/update-flannel-version.yml b/.github/workflows/update-flannel-version.yml new file mode 100644 index 000000000000..3f02937ea4fc --- /dev/null +++ b/.github/workflows/update-flannel-version.yml @@ -0,0 +1,48 @@ +name: "update-flannel-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-flannel-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump flannel version + id: bumpFlannel + run: | + echo "OLD_VERSION=$(DEP=flannel make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-flannel-version + echo "NEW_VERSION=$(DEP=flannel make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpFlannel.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'CNI: Update flannel from ${{ steps.bumpFlannel.outputs.OLD_VERSION }} to ${{ steps.bumpFlannel.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_flannel_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CNI: Update flannel from ${{ steps.bumpFlannel.outputs.OLD_VERSION }} to ${{ steps.bumpFlannel.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The flannel project released a [new version](https://github.com/flannel-io/flannel) + + This PR was auto-generated by `make update-flannel-version` using [update-flannel-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-flannel-version.yml) CI Workflow. diff --git a/.github/workflows/update-gcp-auth-version.yml b/.github/workflows/update-gcp-auth-version.yml new file mode 100644 index 000000000000..ebb25d0bedb5 --- /dev/null +++ b/.github/workflows/update-gcp-auth-version.yml @@ -0,0 +1,48 @@ +name: "update-gcp-auth-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-gcp-auth-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump gcp-auth version + id: bumpGCPAuth + run: | + echo "OLD_VERSION=$(DEP=gcp-auth make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-gcp-auth-version + echo "NEW_VERSION=$(DEP=gcp-auth make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpGCPAuth.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon gcp-auth: Update k8s-minikube/gcp-auth-webhook image from ${{ steps.bumpGCPAuth.outputs.OLD_VERSION }} to ${{ steps.bumpGCPAuth.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_gcp_auth_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon gcp-auth: Update k8s-minikube/gcp-auth-webhook image from ${{ steps.bumpGCPAuth.outputs.OLD_VERSION }} to ${{ steps.bumpGCPAuth.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The gcp-auth-webhook project released a [new version](https://github.com/GoogleContainerTools/gcp-auth-webhook) + + This PR was auto-generated by `make update-gcp-auth-version` using [update-gcp-auth-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-gcp-auth-version.yml) CI Workflow. diff --git a/.github/workflows/update-gh-version.yml b/.github/workflows/update-gh-version.yml new file mode 100644 index 000000000000..1e0a56c0ddc9 --- /dev/null +++ b/.github/workflows/update-gh-version.yml @@ -0,0 +1,47 @@ +name: "update-gh-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-gh-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump gh version + id: bumpGh + run: | + echo "OLD_VERSION=$(DEP=gh make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-gh-version + echo "NEW_VERSION=$(DEP=gh make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpGh.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'CI: Update gh from ${{ steps.bumpGh.outputs.OLD_VERSION }} to ${{ steps.bumpGh.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_gh_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CI: Update gh from ${{ steps.bumpGh.outputs.OLD_VERSION }} to ${{ steps.bumpGh.outputs.NEW_VERSION }}' + body: | + The gh project released a [new version](https://github.com/cli/cli/releases) + + This PR was auto-generated by `make update-gh-version` using [update-gh-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-gh-version.yml) CI Workflow. diff --git a/.github/workflows/update-go-github-version.yml b/.github/workflows/update-go-github-version.yml new file mode 100644 index 000000000000..0b9145da3755 --- /dev/null +++ b/.github/workflows/update-go-github-version.yml @@ -0,0 +1,47 @@ +name: "update-go-github-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-go-github-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump go-github version + id: bumpGoGithub + run: | + echo "OLD_VERSION=$(DEP=go-github make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-go-github-version + echo "NEW_VERSION=$(DEP=go-github make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpGoGithub.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Update go-github from ${{ steps.bumpGoGithub.outputs.OLD_VERSION }} to ${{ steps.bumpGoGithub.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_go_github_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CI: update go-github from ${{ steps.bumpGoGithub.outputs.OLD_VERSION }} to ${{ steps.bumpGoGithub.outputs.NEW_VERSION }}' + body: | + The go-github project released a [new version](https://github.com/google/go-github) + + This PR was auto-generated by `make update-go-github-version` using [update-go-github-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-go-github-version.yml) CI Workflow. diff --git a/.github/workflows/update-golang-version.yml b/.github/workflows/update-golang-version.yml index b4cf4cd549b7..435c2b8d52f2 100644 --- a/.github/workflows/update-golang-version.yml +++ b/.github/workflows/update-golang-version.yml @@ -6,40 +6,55 @@ on: - cron: "0 9 * * 1" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.25.5' +permissions: + contents: read + jobs: - bump-k8s-versions: - runs-on: ubuntu-latest + bump-golang-version: + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: go-version: ${{env.GO_VERSION}} - stable: true - name: Bump Golang Versions id: bumpGolang run: | + echo "OLD_VERSION=$(DEP=golang make get-dependency-version)" >> "$GITHUB_OUTPUT" make update-golang-version - echo "::set-output name=changes::$(git status --porcelain)" + echo "NEW_VERSION=$(DEP=golang make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" - name: Create PR + id: createPR if: ${{ steps.bumpGolang.outputs.changes != '' }} - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 with: token: ${{ secrets.MINIKUBE_BOT_PAT }} - commit-message: bump golang versions + commit-message: 'Update go from ${{ steps.bumpGolang.outputs.OLD_VERSION }} to ${{ steps.bumpGolang.outputs.NEW_VERSION }}' committer: minikube-bot author: minikube-bot branch: auto_bump_golang_version + branch-suffix: short-commit-hash push-to-fork: minikube-bot/minikube base: master delete-branch: true - title: 'bump golang version' - labels: ok-to-test + title: 'build: Update go from ${{ steps.bumpGolang.outputs.OLD_VERSION }} to ${{ steps.bumpGolang.outputs.NEW_VERSION }}' body: | Kubernetes Project just updated the [golang version](https://github.com/kubernetes/kubernetes/blob/master/build/build-image/cross/VERSION), updating minikube golang to match Kubernetes. - This PR was auto-generated by `make update-golang-version` using [update-golang-versions.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-golang-version.yml) CI Workflow. - - - - + This PR was auto-generated by `make update-golang-version` using [update-golang-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-golang-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpGolang.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) diff --git a/.github/workflows/update-golint-version.yml b/.github/workflows/update-golint-version.yml new file mode 100644 index 000000000000..8d2ef38bcd20 --- /dev/null +++ b/.github/workflows/update-golint-version.yml @@ -0,0 +1,47 @@ +name: "update-golint-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-golint-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump Golint Versions + id: bumpGolint + run: | + echo "OLD_VERSION=$(DEP=golint make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-golint-version + echo "NEW_VERSION=$(DEP=golint make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpGolint.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'CI: Update golint from ${{ steps.bumpGolint.outputs.OLD_VERSION }} to ${{ steps.bumpGolint.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_golint_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CI: Update golint from ${{ steps.bumpGolint.outputs.OLD_VERSION }} to ${{ steps.bumpGolint.outputs.NEW_VERSION }}' + body: | + The golangci-lint project released a [new version](https://github.com/golangci/golangci-lint/releases) + + This PR was auto-generated by `make update-golint-version` using [update-golint-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-golint-version.yml) CI Workflow. diff --git a/.github/workflows/update-gopogh-version.yml b/.github/workflows/update-gopogh-version.yml new file mode 100644 index 000000000000..f47edfb43947 --- /dev/null +++ b/.github/workflows/update-gopogh-version.yml @@ -0,0 +1,47 @@ +name: "update-gopogh-versions" +on: + workflow_dispatch: + schedule: + # every Monday at around 2 am pacific/9 am UTC + - cron: "0 9 * * 1" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-gopogh-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump gopogh Versions + id: bumpGopogh + run: | + echo "OLD_VERSION=$(DEP=gopogh make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-gopogh-version + echo "NEW_VERSION=$(DEP=gopogh make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpGopogh.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'CI: Update gopogh from ${{ steps.bumpGopogh.outputs.OLD_VERSION }} to ${{ steps.bumpGopogh.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_gopogh_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CI: Update gopogh from ${{ steps.bumpGopogh.outputs.OLD_VERSION }} to ${{ steps.bumpGopogh.outputs.NEW_VERSION }}' + body: | + The gopogh project released a [new version](https://github.com/medyagh/gopogh/releases) + + This PR was auto-generated by `make update-gopogh-version` using [update-gopogh-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-gopogh-version.yml) CI Workflow. diff --git a/.github/workflows/update-gotestsum-version.yml b/.github/workflows/update-gotestsum-version.yml new file mode 100644 index 000000000000..47e1ae30d58e --- /dev/null +++ b/.github/workflows/update-gotestsum-version.yml @@ -0,0 +1,47 @@ +name: "update-gotestsum-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-gotestsum-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump Gotestsum Versions + id: bumpGotestsum + run: | + echo "OLD_VERSION=$(DEP=gotestsum make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-gotestsum-version + echo "NEW_VERSION=$(DEP=gotestsum make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpGotestsum.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'CI: Update gotestsum from ${{ steps.bumpGotestsum.outputs.OLD_VERSION }} to ${{ steps.bumpGotestsum.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_gotestsum_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CI: Update gotestsum from ${{ steps.bumpGotestsum.outputs.OLD_VERSION }} to ${{ steps.bumpGotestsum.outputs.NEW_VERSION }}' + body: | + The gotestsum project released a [new version](https://github.com/gotestyourself/gotestsum/releases) + + This PR was auto-generated by `make update-gotestsum-version` using [update-gotestsum-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-gotestsum-version.yml) CI Workflow. diff --git a/.github/workflows/update-headlamp-version.yml b/.github/workflows/update-headlamp-version.yml new file mode 100644 index 000000000000..c2c063974658 --- /dev/null +++ b/.github/workflows/update-headlamp-version.yml @@ -0,0 +1,48 @@ +name: "update-headlamp-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-headlamp-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump Headlamp version + id: bumpHeadlamp + run: | + echo "OLD_VERSION=$(DEP=headlamp make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-headlamp-version + echo "NEW_VERSION=$(DEP=headlamp make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpHeadlamp.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon Headlamp: Update Headlamp image from ${{ steps.bumpHeadlamp.outputs.OLD_VERSION }} to ${{ steps.bumpHeadlamp.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_headlamp_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon Headlamp: Update Headlamp image from ${{ steps.bumpHeadlamp.outputs.OLD_VERSION }} to ${{ steps.bumpHeadlamp.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [Headlamp](https://github.com/headlamp-k8s/headlamp) project released a new Headlamp image + + This PR was auto-generated by `make update-headlamp-version` using [update-headlamp-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-headlamp-version.yml) CI Workflow. diff --git a/.github/workflows/update-hugo-version.yml b/.github/workflows/update-hugo-version.yml new file mode 100644 index 000000000000..877292f5b78c --- /dev/null +++ b/.github/workflows/update-hugo-version.yml @@ -0,0 +1,47 @@ +name: "update-hugo-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-hugo-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump Hugo version + id: bumpHugo + run: | + echo "OLD_VERSION=$(DEP=hugo make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-hugo-version + echo "NEW_VERSION=$(DEP=hugo make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpHugo.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Site: Update hugo from ${{ steps.bumpHugo.outputs.OLD_VERSION }} to ${{ steps.bumpHugo.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_hugo_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Site: Update hugo from ${{ steps.bumpHugo.outputs.OLD_VERSION }} to ${{ steps.bumpHugo.outputs.NEW_VERSION }}' + body: | + The hugo project released a [new version](https://github.com/gohugoio/hugo/releases) + + This PR was auto-generated by `make update-hugo-version` using [update-hugo-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-hugo-version.yml) CI Workflow. diff --git a/.github/workflows/update-ingress-version.yml b/.github/workflows/update-ingress-version.yml new file mode 100644 index 000000000000..3cff7d7352a6 --- /dev/null +++ b/.github/workflows/update-ingress-version.yml @@ -0,0 +1,48 @@ +name: "update-ingress-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-ingress-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump ingress version + id: bumpIngress + run: | + echo "OLD_VERSION=$(DEP=ingress make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-ingress-version + echo "NEW_VERSION=$(DEP=ingress make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpIngress.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon ingress: Update ingress-nginx/controller image from ${{ steps.bumpIngress.outputs.OLD_VERSION }} to ${{ steps.bumpIngress.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_ingress_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon ingress: Update ingress-nginx/controller image from ${{ steps.bumpIngress.outputs.OLD_VERSION }} to ${{ steps.bumpIngress.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The ingress-nginx project released a [new version](https://github.com/kubernetes/ingress-nginx) + + This PR was auto-generated by `make update-ingress-version` using [update-ingress-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-ingress-version.yml) CI Workflow. diff --git a/.github/workflows/update-inspektor-gadget-version.yml b/.github/workflows/update-inspektor-gadget-version.yml new file mode 100644 index 000000000000..df21a05c1b15 --- /dev/null +++ b/.github/workflows/update-inspektor-gadget-version.yml @@ -0,0 +1,48 @@ +name: "update-inspektor-gadget-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-inspektor-gadget-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump inspektor-gadget version + id: bumpInspektorGadget + run: | + echo "OLD_VERSION=$(DEP=inspektor-gadget make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-inspektor-gadget-version + echo "NEW_VERSION=$(DEP=inspektor-gadget make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpInspektorGadget.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon inspektor-gadget: Update inspektor-gadget image from ${{ steps.bumpInspektorGadget.outputs.OLD_VERSION }} to ${{ steps.bumpInspektorGadget.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_inspektor_gadget_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon inspektor-gadget: Update inspektor-gadget image from ${{ steps.bumpInspektorGadget.outputs.OLD_VERSION }} to ${{ steps.bumpInspektorGadget.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The inspektor-gadget project released a [new version](https://github.com/inspektor-gadget/inspektor-gadget) + + This PR was auto-generated by `make update-inspektor-gadget-version` using [update-inspektor-gadget-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-inspektor-gadget-version.yml) CI Workflow. diff --git a/.github/workflows/update-iso-image-versions.yml b/.github/workflows/update-iso-image-versions.yml new file mode 100644 index 000000000000..d79d6972d323 --- /dev/null +++ b/.github/workflows/update-iso-image-versions.yml @@ -0,0 +1,155 @@ +name: "update-iso-image-versions" +on: + workflow_dispatch: + inputs: + make_targets: + type: string + description: "Comma-separated list of make targets to run (e.g., update-buildkit-version,update-cni-plugins-version)" + required: true + # Uncomment after crictl/cri-o issue resolved: https://github.com/kubernetes/minikube/issues/18359 + # default: "update-buildkit-version,update-cni-plugins-version,update-containerd-version,update-cri-o-version,update-crictl-version,update-crun-version,update-docker-version,update-docker-buildx-version,update-golang-version,update-nerdctl-version,update-nerdctld-version,update-runc-version,update-debian-version" + default: "update-buildkit-version,update-cni-plugins-version,update-crun-version,update-docker-version,update-golang-version,update-runc-version,update-debian-version" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read +jobs: + update-all: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump versions + id: bumpVersions + run: | + OLD_BUILDKIT=$(DEP=buildkit make get-dependency-version) + OLD_CNI_PLUGINS=$(DEP=cni-plugins make get-dependency-version) + OLD_CONTAINERD=$(DEP=containerd make get-dependency-version) + OLD_CRICTL=$(DEP=crictl make get-dependency-version) + OLD_CRIO=$(DEP=cri-o make get-dependency-version) + OLD_CRUN=$(DEP=crun make get-dependency-version) + OLD_DOCKER=$(DEP=docker make get-dependency-version) + OLD_DOCKER_BUILDX=$(DEP=docker-buildx make get-dependency-version) + OLD_GO=$(DEP=go make get-dependency-version) + OLD_NERDCTL=$(DEP=nerdctl make get-dependency-version) + OLD_NERDCTLD=$(DEP=nerdctld make get-dependency-version) + OLD_RUNC=$(DEP=runc make get-dependency-version) + OLD_UBUNTU=$(DEP=ubuntu make get-dependency-version) + TARGETS="${{ inputs.make_targets }}" + IFS=',' read -ra TARGET_ARRAY <<< "$TARGETS" + for TARGET in "${TARGET_ARRAY[@]}"; do + echo "Running make $TARGET" + make $TARGET + done + NEW_BUILDKIT=$(DEP=buildkit make get-dependency-version) + NEW_CNI_PLUGINS=$(DEP=cni-plugins make get-dependency-version) + NEW_CONTAINERD=$(DEP=containerd make get-dependency-version) + NEW_CRICTL=$(DEP=crictl make get-dependency-version) + NEW_CRIO=$(DEP=cri-o make get-dependency-version) + NEW_CRUN=$(DEP=crun make get-dependency-version) + NEW_DOCKER=$(DEP=docker make get-dependency-version) + NEW_DOCKER_BUILDX=$(DEP=docker-buildx make get-dependency-version) + NEW_GO=$(DEP=go make get-dependency-version) + NEW_NERDCTL=$(DEP=nerdctl make get-dependency-version) + NEW_NERDCTLD=$(DEP=nerdctld make get-dependency-version) + NEW_RUNC=$(DEP=runc make get-dependency-version) + NEW_UBUNTU=$(DEP=ubuntu make get-dependency-version) + echo "changelog<> "$GITHUB_OUTPUT" + if [ "$OLD_BUILDKIT" != "$NEW_BUILDKIT" ]; then + echo "### Update BuildKit from $OLD_BUILDKIT to $NEW_BUILDKIT" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/moby/buildkit/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_CNI_PLUGINS" != "$NEW_CNI_PLUGINS" ]; then + echo "### Update CNI Plugins from $OLD_CNI_PLUGINS to $NEW_CNI_PLUGINS" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/containernetworking/plugins/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_CONTAINERD" != "$NEW_CONTAINERD" ]; then + echo "### Update containerd from $OLD_CONTAINERD to $NEW_CONTAINERD" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/containerd/containerd/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_CRICTL" != "$NEW_CRICTL" ]; then + echo "### Update crictl from $OLD_CRICTL to $NEW_CRICTL" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/kubernetes-sigs/cri-tools/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_CRIO" != "$NEW_CRIO" ]; then + echo "### Update CRI-O from $OLD_CRIO to $NEW_CRIO" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/cri-o/cri-o/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_CRUN" != "$NEW_CRUN" ]; then + echo "### Update crun from $OLD_CRUN to $NEW_CRUN" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/containers/crun/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_DOCKER" != "$NEW_DOCKER" ]; then + echo "### Update Docker from $OLD_DOCKER to $NEW_DOCKER" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/moby/moby/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_DOCKER_BUILDX" != "$NEW_DOCKER_BUILDX" ]; then + echo "### Update buildx from $OLD_DOCKER_BUILDX to $NEW_DOCKER_BUILDX" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/docker/buildx/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_GO" != "$NEW_GO" ]; then + echo "### Update Go from $OLD_GO to $NEW_GO" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_NERDCTL" != "$NEW_NERDCTL" ]; then + echo "### Update nerdctl from $OLD_NERDCTL to $NEW_NERDCTL" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/containerd/nerdctl/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_NERDCTLD" != "$NEW_NERDCTLD" ]; then + echo "### Update nerdctld from $OLD_NERDCTLD to $NEW_NERDCTLD" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/afbjorklund/nerdctld/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_RUNC" != "$NEW_RUNC" ]; then + echo "### Update runc from $OLD_RUNC to $NEW_RUNC" >> "$GITHUB_OUTPUT" + echo "[Release notes](https://github.com/opencontainers/runc/releases)" >> "$GITHUB_OUTPUT" + fi + if [ "$OLD_UBUNTU" != "$NEW_UBUNTU" ]; then + echo "### Update Ubuntu from $OLD_UBUNTU to $NEW_UBUNTU" >> "$GITHUB_OUTPUT" + fi + echo "EOF" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpVersions.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update dependency versions' + committer: minikube-bot + author: minikube-bot + branch: bump_iso_image_versions + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update dependency versions' + body: | + Changelog: + ${{ steps.bumpVersions.outputs.changelog }} + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpVersions.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpVersions.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-istio-operator.yml b/.github/workflows/update-istio-operator.yml new file mode 100644 index 000000000000..496a2d044a0d --- /dev/null +++ b/.github/workflows/update-istio-operator.yml @@ -0,0 +1,48 @@ +name: "update-istio-operator-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-istio-operator-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump istio-operator version + id: bumpIstioOperator + run: | + echo "OLD_VERSION=$(DEP=istio-operator make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-istio-operator-version + echo "NEW_VERSION=$(DEP=istio-operator make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpIstioOperator.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon istio-provisioner: Update istio/operator image from ${{ steps.bumpIstioOperator.outputs.OLD_VERSION }} to ${{ steps.bumpIstioOperator.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_istio_operator_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon istio-provisioner: Update istio/operator image from ${{ steps.bumpIstioOperator.outputs.OLD_VERSION }} to ${{ steps.bumpIstioOperator.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [istio](https://github.com/istio/istio) project released a new istio/operator image + + This PR was auto-generated by `make update-istio-operator-version` using [update-istio-operator-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-istio-operator-version.yml) CI Workflow. diff --git a/.github/workflows/update-k8s-versions.yml b/.github/workflows/update-k8s-versions.yml index 97b4a6043e0b..a825c9967cb3 100644 --- a/.github/workflows/update-k8s-versions.yml +++ b/.github/workflows/update-k8s-versions.yml @@ -6,24 +6,31 @@ on: - cron: "0 8 * * 1" env: GOPROXY: https://proxy.golang.org - GO_VERSION: '1.16.7' + GO_VERSION: '1.25.5' +permissions: + contents: read + jobs: bump-k8s-versions: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c with: go-version: ${{env.GO_VERSION}} - stable: true - - name: Bump Kuberenetes Versions + - name: Bump Kubernetes Versions id: bumpk8s run: | - make update-kubernetes-version - echo "::set-output name=changes::$(git status --porcelain)" + t=$(make update-kubernetes-version) + t=$(echo $t | head -n 1) + echo "title=$t" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" - name: Create PR if: ${{ steps.bumpk8s.outputs.changes != '' }} - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 with: token: ${{ secrets.MINIKUBE_BOT_PAT }} commit-message: bump default/newest kubernetes versions @@ -33,11 +40,12 @@ jobs: push-to-fork: minikube-bot/minikube base: master delete-branch: true - title: 'bump default/newest kubernetes versions' - labels: ok-to-test + title: "${{ steps.bumpk8s.outputs.title }}" + labels: ok-to-test,kind/feature body: | - This PR was auto-generated by `make update-kubernetes-version` using [update-k8s-versions.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows) CI Workflow. + This PR was auto-generated by `make update-kubernetes-version` using [update-k8s-versions.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-k8s-versions.yml) CI Workflow. Please only merge if all the tests pass. - - ${{ steps.bumpk8s.outputs.changes }} + ``` + ${{ steps.bumpk8s.outputs.changes }} + ``` diff --git a/.github/workflows/update-kindnetd-version.yml b/.github/workflows/update-kindnetd-version.yml new file mode 100644 index 000000000000..d4f07cf62d35 --- /dev/null +++ b/.github/workflows/update-kindnetd-version.yml @@ -0,0 +1,47 @@ +name: "update-kindnetd-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read +jobs: + bump-kindnetd-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump kindnetd version + id: bumpKindnetd + run: | + echo "OLD_VERSION=$(DEP=kindnetd make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-kindnetd-version + echo "NEW_VERSION=$(DEP=kindnetd make get-dependency-version)" >> "$GITHUB_OUTPUT" + c=$(git status --porcelain) + echo "changes<> "$GITHUB_OUTPUT" + echo "$c" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpKindnetd.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'CNI: Update kindnetd from ${{ steps.bumpKindnetd.outputs.OLD_VERSION }} to ${{ steps.bumpKindnetd.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_kindnetd_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CNI: Update kindnetd from ${{ steps.bumpKindnetd.outputs.OLD_VERSION }} to ${{ steps.bumpKindnetd.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + A new version of the kind/kindnetd image was released + + This PR was auto-generated by `make update-kindnetd-version` using [update-kindnetd-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kindnetd-version.yml) CI Workflow. diff --git a/.github/workflows/update-kong-ingress-controller-version.yml b/.github/workflows/update-kong-ingress-controller-version.yml new file mode 100644 index 000000000000..e5bfbadf525d --- /dev/null +++ b/.github/workflows/update-kong-ingress-controller-version.yml @@ -0,0 +1,48 @@ +name: "update-kong-ingress-controller-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-kong-ingress-controller-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump kong-ingress-controller version + id: bumpKongIngressController + run: | + echo "OLD_VERSION=$(DEP=kong-ingress-controller make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-kong-ingress-controller-version + echo "NEW_VERSION=$(DEP=kong-ingress-controller make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpKongIngressController.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon kong: Update kong/kubernetes-ingress-controller image from ${{ steps.bumpKongIngressController.outputs.OLD_VERSION }} to ${{ steps.bumpKongIngressController.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_kong_ingress_controller_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon kong: Update kong/kubernetes-ingress-controller image from ${{ steps.bumpKongIngressController.outputs.OLD_VERSION }} to ${{ steps.bumpKongIngressController.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [kubernetes-ingress-controller](https://github.com/Kong/kubernetes-ingress-controller) project released a new kong/kubernetes-ingress-controller image + + This PR was auto-generated by `make update-kong-ingress-controller-version` using [update-kong-ingress-controller-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kong-ingress-controller-version.yml) CI Workflow. diff --git a/.github/workflows/update-kong-version.yml b/.github/workflows/update-kong-version.yml new file mode 100644 index 000000000000..afd8d7af093f --- /dev/null +++ b/.github/workflows/update-kong-version.yml @@ -0,0 +1,48 @@ +name: "update-kong-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-kong-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump kong version + id: bumpKong + run: | + echo "OLD_VERSION=$(DEP=kong make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-kong-version + echo "NEW_VERSION=$(DEP=kong make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpKong.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon kong: Update kong image from ${{ steps.bumpKong.outputs.OLD_VERSION }} to ${{ steps.bumpKong.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_kong_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon kong: Update kong image from ${{ steps.bumpKong.outputs.OLD_VERSION }} to ${{ steps.bumpKong.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [kong](https://github.com/Kong/kong) project released a new kong image + + This PR was auto-generated by `make update-kong-version` using [update-kong-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kong-version.yml) CI Workflow. diff --git a/.github/workflows/update-kube-registry-proxy-version.yaml b/.github/workflows/update-kube-registry-proxy-version.yaml new file mode 100644 index 000000000000..81878df2935e --- /dev/null +++ b/.github/workflows/update-kube-registry-proxy-version.yaml @@ -0,0 +1,48 @@ +name: "update-kube-registry-proxy-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-kube-registry-proxy-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump kube-registry-proxy version + id: bumpKubeRegistryProxy + run: | + echo "OLD_VERSION=$(DEP=kube-registry-proxy make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-kube-registry-proxy-version + echo "NEW_VERSION=$(DEP=kube-registry-proxy make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpKubeRegistryProxy.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon registry: Update kube-registry-proxy image from ${{ steps.bumpKubeRegistryProxy.outputs.OLD_VERSION }} to ${{ steps.bumpKubeRegistryProxy.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_kube_registry_proxy_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon registry: Update kube-registry-proxy image from ${{ steps.bumpKubeRegistryProxy.outputs.OLD_VERSION }} to ${{ steps.bumpKubeRegistryProxy.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The kube-registry-proxy project released a [new version](https://github.com/spowelljr/kube-registry-proxy) + + This PR was auto-generated by `make update-kube-registry-proxy-version` using [update-kube-registry-proxy-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kube-registry-proxy-version.yml) CI Workflow. diff --git a/.github/workflows/update-kube-vip-version.yml b/.github/workflows/update-kube-vip-version.yml new file mode 100644 index 000000000000..50cef6a11d3a --- /dev/null +++ b/.github/workflows/update-kube-vip-version.yml @@ -0,0 +1,48 @@ +name: "update-kube-vip-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-kube-vip-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump kube-vip version + id: bumpKubeVip + run: | + echo "OLD_VERSION=$(DEP=kube-vip make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-kube-vip-version + echo "NEW_VERSION=$(DEP=kube-vip make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpKubeVip.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'HA (multi-control plane): Update kube-vip from ${{ steps.bumpKubeVip.outputs.OLD_VERSION }} to ${{ steps.bumpKubeVip.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_kube_vip_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'HA (multi-control plane): Update kube-vip from ${{ steps.bumpKubeVip.outputs.OLD_VERSION }} to ${{ steps.bumpKubeVip.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The kube-vip project released a [new version](https://github.com/kube-vip/kube-vip) + + This PR was auto-generated by `make update-kube-vip-version` using [update-kube-vip-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kube-vip-version.yml) CI Workflow. diff --git a/.github/workflows/update-kubeadm-constants.yml b/.github/workflows/update-kubeadm-constants.yml new file mode 100644 index 000000000000..ca158f26ad46 --- /dev/null +++ b/.github/workflows/update-kubeadm-constants.yml @@ -0,0 +1,48 @@ +name: "update-kubeadm-constants" +on: + workflow_dispatch: + schedule: + # every Monday at around midnight pacific/7 am UTC + - cron: "0 6 * * 1" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-k8s-versions: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump Kubeadm Constants for Kubernetes Images + id: bumpKubeadmConsts + run: | + make update-kubeadm-constants + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpKubeadmConsts.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: update image constants for kubeadm images + committer: minikube-bot + author: minikube-bot + branch: auto_bump_kubeadm_constants + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'build: Bump kubeadm constants for kubernetes images' + body: | + This PR was auto-generated by `make update-kubeadm-constants` using [update-kubeadm-constants.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kubeadm-constants.yml) CI Workflow. + Please only merge if all the tests pass. + + ``` + ${{ steps.bumpKubeadmConsts.outputs.changes }} + ``` diff --git a/.github/workflows/update-kubectl-version.yml b/.github/workflows/update-kubectl-version.yml new file mode 100644 index 000000000000..c9bbb4b80986 --- /dev/null +++ b/.github/workflows/update-kubectl-version.yml @@ -0,0 +1,48 @@ +name: "update-kubectl-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-kubectl-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump Kubectl version + id: bumpKubectl + run: | + echo "OLD_VERSION=$(DEP=kubectl make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-kubectl-version + echo "NEW_VERSION=$(DEP=kubectl make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpKubectl.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon kubevirt: Update bitnami/kubectl image from ${{ steps.bumpKubectl.outputs.OLD_VERSION }} to ${{ steps.bumpKubectl.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_kubectl_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon kubevirt: Update bitnami/kubectl image from ${{ steps.bumpKubectl.outputs.OLD_VERSION }} to ${{ steps.bumpKubectl.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [bitnami](https://github.com/bitnami/containers) project released a new bitnami/kubectl image + + This PR was auto-generated by `make update-kubectl-version` using [update-kubectl-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kubectl-version.yml) CI Workflow. diff --git a/.github/workflows/update-kubernetes-versions-list.yml b/.github/workflows/update-kubernetes-versions-list.yml new file mode 100644 index 000000000000..8a7401916c2e --- /dev/null +++ b/.github/workflows/update-kubernetes-versions-list.yml @@ -0,0 +1,46 @@ +name: "update-kubernetes-versions-list" +on: + workflow_dispatch: + schedule: + # every Monday at around midnight pacific/7 am UTC + - cron: "0 6 * * 1" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + update-kubernetes-versions-list: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump Kubernetes versions list + id: bumpKubernetesVersionsList + run: | + make update-kubernetes-versions-list + c=$(git status --porcelain) + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$c" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpKubernetesVersionsList.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: update Kubernetes versions list + committer: minikube-bot + author: minikube-bot + branch: auto_update_kubernetes_versions_list + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'build: Update Kubernetes versions list' + body: | + This PR was auto-generated by `make update-kubernetes-versions-list` using [update-kubernetes-versions-list.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kubernetes-versions-list.yml) CI Workflow. + The purpose of this ValidKubernetesVersions in the code is, to check a kuberentes version is valid without checking Github on first try + and if the version is not valid, it will check Github for the latest valid versions. this will save some unesccary network calls. diff --git a/.github/workflows/update-metrics-server-version.yml b/.github/workflows/update-metrics-server-version.yml new file mode 100644 index 000000000000..c318cbb78320 --- /dev/null +++ b/.github/workflows/update-metrics-server-version.yml @@ -0,0 +1,48 @@ +name: "update-metrics-server-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-metrics-server-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump metrics-server version + id: bumpMetricsServer + run: | + echo "OLD_VERSION=$(DEP=metrics-server make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-metrics-server-version + echo "NEW_VERSION=$(DEP=metrics-server make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpMetricsServer.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon metrics-server: Update metrics-server/metrics-server image from ${{ steps.bumpMetricsServer.outputs.OLD_VERSION }} to ${{ steps.bumpMetricsServer.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_metrics_server_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon metrics-server: Update metrics-server/metrics-server image from ${{ steps.bumpMetricsServer.outputs.OLD_VERSION }} to ${{ steps.bumpMetricsServer.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The metrics-server project released a [new version](https://github.com/kubernetes-sigs/metrics-server) + + This PR was auto-generated by `make update-metrics-server-version` using [update-metrics-server-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-metrics-server-version.yml) CI Workflow. diff --git a/.github/workflows/update-nerdctl-version.yml b/.github/workflows/update-nerdctl-version.yml new file mode 100644 index 000000000000..11abedd4b40f --- /dev/null +++ b/.github/workflows/update-nerdctl-version.yml @@ -0,0 +1,71 @@ +name: "update-nerdctl-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-nerdctl-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump nerdctl Version + id: bumpNerdctl + run: | + echo "OLD_VERSION=$(DEP=nerdctl make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-nerdctl-version + echo "NEW_VERSION=$(DEP=nerdctl make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpNerdctl.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update nerdctl from ${{ steps.bumpNerdctl.outputs.OLD_VERSION }} to ${{ steps.bumpNerdctl.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_nerdctl_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update nerdctl from ${{ steps.bumpNerdctl.outputs.OLD_VERSION }} to ${{ steps.bumpNerdctl.outputs.NEW_VERSION }}' + body: | + The nerdctl project released a [new version](https://github.com/containerd/nerdctl/releases) + + This PR was auto-generated by `make update-nerdctl-version` using [update-nerdctl-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-nerdctl-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpNerdctl.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpNerdctl.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-nerdctld-version.yml b/.github/workflows/update-nerdctld-version.yml new file mode 100644 index 000000000000..7cbfa964ab42 --- /dev/null +++ b/.github/workflows/update-nerdctld-version.yml @@ -0,0 +1,60 @@ +name: "update-nerdctld-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-nerdctld-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump nerdctld Version + id: bumpNerdctld + run: | + echo "OLD_VERSION=$(DEP=nerdctld make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-nerdctld-version + echo "NEW_VERSION=$(DEP=nerdctld make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpNerdctld.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase: Update nerdctld from ${{ steps.bumpNerdctld.outputs.OLD_VERSION }} to ${{ steps.bumpNerdctld.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_nerdctld_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase: Update nerdctld from ${{ steps.bumpNerdctld.outputs.OLD_VERSION }} to ${{ steps.bumpNerdctld.outputs.NEW_VERSION }}' + body: | + The nerdctld project released a [new version](https://github.com/afbjorklund/nerdctld/releases) + + This PR was auto-generated by `make update-nerdctld-version` using [update-nerdctld-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-nerdctld-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpNerdctld.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) diff --git a/.github/workflows/update-nvidia-device-plugin-version.yml b/.github/workflows/update-nvidia-device-plugin-version.yml new file mode 100644 index 000000000000..ee8686855ce1 --- /dev/null +++ b/.github/workflows/update-nvidia-device-plugin-version.yml @@ -0,0 +1,48 @@ +name: "update-nvidia-device-plugin-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-nvidia-device-plugin-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump nvidia-device-plugin version + id: bumpNvidiaDevicePlugin + run: | + echo "OLD_VERSION=$(DEP=nvidia-device-plugin make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-nvidia-device-plugin-version + echo "NEW_VERSION=$(DEP=nvidia-device-plugin make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpNvidiaDevicePlugin.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon nvidia-device-plugin: Update nvidia/k8s-device-plugin image from ${{ steps.bumpNvidiaDevicePlugin.outputs.OLD_VERSION }} to ${{ steps.bumpNvidiaDevicePlugin.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_nvidia_device_plugin_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon nvidia-device-plugin: Update nvidia/k8s-device-plugin image from ${{ steps.bumpNvidiaDevicePlugin.outputs.OLD_VERSION }} to ${{ steps.bumpNvidiaDevicePlugin.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [k8s-device-plugin](https://github.com/NVIDIA/k8s-device-plugin) project released a new k8s-device-plugin image + + This PR was auto-generated by `make update-nvidia-device-plugin-version` using [update-nvidia-device-plugin-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-nvidia-device-plugin-version.yml) CI Workflow. diff --git a/.github/workflows/update-portainer-version.yml b/.github/workflows/update-portainer-version.yml new file mode 100644 index 000000000000..af6680db072c --- /dev/null +++ b/.github/workflows/update-portainer-version.yml @@ -0,0 +1,48 @@ +name: "update-portainer-version" +on: + workflow_dispatch: + schedule: + # every Monday at around 3 am pacific/10 am UTC + - cron: "0 10 * * 1" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.24.0' +permissions: + contents: read + +jobs: + bump-portainer-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + - uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 + with: + go-version: ${{env.GO_VERSION}} + - name: Bump portainer version + id: bumpPortainer + run: | + echo "OLD_VERSION=$(DEP=portainer make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-portainer-version + echo "NEW_VERSION=$(DEP=portainer make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpPortainer.outputs.changes != '' }} + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon portainer: Update portainer image from ${{ steps.bumpPortainer.outputs.OLD_VERSION }} to ${{ steps.bumpPortainer.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_portainer_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon portainer: Update portainer image from ${{ steps.bumpPortainer.outputs.OLD_VERSION }} to ${{ steps.bumpPortainer.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [portainer](https://github.com/portainer/portainer) project released a new portainer image + + This PR was auto-generated by `make update-portainer-version` using [update-portainer-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-portainer-version.yml) CI Workflow. diff --git a/.github/workflows/update-registry-version.yml b/.github/workflows/update-registry-version.yml new file mode 100644 index 000000000000..dc85315e33ac --- /dev/null +++ b/.github/workflows/update-registry-version.yml @@ -0,0 +1,46 @@ +name: "update-registry-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-registry-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump registry version + id: bumpRegistry + run: | + echo "OLD_VERSION=$(DEP=registry make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-registry-version + echo "NEW_VERSION=$(DEP=registry make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpRegistry.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon registry: Update registry image from ${{ steps.bumpRegistry.outputs.OLD_VERSION }} to ${{ steps.bumpRegistry.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_registry_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon registry: Update registry image from ${{ steps.bumpRegistry.outputs.OLD_VERSION }} to ${{ steps.bumpRegistry.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + This PR was auto-generated by `make update-registry-version` using [update-registry-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-registry-version.yml) CI Workflow. diff --git a/.github/workflows/update-runc-version.yml b/.github/workflows/update-runc-version.yml new file mode 100644 index 000000000000..e416c4f0d7ef --- /dev/null +++ b/.github/workflows/update-runc-version.yml @@ -0,0 +1,71 @@ +name: "update-runc-version" +on: + workflow_dispatch: + schedule: + # every Tuesday at around 3 am pacific/10 am UTC + - cron: "0 10 * * 2" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-runc-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump runc Version + id: bumpRunc + run: | + echo "OLD_VERSION=$(DEP=runc make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-runc-version + echo "NEW_VERSION=$(DEP=runc make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + id: createPR + if: ${{ steps.bumpRunc.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Kicbase/ISO: Update runc from ${{ steps.bumpRunc.outputs.OLD_VERSION }} to ${{ steps.bumpRunc.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_runc_version + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Kicbase/ISO: Update runc from ${{ steps.bumpRunc.outputs.OLD_VERSION }} to ${{ steps.bumpRunc.outputs.NEW_VERSION }}' + body: | + The runc project released a [new version](https://github.com/opencontainers/runc/releases) + + This PR was auto-generated by `make update-runc-version` using [update-runc-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-runc-version.yml) CI Workflow. + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpRunc.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-image' + }) + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + if: ${{ steps.bumpRunc.outputs.changes != '' }} + with: + github-token: ${{ secrets.MINIKUBE_BOT_PAT }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ steps.createPR.outputs.pull-request-number }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'ok-to-build-iso' + }) diff --git a/.github/workflows/update-site-node-version.yml b/.github/workflows/update-site-node-version.yml new file mode 100644 index 000000000000..da57001f699a --- /dev/null +++ b/.github/workflows/update-site-node-version.yml @@ -0,0 +1,47 @@ +name: "update-site-node-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-site-node-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump site node version + id: bumpSiteNode + run: | + echo "OLD_VERSION=$(DEP=node make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-site-node-version + echo "NEW_VERSION=$(DEP=node make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpSiteNode.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'site: Update node from ${{ steps.bumpSiteNode.outputs.OLD_VERSION }} to ${{ steps.bumpSiteNode.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_site_node_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'site: Update node from ${{ steps.bumpSiteNode.outputs.OLD_VERSION }} to ${{ steps.bumpSiteNode.outputs.NEW_VERSION }}' + body: | + The [node](https://github.com/nodejs/node) project released a new version + + This PR was auto-generated by `make update-site-node-version` using [update-site-node-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-site-node-version.yml) CI Workflow. diff --git a/.github/workflows/update-volcano-version.yml b/.github/workflows/update-volcano-version.yml new file mode 100644 index 000000000000..a727cbb48fb4 --- /dev/null +++ b/.github/workflows/update-volcano-version.yml @@ -0,0 +1,49 @@ +name: "update-volcano-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-volcano-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + cache-dependency-path: ./go.sum + - name: Bump volcano version + id: bumpVolcano + run: | + echo "OLD_VERSION=$(DEP=volcano make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-volcano-version + echo "NEW_VERSION=$(DEP=volcano make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpVolcano.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon Volcano: Update volcano images from ${{ steps.bumpVolcano.outputs.OLD_VERSION }} to ${{ steps.bumpVolcano.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_volcano_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon Volcano: Update volcano images from ${{ steps.bumpVolcano.outputs.OLD_VERSION }} to ${{ steps.bumpVolcano.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [Volcano](https://github.com/volcano-sh/volcano) project made a new release + + This PR was auto-generated by `make update-volcano-version` using [update-volcano-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-volcano-version.yml) CI Workflow. diff --git a/.github/workflows/update-yakd-version.yml b/.github/workflows/update-yakd-version.yml new file mode 100644 index 000000000000..9f22c8bbc53f --- /dev/null +++ b/.github/workflows/update-yakd-version.yml @@ -0,0 +1,48 @@ +name: "update-yakd-version" +on: + workflow_dispatch: + schedule: + # every Saturday at 1:00 Pacific/8:00 UTC + - cron: "0 8 * * 6" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + bump-yakd-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Bump yakd version + id: bumpYakd + run: | + echo "OLD_VERSION=$(DEP=yakd make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-yakd-version + echo "NEW_VERSION=$(DEP=yakd make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpYakd.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'Addon yakd: Update marcnuri/yakd image from ${{ steps.bumpYakd.outputs.OLD_VERSION }} to ${{ steps.bumpYakd.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_yakd_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'Addon yakd: Update marcnuri/yakd image from ${{ steps.bumpYakd.outputs.OLD_VERSION }} to ${{ steps.bumpYakd.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The [yakd](https://github.com/manusa/yakd) project released a new yakd image + + This PR was auto-generated by `make update-yakd-version` using [update-yakd-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-yakd-version.yml) CI Workflow. diff --git a/.github/workflows/vex.yml b/.github/workflows/vex.yml new file mode 100644 index 000000000000..05dcbf747071 --- /dev/null +++ b/.github/workflows/vex.yml @@ -0,0 +1,18 @@ +on: + workflow_dispatch: + push: + tags: + - 'v*.*.*' +jobs: + vexctl: + runs-on: ubuntu-22.04 + steps: + - name: Checkout code + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - name: Set env + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + - uses: openvex/generate-vex@31b415924ea0d72ed5f2640f1dee59dea6c2770b + name: Run vexctl + with: + product: pkg:golang/k8s.io/minikube@${{ env.RELEASE_VERSION }} + diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml new file mode 100644 index 000000000000..0387e0f43186 --- /dev/null +++ b/.github/workflows/winget.yml @@ -0,0 +1,18 @@ +name: Publish to WinGet +on: + workflow_dispatch: + release: + types: [released] +permissions: + contents: read + +jobs: + publish: + runs-on: windows-latest # action can only be run on windows + steps: + - uses: vedantmgoyal9/winget-releaser@main + with: + identifier: Kubernetes.minikube + installers-regex: 'minikube-installer.exe' + token: ${{ secrets.WINGET_TOKEN }} + fork-user: minikube-bot diff --git a/.github/workflows/yearly-leaderboard.yml b/.github/workflows/yearly-leaderboard.yml new file mode 100644 index 000000000000..5e4c73f15e7c --- /dev/null +++ b/.github/workflows/yearly-leaderboard.yml @@ -0,0 +1,53 @@ +name: "update-yearly-leaderboard" +on: + workflow_dispatch: + schedule: + # The 2nd of every month + - cron: "0 0 2 * *" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.25.5' +permissions: + contents: read + +jobs: + update-yearly-leaderboard: + if: github.repository == 'kubernetes/minikube' + runs-on: ubuntu-22.04 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: 'us-west-1' + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 + - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c + with: + go-version: ${{env.GO_VERSION}} + - name: Update Yearly Leaderboard + id: yearlyLeaderboard + run: | + sudo apt install ncal + make update-yearly-leaderboard + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + env: + GITHUB_TOKEN: ${{ secrets.MINIKUBE_BOT_PAT }} + - name: Create PR + if: ${{ steps.yearlyLeaderboard.outputs.changes != '' }} + uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: Update yearly leaderboard + committer: minikube-bot + author: minikube-bot + branch: yearly-leaderboard + branch-suffix: short-commit-hash + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'site: Update Yearly Leaderboard' + body: | + Committing changes resulting from `make update-yearly-leaderboard`. + This PR is auto-generated by the [update-yearly-leaderboard](https://github.com/kubernetes/minikube/blob/master/.github/workflows/yearly-leaderboard.yml) CI workflow. diff --git a/.gitignore b/.gitignore index cf6f99bc49fd..79d6ee19aaa3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ # Folders .cache +.modcache _obj _test @@ -25,28 +26,47 @@ _testmain.go *.exe *.test *.prof +*.pprof +*.log -/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/bin/auto-pause +/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/usr/bin/auto-pause +/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/usr/bin/auto-pause +/deploy/iso/minikube-iso/Config.in +/deploy/iso/minikube-iso/CHANGELOG +/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/CHANGELOG +/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/CHANGELOG /deploy/kicbase/auto-pause +/deploy/kicbase/CHANGELOG /deploy/addons/auto-pause/auto-pause-hook /out /_gopath #iso version file -deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/VERSION +deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/VERSION +deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/VERSION +deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/version.json +deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/version.json /minikube .DS_Store +# Editor files /.idea - /.vscode +/.zed -test/integration/testdata/minikube-linux-amd64-latest-stable +/test/integration/testdata/minikube-linux-amd64-latest-stable +/test/integration/licenses # hugo /public /site/resources /_gen +/site/public +# gopogh filldb +hack/legacy_fill_db/gopogh_filldb_log.txt +hack/legacy_fill_db/out/output_summary.json +hack/legacy_fill_db/out/output.html +hack/go-licenses diff --git a/.gitmodules b/.gitmodules index d398a94cf9b5..c74518b4fac7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "hack/benchmark/time-to-k8s/time-to-k8s-repo"] path = hack/benchmark/time-to-k8s/time-to-k8s-repo url = https://github.com/tstromberg/time-to-k8s.git +[submodule "hack/benchmark/image-build/minikube-image-benchmark"] + path = hack/benchmark/image-build/minikube-image-benchmark + url = https://github.com/GoogleContainerTools/minikube-image-benchmark.git diff --git a/.golangci.max.yaml b/.golangci.max.yaml new file mode 100644 index 000000000000..1d6e8722df6f --- /dev/null +++ b/.golangci.max.yaml @@ -0,0 +1,26 @@ +version: "2" +linters: + enable: + - dogsled + - errcheck + - gocritic + - govet + - gocyclo + - ineffassign + - misspell + - nakedret + - revive + - staticcheck + - unconvert + - unparam + - unused + exclusions: + paths: + - third_party +formatters: + enable: + - gofmt + - goimports + exclusions: + paths: + - third_party diff --git a/.golangci.min.yaml b/.golangci.min.yaml new file mode 100644 index 000000000000..072bcbb45111 --- /dev/null +++ b/.golangci.min.yaml @@ -0,0 +1,26 @@ +version: "2" +linters: + enable: + - govet + - gocyclo + disable: + - errcheck + - staticcheck + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party + - '(.+)_test\.go' +formatters: + enable: + - gofmt + - goimports + exclusions: + generated: lax + paths: + - third_party diff --git a/.golangci.yaml b/.golangci.yaml new file mode 100644 index 000000000000..0c46fa82122b --- /dev/null +++ b/.golangci.yaml @@ -0,0 +1,179 @@ +version: "2" +run: + timeout: 7m +linters: + enable: + - dogsled + - errcheck + - gocritic + - govet + - gocyclo + - ineffassign + - misspell + - nakedret + - revive + - staticcheck + - unconvert + - unparam + - unused + settings: + staticcheck: + checks: + # Below is the default set + - "all" + - "-ST1000" + - "-ST1003" + - "-ST1016" + - "-ST1020" + - "-ST1021" + - "-ST1022" + # Omit embedded fields from selector expression + - "-QF1008" + + revive: + enable-all-rules: true + rules: + # See https://revive.run/r + + ##### P0: we should do it ASAP. + - name: max-control-nesting + arguments: [7] + - name: deep-exit + disabled: true + - name: unchecked-type-assertion + disabled: true + - name: bare-return + disabled: true + - name: import-shadowing + disabled: true + - name: use-errors-new + disabled: true + ##### P1: consider making a dent on these, but not critical. + - name: argument-limit + arguments: [12] + - name: unnecessary-stmt + disabled: true + - name: defer + disabled: true + - name: confusing-naming + disabled: true + - name: early-return + disabled: true + - name: function-result-limit + arguments: [7] + - name: function-length + arguments: [0, 400] + - name: cyclomatic + arguments: [100] + - name: unhandled-error + disabled: true + - name: cognitive-complexity + arguments: [197] + ##### P2: nice to have. + - name: max-public-structs + arguments: [25] + - name: confusing-results + disabled: true + - name: comment-spacings + disabled: true + - name: use-any + disabled: true + - name: empty-lines + disabled: true + - name: package-comments + disabled: true + - name: exported + disabled: true + ###### Permanently disabled. Below have been reviewed and vetted to be unnecessary. + - name: line-length-limit + disabled: true + - name: nested-structs + disabled: true + - name: flag-parameter + disabled: true + - name: unused-parameter + disabled: true + - name: unused-receiver + disabled: true + - name: add-constant + disabled: true + ###### To be determined, this is a rule with differences. + - name: import-alias-naming + disabled: true + - name: unexported-naming + disabled: true + - name: struct-tag + disabled: true + - name: redundant-import-alias + disabled: true + gocritic: + # See https://go-critic.com/overview.html + disabled-checks: + # Below are normally enabled by default, but we do not pass + - appendAssign + - ifElseChain + - unslice + - badCall + - assignOp + - commentFormatting + - captLocal + - singleCaseSwitch + - wrapperFunc + - elseif + - regexpMust + - deprecatedComment + enabled-checks: + # Below used to be enabled, but we do not pass anymore + # - paramTypeCombine + # - octalLiteral + # - unnamedResult + # - equalFold + # - sloppyReassign + # - emptyStringTest + # - hugeParam + # - appendCombine + # - stringXbytes + # - ptrToRefParam + # - commentedOutCode + # - rangeValCopy + # - methodExprCall + # - yodaStyleExpr + # - typeUnparen + + # We enabled these and we pass + - nilValReturn + - weakCond + - indexAlloc + - rangeExprCopy + - boolExprSimplify + - commentedOutImport + - docStub + - emptyFallthrough + - hexLiteral + - typeAssertChain + - unlabelStmt + - builtinShadow + - importShadow + - initClause + - nestingReduce + - unnecessaryBlock + + exclusions: + paths: + # we generally dont wanna touch or lint the Third_party code, it is basically like a fork for code that we can not import. + # but have to copy/paste + - third_party + # Skip test files + - '(.+)_test\.go' + rules: + # I think this check is meaningless. + - path: '(.+)\.go$' + text: "Error return value of `.*` is not checked" + linter: errcheck +formatters: + enable: + - gofmt + - goimports + exclusions: + paths: + - third_party diff --git a/.openvex/templates/README.md b/.openvex/templates/README.md new file mode 100644 index 000000000000..d724e1d0e7eb --- /dev/null +++ b/.openvex/templates/README.md @@ -0,0 +1,27 @@ +# OpenVEX Templates Directory + +This directory contains the OpenVEX data for this repository. +The files stored in this directory are used as templates by +`vexctl generate` when generating VEX data for a release or +a specific artifact. + +To add new statements to publish data about a vulnerability, +download [vexctl](https://github.com/openvex/vexctl) +and append new statements using `vexctl add`. For example: +``` +vexctl add --in-place main.openvex.json pkg:oci/test CVE-2014-1234567 fixed +``` +That will add a new VEX statement expressing that the impact of +CVE-2014-1234567 is under investigation in the test image. When +cutting a new release, for `pkg:oci/test` the new file will be +incorporated to the relase's VEX data. + +## Read more about OpenVEX + +To know more about generating, publishing and using VEX data +in your project, please check out the vexctl repository and +documentation: https://github.com/openvex/vexctl + +OpenVEX also has an examples repository with samples and docs: +https://github.com/openvex/examples + diff --git a/.openvex/templates/main.openvex.json b/.openvex/templates/main.openvex.json new file mode 100644 index 000000000000..2f9b8d2fdce0 --- /dev/null +++ b/.openvex/templates/main.openvex.json @@ -0,0 +1,8 @@ +{ + "@context": "https://openvex.dev/ns/v0.2.0", + "@id": "https://openvex.dev/docs/public/vex-081fa16bd7164a81aa33b8897afd8efb325c037636e2709ed5fdd145eacedcf5", + "author": "vexctl (automated template)", + "timestamp": "2023-12-15T23:43:21.490011+05:30", + "version": 1, + "statements": [] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index ab0ded5a073f..22599e6a0793 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,2327 @@ # Release Notes +## Version 1.37.0 - 2025-09-09 + +## Highlight +Run AI workloads on Macbook's GPU in Kubernetes using the new `krunkit driver`. Get started with our [AI Playground tutorial](https://minikube.sigs.k8s.io/docs/tutorials/ai-playground/) + +## Features +* Bump Kubernetes version default: v1.34.0 and latest: v1.34.0 (#21439) +* Add krunkit driver supporting GPU acceleration on macOS (#20826) [Tutorial](https://minikube.sigs.k8s.io/docs/tutorials/ai-playground/) +* add short hand -m for --memory (#20854) +* Add support to docker runtime for OCI access to NVIDIA GPUs (#20959) +* Add `--disable-coredns-log` flag to suppress coredns logs (#20992) +* new addon: kubetail (#20345) +* drivers: Add support for Virtiofs mounts for vfkit and krunkit (#21149) + +## Improvements +* Improve ingress-dns addon for ipv4 and windows v0.0.4 (#21449) +* iso: Disable grub timeout speeding up vm start by 5 seconds (#20895) +* improve docker service reliability, update docker systemd files (#21174) +* Don't require both --mount for using --mount-string and remove default mount-string (#21250) +* Update oldest supported Kubernetes versions (#21490) +* license cmd: don't fail if output dir doesn't exist & download from github assets first (#21206) +* remove deprecated proxy-refresh-interval v2 etcd flag (#21278) +* vmnet: Support offloading for krunkit (#20831) +* Don't call startKicServiceTunnel for non-kic drivers (#20863) +* krunkit: Disable offloading for faster networking (#21341) + +## Deprication +* Deprecate HyperKit driver with warning (#21024) + +## Bug fixes +* fix dirty commit version (#21062) +* Fix minikube image load on windows (#20529) (#20921) +* Fix mount to same folder causing Input/output error (#21077) +* fix: YAML file escape error problem affecting addons (#20904) +* iso: Fix `minikube stop` with vfkit and krunkit drivers (#21089) +* iso: Fix console for vfkit/krunkit (#20832) + +## Addons +* Addon nvidia-device-plugin: Update nvidia/k8s-device-plugin image from v0.17.2 to v0.17.3 (#21225) +* Addon cloud-spanner: Update cloud-spanner-emulator/emulator image from 1.5.34 to 1.5.41 (#20976)(#21040)(#21243)(#21287)(#21359)(#21512) +* Addon Headlamp: Update Headlamp image from v0.28.0 to v0.34.0 (#21238)(#21508) +* Addon ingress: Update ingress-nginx/controller image from v1.12.2 to v1.13.2 (#20909)(#21232)(#21353)(#21458) +* Addon inspektor-gadget: Update inspektor-gadget image from v0.40.0 to v0.44.1 (#20873)(#21038)(#21240)(#21462)(#21510)(#21358) +* Addon kong: Update kong image from 3.9.0 to 3.9.1 (#20966)(#21503) +* Addon kong: Update kong/kubernetes-ingress-controller image from 3.4.5 to 3.5.1 (#20908)(#20969)(#21034)(#21282) +* Addon kubevirt: Update bitnami/kubectl image from 1.33.1 to 1.33.4 (#20911)(#20939)(#21235)(#21283)(#21414) +* Addon metrics-server: Update metrics-server/metrics-server image from v0.7.2 to v0.8.0 (#21033) +* Addon registry: Update registry image from 3.0.0 to 3.0.0 (#21242) +* Addon Volcano: Update volcano images from v1.11.2 to v1.12.2 (#20868)(#21351) +* Addon kubetail: update version 0.13.3 (#21244) +* HA (multi-control plane): Update kube-vip from v0.9.1 to v1.0.0 (#20999)(#21228) + +## CNI versions +* CNI: Update calico from v3.30.0 to v3.30.3 (#20871)(#20971)(#21416) +* CNI: Update cilium from v1.17.4 to v1.18.1 (#20968)(#21226)(#21349) +* CNI: Update flannel from v0.26.7 to v0.27.0 (#20907)(#21230)(#21504) + +## Base image versions +* iso: Update to longterm kernel to 6.6.95 (#20995) +* iso: Enable VirtioFS for x86_64 and aarch64 (#21147) +* iso: Improve build and clean up configuration (#20991) +* Kicbase/ISO: Update cni-plugins from v1.7.1 to v1.8.0 (#21517) +* Kicbase/ISO: Update crun from 1.19 to 1.23.1 (#21198)(#21330) +* Kicbase/ISO: Update docker from 28.0.4 to 28.4.0 (#21053)(#21248)(#21488) +* Kicbase: Bump ubuntu:jammy from 20250415.1 to 20250819 (#21233)(#21413)(#21505) + +## UI +* redo "minikube profile list" to move the verbose details into a --det… (#20544) +* improve config flag long description (#21515) +* Refactor spinner library & hide sub steps after spinning (#21215) +* do not show "create github issue" twice if kubeadm init fails (#21263) +* Refactor table rendering (#20893) + +## UI/Translations +* Add Greak Translation +* Add more Korean translations (#21467)(#21465) +* Add more French translation (#21050)(#20862)(#20945)(#20964)(#21156)(#21372)(#21514) + + +Thank you to our contributors for this release! + +- Aaron Nall +- Andres Morey +- ByoungUk Lee +- Chemabj +- Cosmic Oppai +- Divy Singhvi +- gopherorg +- Imran Pochi +- James World +- Jeff MAURY +- Joaquim Rocha +- Jun Sugimoto +- Kartik Joshi +- Kaviraj Sankameeswaran +- Kay Yan +- Kubernetes Prow Robot +- Laxman Gupta +- Lefteris T. +- Medya Ghazizadeh +- Nir Soffer +- Predrag Rogic +- Shin Jihoon +- Shin_Jihoon +- Steven Powell +- Tian +- VerlorenerReisender +- Victor Ubahakwe + +Thank you to our PR reviewers for this release! + +- medyagh (145 comments) +- nirs (102 comments) +- afbjorklund (18 comments) +- prezha (11 comments) +- Copilot (5 comments) +- bobsira (4 comments) +- cfergeau (2 comments) +- gabrielgbs97 (2 comments) +- aronahl (1 comments) +- ComradeProgrammer (1 comments) +- illume (1 comments) +- rata (1 comments) +- wt (1 comments) + +Thank you to our triage members for this release! + +- afbjorklund (37 comments) +- nirs (21 comments) +- divysinghvi (10 comments) +- LJTian (9 comments) +- medyagh (8 comments) + + +## Version 1.36.0 - 2025-05-22 + +Features +* Support Kubernetes version v1.33.1 [#20784](https://github.com/kubernetes/minikube/pull/20784) +* New flag "-f" to allow passing a config file for addon configure command. [#20255](https://github.com/kubernetes/minikube/pull/20255) +* vfkit: bump to Preferred driver on macOs [#20808](https://github.com/kubernetes/minikube/pull/20808) +* vfkit: new network option "--network vment-shared' for vfkit driver [#20501](https://github.com/kubernetes/minikube/pull/20501) + +Bug Fixes: +* fix bootpd check on macOS >= 15 [#20400](https://github.com/kubernetes/minikube/pull/20400) +* fix bug in parsing proxies with dashes [#20648](https://github.com/kubernetes/minikube/pull/20648) +* fix waiting for all pods having specified labels to be Ready [#20315](https://github.com/kubernetes/minikube/pull/20315) +* fix: incorrect finalImg affecting downloading kic form github assets [#20316](https://github.com/kubernetes/minikube/pull/20316) +* fix: reference missing files in schema (Closes #20752) [#20761](https://github.com/kubernetes/minikube/pull/20761) +Improvements: +* Additional checks for 9p support [#20288](https://github.com/kubernetes/minikube/pull/20288) +* vfkit: Graceful shutdown on stop [#20504](https://github.com/kubernetes/minikube/pull/20504) +* vfkit: More robust state management [#20506](https://github.com/kubernetes/minikube/pull/20506) +* vfkit vmnet: support running without sudoers configuration [#20719](https://github.com/kubernetes/minikube/pull/20719) +* Revert "fix --wait's failure to work on coredns pods" [#20313](https://github.com/kubernetes/minikube/pull/20313) + +Languages: +* Add Indonesian translation [#20494](https://github.com/kubernetes/minikube/pull/20494) +* Add more french translation [#20361](https://github.com/kubernetes/minikube/pull/20361) +* Add more Korean translations [#20634](https://github.com/kubernetes/minikube/pull/20634) +* Add more Chinese translations [#20543](https://github.com/kubernetes/minikube/pull/20543)[#20543](https://github.com/kubernetes/minikube/pull/20543) +* fixed minor typo in german translation [#20546](https://github.com/kubernetes/minikube/pull/20546) +Version Updates: +* Addon cloud-spanner: Update cloud-spanner-emulator/emulator image from 1.5.28 to 1.5.34 [#20451](https://github.com/kubernetes/minikube/pull/20451) [#20539](https://github.com/kubernetes/minikube/pull/20539) [#20602](https://github.com/kubernetes/minikube/pull/20602)[#20623](https://github.com/kubernetes/minikube/pull/20623) [#20670](https://github.com/kubernetes/minikube/pull/20670) [#20704](https://github.com/kubernetes/minikube/pull/20704)[#20795](https://github.com/kubernetes/minikube/pull/20795) +* Addon headlamp: Update headlamp-k8s/headlamp image from v0.26.0 to v0.28.0 [#20311](https://github.com/kubernetes/minikube/pull/20311) +* Addon ingress: Update ingress-nginx/controller image from v1.11.3 to v1.12.2 [#20789](https://github.com/kubernetes/minikube/pull/20789) +* Addon inspektor-gadget: Update inspektor-gadget image from v0.36.0 to v0.40.0 [#20325](https://github.com/kubernetes/minikube/pull/20325)[#20354](https://github.com/kubernetes/minikube/pull/20354)[#20512](https://github.com/kubernetes/minikube/pull/20512) [#20736](https://github.com/kubernetes/minikube/pull/20736) +* Addon kong: Update kong image from 3.8.0 to 3.9.0 [#20151](https://github.com/kubernetes/minikube/pull/20151)[#20384](https://github.com/kubernetes/minikube/pull/20384) [#20728](https://github.com/kubernetes/minikube/pull/20728) +* Addon kong: Update kong/kubernetes-ingress-controller image from 3.3.1 to 3.4.5 [#20319](https://github.com/kubernetes/minikube/pull/20319)[#20446](https://github.com/kubernetes/minikube/pull/20446)[#20788](https://github.com/kubernetes/minikube/pull/20788) +* Addon kubevirt: Update bitnami/kubectl image from 1.31.3 to 1.33.1 [#20321](https://github.com/kubernetes/minikube/pull/20321)[#20349](https://github.com/kubernetes/minikube/pull/20349)[#20665](https://github.com/kubernetes/minikube/pull/20665)[#20731](https://github.com/kubernetes/minikube/pull/20731)[#20790](https://github.com/kubernetes/minikube/pull/20790) +* Addon nvidia-device-plugin: Update nvidia/k8s-device-plugin image from v0.17.0 to v0.17.2 [#20786](https://github.com/kubernetes/minikube/pull/20786)[#20534](https://github.com/kubernetes/minikube/pull/20534) +* Addon registry: Update kube-registry-proxy image from 0.0.8 to 0.0.9 [#20717](https://github.com/kubernetes/minikube/pull/20717) +* Addon registry: Update registry image from 2.8.3 to 3.0.0 [#20242](https://github.com/kubernetes/minikube/pull/20242) [#20425](https://github.com/kubernetes/minikube/pull/20425) +* Addon Volcano: Update volcano images from v1.10.0 to v1.11.2 [#20318](https://github.com/kubernetes/minikube/pull/20318)[#20616](https://github.com/kubernetes/minikube/pull/20616)[#20697](https://github.com/kubernetes/minikube/pull/20697) +* CNI: Update cilium from v1.17.0 to v3.30.0 [#20419](https://github.com/kubernetes/minikube/pull/20419) [#20390](https://github.com/kubernetes/minikube/pull/20390) [#20584](https://github.com/kubernetes/minikube/pull/20584) [#20734](https://github.com/kubernetes/minikube/pull/20734) [#20317](https://github.com/kubernetes/minikube/pull/20317)[#20383](https://github.com/kubernetes/minikube/pull/20383)[#20535](https://github.com/kubernetes/minikube/pull/20535) [#20637](https://github.com/kubernetes/minikube/pull/20637) [#20787](https://github.com/kubernetes/minikube/pull/20787) +* CNI: Update flannel from v0.26.2 to v0.26.7 [#20385](https://github.com/kubernetes/minikube/pull/20385)[#20617](https://github.com/kubernetes/minikube/pull/20617) [#20639](https://github.com/kubernetes/minikube/pull/20639) +* CNI: Update kindnetd from v20241108-5c6d2daf to v20250512-df8de77b [#20327](https://github.com/kubernetes/minikube/pull/20327)[#20427](https://github.com/kubernetes/minikube/pull/20427) [#20797](https://github.com/kubernetes/minikube/pull/20797) +* HA (multi-control plane): Update kube-vip from v0.8.10 to v0.9.1 [#20638](https://github.com/kubernetes/minikube/pull/20638)[#20238](https://github.com/kubernetes/minikube/pull/20238)[#20598](https://github.com/kubernetes/minikube/pull/20598) [#20699](https://github.com/kubernetes/minikube/pull/20699) +* Kicbase: Bump ubuntu:jammy from 20240911.1 to 20250126 [#20387](https://github.com/kubernetes/minikube/pull/20387)[#20718](https://github.com/kubernetes/minikube/pull/20718) +* Kicbase/ISO: Update buildroot from 2023.02.9 to 2025.2 [#20720](https://github.com/kubernetes/minikube/pull/20720) +* Kicbase/ISO: Update cni-plugins from v1.6.2 to v1.7.1 [#20771](https://github.com/kubernetes/minikube/pull/20771) +* Kicbase/ISO: Update cri-dockerd from v0.3.15 to v0.4.0 [#20747](https://github.com/kubernetes/minikube/pull/20747) +* Kicbase/ISO: Update docker from 27.4.0 to 28.0.4 [#20436](https://github.com/kubernetes/minikube/pull/20436) [#20523](https://github.com/kubernetes/minikube/pull/20523)[#20591](https://github.com/kubernetes/minikube/pull/20591) +* Kicbase/ISO: Update runc from v1.2.3 to v1.3.0[#20433](https://github.com/kubernetes/minikube/pull/20433)[#20604](https://github.com/kubernetes/minikube/pull/20604) [#20764](https://github.com/kubernetes/minikube/pull/20764) + +For a more detailed changelog, including changes occurring in pre-release versions, see [CHANGELOG.md](https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md). + +Thank you to our contributors for this release! + +- 錦南路之花 +- Aaina Lohia +- Anthony Holloman +- cdw8431 +- Cosmic Oppai +- Daniel Pepuho +- Jeff MAURY +- joaquimrocha +- Kubernetes Prow Robot +- Lan Liang +- luchenhan +- Medya Ghazizadeh +- minikube-bot +- Nir Soffer +- Predrag Rogic +- Sri Panyam +- Sylvester Carolan +- Tian +- VerlorenerReisender +- Victor Ubahakwe +- zvdy + +Thank you to our PR reviewers for this release! + +- medyagh (64 comments) +- nirs (23 comments) +- cfergeau (12 comments) +- prezha (8 comments) +- afbjorklund (1 comments) + +Thank you to our triage members for this release! + +- Ritikaa96 (54 comments) +- Ruchi1499 (43 comments) +- dhairya-seth (31 comments) +- afbjorklund (14 comments) +- medyagh (13 comments) + +Check out our [contributions leaderboard](https://minikube.sigs.k8s.io/docs/contrib/leaderboard/v1.36.0/) for this release! + + +## Version 1.35.0 - 2025-01-15 + +Features: +* Add support for AMD GPUs via --gpus=amd [#19749](https://github.com/kubernetes/minikube/pull/19749) +* Use Github Assets as New fail over for kic base image [#19464](https://github.com/kubernetes/minikube/pull/19464) +* Support latest Kubernetes v1.32.0 [#20091](https://github.com/kubernetes/minikube/pull/20091) +* Adds support for kubeadm.k8s.io/v1beta4 (available since k8s v1.31) [#19790](https://github.com/kubernetes/minikube/pull/19790) + +Improvements: +* Merge nvidia-gpu-device-plugin and nvidia-device-plugin. [#19545](https://github.com/kubernetes/minikube/pull/19545) +* kicbase: Update nvidia packages [#19738](https://github.com/kubernetes/minikube/pull/19738) +* cilium: remove appArmorProfile for k8s "x.y". kube-cross and golang.org/dl use different formats for x.y.0 go versions -KVM_GO_VERSION ?= $(GO_VERSION:.0=) - +# used by hack/jenkins/release_build_and_upload.sh, see also BUILD_IMAGE below +# update this only by running `make update-golang-version` +GO_VERSION ?= 1.25.5 +# set GOTOOLCHAIN to GO_VERSION to override any toolchain version specified in +# go.mod (ref: https://go.dev/doc/toolchain#GOTOOLCHAIN) +export GOTOOLCHAIN := go$(GO_VERSION) +# update this only by running `make update-golang-version` +GO_K8S_VERSION_PREFIX ?= v1.35.0 INSTALL_SIZE ?= $(shell du out/minikube-windows-amd64.exe | cut -f1) -BUILDROOT_BRANCH ?= 2020.02.12 +BUILDROOT_BRANCH ?= 2025.02 +GOLANG_OPTIONS = GOWORK=off GO_VERSION=$(GO_VERSION) GO_HASH_FILE=$(PWD)/deploy/iso/minikube-iso/go.hash +BUILDROOT_OPTIONS = BR2_EXTERNAL=../../deploy/iso/minikube-iso $(GOLANG_OPTIONS) REGISTRY ?= gcr.io/k8s-minikube # Get git commit id COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true) COMMIT ?= $(if $(shell git status --porcelain --untracked-files=no),"${COMMIT_NO}-dirty","${COMMIT_NO}") COMMIT_SHORT = $(shell git rev-parse --short HEAD 2> /dev/null || true) -HYPERKIT_BUILD_IMAGE ?= neilotoole/xcgo:go1.15 +COMMIT_NOQUOTES := $(patsubst "%",%,$(COMMIT)) # NOTE: "latest" as of 2021-02-06. kube-cross images aren't updated as often as Kubernetes # https://github.com/kubernetes/kubernetes/blob/master/build/build-image/cross/VERSION # -BUILD_IMAGE ?= us.gcr.io/k8s-artifacts-prod/build-image/kube-cross:v$(GO_VERSION)-1 -ISO_BUILD_IMAGE ?= $(REGISTRY)/buildroot-image +BUILD_IMAGE ?= registry.k8s.io/build-image/kube-cross:$(GO_K8S_VERSION_PREFIX)-go$(GO_VERSION)-bullseye.0 -KVM_BUILD_IMAGE_AMD64 ?= $(REGISTRY)/kvm-build-image_amd64:$(KVM_GO_VERSION) -KVM_BUILD_IMAGE_ARM64 ?= $(REGISTRY)/kvm-build-image_arm64:$(KVM_GO_VERSION) +ISO_BUILD_IMAGE ?= $(REGISTRY)/buildroot-image ISO_BUCKET ?= minikube/iso @@ -65,18 +69,22 @@ MINIKUBE_BUCKET ?= minikube/releases MINIKUBE_UPLOAD_LOCATION := gs://${MINIKUBE_BUCKET} MINIKUBE_RELEASES_URL=https://github.com/kubernetes/minikube/releases/download -KERNEL_VERSION ?= 4.19.182 # latest from https://github.com/golangci/golangci-lint/releases -GOLINT_VERSION ?= v1.39.0 +# update this only by running `make update-golint-version` +GOLINT_VERSION ?= v2.7.2 +# see https://golangci-lint.run/docs/configuration/file/ for config details +GOLINT_CONFIG ?= .golangci.min.yaml +# Set this to --verbose to see details about the linters and formatters used +GOLINT_VERBOSE ?= # Limit number of default jobs, to avoid the CI builds running out of memory GOLINT_JOBS ?= 4 # see https://github.com/golangci/golangci-lint#memory-usage-of-golangci-lint GOLINT_GOGC ?= 100 # options for lint (golangci-lint) -GOLINT_OPTIONS = --timeout 7m \ +GOLINT_OPTIONS = \ + --max-issues-per-linter 0 --max-same-issues 0 \ --build-tags "${MINIKUBE_INTEGRATION_BUILD_TAGS}" \ - --enable gofmt,goimports,gocritic,golint,gocyclo,misspell,nakedret,stylecheck,unconvert,unparam,dogsled \ - --exclude 'variable on range scope.*in function literal|ifElseChain' + --config $(GOLINT_CONFIG) $(GOLINT_VERBOSE) export GO111MODULE := on @@ -84,25 +92,31 @@ GOOS ?= $(shell go env GOOS) GOARCH ?= $(shell go env GOARCH) GOARM ?= 7 # the default is 5 GOPATH ?= $(shell go env GOPATH) -BUILD_DIR ?= ./out +BUILD_DIR ?= $(PWD)/out $(shell mkdir -p $(BUILD_DIR)) CURRENT_GIT_BRANCH ?= $(shell git branch | grep \* | cut -d ' ' -f2) # Use system python if it exists, otherwise use Docker. -PYTHON := $(shell command -v python || echo "docker run --rm -it -v $(shell pwd):/minikube -w /minikube python python") +PYTHON := $(shell command -v python || echo "docker run --rm -it -v $(shell pwd):/minikube:Z -w /minikube python python") BUILD_OS := $(shell uname -s) SHA512SUM=$(shell command -v sha512sum || echo "shasum -a 512") +# check which "flavor" of SED is being used as the flags are different between BSD and GNU sed. +# BSD sed does not support "--version" +SED_VERSION := $(shell sed --version 2>/dev/null | head -n 1 | cut -d' ' -f4) +ifeq ($(SED_VERSION),) + SED = sed -i '' +else + SED = sed -i +endif + # gvisor tag to automatically push changes to # to update minikubes default, update deploy/addons/gvisor -GVISOR_TAG ?= latest +GVISOR_TAG ?= v0.0.2 # auto-pause-hook tag to push changes to -AUTOPAUSE_HOOK_TAG ?= v0.0.2 - -# prow-test tag to push changes to -PROW_TEST_TAG ?= v0.0.1 +AUTOPAUSE_HOOK_TAG ?= v0.0.5 # storage provisioner tag to push changes to # NOTE: you will need to bump the PreloadVersion if you change this @@ -116,7 +130,6 @@ MINIKUBE_LDFLAGS := -X k8s.io/minikube/pkg/version.version=$(VERSION) -X k8s.io/ PROVISIONER_LDFLAGS := "-X k8s.io/minikube/pkg/storage.version=$(STORAGE_PROVISIONER_TAG) -s -w -extldflags '-static'" MINIKUBEFILES := ./cmd/minikube/ -HYPERKIT_FILES := ./cmd/drivers/hyperkit STORAGE_PROVISIONER_FILES := ./cmd/storage-provisioner KVM_DRIVER_FILES := ./cmd/drivers/kvm/ @@ -128,7 +141,11 @@ MARKDOWNLINT ?= markdownlint MINIKUBE_MARKDOWN_FILES := README.md CONTRIBUTING.md CHANGELOG.md -MINIKUBE_BUILD_TAGS := +# The `libvirt_dlopen` build tag is used only linux to avoid linking with +# libvirt shared library. This is not documnted but can be found in the source. +# https://gitlab.com/libvirt/libvirt-go-module/-/blob/f7cdeba9979dd248582901d2aaf7ab1f2d27cbe0/domain.go#L30 +MINIKUBE_BUILD_TAGS := libvirt_dlopen + MINIKUBE_INTEGRATION_BUILD_TAGS := integration $(MINIKUBE_BUILD_TAGS) CMD_SOURCE_DIRS = cmd pkg deploy/addons translations @@ -141,15 +158,12 @@ ADDON_FILES = $(shell find "deploy/addons" -type f | grep -v "\.go") TRANSLATION_FILES = $(shell find "translations" -type f | grep -v "\.go") ASSET_FILES = $(ADDON_FILES) $(TRANSLATION_FILES) -# kvm2 ldflags -KVM2_LDFLAGS := -X k8s.io/minikube/pkg/drivers/kvm.version=$(VERSION) -X k8s.io/minikube/pkg/drivers/kvm.gitCommitID=$(COMMIT) - -# hyperkit ldflags -HYPERKIT_LDFLAGS := -X k8s.io/minikube/pkg/drivers/hyperkit.version=$(VERSION) -X k8s.io/minikube/pkg/drivers/hyperkit.gitCommitID=$(COMMIT) - # autopush artefacts AUTOPUSH ?= +# version file json +VERSION_JSON := "{\"iso_version\": \"$(ISO_VERSION)\", \"kicbase_version\": \"$(KIC_VERSION)\", \"minikube_version\": \"$(VERSION)\", \"commit\": \"$(COMMIT_NOQUOTES)\"}" + # don't ask for user confirmation IN_CI := false @@ -163,7 +177,7 @@ endef # $(call DOCKER, image, command) define DOCKER - docker run --rm -e GOCACHE=/app/.cache -e IN_DOCKER=1 --user $(shell id -u):$(shell id -g) -w /app -v $(PWD):/app -v $(GOPATH):/go --init $(1) /bin/bash -c '$(2)' + docker run --rm -e GOCACHE=/app/.cache -e GOPATH=/go -e GOMODCACHE=/app/.modcache -e IN_DOCKER=1 --user $(shell id -u):$(shell id -g) -w /app -v $(PWD):/app:Z -v $(GOPATH):/go:Z --init $(1) /bin/bash -c '$(2)' endef ifeq ($(BUILD_IN_DOCKER),y) @@ -260,7 +274,7 @@ out/minikube-linux-armv6: $(SOURCE_FILES) $(ASSET_FILES) $(Q)GOOS=linux GOARCH=arm GOARM=6 \ go build -tags "$(MINIKUBE_BUILD_TAGS)" -ldflags="$(MINIKUBE_LDFLAGS)" -a -o $@ k8s.io/minikube/cmd/minikube -.PHONY: e2e-linux-amd64 e2e-linux-arm64 e2e-darwin-amd64 e2e-windows-amd64.exe +.PHONY: e2e-linux-amd64 e2e-linux-arm64 e2e-darwin-amd64 e2e-darwin-arm64 e2e-windows-amd64.exe e2e-linux-amd64: out/e2e-linux-amd64 ## build end2end binary for Linux x86 64bit e2e-linux-arm64: out/e2e-linux-arm64 ## build end2end binary for Linux ARM 64bit e2e-darwin-amd64: out/e2e-darwin-amd64 ## build end2end binary for Darwin x86 64bit @@ -273,69 +287,67 @@ out/e2e-%: out/minikube-% out/e2e-windows-amd64.exe: out/e2e-windows-amd64 cp $< $@ -minikube_iso: deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/bin/auto-pause # build minikube iso - echo $(ISO_VERSION) > deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/VERSION +minikube-iso-amd64: minikube-iso-x86_64 +minikube-iso-arm64: minikube-iso-aarch64 + +minikube-iso-%: iso-prepare-% deploy/iso/minikube-iso/board/minikube/%/rootfs-overlay/usr/bin/auto-pause # build minikube iso + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) O=$(BUILD_DIR)/buildroot/output-$* + # x86_64 ISO is still BIOS rather than EFI because of AppArmor issues for KVM, and Gen 2 issues for Hyper-V + if [ "$*" = "aarch64" ]; then \ + mv $(BUILD_DIR)/buildroot/output-aarch64/images/boot.iso $(BUILD_DIR)/minikube-arm64.iso; \ + else \ + mv $(BUILD_DIR)/buildroot/output-x86_64/images/rootfs.iso9660 $(BUILD_DIR)/minikube-amd64.iso; \ + fi; + +.PHONY: iso-prepare-% +iso-prepare-%: buildroot + echo $(VERSION_JSON) > deploy/iso/minikube-iso/board/minikube/$*/rootfs-overlay/version.json + echo $(ISO_VERSION) > deploy/iso/minikube-iso/board/minikube/$*/rootfs-overlay/etc/VERSION + cp deploy/iso/minikube-iso/arch/$*/Config.in.tmpl deploy/iso/minikube-iso/Config.in + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) O=$(BUILD_DIR)/buildroot/output-$* minikube_$*_defconfig + +.PHONY: buildroot +buildroot: if [ ! -d $(BUILD_DIR)/buildroot ]; then \ mkdir -p $(BUILD_DIR); \ git clone --depth=1 --branch=$(BUILDROOT_BRANCH) https://github.com/buildroot/buildroot $(BUILD_DIR)/buildroot; \ + perl -pi -e 's@\s+source "package/sysdig/Config\.in"\n@@;' $(BUILD_DIR)/buildroot/package/Config.in; \ + rm -r $(BUILD_DIR)/buildroot/package/sysdig; \ + cp deploy/iso/minikube-iso/go.hash $(BUILD_DIR)/buildroot/package/go/go.hash; \ fi; - $(MAKE) BR2_EXTERNAL=../../deploy/iso/minikube-iso minikube_defconfig -C $(BUILD_DIR)/buildroot - mkdir -p $(BUILD_DIR)/buildroot/output/build - echo "module buildroot.org/go" > $(BUILD_DIR)/buildroot/output/build/go.mod - $(MAKE) -C $(BUILD_DIR)/buildroot host-python - $(MAKE) -C $(BUILD_DIR)/buildroot - mv $(BUILD_DIR)/buildroot/output/images/rootfs.iso9660 $(BUILD_DIR)/minikube.iso # Change buildroot configuration for the minikube ISO .PHONY: iso-menuconfig -iso-menuconfig: ## Configure buildroot configuration - $(MAKE) -C $(BUILD_DIR)/buildroot menuconfig - $(MAKE) -C $(BUILD_DIR)/buildroot savedefconfig +iso-menuconfig-%: iso-prepare-% ## Configure buildroot configuration + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) O=$(BUILD_DIR)/buildroot/output-$* menuconfig + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) O=$(BUILD_DIR)/buildroot/output-$* savedefconfig # Change the kernel configuration for the minikube ISO -.PHONY: linux-menuconfig -linux-menuconfig: ## Configure Linux kernel configuration - $(MAKE) -C $(BUILD_DIR)/buildroot/output/build/linux-$(KERNEL_VERSION)/ menuconfig - $(MAKE) -C $(BUILD_DIR)/buildroot/output/build/linux-$(KERNEL_VERSION)/ savedefconfig - cp $(BUILD_DIR)/buildroot/output/build/linux-$(KERNEL_VERSION)/defconfig deploy/iso/minikube-iso/board/coreos/minikube/linux_defconfig +linux-menuconfig-%: iso-prepare-% ## Configure Linux kernel configuration + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) O=$(BUILD_DIR)/buildroot/output-$* linux-menuconfig + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) O=$(BUILD_DIR)/buildroot/output-$* linux-savedefconfig + $(MAKE) -C $(BUILD_DIR)/buildroot $(BUILDROOT_OPTIONS) O=$(BUILD_DIR)/buildroot/output-$* linux-update-defconfig -out/minikube.iso: $(shell find "deploy/iso/minikube-iso" -type f) +out/minikube-%.iso: $(shell find "deploy/iso/minikube-iso" -type f) ifeq ($(IN_DOCKER),1) - $(MAKE) minikube_iso + $(MAKE) minikube-iso-$* else - docker run --rm --workdir /mnt --volume $(CURDIR):/mnt $(ISO_DOCKER_EXTRA_ARGS) \ + docker run --rm --workdir /mnt --volume $(CURDIR):/mnt:Z $(ISO_DOCKER_EXTRA_ARGS) \ --user $(shell id -u):$(shell id -g) --env HOME=/tmp --env IN_DOCKER=1 \ - $(ISO_BUILD_IMAGE) /usr/bin/make out/minikube.iso + $(ISO_BUILD_IMAGE) /bin/bash -lc '/usr/bin/make minikube-iso-$*' endif iso_in_docker: - docker run -it --rm --workdir /mnt --volume $(CURDIR):/mnt $(ISO_DOCKER_EXTRA_ARGS) \ + docker run -it --rm --workdir /mnt --volume $(CURDIR):/mnt:Z $(ISO_DOCKER_EXTRA_ARGS) \ --user $(shell id -u):$(shell id -g) --env HOME=/tmp --env IN_DOCKER=1 \ $(ISO_BUILD_IMAGE) /bin/bash -test-iso: - go test -v $(INTEGRATION_TESTS_TO_RUN) --tags=iso --minikube-start-args="--iso-url=file://$(shell pwd)/out/buildroot/output/images/rootfs.iso9660" - .PHONY: test-pkg test-pkg/%: ## Trigger packaging test go test -v -test.timeout=60m ./$* --tags="$(MINIKUBE_BUILD_TAGS)" .PHONY: all -all: cross drivers e2e-cross cross-tars exotic retro out/gvisor-addon ## Build all different minikube components - -.PHONY: drivers -drivers: ## Build Hyperkit and KVM2 drivers -drivers: docker-machine-driver-hyperkit \ - docker-machine-driver-kvm2 \ - out/docker-machine-driver-kvm2-amd64 \ - out/docker-machine-driver-kvm2-arm64 - - -.PHONY: docker-machine-driver-hyperkit -docker-machine-driver-hyperkit: out/docker-machine-driver-hyperkit ## Build Hyperkit driver - -.PHONY: docker-machine-driver-kvm2 -docker-machine-driver-kvm2: out/docker-machine-driver-kvm2 ## Build KVM2 driver +all: cross e2e-cross cross-tars exotic retro out/gvisor-addon ## Build all different minikube components .PHONY: integration integration: out/minikube$(IS_EXE) ## Trigger minikube integration test, logs to ./out/testout_COMMIT.txt @@ -343,7 +355,7 @@ integration: out/minikube$(IS_EXE) ## Trigger minikube integration test, logs to .PHONY: integration-none-driver integration-none-driver: e2e-linux-$(GOARCH) out/minikube-linux-$(GOARCH) ## Trigger minikube none driver test, logs to ./out/testout_COMMIT.txt - sudo -E out/e2e-linux-$(GOARCH) -testdata-dir "test/integration/testdata" -minikube-start-args="--driver=none" -test.v -test.timeout=60m -binary=out/minikube-linux-amd64 $(TEST_ARGS) 2>&1 | tee "./out/testout_$(COMMIT_SHORT).txt" + out/e2e-linux-$(GOARCH) -testdata-dir "test/integration/testdata" -minikube-start-args="--driver=none" -test.v -test.timeout=60m -binary=out/minikube-linux-amd64 $(TEST_ARGS) 2>&1 | tee "./out/testout_$(COMMIT_SHORT).txt" .PHONY: integration-versioned integration-versioned: out/minikube ## Trigger minikube integration testing, logs to ./out/testout_COMMIT.txt @@ -359,6 +371,11 @@ integration-functional-only: out/minikube$(IS_EXE) ## Trigger only functioanl te .PHONY: html_report html_report: ## Generate HTML report out of the last ran integration test logs. @go tool test2json -t < "./out/testout_$(COMMIT_SHORT).txt" > "./out/testout_$(COMMIT_SHORT).json" + # install gopogh if not already installed + @if ! command -v gopogh >/dev/null 2>&1; then \ + echo "gopogh not found, installing..."; \ + GOBIN=$(shell go env GOPATH)/bin go install github.com/medyagh/gopogh/cmd/gopogh@v0.29.0; \ + fi @gopogh -in "./out/testout_$(COMMIT_SHORT).json" -out ./out/testout_$(COMMIT_SHORT).html -name "$(shell git rev-parse --abbrev-ref HEAD)" -pr "" -repo github.com/kubernetes/minikube/ -details "${COMMIT_SHORT}" @echo "-------------------------- Open HTML Report in Browser: ---------------------------" ifeq ($(GOOS),windows) @@ -391,7 +408,7 @@ out/unittest.json: $(SOURCE_FILES) $(GOTEST_FILES) -coverprofile=out/coverage.out -json > out/unittest.json out/coverage.out: out/unittest.json -# Generate go test report (from gotest) as a a HTML page +# Generate go test report (from gotest) as a HTML page out/unittest.html: out/unittest.json $(if $(quiet),@echo " REPORT $@") $(Q)go-test-report < $< -o $@ @@ -401,7 +418,7 @@ out/coverage.html: out/coverage.out $(if $(quiet),@echo " COVER $@") $(Q)go tool cover -html=$< -o $@ -.PHONY: extract +.PHONY: extract extract: ## extract internationalization words for translations go run cmd/extract/extract.go @@ -424,15 +441,13 @@ darwin: minikube-darwin-amd64 ## Build minikube for Darwin 64bit linux: minikube-linux-amd64 ## Build minikube for Linux 64bit .PHONY: e2e-cross -e2e-cross: e2e-linux-amd64 e2e-linux-arm64 e2e-darwin-amd64 e2e-windows-amd64.exe ## End-to-end cross test +e2e-cross: e2e-linux-amd64 e2e-linux-arm64 e2e-darwin-amd64 e2e-darwin-arm64 e2e-windows-amd64.exe ## End-to-end cross test .PHONY: checksum checksum: ## Generate checksums - for f in out/minikube.iso out/minikube-linux-amd64 out/minikube-linux-arm \ + for f in out/minikube-amd64.iso out/minikube-arm64.iso out/minikube-linux-amd64 out/minikube-linux-arm \ out/minikube-linux-arm64 out/minikube-linux-ppc64le out/minikube-linux-s390x \ - out/minikube-darwin-amd64 out/minikube-windows-amd64.exe \ - out/docker-machine-driver-kvm2 out/docker-machine-driver-kvm2-amd64 out/docker-machine-driver-kvm2-arm64 \ - out/docker-machine-driver-hyperkit; do \ + out/minikube-darwin-amd64 out/minikube-darwin-arm64 out/minikube-windows-amd64.exe; do \ if [ -f "$${f}" ]; then \ openssl sha256 "$${f}" | awk '{print $$2}' > "$${f}.sha256" ; \ fi ; \ @@ -445,6 +460,7 @@ clean: ## Clean build rm -f pkg/minikube/translate/translations.go rm -rf ./vendor rm -rf /tmp/tmp.*.minikube_* + rm -rf test/integration/licenses .PHONY: gendocs gendocs: out/docs/minikube.md ## Generate documentation @@ -488,13 +504,17 @@ out/linters/golangci-lint-$(GOLINT_VERSION): .PHONY: lint ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) lint: - docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:$(GOLINT_VERSION) \ - golangci-lint run ${GOLINT_OPTIONS} --skip-dirs "cmd/drivers/kvm|cmd/drivers/hyperkit|pkg/drivers/kvm|pkg/drivers/hyperkit" ./... + docker run --rm -v `pwd`:/app:Z -w /app golangci/golangci-lint:$(GOLINT_VERSION) \ + ./out/linters/golangci-lint-$(GOLINT_VERSION) run ${GOLINT_OPTIONS} ./... else lint: out/linters/golangci-lint-$(GOLINT_VERSION) ## Run lint ./out/linters/golangci-lint-$(GOLINT_VERSION) run ${GOLINT_OPTIONS} ./... endif +.PHONY: lint-max +lint-max: out/linters/golangci-lint-$(GOLINT_VERSION) ## Run lint + ./out/linters/golangci-lint-$(GOLINT_VERSION) run ${GOLINT_OPTIONS} --config .golangci.max.yaml ./... + # lint-ci is slower version of lint and is meant to be used in ci (travis) to avoid out of memory leaks. .PHONY: lint-ci lint-ci: out/linters/golangci-lint-$(GOLINT_VERSION) ## Run lint-ci @@ -513,17 +533,15 @@ mdlint: .PHONY: verify-iso verify-iso: # Make sure the current ISO exists in the expected bucket - gsutil stat gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION).iso + gsutil stat gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION)-amd64.iso + gsutil stat gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION)-arm64.iso out/docs/minikube.md: $(shell find "cmd") $(shell find "pkg/minikube/constants") - go run -ldflags="$(MINIKUBE_LDFLAGS)" -tags gendocs hack/help_text/gen_help_text.go + cd hack && go run -ldflags="$(MINIKUBE_LDFLAGS)" -tags gendocs help_text/gen_help_text.go .PHONY: debs ## Build all deb packages debs: out/minikube_$(DEB_VERSION)-$(DEB_REVISION)_amd64.deb \ - out/minikube_$(DEB_VERSION)-$(DEB_REVISION)_arm64.deb \ - out/docker-machine-driver-kvm2_$(DEB_VERSION).deb \ - out/docker-machine-driver-kvm2_$(DEB_VERSION)-$(DEB_REVISION)_amd64.deb \ - out/docker-machine-driver-kvm2_$(DEB_VERSION)-$(DEB_REVISION)_arm64.deb + out/minikube_$(DEB_VERSION)-$(DEB_REVISION)_arm64.deb .PHONY: deb_version deb_version: @@ -543,13 +561,13 @@ out/minikube_$(DEB_VERSION)-$(DEB_REVISION)_%.deb: out/minikube-linux-% sed -E -i 's/--VERSION--/'$(DEB_VERSION)'/g' $(DEB_PACKAGING_DIRECTORY_$*)/DEBIAN/control sed -E -i 's/--REVISION--/'$(DEB_REVISION)'/g' $(DEB_PACKAGING_DIRECTORY_$*)/DEBIAN/control sed -E -i 's/--ARCH--/'$*'/g' $(DEB_PACKAGING_DIRECTORY_$*)/DEBIAN/control - + if [ "$*" = "amd64" ]; then \ sed -E -i 's/--RECOMMENDS--/virtualbox/' $(DEB_PACKAGING_DIRECTORY_$*)/DEBIAN/control; \ else \ sed -E -i '/Recommends: --RECOMMENDS--/d' $(DEB_PACKAGING_DIRECTORY_$*)/DEBIAN/control; \ fi - + mkdir -p $(DEB_PACKAGING_DIRECTORY_$*)/usr/bin cp $< $(DEB_PACKAGING_DIRECTORY_$*)/usr/bin/minikube fakeroot dpkg-deb --build $(DEB_PACKAGING_DIRECTORY_$*) $@ @@ -587,10 +605,10 @@ out/repodata/repomd.xml: out/minikube-$(RPM_VERSION).rpm -u "$(MINIKUBE_RELEASES_URL)/$(VERSION)/" out .SECONDEXPANSION: -TAR_TARGETS_linux-amd64 := out/minikube-linux-amd64 out/docker-machine-driver-kvm2 -TAR_TARGETS_linux-arm64 := out/minikube-linux-arm64 #out/docker-machine-driver-kvm2 -TAR_TARGETS_darwin-amd64 := out/minikube-darwin-amd64 out/docker-machine-driver-hyperkit -TAR_TARGETS_darwin-arm64 := out/minikube-darwin-arm64 #out/docker-machine-driver-hyperkit +TAR_TARGETS_linux-amd64 := out/minikube-linux-amd64 +TAR_TARGETS_linux-arm64 := out/minikube-linux-arm64 +TAR_TARGETS_darwin-amd64 := out/minikube-darwin-amd64 +TAR_TARGETS_darwin-arm64 := out/minikube-darwin-arm64 TAR_TARGETS_windows-amd64 := out/minikube-windows-amd64.exe out/minikube-%.tar.gz: $$(TAR_TARGETS_$$*) $(if $(quiet),@echo " TAR $@") @@ -614,35 +632,6 @@ out/minikube-installer.exe: out/minikube-windows-amd64.exe mv out/windows_tmp/minikube-installer.exe out/minikube-installer.exe rm -rf out/windows_tmp -out/docker-machine-driver-hyperkit: -ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) - docker run --rm -e GOCACHE=/app/.cache -e IN_DOCKER=1 \ - --user $(shell id -u):$(shell id -g) -w /app \ - -v $(PWD):/app -v $(GOPATH):/go --init --entrypoint "" \ - $(HYPERKIT_BUILD_IMAGE) /bin/bash -c 'CC=o64-clang CXX=o64-clang++ /usr/bin/make $@' -else - $(if $(quiet),@echo " GO $@") - $(Q)GOOS=darwin CGO_ENABLED=1 go build \ - -ldflags="$(HYPERKIT_LDFLAGS)" \ - -o $@ k8s.io/minikube/cmd/drivers/hyperkit -endif - -hyperkit_in_docker: - rm -f out/docker-machine-driver-hyperkit - $(MAKE) MINIKUBE_BUILD_IN_DOCKER=y out/docker-machine-driver-hyperkit - -.PHONY: install-hyperkit-driver -install-hyperkit-driver: out/docker-machine-driver-hyperkit ## Install hyperkit to local machine - mkdir -p $(HOME)/bin - sudo cp out/docker-machine-driver-hyperkit $(HOME)/bin/docker-machine-driver-hyperkit - sudo chown root:wheel $(HOME)/bin/docker-machine-driver-hyperkit - sudo chmod u+s $(HOME)/bin/docker-machine-driver-hyperkit - -.PHONY: release-hyperkit-driver -release-hyperkit-driver: install-hyperkit-driver checksum ## Copy hyperkit using gsutil - gsutil cp $(GOBIN)/docker-machine-driver-hyperkit gs://minikube/drivers/hyperkit/$(VERSION)/ - gsutil cp $(GOBIN)/docker-machine-driver-hyperkit.sha256 gs://minikube/drivers/hyperkit/$(VERSION)/ - .PHONY: check-release check-release: ## Execute go test go test -timeout 42m -v ./deploy/minikube/release_sanity_test.go @@ -673,41 +662,39 @@ storage-provisioner-image-%: out/storage-provisioner-% docker build -t $(REGISTRY)/storage-provisioner-$*:$(STORAGE_PROVISIONER_TAG) -f deploy/storage-provisioner/Dockerfile --build-arg arch=$* . -X_DOCKER_BUILDER ?= minikube-builder -X_BUILD_ENV ?= DOCKER_CLI_EXPERIMENTAL=enabled +.PHONY: docker-multi-arch-build +docker-multi-arch-build: + # installs QEMU static binaries to allow docker multi-arch build, see: https://github.com/docker/setup-qemu-action + docker run --rm --privileged tonistiigi/binfmt:latest --install all -.PHONY: docker-multi-arch-builder -docker-multi-arch-builder: - env $(X_BUILD_ENV) docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - env $(X_BUILD_ENV) docker buildx rm --builder $(X_DOCKER_BUILDER) || true - env $(X_BUILD_ENV) docker buildx create --name $(X_DOCKER_BUILDER) --buildkitd-flags '--debug' || true - -KICBASE_ARCH = linux/arm64,linux/amd64 +KICBASE_ARCH ?= linux/amd64,linux/arm64,linux/s390x,linux/arm,linux/ppc64le KICBASE_IMAGE_GCR ?= $(REGISTRY)/kicbase:$(KIC_VERSION) KICBASE_IMAGE_HUB ?= kicbase/stable:$(KIC_VERSION) KICBASE_IMAGE_REGISTRIES ?= $(KICBASE_IMAGE_GCR) $(KICBASE_IMAGE_HUB) +.PHONY: build-and-upload-cri-dockerd-binaries +build-and-upload-cri-dockerd-binaries: + (cd hack/update/cri_dockerd_version && \ + ./build_and_upload_cri_dockerd_binaries.sh $(KICBASE_ARCH)) + .PHONY: local-kicbase local-kicbase: ## Builds the kicbase image and tags it local/kicbase:latest and local/kicbase:$(KIC_VERSION)-$(COMMIT_SHORT) - docker build -f ./deploy/kicbase/Dockerfile -t local/kicbase:$(KIC_VERSION) --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) --cache-from $(KICBASE_IMAGE_GCR) . + touch deploy/kicbase/CHANGELOG + docker build -f ./deploy/kicbase/Dockerfile -t local/kicbase:$(KIC_VERSION) --build-arg VERSION_JSON=$(VERSION_JSON) --build-arg COMMIT_SHA=${VERSION}-$(COMMIT_NOQUOTES) --cache-from $(KICBASE_IMAGE_GCR) . docker tag local/kicbase:$(KIC_VERSION) local/kicbase:latest docker tag local/kicbase:$(KIC_VERSION) local/kicbase:$(KIC_VERSION)-$(COMMIT_SHORT) -SED = sed -i -ifeq ($(GOOS),darwin) - SED = sed -i '' -endif .PHONY: local-kicbase-debug local-kicbase-debug: local-kicbase ## Builds a local kicbase image and switches source code to point to it $(SED) 's|Version = .*|Version = \"$(KIC_VERSION)-$(COMMIT_SHORT)\"|;s|baseImageSHA = .*|baseImageSHA = \"\"|;s|gcrRepo = .*|gcrRepo = \"local/kicbase\"|;s|dockerhubRepo = .*|dockerhubRepo = \"local/kicbase\"|' pkg/drivers/kic/types.go .PHONY: build-kic-base-image -build-kic-base-image: docker-multi-arch-builder ## Build multi-arch local/kicbase:latest - env $(X_BUILD_ENV) docker buildx build -f ./deploy/kicbase/Dockerfile --builder $(X_DOCKER_BUILDER) --platform $(KICBASE_ARCH) $(addprefix -t ,$(KICBASE_IMAGE_REGISTRIES)) --load --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) . +build-kic-base-image: docker-multi-arch-build ## Build multi-arch local/kicbase:latest + docker buildx build -f ./deploy/kicbase/Dockerfile --platform $(KICBASE_ARCH) $(addprefix -t ,$(KICBASE_IMAGE_REGISTRIES)) --build-arg VERSION_JSON=$(VERSION_JSON) --build-arg COMMIT_SHA=${VERSION}-$(COMMIT_NOQUOTES) . -.PHONY: push-kic-base-image -push-kic-base-image: docker-multi-arch-builder ## Push multi-arch local/kicbase:latest to all remote registries +.PHONY: push-kic-base-image +push-kic-base-image: docker-multi-arch-build ## Push multi-arch local/kicbase:latest to all remote registries ifdef AUTOPUSH docker login gcr.io/k8s-minikube docker login docker.pkg.github.com @@ -718,18 +705,28 @@ endif ifndef CIBUILD $(call user_confirm, 'Are you sure you want to push $(KICBASE_IMAGE_REGISTRIES) ?') endif - env $(X_BUILD_ENV) docker buildx build -f ./deploy/kicbase/Dockerfile --builder $(X_DOCKER_BUILDER) --platform $(KICBASE_ARCH) $(addprefix -t ,$(KICBASE_IMAGE_REGISTRIES)) --push --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) . + ./deploy/kicbase/build_auto_pause.sh $(KICBASE_ARCH) + docker buildx build -f ./deploy/kicbase/Dockerfile --platform $(KICBASE_ARCH) $(addprefix -t ,$(KICBASE_IMAGE_REGISTRIES)) --push --build-arg VERSION_JSON=$(VERSION_JSON) --build-arg COMMIT_SHA=${VERSION}-$(COMMIT_NOQUOTES) --build-arg PREBUILT_AUTO_PAUSE=true . -out/preload-tool: - go build -ldflags="$(MINIKUBE_LDFLAGS)" -o $@ ./hack/preload-images/*.go +# preload scripts been moved to https://github.com/kubernetes-sigs/minikube-preloads/tree/main/cmd/preload-generator +# in order to be able to publish them as github assets +PRELOAD_GENERATOR_REPO ?= https://github.com/kubernetes-sigs/minikube-preloads.git +PRELOAD_GENERATOR_DIR := $(BUILD_DIR)/preload-generator-src + +$(PRELOAD_GENERATOR_DIR): + rm -rf $(PRELOAD_GENERATOR_DIR) + git clone --depth=1 --branch main $(PRELOAD_GENERATOR_REPO) $(PRELOAD_GENERATOR_DIR) + +out/preload-generator: $(PRELOAD_GENERATOR_DIR) + cd $(PRELOAD_GENERATOR_DIR) && GOWORK=off GOBIN=$(BUILD_DIR) go install -ldflags="$(MINIKUBE_LDFLAGS)" ./cmd/preload-generator .PHONY: upload-preloaded-images-tar -upload-preloaded-images-tar: out/minikube out/preload-tool ## Upload the preloaded images for oldest supported, newest supported, and default kubernetes versions to GCS. - out/preload-tool +upload-preloaded-images-tar: out/minikube out/preload-generator ## Upload the preloaded images for oldest supported, newest supported, and default kubernetes versions to GCS. + out/preload-generator .PHONY: generate-preloaded-images-tar -generate-preloaded-images-tar: out/minikube out/preload-tool ## Generates the preloaded images for oldest supported, newest supported, and default kubernetes versions - out/preload-tool --no-upload +generate-preloaded-images-tar: out/minikube out/preload-generator ## Generates the preloaded images for oldest supported, newest supported, and default kubernetes versions + out/preload-generator --no-upload ALL_ARCH = amd64 arm arm64 ppc64le s390x IMAGE = $(REGISTRY)/storage-provisioner @@ -741,9 +738,9 @@ ifndef CIBUILD docker login gcr.io/k8s-minikube endif set -x; for arch in $(ALL_ARCH); do docker push ${IMAGE}-$${arch}:${TAG}; done - $(X_BUILD_ENV) docker manifest create --amend $(IMAGE):$(TAG) $(shell echo $(ALL_ARCH) | sed -e "s~[^ ]*~$(IMAGE)\-&:$(TAG)~g") - set -x; for arch in $(ALL_ARCH); do $(X_BUILD_ENV) docker manifest annotate --arch $${arch} ${IMAGE}:${TAG} ${IMAGE}-$${arch}:${TAG}; done - $(X_BUILD_ENV) docker manifest push $(STORAGE_PROVISIONER_MANIFEST) + docker manifest create --amend $(IMAGE):$(TAG) $(shell echo $(ALL_ARCH) | sed -e "s~[^ ]*~$(IMAGE)\-&:$(TAG)~g") + set -x; for arch in $(ALL_ARCH); do docker manifest annotate --arch $${arch} ${IMAGE}:${TAG} ${IMAGE}-$${arch}:${TAG}; done + docker manifest push $(STORAGE_PROVISIONER_MANIFEST) .PHONY: push-docker push-docker: # Push docker image base on to IMAGE variable (used internally by other targets) @@ -756,21 +753,25 @@ endif .PHONY: out/gvisor-addon out/gvisor-addon: ## Build gvisor addon $(if $(quiet),@echo " GO $@") - $(Q)GOOS=linux CGO_ENABLED=0 go build -o $@ cmd/gvisor/gvisor.go + $(Q)GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o $@ cmd/gvisor/gvisor.go .PHONY: gvisor-addon-image -gvisor-addon-image: out/gvisor-addon ## Build docker image for gvisor +gvisor-addon-image: docker build -t $(REGISTRY)/gvisor-addon:$(GVISOR_TAG) -f deploy/gvisor/Dockerfile . .PHONY: push-gvisor-addon-image -push-gvisor-addon-image: gvisor-addon-image +push-gvisor-addon-image: docker-multi-arch-build docker login gcr.io/k8s-minikube - $(MAKE) push-docker IMAGE=$(REGISTRY)/gvisor-addon:$(GVISOR_TAG) + docker buildx create --name multiarch --bootstrap + docker buildx build --push --builder multiarch --platform linux/amd64,linux/arm64 -t $(REGISTRY)/gvisor-addon:$(GVISOR_TAG) -t $(REGISTRY)/gvisor-addon:latest -f deploy/gvisor/Dockerfile . + docker buildx rm multiarch .PHONY: release-iso -release-iso: minikube_iso checksum ## Build and release .iso file - gsutil cp out/minikube.iso gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION).iso - gsutil cp out/minikube.iso.sha256 gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION).iso.sha256 +release-iso: minikube-iso-aarch64 minikube-iso-x86_64 checksum ## Build and release .iso files + gsutil cp out/minikube-amd64.iso gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION)-amd64.iso + gsutil cp out/minikube-amd64.iso.sha256 gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION)-amd64.iso.sha256 + gsutil cp out/minikube-arm64.iso gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION)-arm64.iso + gsutil cp out/minikube-arm64.iso.sha256 gs://$(ISO_BUCKET)/minikube-$(ISO_VERSION)-arm64.iso.sha256 .PHONY: release-minikube release-minikube: out/minikube checksum ## Minikube release @@ -785,115 +786,19 @@ release-notes: update-leaderboard: hack/update_contributions.sh -out/docker-machine-driver-kvm2: out/docker-machine-driver-kvm2-amd64 - $(if $(quiet),@echo " CP $@") - $(Q)cp $< $@ - -out/docker-machine-driver-kvm2-x86_64: out/docker-machine-driver-kvm2-amd64 - $(if $(quiet),@echo " CP $@") - $(Q)cp $< $@ - -out/docker-machine-driver-kvm2-aarch64: out/docker-machine-driver-kvm2-arm64 - $(if $(quiet),@echo " CP $@") - $(Q)cp $< $@ - - -out/docker-machine-driver-kvm2_$(DEB_VERSION).deb: out/docker-machine-driver-kvm2_$(DEB_VERSION)-0_amd64.deb - cp $< $@ - -out/docker-machine-driver-kvm2_$(DEB_VERSION)-0_%.deb: out/docker-machine-driver-kvm2-% - cp -r installers/linux/deb/kvm2_deb_template out/docker-machine-driver-kvm2_$(DEB_VERSION) - chmod 0755 out/docker-machine-driver-kvm2_$(DEB_VERSION)/DEBIAN - sed -E -i -e 's/--VERSION--/$(DEB_VERSION)/g' out/docker-machine-driver-kvm2_$(DEB_VERSION)/DEBIAN/control - sed -E -i -e 's/--ARCH--/'$*'/g' out/docker-machine-driver-kvm2_$(DEB_VERSION)/DEBIAN/control - mkdir -p out/docker-machine-driver-kvm2_$(DEB_VERSION)/usr/bin - cp $< out/docker-machine-driver-kvm2_$(DEB_VERSION)/usr/bin/docker-machine-driver-kvm2 - fakeroot dpkg-deb --build out/docker-machine-driver-kvm2_$(DEB_VERSION) $@ - rm -rf out/docker-machine-driver-kvm2_$(DEB_VERSION) - -out/docker-machine-driver-kvm2-$(RPM_VERSION).rpm: out/docker-machine-driver-kvm2-$(RPM_VERSION)-0.x86_64.rpm - cp $< $@ - -out/docker-machine-driver-kvm2_$(RPM_VERSION).amd64.rpm: out/docker-machine-driver-kvm2-$(RPM_VERSION)-0.x86_64.rpm - cp $< $@ - -out/docker-machine-driver-kvm2_$(RPM_VERSION).arm64.rpm: out/docker-machine-driver-kvm2-$(RPM_VERSION)-0.aarch64.rpm - cp $< $@ - -out/docker-machine-driver-kvm2-$(RPM_VERSION)-0.%.rpm: out/docker-machine-driver-kvm2-% - cp -r installers/linux/rpm/kvm2_rpm_template out/docker-machine-driver-kvm2-$(RPM_VERSION) - sed -E -i -e 's/--VERSION--/'$(RPM_VERSION)'/g' out/docker-machine-driver-kvm2-$(RPM_VERSION)/docker-machine-driver-kvm2.spec - sed -E -i -e 's|--OUT--|'$(PWD)/out'|g' out/docker-machine-driver-kvm2-$(RPM_VERSION)/docker-machine-driver-kvm2.spec - rpmbuild -bb -D "_rpmdir $(PWD)/out" --target $* \ - out/docker-machine-driver-kvm2-$(RPM_VERSION)/docker-machine-driver-kvm2.spec - @mv out/$*/docker-machine-driver-kvm2-$(RPM_VERSION)-0.$*.rpm out/ && rmdir out/$* - rm -rf out/docker-machine-driver-kvm2-$(RPM_VERSION) - -.PHONY: kvm-image-amd64 -kvm-image-amd64: installers/linux/kvm/Dockerfile.amd64 ## Convenient alias to build the docker container - docker build --build-arg "GO_VERSION=$(KVM_GO_VERSION)" -t $(KVM_BUILD_IMAGE_AMD64) -f $< $(dir $<) - @echo "" - @echo "$(@) successfully built" - -.PHONY: kvm-image-arm64 -kvm-image-arm64: installers/linux/kvm/Dockerfile.arm64 ## Convenient alias to build the docker container - docker build --build-arg "GO_VERSION=$(KVM_GO_VERSION)" -t $(KVM_BUILD_IMAGE_ARM64) -f $< $(dir $<) - @echo "" - @echo "$(@) successfully built" - -kvm_in_docker: - docker image inspect -f '{{.Id}} {{.RepoTags}}' $(KVM_BUILD_IMAGE_AMD64) || $(MAKE) kvm-image-amd64 - rm -f out/docker-machine-driver-kvm2 - $(call DOCKER,$(KVM_BUILD_IMAGE_AMD64),/usr/bin/make out/docker-machine-driver-kvm2 COMMIT=$(COMMIT)) - -.PHONY: install-kvm-driver -install-kvm-driver: out/docker-machine-driver-kvm2 ## Install KVM Driver - mkdir -p $(GOBIN) - cp out/docker-machine-driver-kvm2 $(GOBIN)/docker-machine-driver-kvm2 - - -out/docker-machine-driver-kvm2-arm64: -ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) - docker image inspect -f '{{.Id}} {{.RepoTags}}' $(KVM_BUILD_IMAGE_ARM64) || $(MAKE) kvm-image-arm64 - $(call DOCKER,$(KVM_BUILD_IMAGE_ARM64),/usr/bin/make $@ COMMIT=$(COMMIT)) -else - $(if $(quiet),@echo " GO $@") - $(Q)GOARCH=arm64 \ - go build \ - -installsuffix "static" \ - -ldflags="$(KVM2_LDFLAGS)" \ - -tags "libvirt.1.3.1 without_lxc" \ - -o $@ \ - k8s.io/minikube/cmd/drivers/kvm -endif - chmod +X $@ - -out/docker-machine-driver-kvm2-%: -ifeq ($(MINIKUBE_BUILD_IN_DOCKER),y) - docker image inspect -f '{{.Id}} {{.RepoTags}}' $(KVM_BUILD_IMAGE_AMD64) || $(MAKE) kvm-image-amd64 - $(call DOCKER,$(KVM_BUILD_IMAGE_AMD64),/usr/bin/make $@ COMMIT=$(COMMIT)) - # make extra sure that we are linking with the older version of libvirt (1.3.1) - test "`strings $@ | grep '^LIBVIRT_[0-9]' | sort | tail -n 1`" = "LIBVIRT_1.2.9" -else - $(if $(quiet),@echo " GO $@") - $(Q)GOARCH=$* \ - go build \ - -installsuffix "static" \ - -ldflags="$(KVM2_LDFLAGS)" \ - -tags "libvirt.1.3.1 without_lxc" \ - -o $@ \ - k8s.io/minikube/cmd/drivers/kvm -endif - chmod +X $@ +.PHONY: update-yearly-leaderboard +update-yearly-leaderboard: + hack/yearly-leaderboard.sh +site/themes/docsy/assets/vendor/bootstrap/package.js: ## update the website docsy theme git submodule + git submodule update -f --init -site/themes/docsy/assets/vendor/bootstrap/package.js: ## update the website docsy theme git submodule - git submodule update -f --init --recursive - +.PHONY: out/hugo/hugo out/hugo/hugo: mkdir -p out + (cd site/themes/docsy && npm install) test -d out/hugo || git clone https://github.com/gohugoio/hugo.git out/hugo - (cd out/hugo && go build --tags extended) + (cd out/hugo && git fetch origin && git checkout $(HUGO_VERSION) && go build --tags extended) .PHONY: site site: site/themes/docsy/assets/vendor/bootstrap/package.js out/hugo/hugo ## Serve the documentation site to localhost @@ -909,8 +814,9 @@ out/mkcmp: # auto pause binary to be used for ISO -deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/bin/auto-pause: $(SOURCE_FILES) $(ASSET_FILES) - GOOS=linux GOARCH=$(GOARCH) go build -o $@ cmd/auto-pause/auto-pause.go +deploy/iso/minikube-iso/board/minikube/%/rootfs-overlay/usr/bin/auto-pause: $(SOURCE_FILES) $(ASSET_FILES) + @if [ "$*" != "x86_64" ] && [ "$*" != "aarch64" ]; then echo "Please enter a valid architecture. Choices are x86_64 and aarch64."; exit 1; fi + GOOS=linux GOARCH=$(subst x86_64,amd64,$(subst aarch64,arm64,$*)) go build -o $@ cmd/auto-pause/auto-pause.go .PHONY: deploy/addons/auto-pause/auto-pause-hook @@ -923,18 +829,11 @@ auto-pause-hook-image: deploy/addons/auto-pause/auto-pause-hook ## Build docker docker build -t $(REGISTRY)/auto-pause-hook:$(AUTOPAUSE_HOOK_TAG) ./deploy/addons/auto-pause .PHONY: push-auto-pause-hook-image -push-auto-pause-hook-image: auto-pause-hook-image - docker login gcr.io/k8s-minikube - $(MAKE) push-docker IMAGE=$(REGISTRY)/auto-pause-hook:$(AUTOPAUSE_HOOK_TAG) - -.PHONY: prow-test-image -prow-test-image: - docker build --build-arg "GO_VERSION=$(GO_VERSION)" -t $(REGISTRY)/prow-test:$(PROW_TEST_TAG) ./deploy/prow - -.PHONY: push-prow-test-image -push-prow-test-image: prow-test-image +push-auto-pause-hook-image: docker-multi-arch-build docker login gcr.io/k8s-minikube - $(MAKE) push-docker IMAGE=$(REGISTRY)/prow-test:$(PROW_TEST_TAG) + docker buildx create --name multiarch --bootstrap + docker buildx build --push --builder multiarch --platform $(KICBASE_ARCH) -t $(REGISTRY)/auto-pause-hook:$(AUTOPAUSE_HOOK_TAG) -f ./deploy/addons/auto-pause/Dockerfile . + docker buildx rm multiarch .PHONY: out/performance-bot out/performance-bot: @@ -942,7 +841,7 @@ out/performance-bot: .PHONY: out/metrics-collector out/metrics-collector: - GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o $@ hack/metrics/*.go + cd hack && GOOS=$(GOOS) GOARCH=$(GOARCH) go build -o ../$@ metrics/*.go .PHONY: compare @@ -953,7 +852,18 @@ compare: out/mkcmp out/minikube mv out/minikube out/master.minikube git checkout $(CURRENT_GIT_BRANCH) out/mkcmp out/master.minikube out/$(CURRENT_GIT_BRANCH).minikube - + + +.PHONY: generate-licenses +generate-licenses: + ./hack/generate_licenses.sh + +.PHONY: gomodtidy +gomodtidy: ## run go mod tidy everywhere needed + go mod tidy + cd hack && go mod tidy + cd hack/prow/minitest && env -u GOTOOLCHAIN go mod tidy + .PHONY: help help: @@ -962,28 +872,6 @@ help: @grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' - -.PHONY: update-golang-version -update-golang-version: - (cd hack/update/golang_version && \ - go run update_golang_version.go) - -.PHONY: update-kubernetes-version -update-kubernetes-version: - (cd hack/update/kubernetes_version && \ - go run update_kubernetes_version.go) - -.PHONY: update-kubernetes-version-pr -update-kubernetes-version-pr: -ifndef GITHUB_TOKEN - @echo "⚠️ please set GITHUB_TOKEN environment variable with your GitHub token" - @echo "you can use https://github.com/settings/tokens/new?scopes=repo,write:packages to create new one" -else - (cd hack/update/kubernetes_version && \ - export UPDATE_TARGET="all" && \ - go run update_kubernetes_version.go) -endif - .PHONY: stress stress: ## run the stress tests go test -test.v -test.timeout=2h ./test/stress -loops=10 | tee "./out/testout_$(COMMIT_SHORT).txt" @@ -1000,7 +888,211 @@ cpu-benchmark-autopause: ## run the cpu usage auto-pause benchmark time-to-k8s-benchmark: ./hack/benchmark/time-to-k8s/time-to-k8s.sh +.PHONY: update-golang-version +update-golang-version: + cd hack && go run update/golang_version/golang_version.go + make gomodtidy +.PHONY: update-kubernetes-version +update-kubernetes-version: + @(cd hack && go run update/kubernetes_version/kubernetes_version.go) + +.PHONY: update-golint-version +update-golint-version: + cd hack && go run update/golint_version/golint_version.go + +.PHONY: update-preload-version +update-preload-version: + cd hack && go run update/preload_version/preload_version.go + +.PHONY: update-kubeadm-constants +update-kubeadm-constants: + cd hack && go run update/kubeadm_constants/kubeadm_constants.go + gofmt -w pkg/minikube/constants/constants_kubeadm_images.go .PHONY: update-gopogh-version update-gopogh-version: ## update gopogh version - (cd hack/update/gopogh_version && \ - go run update_gopogh_version.go) + cd hack && go run update/gopogh_version/gopogh_version.go + +.PHONY: update-gotestsum-version +update-gotestsum-version: + cd hack && go run update/gotestsum_version/gotestsum_version.go + +.PHONY: update-gh-version +update-gh-version: + cd hack && go run update/gh_version/gh_version.go + +.PHONY: update-docsy-version +update-docsy-version: + cd hack && go run update/docsy_version/docsy_version.go + +.PHONY: update-hugo-version +update-hugo-version: + cd hack && go run update/hugo_version/hugo_version.go + +.PHONY: update-cloud-spanner-emulator-version +update-cloud-spanner-emulator-version: + cd hack && go run update/cloud_spanner_emulator_version/cloud_spanner_emulator_version.go + +.PHONY: update-containerd-version +update-containerd-version: + cd hack && go run update/containerd_version/containerd_version.go + +.PHONY: update-buildkit-version +update-buildkit-version: + cd hack && go run update/buildkit_version/buildkit_version.go + +.PHONY: update-cri-o-version +update-cri-o-version: + cd hack && go run update/cri_o_version/cri_o_version.go + +.PHONY: update-crun-version +update-crun-version: + cd hack && go run update/crun_version/crun_version.go + +.PHONY: update-metrics-server-version +update-metrics-server-version: + cd hack && go run update/metrics_server_version/metrics_server_version.go + +.PHONY: update-runc-version +update-runc-version: + cd hack && go run update/runc_version/runc_version.go + +.PHONY: update-docker-version +update-docker-version: + cd hack && go run update/docker_version/docker_version.go + +.PHONY: update-debian-version +update-debian-version: + cd hack && go run update/debian_version/debian_version.go + +.PHONY: update-cni-plugins-version +update-cni-plugins-version: + cd hack && go run update/cni_plugins_version/cni_plugins_version.go + +.PHONY: update-gcp-auth-version +update-gcp-auth-version: + cd hack && go run update/gcp_auth_version/gcp_auth_version.go + +.PHONY: update-kubernetes-versions-list +update-kubernetes-versions-list: + cd hack && go run update/kubernetes_versions_list/kubernetes_versions_list.go + +.PHONY: update-ingress-version +update-ingress-version: + cd hack && go run update/ingress_version/ingress_version.go + +.PHONY: update-flannel-version +update-flannel-version: + cd hack && go run update/flannel_version/flannel_version.go + +.PHONY: update-inspektor-gadget-version +update-inspektor-gadget-version: + cd hack && go run update/inspektor_gadget_version/inspektor_gadget_version.go + +.PHONY: update-calico-version +update-calico-version: + cd hack && go run update/calico_version/calico_version.go + +.PHONY: update-cri-dockerd-version +update-cri-dockerd-version: + cd hack && go run update/cri_dockerd_version/cri_dockerd_version.go + +.PHONY: update-go-github-version +update-go-github-version: + cd hack && go run update/go_github_version/go_github_version.go + +.PHONY: update-docker-buildx-version +update-docker-buildx-version: + cd hack && go run update/docker_buildx_version/docker_buildx_version.go + +.PHONY: update-nerdctl-version +update-nerdctl-version: + cd hack && go run update/nerdctl_version/nerdctl_version.go + +.PHONY: update-crictl-version +update-crictl-version: + cd hack && go run update/crictl_version/crictl_version.go + +.PHONY: update-kindnetd-version +update-kindnetd-version: + cd hack && go run update/kindnetd_version/kindnetd_version.go + +.PHONY: update-istio-operator-version +update-istio-operator-version: + cd hack && go run update/istio_operator_version/istio_operator_version.go + +.PHONY: update-registry-version +update-registry-version: + cd hack && go run update/registry_version/registry_version.go + +.PHONY: update-volcano-version +update-volcano-version: + cd hack && go run update/volcano_version/volcano_version.go + +.PHONY: update-kong-version +update-kong-version: + cd hack && go run update/kong_version/kong_version.go + +.PHONY: update-kong-ingress-controller-version +update-kong-ingress-controller-version: + cd hack && go run update/kong_ingress_controller_version/kong_ingress_controller_version.go + +.PHONY: update-nvidia-device-plugin-version +update-nvidia-device-plugin-version: + cd hack && go run update/nvidia_device_plugin_version/nvidia_device_plugin_version.go + +# for amd gpu +.PHONY: update-amd-device-plugin-version +update-amd-device-plugin-version: + cd hack && go run update/amd_device_gpu_plugin_version/amd_device_gpu_plugin_version.go + +.PHONY: update-nerdctld-version +update-nerdctld-version: + cd hack && go run update/nerdctld_version/nerdctld_version.go + +## used by kubevirt addon, disabled until we find a replacement for bitnami/kubectl image +# .PHONY: update-kubectl-version +# update-kubectl-version: +# cd hack && go run update/kubectl_version/kubectl_version.go + +.PHONY: update-site-node-version +update-site-node-version: + cd hack && go run update/site_node_version/site_node_version.go + +.PHONY: update-cilium-version +update-cilium-version: + cd hack && go run update/cilium_version/cilium_version.go + +.PHONY: update-yakd-version +update-yakd-version: + cd hack && go run update/yakd_version/yakd_version.go + +.PHONY: update-kube-registry-proxy-version +update-kube-registry-proxy-version: + cd hack && go run update/kube_registry_proxy_version/kube_registry_proxy_version.go + +.PHONY: update-headlamp-version +update-headlamp-version: + cd hack && go run update/headlamp_version/headlamp_version.go + +.PHONY: update-kube-vip-version +update-kube-vip-version: + cd hack && go run update/kube_vip_version/kube_vip_version.go + +.PHONY: update-portainer-version +update-portainer-version: + cd hack && go run update/portainer_version/update_portainer_version.go + +# used by update- Targets to get before/after versions of tools it updates +# example usage echo "OLD_VERSION=$(DEP=node make get-dependency-version)" >> "$GITHUB_OUTPUT" +.PHONY: get-dependency-verison +get-dependency-version: + @(cd hack && go run update/get_version/get_version.go) + +# runs update on all hack/update/components only used for debugging purposes, not meant to be used regularly +.PHONY: _update-all +_update-all: + @(cd hack && go run update/update_all/update_all.go) + + +# targets for tests on prow +include ./hack/prow/prow.mk diff --git a/OWNERS b/OWNERS index b5400a2f9107..5efe00ac9c34 100644 --- a/OWNERS +++ b/OWNERS @@ -1,19 +1,14 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - afbjorklund - - sharifelgamal - medyagh - - blueelvis - - prasadkatti - - prezha - - spowelljr + - prezha + - comradeprogrammer + - nirs approvers: - - afbjorklund - - sharifelgamal - medyagh - - spowelljr - - prezha + - prezha + - comradeprogrammer emeritus_approvers: - dlorenc - luxas @@ -23,3 +18,6 @@ emeritus_approvers: - priyawadhwa - josedonizetti - tstromberg + - sharifelgamal + - afbjorklund + - spowelljr diff --git a/README.md b/README.md index a42a6b16a9f0..66abc3804636 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ [![Actions Status](https://github.com/kubernetes/minikube/workflows/build/badge.svg)](https://github.com/kubernetes/minikube/actions) [![GoReport Widget]][GoReport Status] -[![Github All Releases](https://img.shields.io/github/downloads/kubernetes/minikube/total.svg)](https://github.com/kubernetes/minikube/releases/latest) +[![GitHub All Releases](https://img.shields.io/github/downloads/kubernetes/minikube/total.svg)](https://github.com/kubernetes/minikube/releases/latest) [![Latest Release](https://img.shields.io/github/v/release/kubernetes/minikube?include_prereleases)](https://github.com/kubernetes/minikube/releases/latest) - +[![Open in GitHub Codespaces](https://img.shields.io/badge/Open%20in-GitHub%20Codespaces-blue?logo=github)](https://codespaces.new/kubernetes/minikube?quickstart=1) [GoReport Status]: https://goreportcard.com/report/github.com/kubernetes/minikube [GoReport Widget]: https://goreportcard.com/badge/github.com/kubernetes/minikube @@ -21,17 +21,19 @@ minikube runs the latest stable release of Kubernetes, with support for standard * [LoadBalancer](https://minikube.sigs.k8s.io/docs/handbook/accessing/#loadbalancer-access) - using `minikube tunnel` * Multi-cluster - using `minikube start -p ` -* NodePorts - using `minikube service` +* [NodePorts](https://minikube.sigs.k8s.io/docs/handbook/accessing/#nodeport-access) - using `minikube service` * [Persistent Volumes](https://minikube.sigs.k8s.io/docs/handbook/persistent_volumes/) * [Ingress](https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/) * [Dashboard](https://minikube.sigs.k8s.io/docs/handbook/dashboard/) - `minikube dashboard` * [Container runtimes](https://minikube.sigs.k8s.io/docs/handbook/config/#runtime-configuration) - `minikube start --container-runtime` * [Configure apiserver and kubelet options](https://minikube.sigs.k8s.io/docs/handbook/config/#modifying-kubernetes-defaults) via command-line flags +* Supports common [CI environments](https://github.com/minikube-ci/examples) As well as developer-friendly features: * [Addons](https://minikube.sigs.k8s.io/docs/handbook/deploying/#addons) - a marketplace for developers to share configurations for running services on minikube -* [NVIDIA GPU support](https://minikube.sigs.k8s.io/docs/tutorials/nvidia_gpu/) - for machine learning +* [NVIDIA GPU support](https://minikube.sigs.k8s.io/docs/tutorials/nvidia/) - for machine learning +* [AMD GPU support](https://minikube.sigs.k8s.io/docs/tutorials/amd/) - for machine learning * [Filesystem mounts](https://minikube.sigs.k8s.io/docs/handbook/mount/) **For more information, see the official [minikube website](https://minikube.sigs.k8s.io)** @@ -42,6 +44,15 @@ See the [Getting Started Guide](https://minikube.sigs.k8s.io/docs/start/) :mega: **Please fill out our [fast 5-question survey](https://forms.gle/Gg3hG5ZySw8c1C24A)** so that we can learn how & why you use minikube, and what improvements we should make. Thank you! :dancers: +## GitHub Codespace + +You can run minikube in a GitHub Codespace by clicking here: +[![Open in GitHub Codespaces](https://img.shields.io/badge/Open%20in-GitHub%20Codespaces-blue?logo=github)](https://codespaces.new/kubernetes/minikube?quickstart=1) + +This will launch a Github Codespace. You can then run `minikube start` and `minikube dashboard` - You can then open Minikube Dashboard by clicking opening the link displayed in the terminal. + +You can also run Minikube in a Dev Container locally using your favorite IDE, for more information see Dev Containers https://code.visualstudio.com/docs/devcontainers/containers + ## Documentation See https://minikube.sigs.k8s.io/docs/ @@ -50,17 +61,25 @@ See https://minikube.sigs.k8s.io/docs/ See minikube in action [here](https://minikube.sigs.k8s.io/docs/handbook/controls/) +## Governance + +Kubernetes project is governed by a framework of principles, values, policies and processes to help our community and constituents towards our shared goals. + +The [Kubernetes Community](https://github.com/kubernetes/community/blob/master/governance.md) is the launching point for learning about how we organize ourselves. + +The [Kubernetes Steering community repo](https://github.com/kubernetes/steering) is used by the Kubernetes Steering Committee, which oversees governance of the Kubernetes project. + ## Community minikube is a Kubernetes [#sig-cluster-lifecycle](https://github.com/kubernetes/community/tree/master/sig-cluster-lifecycle) project. -* [**#minikube on Kubernetes Slack**](https://kubernetes.slack.com) - Live chat with minikube developers! +* [**#minikube on Kubernetes Slack**](https://kubernetes.slack.com/messages/minikube) - Live chat with minikube developers! * [minikube-users mailing list](https://groups.google.com/g/minikube-users) * [minikube-dev mailing list](https://groups.google.com/g/minikube-dev) * [Contributing](https://minikube.sigs.k8s.io/docs/contrib/) * [Development Roadmap](https://minikube.sigs.k8s.io/docs/contrib/roadmap/) -Join our meetings: +Join our community meetings: * [Bi-weekly office hours, Mondays @ 11am PST](https://tinyurl.com/minikube-oh) * [Triage Party](https://minikube.sigs.k8s.io/docs/contrib/triage/) diff --git a/SECURITY-INSIGHTS.yml b/SECURITY-INSIGHTS.yml new file mode 100644 index 000000000000..35b26f413d73 --- /dev/null +++ b/SECURITY-INSIGHTS.yml @@ -0,0 +1,80 @@ +header: + schema-version: 1.0.0 + expiration-date: '2024-12-17T01:00:00.000Z' + last-updated: '2023-12-17' + last-reviewed: '2023-12-17' + commit-hash: 8220a6eb95f0a4d75f7f2d7b14cef975f050512d + project-url: https://github.com/kubernetes/minikube + project-release: '1.32.0' + changelog: https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md + license: https://github.com/kubernetes/minikube/blob/master/LICENSE +project-lifecycle: + status: active + roadmap: https://minikube.sigs.k8s.io/docs/contrib/roadmap/ + bug-fixes-only: false + core-maintainers: + - https://github.com/kubernetes/minikube/blob/master/OWNERS + release-cycle: https://minikube.sigs.k8s.io/docs/contrib/release_schedule/ + release-process: https://minikube.sigs.k8s.io/docs/contrib/releasing/ +contribution-policy: + accepts-pull-requests: true + accepts-automated-pull-requests: true + automated-tools-list: + - automated-tool: dependabot + action: allowed + path: + - / + - automated-tool: minikube-bot + action: allowed + path: + - / + - automated-tool: k8s-ci-robot + action: allowed + path: + - / + contributing-policy: https://minikube.sigs.k8s.io/docs/contrib/guide/ + code-of-conduct: https://github.com/kubernetes/minikube/blob/master/code-of-conduct.md +documentation: + - https://minikube.sigs.k8s.io/docs/ +distribution-points: + - https://github.com/kubernetes/minikube/releases +security-artifacts: + threat-model: + threat-model-created: false + self-assessment: + self-assessment-created: false +security-testing: + - tool-type: sca + tool-name: Dependabot + tool-version: "2" + tool-url: https://github.com/dependabot + integration: + ad-hoc: false + ci: true + before-release: true + tool-rulesets: + - https://github.com/kubernetes/minikube/blob/master/.github/dependabot.yml + - tool-type: sca + tool-name: minikube-bot + tool-version: latest + tool-url: https://github.com/minikube-bot + tool-rulesets: + - built-in + integration: + ad-hoc: false + ci: true + before-release: true +security-contacts: + - type: email + value: security@kubernetes.io + primary: true +vulnerability-reporting: + accepts-vulnerability-reports: true + email-contact: security@kubernetes.io + security-policy: https://github.com/kubernetes/minikube/blob/master/SECURITY.md + bug-bounty-available: true + bug-bounty-url: https://hackerone.com/kubernetes +dependencies: + third-party-packages: true + dependencies-lists: + - https://github.com/kubernetes/minikube/blob/master/go.mod diff --git a/SECURITY.md b/SECURITY.md index 2083d44cdf90..2f3c2143523d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,8 +4,6 @@ Join the [kubernetes-security-announce] group for security and vulnerability announcements. -You can also subscribe to an RSS feed of the above using [this link][kubernetes-security-announce-rss]. - ## Reporting a Vulnerability Instructions for reporting a vulnerability can be found on the @@ -17,6 +15,5 @@ Information about supported Kubernetes versions can be found on the [Kubernetes version and version skew support policy] page on the Kubernetes website. [kubernetes-security-announce]: https://groups.google.com/forum/#!forum/kubernetes-security-announce -[kubernetes-security-announce-rss]: https://groups.google.com/forum/feed/kubernetes-security-announce/msgs/rss_v2_0.xml?num=50 [Kubernetes version and version skew support policy]: https://kubernetes.io/docs/setup/release/version-skew-policy/#supported-versions [Kubernetes Security and Disclosure Information]: https://kubernetes.io/docs/reference/issues-security/security/#report-a-vulnerability diff --git a/SECURITY_CONTACTS b/SECURITY_CONTACTS index d9a7f75be561..77f2ab4fa452 100644 --- a/SECURITY_CONTACTS +++ b/SECURITY_CONTACTS @@ -10,7 +10,5 @@ # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE # INSTRUCTIONS AT https://kubernetes.io/security/ -tstromberg -afbjorklund medyagh -sharifelgamal +prezha diff --git a/cmd/auto-pause/auto-pause-hook/config.go b/cmd/auto-pause/auto-pause-hook/config.go index 0f25e3f041c7..5b92437eeaa0 100644 --- a/cmd/auto-pause/auto-pause-hook/config.go +++ b/cmd/auto-pause/auto-pause-hook/config.go @@ -20,7 +20,6 @@ import ( "context" "crypto/tls" "crypto/x509" - "fmt" "log" v1 "k8s.io/api/admissionregistration/v1" @@ -59,7 +58,7 @@ func apiServerCert(clientset *kubernetes.Clientset) []byte { pem, ok := c.Data["requestheader-client-ca-file"] if !ok { - klog.Fatalf(fmt.Sprintf("cannot find the ca.crt in the configmap, configMap.Data is %#v", c.Data)) + klog.Fatalf("cannot find the ca.crt in the configmap, configMap.Data is %#v", c.Data) } klog.Info("client-ca-file=", pem) return []byte(pem) @@ -91,8 +90,8 @@ func selfRegistration(clientset *kubernetes.Clientset, caCert []byte) { klog.Fatal(err2) } } - var failurePolicy v1.FailurePolicyType = v1.Fail - var sideEffects v1.SideEffectClass = v1.SideEffectClassNone + var failurePolicy = v1.Fail + var sideEffects = v1.SideEffectClassNone webhookConfig := &v1.MutatingWebhookConfiguration{ ObjectMeta: metav1.ObjectMeta{ diff --git a/cmd/auto-pause/auto-pause-hook/main.go b/cmd/auto-pause/auto-pause-hook/main.go index 57cd14d600ca..cd61ed47df3f 100644 --- a/cmd/auto-pause/auto-pause-hook/main.go +++ b/cmd/auto-pause/auto-pause-hook/main.go @@ -20,7 +20,7 @@ import ( "encoding/json" "flag" "fmt" - "io/ioutil" + "io" "log" "net/http" "strconv" @@ -47,7 +47,7 @@ var targetIP *string func handler(w http.ResponseWriter, r *http.Request) { log.Println("Handling a request") - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { log.Printf("error: %v", err) return diff --git a/cmd/auto-pause/auto-pause.go b/cmd/auto-pause/auto-pause.go index 1fe405d3e9f1..906a37515987 100644 --- a/cmd/auto-pause/auto-pause.go +++ b/cmd/auto-pause/auto-pause.go @@ -28,25 +28,24 @@ import ( "k8s.io/minikube/pkg/minikube/command" "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/exit" - "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" - "k8s.io/minikube/pkg/minikube/style" ) -var unpauseRequests = make(chan struct{}) -var done = make(chan struct{}) -var mu sync.Mutex +var ( + unpauseRequests = make(chan struct{}) + done = make(chan struct{}) + mu sync.Mutex + runtimePaused bool + version = "0.0.1" -var runtimePaused bool -var version = "0.0.1" - -var runtime = flag.String("container-runtime", "docker", "Container runtime to use for (un)pausing") + runtime = flag.String("container-runtime", "docker", "Container runtime to use for (un)pausing") + interval = flag.Duration("interval", time.Minute*1, "Interval of inactivity for pause to occur") +) func main() { flag.Parse() - // TODO: #10595 make this configurable - const interval = time.Minute * 1 + tickerChannel := time.NewTicker(*interval) // Check current state alreadyPaused() @@ -54,16 +53,15 @@ func main() { // channel for incoming messages go func() { for { - // On each iteration new timer is created select { - // TODO: #10596 make it memory-leak proof - case <-time.After(interval): + case <-tickerChannel.C: + tickerChannel.Stop() runPause() case <-unpauseRequests: - fmt.Printf("Got request\n") - if runtimePaused { - runUnpause() - } + tickerChannel.Stop() + log.Println("Got request") + runUnpause() + tickerChannel.Reset(*interval) done <- struct{}{} } @@ -76,7 +74,7 @@ func main() { } // handler echoes the Path component of the requested URL. -func handler(w http.ResponseWriter, r *http.Request) { +func handler(w http.ResponseWriter, _ *http.Request) { unpauseRequests <- struct{}{} <-done fmt.Fprintf(w, "allow") @@ -86,8 +84,10 @@ func runPause() { mu.Lock() defer mu.Unlock() if runtimePaused { + log.Println("Already paused, skipping") return } + log.Println("Pausing...") r := command.NewExecRunner(true) @@ -103,13 +103,17 @@ func runPause() { runtimePaused = true - out.Step(style.Unpause, "Paused {{.count}} containers", out.V{"count": len(uids)}) + log.Printf("Paused %d containers", len(uids)) } func runUnpause() { - fmt.Println("unpausing...") mu.Lock() defer mu.Unlock() + if !runtimePaused { + log.Println("Already unpaused, skipping") + return + } + log.Println("Unpausing...") r := command.NewExecRunner(true) @@ -124,7 +128,7 @@ func runUnpause() { } runtimePaused = false - out.Step(style.Unpause, "Unpaused {{.count}} containers", out.V{"count": len(uids)}) + log.Printf("Unpaused %d containers", len(uids)) } func alreadyPaused() { @@ -141,5 +145,5 @@ func alreadyPaused() { if err != nil { exit.Error(reason.GuestCheckPaused, "Fail check if container paused", err) } - out.Step(style.Check, "containers paused status: {{.paused}}", out.V{"paused": runtimePaused}) + log.Printf("containers paused status: %t", runtimePaused) } diff --git a/cmd/drivers/hyperkit/main.go b/cmd/drivers/hyperkit/main.go index ca8f90ce6a48..4bff1b3d622e 100644 --- a/cmd/drivers/hyperkit/main.go +++ b/cmd/drivers/hyperkit/main.go @@ -1,4 +1,4 @@ -// +build darwin,!arm64 +//go:build darwin && !arm64 /* Copyright 2016 The Kubernetes Authors All rights reserved. diff --git a/cmd/minikube/cmd/cache.go b/cmd/minikube/cmd/cache.go index df260cfb47f9..9d0a79dcc478 100644 --- a/cmd/minikube/cmd/cache.go +++ b/cmd/minikube/cmd/cache.go @@ -21,6 +21,7 @@ import ( "github.com/spf13/viper" "k8s.io/klog/v2" cmdConfig "k8s.io/minikube/cmd/minikube/cmd/config" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/image" @@ -33,15 +34,13 @@ import ( // cacheImageConfigKey is the config field name used to store which images we have previously cached const cacheImageConfigKey = "cache" -var ( - all string -) +const allFlag = "all" // cacheCmd represents the cache command var cacheCmd = &cobra.Command{ Use: "cache", - Short: "Add, delete, or push a local image into minikube", - Long: "Add, delete, or push a local image into minikube", + Short: "Manage cache for images", + Long: "Add an image into minikube as a local cache, or delete, reload the cached images", } // addCacheCmd represents the cache add command @@ -49,10 +48,11 @@ var addCacheCmd = &cobra.Command{ Use: "add", Short: "Add an image to local cache.", Long: "Add an image to local cache.", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { out.WarningT("\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"") + options := flags.CommandOptions() // Cache and load images into docker daemon - if err := machine.CacheAndLoadImages(args, cacheAddProfiles(), false); err != nil { + if err := machine.CacheAndLoadImages(args, cacheAddProfiles(), false, options); err != nil { exit.Error(reason.InternalCacheLoad, "Failed to cache and load images", err) } // Add images to config file @@ -63,11 +63,11 @@ var addCacheCmd = &cobra.Command{ } func addCacheCmdFlags() { - addCacheCmd.Flags().Bool(all, false, "Add image to cache for all running minikube clusters") + addCacheCmd.Flags().Bool(allFlag, false, "Add image to cache for all running minikube clusters") } func cacheAddProfiles() []*config.Profile { - if viper.GetBool(all) { + if viper.GetBool(allFlag) { validProfiles, _, err := config.ListProfiles() // need to load image to all profiles if err != nil { klog.Warningf("error listing profiles: %v", err) @@ -87,7 +87,7 @@ var deleteCacheCmd = &cobra.Command{ Use: "delete", Short: "Delete an image from the local cache.", Long: "Delete an image from the local cache.", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { // Delete images from config file if err := cmdConfig.DeleteFromConfigMap(cacheImageConfigKey, args); err != nil { exit.Error(reason.InternalDelConfig, "Failed to delete images from config", err) @@ -104,8 +104,9 @@ var reloadCacheCmd = &cobra.Command{ Use: "reload", Short: "reload cached images.", Long: "reloads images previously added using the 'cache add' subcommand", - Run: func(cmd *cobra.Command, args []string) { - err := node.CacheAndLoadImagesInConfig(cacheAddProfiles()) + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() + err := node.CacheAndLoadImagesInConfig(cacheAddProfiles(), options) if err != nil { exit.Error(reason.GuestCacheLoad, "Failed to reload cached images", err) } diff --git a/cmd/minikube/cmd/cache_list.go b/cmd/minikube/cmd/cache_list.go index 1c7341c267cd..11053f66a5e6 100644 --- a/cmd/minikube/cmd/cache_list.go +++ b/cmd/minikube/cmd/cache_list.go @@ -40,7 +40,7 @@ var listCacheCmd = &cobra.Command{ Use: "list", Short: "List all available images from the local cache.", Long: "List all available images from the local cache.", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { images, err := cmdConfig.ListConfigMap(cacheImageConfigKey) if err != nil { exit.Error(reason.InternalListConfig, "Failed to get image map", err) @@ -53,8 +53,8 @@ var listCacheCmd = &cobra.Command{ func init() { listCacheCmd.Flags().StringVar(&cacheListFormat, "format", defaultCacheListFormat, - `Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/ -For the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate`) + `Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template +For the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate`) cacheCmd.AddCommand(listCacheCmd) } diff --git a/cmd/minikube/cmd/completion.go b/cmd/minikube/cmd/completion.go index f7d9dec0fc53..b85d4e9a590b 100644 --- a/cmd/minikube/cmd/completion.go +++ b/cmd/minikube/cmd/completion.go @@ -28,7 +28,7 @@ import ( "k8s.io/minikube/pkg/minikube/reason" ) -const longDescription = `Outputs minikube shell completion for the given shell (bash, zsh or fish) +const longDescription = `Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell) This depends on the bash-completion binary. Example installation instructions: OS X: @@ -47,6 +47,16 @@ const longDescription = `Outputs minikube shell completion for the given shell ( Additionally, you may want to output the completion to a file and source in your .bashrc + Windows: + ## Save completion code to a script and execute in the profile + PS> minikube completion powershell > $HOME\.minikube-completion.ps1 + PS> Add-Content $PROFILE '. $HOME\.minikube-completion.ps1' + + ## Execute completion code in the profile + PS> Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) { + minikube completion powershell | Out-String | Invoke-Expression + }' + Note for zsh users: [1] zsh completions are only supported in versions of zsh >= 5.2 Note for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion ` @@ -71,11 +81,11 @@ var completionCmd = &cobra.Command{ Use: "completion SHELL", Short: "Generate command completion for a shell", Long: longDescription, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) != 1 { exit.Message(reason.Usage, "Usage: minikube completion SHELL") } - if args[0] != "bash" && args[0] != "zsh" && args[0] != "fish" { + if args[0] != "bash" && args[0] != "zsh" && args[0] != "fish" && args[0] != "powershell" { exit.Message(reason.Usage, "Sorry, completion support is not yet implemented for {{.name}}", out.V{"name": args[0]}) } }, @@ -85,7 +95,7 @@ var bashCmd = &cobra.Command{ Use: "bash", Short: "bash completion.", Long: "Generate command completion for bash.", - Run: func(cmd *cobra.Command, args []string) { + Run: func(cmd *cobra.Command, _ []string) { err := GenerateBashCompletion(os.Stdout, cmd.Root()) if err != nil { exit.Error(reason.InternalCompletion, "bash completion failed", err) @@ -97,7 +107,7 @@ var zshCmd = &cobra.Command{ Use: "zsh", Short: "zsh completion.", Long: "Generate command completion for zsh.", - Run: func(cmd *cobra.Command, args []string) { + Run: func(cmd *cobra.Command, _ []string) { err := GenerateZshCompletion(os.Stdout, cmd.Root()) if err != nil { exit.Error(reason.InternalCompletion, "zsh completion failed", err) @@ -109,7 +119,7 @@ var fishCmd = &cobra.Command{ Use: "fish", Short: "fish completion.", Long: "Generate command completion for fish .", - Run: func(cmd *cobra.Command, args []string) { + Run: func(cmd *cobra.Command, _ []string) { err := GenerateFishCompletion(os.Stdout, cmd.Root()) if err != nil { exit.Error(reason.InternalCompletion, "fish completion failed", err) @@ -117,10 +127,23 @@ var fishCmd = &cobra.Command{ }, } +var powershellCmd = &cobra.Command{ + Use: "powershell", + Short: "powershell completion.", + Long: "Generate command completion for PowerShell.", + Run: func(cmd *cobra.Command, _ []string) { + err := GeneratePowerShellCompletion(os.Stdout, cmd.Root()) + if err != nil { + exit.Error(reason.InternalCompletion, "powershell completion failed", err) + } + }, +} + func init() { completionCmd.AddCommand(bashCmd) completionCmd.AddCommand(zshCmd) completionCmd.AddCommand(fishCmd) + completionCmd.AddCommand(powershellCmd) } // GenerateBashCompletion generates the completion for the bash shell @@ -139,7 +162,7 @@ func GenerateBashCompletion(w io.Writer, cmd *cobra.Command) error { } // GenerateZshCompletion generates the completion for the zsh shell -func GenerateZshCompletion(out io.Writer, cmd *cobra.Command) error { +func GenerateZshCompletion(w io.Writer, cmd *cobra.Command) error { zshAutoloadTag := `#compdef minikube ` @@ -273,20 +296,21 @@ __minikube_convert_bash_to_zsh() { -e "s/${LWORD}compopt${RWORD}/__minikube_compopt/g" \ -e "s/${LWORD}declare${RWORD}/__minikube_declare/g" \ -e "s/\\\$(type${RWORD}/\$(__minikube_type/g" \ + -e "s/aliashash\[\"\([a-z]*\)\"\]/aliashash[\1]/g" \ <<'BASH_COMPLETION_EOF' ` - _, err := out.Write([]byte(zshAutoloadTag)) + _, err := w.Write([]byte(zshAutoloadTag)) if err != nil { return err } - _, err = out.Write([]byte(boilerPlate)) + _, err = w.Write([]byte(boilerPlate)) if err != nil { return err } - _, err = out.Write([]byte(zshInitialization)) + _, err = w.Write([]byte(zshInitialization)) if err != nil { return err } @@ -296,7 +320,7 @@ __minikube_convert_bash_to_zsh() { if err != nil { return errors.Wrap(err, "Error generating zsh completion") } - _, err = out.Write(buf.Bytes()) + _, err = w.Write(buf.Bytes()) if err != nil { return err } @@ -306,7 +330,7 @@ BASH_COMPLETION_EOF } __minikube_bash_source <(__minikube_convert_bash_to_zsh) ` - _, err = out.Write([]byte(zshTail)) + _, err = w.Write([]byte(zshTail)) if err != nil { return err } @@ -328,3 +352,18 @@ func GenerateFishCompletion(w io.Writer, cmd *cobra.Command) error { return nil } + +// GeneratePowerShellCompletion generates the completion for the PowerShell +func GeneratePowerShellCompletion(w io.Writer, cmd *cobra.Command) error { + _, err := w.Write([]byte(boilerPlate)) + if err != nil { + return err + } + + err = cmd.GenPowerShellCompletionWithDesc(w) + if err != nil { + return errors.Wrap(err, "Error generating powershell completion") + } + + return nil +} diff --git a/cmd/minikube/cmd/config/addons.go b/cmd/minikube/cmd/config/addons.go index ffb5a1fa217e..415a523d93f1 100644 --- a/cmd/minikube/cmd/config/addons.go +++ b/cmd/minikube/cmd/config/addons.go @@ -27,7 +27,7 @@ var AddonsCmd = &cobra.Command{ Use: "addons SUBCOMMAND [flags]", Short: "Enable or disable a minikube addon", Long: `addons modifies minikube addons files using subcommands like "minikube addons enable dashboard"`, - Run: func(cmd *cobra.Command, args []string) { + Run: func(cmd *cobra.Command, _ []string) { if err := cmd.Help(); err != nil { klog.Errorf("help: %v", err) } diff --git a/cmd/minikube/cmd/config/addons_list.go b/cmd/minikube/cmd/config/addons_list.go index 4ee0a19a7576..c373cb0c6fd4 100644 --- a/cmd/minikube/cmd/config/addons_list.go +++ b/cmd/minikube/cmd/config/addons_list.go @@ -19,13 +19,16 @@ package config import ( "encoding/json" "fmt" + "maps" "os" - "sort" + "slices" "strings" "github.com/olekukonko/tablewriter" + "github.com/olekukonko/tablewriter/tw" "github.com/spf13/cobra" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/exit" @@ -36,6 +39,7 @@ import ( ) var addonListOutput string +var addonPrintDocs bool // AddonListTemplate represents the addon list template type AddonListTemplate struct { @@ -47,15 +51,19 @@ var addonsListCmd = &cobra.Command{ Use: "list", Short: "Lists all available minikube addons as well as their current statuses (enabled/disabled)", Long: "Lists all available minikube addons as well as their current statuses (enabled/disabled)", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) != 0 { exit.Message(reason.Usage, "usage: minikube addons list") } - _, cc := mustload.Partial(ClusterFlagValue()) + options := flags.CommandOptions() + var cc *config.ClusterConfig + if config.ProfileExists(ClusterFlagValue()) { + _, cc = mustload.Partial(ClusterFlagValue(), options) + } switch strings.ToLower(addonListOutput) { case "list": - printAddonsList(cc) + printAddonsList(cc, addonPrintDocs) case "json": printAddonsJSON(cc) default: @@ -65,13 +73,8 @@ var addonsListCmd = &cobra.Command{ } func init() { - addonsListCmd.Flags().StringVarP( - &addonListOutput, - "output", - "o", - "list", - `minikube addons list --output OUTPUT. json, list`) - + addonsListCmd.Flags().StringVarP(&addonListOutput, "output", "o", "list", "minikube addons list --output OUTPUT. json, list") + addonsListCmd.Flags().BoolVarP(&addonPrintDocs, "docs", "d", false, "If true, print web links to addons' documentation if using --output=list (default).") AddonsCmd.AddCommand(addonsListCmd) } @@ -89,33 +92,56 @@ var stringFromStatus = func(addonStatus bool) string { return "disabled" } -var printAddonsList = func(cc *config.ClusterConfig) { - addonNames := make([]string, 0, len(assets.Addons)) - for addonName := range assets.Addons { - addonNames = append(addonNames, addonName) +var printAddonsList = func(cc *config.ClusterConfig, printDocs bool) { + addonNames := slices.Sorted(maps.Keys(assets.Addons)) + table := tablewriter.NewWriter(os.Stdout) + + table.Options( + tablewriter.WithHeaderAutoFormat(tw.On), + ) + + // Create table header + var tHeader []string + if cc == nil { + tHeader = []string{"Addon Name", "Maintainer"} + } else { + tHeader = []string{"Addon Name", "Profile", "Status", "Maintainer"} + } + if printDocs { + tHeader = append(tHeader, "Docs") } - sort.Strings(addonNames) + table.Header(tHeader) + // Create table data var tData [][]string - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Addon Name", "Profile", "Status", "Maintainer"}) - table.SetAutoFormatHeaders(true) - table.SetBorders(tablewriter.Border{Left: true, Top: true, Right: true, Bottom: true}) - table.SetCenterSeparator("|") - + var temp []string for _, addonName := range addonNames { addonBundle := assets.Addons[addonName] - enabled := addonBundle.IsEnabled(cc) maintainer := addonBundle.Maintainer if maintainer == "" { - maintainer = "unknown (third-party)" + maintainer = "3rd party (unknown)" + } + docs := addonBundle.Docs + if docs == "" { + docs = "n/a" } - tData = append(tData, []string{addonName, cc.Name, fmt.Sprintf("%s %s", stringFromStatus(enabled), iconFromStatus(enabled)), maintainer}) + if cc == nil { + temp = []string{addonName, maintainer} + } else { + enabled := addonBundle.IsEnabled(cc) + temp = []string{addonName, cc.Name, fmt.Sprintf("%s %s", stringFromStatus(enabled), iconFromStatus(enabled)), maintainer} + } + if printDocs { + temp = append(temp, docs) + } + tData = append(tData, temp) + } + if err := table.Bulk(tData); err != nil { + klog.Error("Error rendering table (bulk)", err) + } + if err := table.Render(); err != nil { + klog.Error("Error rendering table", err) } - - table.AppendBulk(tData) - table.Render() - v, _, err := config.ListProfiles() if err != nil { klog.Errorf("list profiles returned error: %v", err) @@ -126,24 +152,28 @@ var printAddonsList = func(cc *config.ClusterConfig) { } var printAddonsJSON = func(cc *config.ClusterConfig) { - addonNames := make([]string, 0, len(assets.Addons)) - for addonName := range assets.Addons { - addonNames = append(addonNames, addonName) - } - sort.Strings(addonNames) - + addonNames := slices.Sorted(maps.Keys(assets.Addons)) addonsMap := map[string]map[string]interface{}{} for _, addonName := range addonNames { + if cc == nil { + addonsMap[addonName] = map[string]interface{}{} + continue + } + addonBundle := assets.Addons[addonName] enabled := addonBundle.IsEnabled(cc) - addonsMap[addonName] = map[string]interface{}{ "Status": stringFromStatus(enabled), "Profile": cc.Name, } + if addonPrintDocs { + addonsMap[addonName]["Maintainer"] = addonBundle.Maintainer + addonsMap[addonName]["Docs"] = addonBundle.Docs + } } - jsonString, _ := json.Marshal(addonsMap) + jsonString, _ := json.Marshal(addonsMap) out.String(string(jsonString)) + } diff --git a/cmd/minikube/cmd/config/addons_list_test.go b/cmd/minikube/cmd/config/addons_list_test.go new file mode 100644 index 000000000000..976e4c83a82c --- /dev/null +++ b/cmd/minikube/cmd/config/addons_list_test.go @@ -0,0 +1,121 @@ +/* +Copyright 2021 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "encoding/json" + "io" + "os" + "strings" + "testing" + + "k8s.io/minikube/pkg/minikube/out" +) + +func TestAddonsList(t *testing.T) { + tests := []struct { + name string + printDocs bool + want int + }{ + {"DisabledDocs", false, 3}, + {"EnabledDocs", true, 4}, + } + + for _, tt := range tests { + t.Run("NonExistingClusterTable"+tt.name, func(t *testing.T) { + r, w, err := os.Pipe() + if err != nil { + t.Fatalf("failed to create pipe: %v", err) + } + defer r.Close() + old := os.Stdout + defer func() { + os.Stdout = old + out.SetOutFile(old) + }() + os.Stdout = w + out.SetOutFile(w) + + done := make(chan string, 1) + go func() { + b, _ := io.ReadAll(r) + done <- string(b) + }() + + printAddonsList(nil, tt.printDocs) + + if err := w.Close(); err != nil { + t.Fatalf("failed to close pipe: %v", err) + } + + s := <-done + lines := strings.Split(s, "\n") + if len(lines) < 3 { + t.Fatalf("failed to read stdout: got %d lines: %q", len(lines), s) + } + + pipeCount := 0 + got := "" + for i := 0; i < 3; i++ { + pipeCount += strings.Count(lines[i], "│") + got += lines[i] + } + // ┌─────────────────────────────┬────────────────────────────────────────┐ + // │ ADDON NAME │ MAINTAINER │ + // ├─────────────────────────────┼────────────────────────────────────────┤ + // ┌─────────────────────────────┬────────────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────┐ + // │ ADDON NAME │ MAINTAINER │ DOCS │ + // ├─────────────────────────────┼────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┤ + + expected := tt.want + if pipeCount != expected { + t.Errorf("Expected header to have %d pipes; got = %d: %q", expected, pipeCount, got) + } + }) + } + + t.Run("NonExistingClusterJSON", func(t *testing.T) { + type addons struct { + Ambassador *interface{} `json:"ambassador"` + } + + r, w, err := os.Pipe() + if err != nil { + t.Fatalf("failed to create pipe: %v", err) + } + old := os.Stdout + defer func() { + os.Stdout = old + out.SetOutFile(os.Stdout) + }() + os.Stdout = w + out.SetOutFile(os.Stdout) + printAddonsJSON(nil) + if err := w.Close(); err != nil { + t.Fatalf("failed to close pipe: %v", err) + } + got := addons{} + dec := json.NewDecoder(r) + if err := dec.Decode(&got); err != nil { + t.Fatalf("failed to decode: %v", err) + } + if got.Ambassador == nil { + t.Errorf("expected `ambassador` field to not be nil, but was") + } + }) +} diff --git a/cmd/minikube/cmd/config/config.go b/cmd/minikube/cmd/config/config.go index 738ac8badc40..a98d72bb13bd 100644 --- a/cmd/minikube/cmd/config/config.go +++ b/cmd/minikube/cmd/config/config.go @@ -75,7 +75,7 @@ var settings = []Setting{ }, { name: "cpus", - set: SetInt, + set: SetString, validations: []setFn{IsValidCPUs}, callbacks: []setFn{RequiresRestartMsg}, }, @@ -102,8 +102,9 @@ var settings = []Setting{ validations: []setFn{IsValidPath}, }, { - name: "kubernetes-version", - set: SetString, + name: "kubernetes-version", + set: SetString, + validDefaults: supportedKubernetesVersions, }, { name: "iso-url", @@ -163,6 +164,14 @@ var settings = []Setting{ name: "native-ssh", set: SetBool, }, + { + name: config.Rootless, + set: SetBool, + }, + { + name: config.MaxAuditEntries, + set: SetInt, + }, } // ConfigCmd represents the config command @@ -171,7 +180,7 @@ var ConfigCmd = &cobra.Command{ Short: "Modify persistent configuration values", Long: `config modifies minikube config files using subcommands like "minikube config set driver kvm2" Configurable fields: ` + "\n\n" + configurableFields(), - Run: func(cmd *cobra.Command, args []string) { + Run: func(cmd *cobra.Command, _ []string) { if err := cmd.Help(); err != nil { klog.ErrorS(err, "help") } diff --git a/cmd/minikube/cmd/config/config_test.go b/cmd/minikube/cmd/config/config_test.go index 56a84b28d04f..e211e78b7ead 100644 --- a/cmd/minikube/cmd/config/config_test.go +++ b/cmd/minikube/cmd/config/config_test.go @@ -38,7 +38,7 @@ func TestHiddenPrint(t *testing.T) { } for _, test := range testCases { b := new(bytes.Buffer) - _, err := b.WriteString(fmt.Sprintf("%s\r\n", test.TestString)) // you need the \r! + _, err := fmt.Fprintf(b, "%s\r\n", test.TestString) // you need the \r! if err != nil { t.Errorf("Could not prepare bytestring") } diff --git a/cmd/minikube/cmd/config/configure.go b/cmd/minikube/cmd/config/configure.go index cfa7dc7a7962..7e7fa646704d 100644 --- a/cmd/minikube/cmd/config/configure.go +++ b/cmd/minikube/cmd/config/configure.go @@ -17,230 +17,260 @@ limitations under the License. package config import ( - "io/ioutil" + "encoding/json" + "errors" + "fmt" "net" + "os" "regexp" + "time" "github.com/spf13/cobra" + "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/addons" + "k8s.io/minikube/pkg/minikube/assets" + "k8s.io/minikube/pkg/minikube/cluster" "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/exit" + "k8s.io/minikube/pkg/minikube/machine" "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" - "k8s.io/minikube/pkg/minikube/service" + "k8s.io/minikube/pkg/minikube/run" "k8s.io/minikube/pkg/minikube/style" + "k8s.io/minikube/pkg/minikube/sysinit" ) +var addonConfigFile = "" +var posResponses = []string{"yes", "y"} +var negResponses = []string{"no", "n"} + +// Typed addon configs +type addonConfig struct { + RegistryCreds registryCredsAddonConfig `json:"registry-creds"` +} + var addonsConfigureCmd = &cobra.Command{ Use: "configure ADDON_NAME", Short: "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list", Long: "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) != 1 { exit.Message(reason.Usage, "usage: minikube addons configure ADDON_NAME") } + options := flags.CommandOptions() + profile := ClusterFlagValue() addon := args[0] + addonConfig := loadAddonConfigFile(addon, addonConfigFile) + // allows for additional prompting of information when enabling addons switch addon { case "registry-creds": - posResponses := []string{"yes", "y"} - negResponses := []string{"no", "n"} - - // Default values - awsAccessID := "changeme" - awsAccessKey := "changeme" - awsSessionToken := "" - awsRegion := "changeme" - awsAccount := "changeme" - awsRole := "changeme" - gcrApplicationDefaultCredentials := "changeme" - dockerServer := "changeme" - dockerUser := "changeme" - dockerPass := "changeme" - gcrURL := "https://gcr.io" - acrURL := "changeme" - acrClientID := "changeme" - acrPassword := "changeme" - - enableAWSECR := AskForYesNoConfirmation("\nDo you want to enable AWS Elastic Container Registry?", posResponses, negResponses) - if enableAWSECR { - awsAccessID = AskForStaticValue("-- Enter AWS Access Key ID: ") - awsAccessKey = AskForStaticValue("-- Enter AWS Secret Access Key: ") - awsSessionToken = AskForStaticValueOptional("-- (Optional) Enter AWS Session Token: ") - awsRegion = AskForStaticValue("-- Enter AWS Region: ") - awsAccount = AskForStaticValue("-- Enter 12 digit AWS Account ID (Comma separated list): ") - awsRole = AskForStaticValueOptional("-- (Optional) Enter ARN of AWS role to assume: ") - } + processRegistryCredsConfig(profile, addonConfig) - enableGCR := AskForYesNoConfirmation("\nDo you want to enable Google Container Registry?", posResponses, negResponses) - if enableGCR { - gcrPath := AskForStaticValue("-- Enter path to credentials (e.g. /home/user/.config/gcloud/application_default_credentials.json):") - gcrchangeURL := AskForYesNoConfirmation("-- Do you want to change the GCR URL (Default https://gcr.io)?", posResponses, negResponses) + case "metallb": + processMetalLBConfig(profile, addonConfig, options) - if gcrchangeURL { - gcrURL = AskForStaticValue("-- Enter GCR URL (e.g. https://asia.gcr.io):") - } + case "ingress": + processIngressConfig(profile, addonConfig, options) - // Read file from disk - dat, err := ioutil.ReadFile(gcrPath) + case "registry-aliases": + processRegistryAliasesConfig(profile, addonConfig, options) - if err != nil { - out.FailureT("Error reading {{.path}}: {{.error}}", out.V{"path": gcrPath, "error": err}) - } else { - gcrApplicationDefaultCredentials = string(dat) - } - } + case "auto-pause": + processAutoPauseConfig(profile, addonConfig, options) - enableDR := AskForYesNoConfirmation("\nDo you want to enable Docker Registry?", posResponses, negResponses) - if enableDR { - dockerServer = AskForStaticValue("-- Enter docker registry server url: ") - dockerUser = AskForStaticValue("-- Enter docker registry username: ") - dockerPass = AskForPasswordValue("-- Enter docker registry password: ") - } + default: + out.FailureT("{{.name}} has no available configuration options", out.V{"name": addon}) + return + } - enableACR := AskForYesNoConfirmation("\nDo you want to enable Azure Container Registry?", posResponses, negResponses) - if enableACR { - acrURL = AskForStaticValue("-- Enter Azure Container Registry (ACR) URL: ") - acrClientID = AskForStaticValue("-- Enter client ID (service principal ID) to access ACR: ") - acrPassword = AskForPasswordValue("-- Enter service principal password to access Azure Container Registry: ") - } + out.SuccessT("{{.name}} was successfully configured", out.V{"name": addon}) + }, +} - cname := ClusterFlagValue() - namespace := "kube-system" - - // Create ECR Secret - err := service.CreateSecret( - cname, - namespace, - "registry-creds-ecr", - map[string]string{ - "AWS_ACCESS_KEY_ID": awsAccessID, - "AWS_SECRET_ACCESS_KEY": awsAccessKey, - "AWS_SESSION_TOKEN": awsSessionToken, - "aws-account": awsAccount, - "aws-region": awsRegion, - "aws-assume-role": awsRole, - }, - map[string]string{ - "app": "registry-creds", - "cloud": "ecr", - "kubernetes.io/minikube-addons": "registry-creds", - }) - if err != nil { - out.FailureT("ERROR creating `registry-creds-ecr` secret: {{.error}}", out.V{"error": err}) - } +func unpauseWholeCluster(co mustload.ClusterController) { + for _, n := range co.Config.Nodes { - // Create GCR Secret - err = service.CreateSecret( - cname, - namespace, - "registry-creds-gcr", - map[string]string{ - "application_default_credentials.json": gcrApplicationDefaultCredentials, - "gcrurl": gcrURL, - }, - map[string]string{ - "app": "registry-creds", - "cloud": "gcr", - "kubernetes.io/minikube-addons": "registry-creds", - }) - - if err != nil { - out.FailureT("ERROR creating `registry-creds-gcr` secret: {{.error}}", out.V{"error": err}) - } + // Use node-name if available, falling back to cluster name + name := n.Name + if n.Name == "" { + name = co.Config.Name + } - // Create Docker Secret - err = service.CreateSecret( - cname, - namespace, - "registry-creds-dpr", - map[string]string{ - "DOCKER_PRIVATE_REGISTRY_SERVER": dockerServer, - "DOCKER_PRIVATE_REGISTRY_USER": dockerUser, - "DOCKER_PRIVATE_REGISTRY_PASSWORD": dockerPass, - }, - map[string]string{ - "app": "registry-creds", - "cloud": "dpr", - "kubernetes.io/minikube-addons": "registry-creds", - }) - - if err != nil { - out.WarningT("ERROR creating `registry-creds-dpr` secret") - } + out.Step(style.Pause, "Unpausing node {{.name}} ... ", out.V{"name": name}) - // Create Azure Container Registry Secret - err = service.CreateSecret( - cname, - namespace, - "registry-creds-acr", - map[string]string{ - "ACR_URL": acrURL, - "ACR_CLIENT_ID": acrClientID, - "ACR_PASSWORD": acrPassword, - }, - map[string]string{ - "app": "registry-creds", - "cloud": "acr", - "kubernetes.io/minikube-addons": "registry-creds", - }) - - if err != nil { - out.WarningT("ERROR creating `registry-creds-acr` secret") - } + machineName := config.MachineName(*co.Config, n) + host, err := machine.LoadHost(co.API, machineName) + if err != nil { + exit.Error(reason.GuestLoadHost, "Error getting host", err) + } - case "metallb": - profile := ClusterFlagValue() - _, cfg := mustload.Partial(profile) + r, err := machine.CommandRunner(host) + if err != nil { + exit.Error(reason.InternalCommandRunner, "Failed to get command runner", err) + } - validator := func(s string) bool { - return net.ParseIP(s) != nil - } + cr, err := cruntime.New(cruntime.Config{Type: co.Config.KubernetesConfig.ContainerRuntime, Runner: r}) + if err != nil { + exit.Error(reason.InternalNewRuntime, "Failed runtime", err) + } - if cfg.KubernetesConfig.LoadBalancerStartIP == "" { - cfg.KubernetesConfig.LoadBalancerStartIP = AskForStaticValidatedValue("-- Enter Load Balancer Start IP: ", validator) - } + _, err = cluster.Unpause(cr, r, nil) // nil means all namespaces + if err != nil { + exit.Error(reason.GuestUnpause, "Pause", err) + } + } +} - if cfg.KubernetesConfig.LoadBalancerEndIP == "" { - cfg.KubernetesConfig.LoadBalancerEndIP = AskForStaticValidatedValue("-- Enter Load Balancer End IP: ", validator) - } +func init() { + addonsConfigureCmd.Flags().StringVarP(&addonConfigFile, "config-file", "f", "", "An optional configuration file to read addon specific configs from instead of being prompted each time.") + AddonsCmd.AddCommand(addonsConfigureCmd) +} - if err := config.SaveProfile(profile, cfg); err != nil { - out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile}) - } +// Helper method to load a config file for addons +func loadAddonConfigFile(addon, configFilePath string) (ac *addonConfig) { + type configFile struct { + Addons addonConfig `json:"addons"` + } + var cf configFile + + if configFilePath != "" { + out.Ln("Reading %s configs from %s", addon, configFilePath) + confData, err := os.ReadFile(configFilePath) + if err != nil && errors.Is(err, os.ErrNotExist) { // file does not exist + klog.Warningf("config file (%s) does not exist: %v", configFilePath, err) + exit.Message(reason.Usage, "config file does not exist") + } - // Re-enable metallb addon in order to generate template manifest files with Load Balancer Start/End IP - if err := addons.EnableOrDisableAddon(cfg, "metallb", "true"); err != nil { - out.ErrT(style.Fatal, "Failed to configure metallb IP {{.profile}}", out.V{"profile": profile}) - } - case "ingress": - profile := ClusterFlagValue() - _, cfg := mustload.Partial(profile) + if err != nil { // file cannot be opened + klog.Errorf("error opening config file (%s): %v", configFilePath, err) + // err = errors2.Wrapf(err, "config file (%s) does not exist", configFilePath) + exit.Message(reason.Kind{ExitCode: reason.ExProgramConfig, Advice: "provide a valid config file"}, + fmt.Sprintf("error opening config file: %s", configFilePath)) + } - validator := func(s string) bool { - format := regexp.MustCompile("^.+/.+$") - return format.MatchString(s) - } + if err = json.Unmarshal(confData, &cf); err != nil { + // err = errors2.Wrapf(err, "error reading config file (%s)", configFilePath) + klog.Errorf("error reading config file (%s): %v", configFilePath, err) + exit.Message(reason.Kind{ExitCode: reason.ExProgramConfig, Advice: "provide a valid config file"}, + fmt.Sprintf("error reading config file: %v", err)) + } + } - if cfg.KubernetesConfig.CustomIngressCert == "" { - cfg.KubernetesConfig.CustomIngressCert = AskForStaticValidatedValue("-- Enter custom cert(format is \"namespace/secret\"): ", validator) - } + return &cf.Addons +} - if err := config.SaveProfile(profile, cfg); err != nil { - out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile}) - } +// Processes metallb addon config from configFile if it exists otherwise resorts to default behavior +func processMetalLBConfig(profile string, _ *addonConfig, options *run.CommandOptions) { + _, cfg := mustload.Partial(profile, options) - default: - out.FailureT("{{.name}} has no available configuration options", out.V{"name": addon}) + validator := func(s string) bool { + return net.ParseIP(s) != nil + } + + cfg.KubernetesConfig.LoadBalancerStartIP = AskForStaticValidatedValue("-- Enter Load Balancer Start IP: ", validator) + + cfg.KubernetesConfig.LoadBalancerEndIP = AskForStaticValidatedValue("-- Enter Load Balancer End IP: ", validator) + + if err := config.SaveProfile(profile, cfg); err != nil { + out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile}) + } + + // Re-enable metallb addon in order to generate template manifest files with Load Balancer Start/End IP + if err := addons.EnableOrDisableAddon(cfg, "metallb", "true", options); err != nil { + out.ErrT(style.Fatal, "Failed to configure metallb IP {{.profile}}", out.V{"profile": profile}) + } +} + +// Processes ingress addon config from configFile if it exists otherwise resorts to default behavior +func processIngressConfig(profile string, _ *addonConfig, options *run.CommandOptions) { + _, cfg := mustload.Partial(profile, options) + + validator := func(s string) bool { + format := regexp.MustCompile("^.+/.+$") + return format.MatchString(s) + } + + customCert := AskForStaticValidatedValue("-- Enter custom cert (format is \"namespace/secret\"): ", validator) + if cfg.KubernetesConfig.CustomIngressCert != "" { + overwrite := AskForYesNoConfirmation("A custom cert for ingress has already been set. Do you want overwrite it?", posResponses, negResponses) + if !overwrite { return } + } - out.SuccessT("{{.name}} was successfully configured", out.V{"name": addon}) - }, + cfg.KubernetesConfig.CustomIngressCert = customCert + + if err := config.SaveProfile(profile, cfg); err != nil { + out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile}) + } } -func init() { - AddonsCmd.AddCommand(addonsConfigureCmd) +// Processes auto-pause addon config from configFile if it exists otherwise resorts to default behavior +func processAutoPauseConfig(profile string, _ *addonConfig, options *run.CommandOptions) { + lapi, cfg := mustload.Partial(profile, options) + intervalInput := AskForStaticValue("-- Enter interval time of auto-pause-interval (ex. 1m0s): ") + intervalTime, err := time.ParseDuration(intervalInput) + if err != nil { + out.ErrT(style.Fatal, "Interval is an invalid duration: {{.error}}", out.V{"error": err}) + } + + if intervalTime != intervalTime.Abs() || intervalTime.String() == "0s" { + out.ErrT(style.Fatal, "Interval must be greater than 0s") + } + + cfg.AutoPauseInterval = intervalTime + if err = config.SaveProfile(profile, cfg); err != nil { + out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile}) + } + + addon := assets.Addons["auto-pause"] + if addon.IsEnabled(cfg) { + + // see #17945: restart auto-pause service + p, err := config.LoadProfile(profile) + if err != nil { + out.ErrT(style.Fatal, "failed to load profile: {{.error}}", out.V{"error": err}) + } + if profileStatus(p, lapi).StatusCode/100 == 2 { // 2xx code + co := mustload.Running(profile, options) + // first unpause all nodes cluster immediately + unpauseWholeCluster(co) + // Re-enable auto-pause addon in order to update interval time + if err := addons.EnableOrDisableAddon(cfg, "auto-pause", "true", options); err != nil { + out.ErrT(style.Fatal, "Failed to configure auto-pause {{.profile}}", out.V{"profile": profile}) + } + // restart auto-pause service + if err := sysinit.New(co.CP.Runner).Restart("auto-pause"); err != nil { + out.ErrT(style.Fatal, "failed to restart auto-pause: {{.error}}", out.V{"error": err}) + } + } + } +} + +// Processes registry-aliases addon config from configFile if it exists otherwise resorts to default behavior +func processRegistryAliasesConfig(profile string, _ *addonConfig, options *run.CommandOptions) { + _, cfg := mustload.Partial(profile, options) + validator := func(s string) bool { + format := regexp.MustCompile(`^([a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+)+(\ [a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+)*$`) + return format.MatchString(s) + } + registryAliases := AskForStaticValidatedValue("-- Enter registry aliases separated by space: ", validator) + cfg.KubernetesConfig.RegistryAliases = registryAliases + + if err := config.SaveProfile(profile, cfg); err != nil { + out.ErrT(style.Fatal, "Failed to save config {{.profile}}", out.V{"profile": profile}) + } + + addon := assets.Addons["registry-aliases"] + if addon.IsEnabled(cfg) { + // Re-enable registry-aliases addon in order to generate template manifest files with custom hosts + if err := addons.EnableOrDisableAddon(cfg, "registry-aliases", "true", options); err != nil { + out.ErrT(style.Fatal, "Failed to configure registry-aliases {{.profile}}", out.V{"profile": profile}) + } + } } diff --git a/cmd/minikube/cmd/config/configure_registry_creds.go b/cmd/minikube/cmd/config/configure_registry_creds.go new file mode 100644 index 000000000000..8a6da86eabf9 --- /dev/null +++ b/cmd/minikube/cmd/config/configure_registry_creds.go @@ -0,0 +1,281 @@ +/* +Copyright 2025 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "os" + + "k8s.io/minikube/pkg/minikube/exit" + "k8s.io/minikube/pkg/minikube/out" + "k8s.io/minikube/pkg/minikube/reason" + "k8s.io/minikube/pkg/minikube/service" +) + +const configDefaultValue = "changeme" + +// Top level configs for RegistryCreds addons +type registryCredsAddonConfig struct { + EnableAWSEcr string `json:"enableAWSEcr"` + EcrConfigs registryCredsAddonConfigAWSEcr `json:"awsEcrConfigs"` + + EnableGCR string `json:"enableGCR"` + GcrConfigs registryCredsAddonConfigGCR `json:"gcrConfigs"` + + EnableDockerRegistry string `json:"enableDockerRegistry"` + DockerConfigs registryCredsAddonConfigDocker `json:"dockerConfigs"` + + EnableACR string `json:"enableACR"` + AcrConfigs registryCredsAddonConfigACR `json:"acrConfigs"` +} + +// Registry Creds addon config for AWS ECR +type registryCredsAddonConfigAWSEcr struct { + AccessID string `json:"awsAccessID"` + AccessKey string `json:"awsAccessKey"` + SessionToken string `json:"awsSessionToken"` + Region string `json:"awsRegion"` + Account string `json:"awsAccount"` + Role string `json:"awsRole"` +} + +// Registry Creds addon config for GCR +type registryCredsAddonConfigGCR struct { + GcrPath string `json:"gcrPath"` + GcrURL string `json:"gcrURL"` +} + +// Registry Creds addon config for Docker Registry +type registryCredsAddonConfigDocker struct { + DockerServer string `json:"dockerServer"` + DockerUser string `json:"dockerUser"` + DockerPass string `json:"dockerPass"` +} + +// Registry Creds addon config for Docker Azure container registry +type registryCredsAddonConfigACR struct { + AcrURL string `json:"acrURL"` + AcrClientID string `json:"acrClientID"` + AcrPassword string `json:"acrPassword"` +} + +// Processes registry-creds addon config from configFile if it exists otherwise resorts to default behavior +func processRegistryCredsConfig(profile string, ac *addonConfig) { + // Default values + awsAccessID := configDefaultValue + awsAccessKey := configDefaultValue + awsSessionToken := "" + awsRegion := configDefaultValue + awsAccount := configDefaultValue + awsRole := configDefaultValue + gcrApplicationDefaultCredentials := configDefaultValue + dockerServer := configDefaultValue + dockerUser := configDefaultValue + dockerPass := configDefaultValue + gcrURL := "https://gcr.io" + acrURL := configDefaultValue + acrClientID := configDefaultValue + acrPassword := configDefaultValue + + regCredsConf := &ac.RegistryCreds + awsEcrAction := regCredsConf.EnableAWSEcr // regCredsConf. "enableAWSEcr") + + switch awsEcrAction { + case "prompt", "": + enableAWSECR := AskForYesNoConfirmation("\nDo you want to enable AWS Elastic Container Registry?", posResponses, negResponses) + if enableAWSECR { + awsAccessID = AskForStaticValue("-- Enter AWS Access Key ID: ") + awsAccessKey = AskForStaticValue("-- Enter AWS Secret Access Key: ") + awsSessionToken = AskForStaticValueOptional("-- (Optional) Enter AWS Session Token: ") + awsRegion = AskForStaticValue("-- Enter AWS Region: ") + awsAccount = AskForStaticValue("-- Enter 12 digit AWS Account ID (Comma separated list): ") + awsRole = AskForStaticValueOptional("-- (Optional) Enter ARN of AWS role to assume: ") + } + case "enable": + out.Ln("Loading AWS ECR configs from: %s", addonConfigFile) + // Then read the configs + awsAccessID = regCredsConf.EcrConfigs.AccessID + awsAccessKey = regCredsConf.EcrConfigs.AccessKey + awsSessionToken = regCredsConf.EcrConfigs.SessionToken + awsRegion = regCredsConf.EcrConfigs.Region + awsAccount = regCredsConf.EcrConfigs.Account + awsRole = regCredsConf.EcrConfigs.Role + case "disable": + out.Ln("Ignoring AWS ECR configs") + default: + out.Ln("Disabling AWS ECR. Invalid value for enableAWSEcr (%s). Must be one of 'disable', 'enable' or 'prompt'", awsEcrAction) + } + + gcrPath := "" + gcrAction := regCredsConf.EnableGCR + + switch gcrAction { + case "prompt", "": + enableGCR := AskForYesNoConfirmation("\nDo you want to enable Google Container Registry?", posResponses, negResponses) + if enableGCR { + gcrPath = AskForStaticValue("-- Enter path to credentials (e.g. /home/user/.config/gcloud/application_default_credentials.json):") + gcrchangeURL := AskForYesNoConfirmation("-- Do you want to change the GCR URL (Default https://gcr.io)?", posResponses, negResponses) + + if gcrchangeURL { + gcrURL = AskForStaticValue("-- Enter GCR URL (e.g. https://asia.gcr.io):") + } + } + case "enable": + out.Ln("Loading GCR configs from: %s", addonConfigFile) + // Then read the configs + gcrPath = regCredsConf.GcrConfigs.GcrPath + gcrURL = regCredsConf.GcrConfigs.GcrURL + case "disable": + out.Ln("Ignoring GCR configs") + default: + out.Ln("Disabling GCR. Invalid value for enableGCR (%s). Must be one of 'disable', 'enable' or 'prompt'", gcrAction) + } + + if gcrPath != "" { + // Read file from disk + dat, err := os.ReadFile(gcrPath) + + if err != nil { + exit.Message(reason.Usage, "Error reading {{.path}}: {{.error}}", out.V{"path": gcrPath, "error": err}) + } else { + gcrApplicationDefaultCredentials = string(dat) + } + } + + dockerRegistryAction := regCredsConf.EnableDockerRegistry + + switch dockerRegistryAction { + case "prompt", "": + enableDR := AskForYesNoConfirmation("\nDo you want to enable Docker Registry?", posResponses, negResponses) + if enableDR { + dockerServer = AskForStaticValue("-- Enter docker registry server url: ") + dockerUser = AskForStaticValue("-- Enter docker registry username: ") + dockerPass = AskForPasswordValue("-- Enter docker registry password: ") + } + case "enable": + out.Ln("Loading Docker Registry configs from: %s", addonConfigFile) + dockerServer = regCredsConf.DockerConfigs.DockerServer + dockerUser = regCredsConf.DockerConfigs.DockerUser + dockerPass = regCredsConf.DockerConfigs.DockerPass + case "disable": + out.Ln("Ignoring Docker Registry configs") + default: + out.Ln("Disabling Docker Registry. Invalid value for enableDockerRegistry (%s). Must be one of 'disable', 'enable' or 'prompt'", dockerRegistryAction) + } + + acrAction := regCredsConf.EnableACR + + switch acrAction { + case "prompt", "": + enableACR := AskForYesNoConfirmation("\nDo you want to enable Azure Container Registry?", posResponses, negResponses) + if enableACR { + acrURL = AskForStaticValue("-- Enter Azure Container Registry (ACR) URL: ") + acrClientID = AskForStaticValue("-- Enter client ID (service principal ID) to access ACR: ") + acrPassword = AskForPasswordValue("-- Enter service principal password to access Azure Container Registry: ") + } + case "enable": + out.Ln("Loading ACR configs from: ", addonConfigFile) + acrURL = regCredsConf.AcrConfigs.AcrURL + acrClientID = regCredsConf.AcrConfigs.AcrClientID + acrPassword = regCredsConf.AcrConfigs.AcrPassword + case "disable": + out.Ln("Ignoring ACR configs") + default: + out.Stringf("Disabling ACR. Invalid value for enableACR (%s). Must be one of 'disable', 'enable' or 'prompt'", acrAction) + } + + namespace := "kube-system" + + // Create ECR Secret + err := service.CreateSecret( + profile, + namespace, + "registry-creds-ecr", + map[string]string{ + "AWS_ACCESS_KEY_ID": awsAccessID, + "AWS_SECRET_ACCESS_KEY": awsAccessKey, + "AWS_SESSION_TOKEN": awsSessionToken, + "aws-account": awsAccount, + "aws-region": awsRegion, + "aws-assume-role": awsRole, + }, + map[string]string{ + "app": "registry-creds", + "cloud": "ecr", + "kubernetes.io/minikube-addons": "registry-creds", + }) + if err != nil { + exit.Message(reason.InternalCommandRunner, "ERROR creating `registry-creds-ecr` secret: {{.error}}", out.V{"error": err}) + } + + // Create GCR Secret + err = service.CreateSecret( + profile, + namespace, + "registry-creds-gcr", + map[string]string{ + "application_default_credentials.json": gcrApplicationDefaultCredentials, + "gcrurl": gcrURL, + }, + map[string]string{ + "app": "registry-creds", + "cloud": "gcr", + "kubernetes.io/minikube-addons": "registry-creds", + }) + + if err != nil { + exit.Message(reason.InternalCommandRunner, "ERROR creating `registry-creds-gcr` secret: {{.error}}", out.V{"error": err}) + } + + // Create Docker Secret + err = service.CreateSecret( + profile, + namespace, + "registry-creds-dpr", + map[string]string{ + "DOCKER_PRIVATE_REGISTRY_SERVER": dockerServer, + "DOCKER_PRIVATE_REGISTRY_USER": dockerUser, + "DOCKER_PRIVATE_REGISTRY_PASSWORD": dockerPass, + }, + map[string]string{ + "app": "registry-creds", + "cloud": "dpr", + "kubernetes.io/minikube-addons": "registry-creds", + }) + + if err != nil { + out.WarningT("ERROR creating `registry-creds-dpr` secret") + } + + // Create Azure Container Registry Secret + err = service.CreateSecret( + profile, + namespace, + "registry-creds-acr", + map[string]string{ + "ACR_URL": acrURL, + "ACR_CLIENT_ID": acrClientID, + "ACR_PASSWORD": acrPassword, + }, + map[string]string{ + "app": "registry-creds", + "cloud": "acr", + "kubernetes.io/minikube-addons": "registry-creds", + }) + if err != nil { + out.WarningT("ERROR creating `registry-creds-acr` secret") + } +} diff --git a/cmd/minikube/cmd/config/defaults.go b/cmd/minikube/cmd/config/defaults.go index 180747088007..b21733d66a6e 100644 --- a/cmd/minikube/cmd/config/defaults.go +++ b/cmd/minikube/cmd/config/defaults.go @@ -21,32 +21,31 @@ import ( "fmt" "strings" - "github.com/pkg/errors" "github.com/spf13/cobra" + "gopkg.in/yaml.v2" + "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/out" + "k8s.io/minikube/pkg/minikube/reason" ) +var defaultsOutput string + var configDefaultsCommand = &cobra.Command{ Use: "defaults PROPERTY_NAME", Short: "Lists all valid default values for PROPERTY_NAME", Long: `list displays all valid default settings for PROPERTY_NAME Acceptable fields: ` + "\n\n" + fieldsWithDefaults(), - RunE: func(cmd *cobra.Command, args []string) error { - if len(args) == 0 { - cmd.SilenceErrors = true - return errors.New("not enough arguments.\nusage: minikube config list PROPERTY_NAME") - } - if len(args) > 1 { + Run: func(cmd *cobra.Command, args []string) { + if len(args) != 1 { cmd.SilenceErrors = true - return fmt.Errorf("too many arguments (%d)\nusage: minikube config list PROPERTY_NAME", len(args)) + exit.Message(reason.Usage, "usage: minikube config list PROPERTY_NAME") } - property := args[0] defaults, err := getDefaults(property) if err != nil { - return err + exit.Message(reason.Usage, "error getting defaults: {{.error}}", out.V{"error": err}) } - return printDefaults(defaults) + printDefaults(defaults) }, } @@ -61,19 +60,27 @@ func getDefaults(property string) ([]string, error) { return setting.validDefaults(), nil } -func printDefaults(defaults []string) error { - if output == "json" { +func printDefaults(defaults []string) { + switch strings.ToLower(defaultsOutput) { + case "": + for _, d := range defaults { + out.Ln("* %s", d) + } + case "json": encoding, err := json.Marshal(defaults) if err != nil { - return errors.Wrap(err, "encoding json") + exit.Error(reason.InternalJSONMarshal, "json encoding failure", err) } out.Ln(string(encoding)) - return nil - } - for _, d := range defaults { - out.Ln("* %s", d) + case "yaml": + encoding, err := yaml.Marshal(defaults) + if err != nil { + exit.Error(reason.InternalYamlMarshal, "yaml encoding failure", err) + } + out.Ln(string(encoding)) + default: + exit.Message(reason.InternalOutputUsage, "error: --output must be 'yaml' or 'json'") } - return nil } func fieldsWithDefaults() string { @@ -87,6 +94,6 @@ func fieldsWithDefaults() string { } func init() { - configDefaultsCommand.Flags().StringVar(&output, "output", "", "Output format. Accepted values: [json]") + configDefaultsCommand.Flags().StringVarP(&defaultsOutput, "output", "o", "", "Output format. Accepted values: [json, yaml]") ConfigCmd.AddCommand(configDefaultsCommand) } diff --git a/cmd/minikube/cmd/config/defaults_test.go b/cmd/minikube/cmd/config/defaults_test.go index e87b214e2738..5fbc69fca4b0 100644 --- a/cmd/minikube/cmd/config/defaults_test.go +++ b/cmd/minikube/cmd/config/defaults_test.go @@ -77,12 +77,10 @@ func TestPrintDefaults(t *testing.T) { } for _, tc := range tcs { t.Run(tc.description, func(t *testing.T) { - output = tc.format + defaultsOutput = tc.format f := tests.NewFakeFile() out.SetOutFile(f) - if err := printDefaults(defaults); err != nil { - t.Fatalf("error printing defaults: %v", err) - } + printDefaults(defaults) if f.String() != tc.expected { t.Fatalf("Expected: %v\n Actual: %v\n", tc.expected, f.String()) } diff --git a/cmd/minikube/cmd/config/disable.go b/cmd/minikube/cmd/config/disable.go index cdf31b934da2..5c7293189336 100644 --- a/cmd/minikube/cmd/config/disable.go +++ b/cmd/minikube/cmd/config/disable.go @@ -18,8 +18,11 @@ package config import ( "github.com/spf13/cobra" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/addons" + "k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/exit" + "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" "k8s.io/minikube/pkg/minikube/style" @@ -29,20 +32,32 @@ var addonsDisableCmd = &cobra.Command{ Use: "disable ADDON_NAME", Short: "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ", Long: "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) != 1 { exit.Message(reason.Usage, "usage: minikube addons disable ADDON_NAME") } + options := flags.CommandOptions() + _, cc := mustload.Partial(ClusterFlagValue(), options) + err := addons.VerifyNotPaused(ClusterFlagValue(), false, options) + if err != nil { + exit.Error(reason.InternalAddonDisablePaused, "disable failed", err) + } addon := args[0] if addon == "heapster" { exit.Message(reason.AddonUnsupported, "The heapster addon is depreciated. please try to disable metrics-server instead") } - err := addons.SetAndSave(ClusterFlagValue(), addon, "false") - if err != nil { - exit.Error(reason.InternalAddonDisable, "disable failed", err) + validAddon, ok := assets.Addons[addon] + if !ok { + exit.Message(reason.AddonUnsupported, `"'{{.minikube_addon}}' is not a valid minikube addon`, out.V{"minikube_addon": addon}) + } + if validAddon.IsEnabled(cc) { + err = addons.SetAndSave(ClusterFlagValue(), addon, "false", options) + if err != nil { + exit.Error(reason.InternalAddonDisable, "disable failed", err) + } } - out.Step(style.AddonDisable, `"The '{{.minikube_addon}}' addon is disabled`, out.V{"minikube_addon": addon}) + out.Styled(style.AddonDisable, `"The '{{.minikube_addon}}' addon is disabled`, out.V{"minikube_addon": addon}) }, } diff --git a/cmd/minikube/cmd/config/enable.go b/cmd/minikube/cmd/config/enable.go index 788a9477ae91..9ce2cd043959 100644 --- a/cmd/minikube/cmd/config/enable.go +++ b/cmd/minikube/cmd/config/enable.go @@ -17,14 +17,17 @@ limitations under the License. package config import ( - "fmt" + "errors" "github.com/spf13/cobra" "github.com/spf13/viper" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/addons" + "k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/exit" + "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" "k8s.io/minikube/pkg/minikube/style" @@ -35,39 +38,71 @@ var addonsEnableCmd = &cobra.Command{ Short: "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ", Long: "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ", Example: "minikube addons enable dashboard", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) != 1 { exit.Message(reason.Usage, "usage: minikube addons enable ADDON_NAME") } - addon := args[0] - // replace heapster as metrics-server because heapster is deprecated - if addon == "heapster" { - out.Styled(style.Waiting, "using metrics-server addon, heapster is deprecated") - addon = "metrics-server" + + options := flags.CommandOptions() + _, cc := mustload.Partial(ClusterFlagValue(), options) + if cc.KubernetesConfig.KubernetesVersion == constants.NoKubernetesVersion { + exit.Message(reason.Usage, "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable") } - viper.Set(config.AddonImages, images) - viper.Set(config.AddonRegistries, registries) - err := addons.SetAndSave(ClusterFlagValue(), addon, "true") + + err := addons.VerifyNotPaused(ClusterFlagValue(), true, options) if err != nil { - exit.Error(reason.InternalAddonEnable, "enable failed", err) + exit.Error(reason.InternalAddonEnablePaused, "enabled failed", err) } - if addon == "dashboard" { - tipProfileArg := "" - if ClusterFlagValue() != constants.DefaultClusterName { - tipProfileArg = fmt.Sprintf(" -p %s", ClusterFlagValue()) + addon := args[0] + isDeprecated, replacement, msg := addons.Deprecations(addon) + if isDeprecated && replacement == "" { + exit.Message(reason.InternalAddonEnable, msg) + } else if isDeprecated { + out.Styled(style.Waiting, msg) + addon = replacement + } + addonBundle, ok := assets.Addons[addon] + if ok { + maintainer := addonBundle.Maintainer + if isOfficialMaintainer(maintainer) { + out.Styled(style.Tip, `{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub. +You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS`, + out.V{"addon": addon, "maintainer": maintainer}) + } else { + out.Styled(style.Warning, `{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.`, + out.V{"addon": addon}) + if addonBundle.VerifiedMaintainer != "" { + out.Styled(style.Tip, `{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.`, + out.V{"addon": addon, "maintainer": maintainer, "verifiedMaintainer": addonBundle.VerifiedMaintainer}) + } else { + out.Styled(style.Warning, `{{.addon}} does not currently have an associated maintainer.`, + out.V{"addon": addon}) + } } - out.Styled(style.Tip, `Some dashboard features require the metrics-server addon. To enable all features please run: - - minikube{{.profileArg}} addons enable metrics-server - -`, out.V{"profileArg": tipProfileArg}) - } - - out.Step(style.AddonEnable, "The '{{.addonName}}' addon is enabled", out.V{"addonName": addon}) + if images != "" { + viper.Set(config.AddonImages, images) + } + if registries != "" { + viper.Set(config.AddonRegistries, registries) + } + err = addons.SetAndSave(ClusterFlagValue(), addon, "true", options) + if err != nil && !errors.Is(err, addons.ErrSkipThisAddon) { + exit.Error(reason.InternalAddonEnable, "enable failed", err) + } + if err == nil { + out.Step(style.AddonEnable, "The '{{.addonName}}' addon is enabled", out.V{"addonName": addon}) + } }, } +func isOfficialMaintainer(maintainer string) bool { + // using map[string]struct{} as an empty struct occupies 0 bytes in memory + officialMaintainers := map[string]struct{}{"Google": {}, "Kubernetes": {}, "minikube": {}} + _, ok := officialMaintainers[maintainer] + return ok +} + var ( images string registries string diff --git a/cmd/minikube/cmd/config/get_test.go b/cmd/minikube/cmd/config/get_test.go index 34d5b0ffac39..56a199e21cf0 100644 --- a/cmd/minikube/cmd/config/get_test.go +++ b/cmd/minikube/cmd/config/get_test.go @@ -31,7 +31,7 @@ func TestGetNotFound(t *testing.T) { func TestGetOK(t *testing.T) { createTestConfig(t) name := "driver" - err := Set(name, "virtualbox") + err := Set(name, "ssh") if err != nil { t.Fatalf("Set returned error for property %s, %+v", name, err) } @@ -39,7 +39,7 @@ func TestGetOK(t *testing.T) { if err != nil { t.Fatalf("Get returned error for property %s, %+v", name, err) } - if val != "virtualbox" { - t.Fatalf("Get returned %s, expected virtualbox", val) + if val != "ssh" { + t.Fatalf("Get returned %s, expected ssh", val) } } diff --git a/cmd/minikube/cmd/config/images.go b/cmd/minikube/cmd/config/images.go index c18ab35d7c85..97a7b9b7f081 100644 --- a/cmd/minikube/cmd/config/images.go +++ b/cmd/minikube/cmd/config/images.go @@ -17,54 +17,98 @@ limitations under the License. package config import ( + "encoding/json" + "fmt" "os" + "strings" "github.com/olekukonko/tablewriter" + "github.com/olekukonko/tablewriter/tw" "github.com/spf13/cobra" + "k8s.io/klog/v2" "k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" ) +var addonImagesOutput string + var addonsImagesCmd = &cobra.Command{ Use: "images ADDON_NAME", Short: "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list", Long: "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list", Example: "minikube addons images ingress", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) != 1 { exit.Message(reason.Usage, "usage: minikube addons images ADDON_NAME") } addon := args[0] - // allows for additional prompting of information when enabling addons - if conf, ok := assets.Addons[addon]; ok { - if conf.Images != nil { - out.Infof("{{.name}} has following images:", out.V{"name": addon}) - - var tData [][]string - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Image Name", "Default Image", "Default Registry"}) - table.SetAutoFormatHeaders(true) - table.SetBorders(tablewriter.Border{Left: true, Top: true, Right: true, Bottom: true}) - table.SetCenterSeparator("|") - - for imageName, defaultImage := range conf.Images { - tData = append(tData, []string{imageName, defaultImage, conf.Registries[imageName]}) - } - - table.AppendBulk(tData) - table.Render() - } else { - out.Infof("{{.name}} doesn't have images.", out.V{"name": addon}) + + switch strings.ToLower(addonImagesOutput) { + case "table": + printAddonImagesTable(addon) + case "json": + printAddonImagesJSON(addon) + default: + exit.Message(reason.Usage, fmt.Sprintf("invalid output format: %s. Valid values: 'table', 'json'", addonImagesOutput)) + } + }, +} + +func printAddonImagesTable(addon string) { + // allows for additional prompting of information when enabling addons + if conf, ok := assets.Addons[addon]; ok { + if conf.Images != nil { + out.Infof("{{.name}} has the following images:", out.V{"name": addon}) + + var tData [][]string + table := tablewriter.NewWriter(os.Stdout) + table.Header([]string{"Image Name", "Default Image", "Default Registry"}) + table.Header("Image Name", "Default Image", "Default Registry") + table.Options( + tablewriter.WithHeaderAutoFormat(tw.On), + ) + + for imageName, defaultImage := range conf.Images { + tData = append(tData, []string{imageName, defaultImage, conf.Registries[imageName]}) + } + + if err := table.Bulk(tData); err != nil { + klog.Error("Error rendering table (bulk)", err) + } + if err := table.Render(); err != nil { + klog.Error("Error rendering table", err) } } else { - out.FailureT("No such addon {{.name}}", out.V{"name": addon}) + out.Infof("{{.name}} doesn't have images.", out.V{"name": addon}) } - }, + } else { + out.FailureT("No such addon {{.name}}", out.V{"name": addon}) + } +} + +func printAddonImagesJSON(addon string) { + if conf, ok := assets.Addons[addon]; ok { + if conf.Images != nil { + var data []string + + for imageName, defaultImage := range conf.Images { + data = append(data, conf.Registries[imageName]+"/"+defaultImage) + } + + jsonString, _ := json.Marshal(data) + out.String(string(jsonString)) + } else { + out.String("[]") + } + } else { + out.FailureT("No such addon {{.name}}", out.V{"name": addon}) + } } func init() { + addonsImagesCmd.Flags().StringVarP(&addonImagesOutput, "output", "o", "table", "minikube addons images ADDON_NAME --output OUTPUT. table, json") AddonsCmd.AddCommand(addonsImagesCmd) } diff --git a/cmd/minikube/cmd/config/kubernetes_version.go b/cmd/minikube/cmd/config/kubernetes_version.go new file mode 100644 index 000000000000..c968dfc39f3d --- /dev/null +++ b/cmd/minikube/cmd/config/kubernetes_version.go @@ -0,0 +1,54 @@ +/* +Copyright 2022 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "context" + "net/http" + + "github.com/google/go-github/v80/github" + "golang.org/x/mod/semver" + "k8s.io/minikube/pkg/minikube/constants" +) + +// supportedKubernetesVersions returns reverse-sort supported Kubernetes releases that are in [constants.OldestKubernetesVersion, constants.NewestKubernetesVersion] range, including prereleases. +func supportedKubernetesVersions() (releases []string) { + minver := constants.OldestKubernetesVersion + maxver := constants.NewestKubernetesVersion + + for _, ver := range constants.ValidKubernetesVersions { + if (minver != "" && semver.Compare(minver, ver) == 1) || (maxver != "" && semver.Compare(ver, maxver) == 1) { + continue + } + releases = append(releases, ver) + } + return releases +} + +// IsInGitHubKubernetesVersions checks whether ver is in the GitHub list of K8s versions +func IsInGitHubKubernetesVersions(ver string) (bool, error) { + ghc := github.NewClient(nil) + + _, resp, err := ghc.Repositories.GetReleaseByTag(context.Background(), "kubernetes", "kubernetes", ver) + if err != nil { + if resp != nil && resp.StatusCode == http.StatusNotFound { + return false, nil + } + return false, err + } + return true, nil +} diff --git a/cmd/minikube/cmd/config/open.go b/cmd/minikube/cmd/config/open.go index 09e22eb5a82d..3db8897b46b1 100644 --- a/cmd/minikube/cmd/config/open.go +++ b/cmd/minikube/cmd/config/open.go @@ -21,6 +21,7 @@ import ( "text/template" "github.com/spf13/cobra" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/browser" "k8s.io/minikube/pkg/minikube/exit" @@ -46,21 +47,23 @@ var addonsOpenCmd = &cobra.Command{ Use: "open ADDON_NAME", Short: "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ", Long: "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ", - PreRun: func(cmd *cobra.Command, args []string) { + PreRun: func(_ *cobra.Command, _ []string) { t, err := template.New("addonsURL").Parse(addonsURLFormat) if err != nil { exit.Message(reason.Usage, "The value passed to --format is invalid: {{.error}}", out.V{"error": err}) } addonsURLTemplate = t }, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) != 1 { exit.Message(reason.Usage, "usage: minikube addons open ADDON_NAME") } + + options := flags.CommandOptions() addonName := args[0] cname := ClusterFlagValue() - co := mustload.Healthy(cname) + co := mustload.Healthy(cname, options) addon, ok := assets.Addons[addonName] // validate addon input if !ok { @@ -88,7 +91,7 @@ minikube addons enable {{.name}}`, out.V{"name": addonName}) You can add one by annotating a service with the label {{.labelName}}:{{.addonName}}`, out.V{"labelName": key, "addonName": addonName}) } for i := range serviceList.Items { - svc := serviceList.Items[i].ObjectMeta.Name + svc := serviceList.Items[i].Name var urlString []string if urlString, err = service.WaitForService(co.API, co.Config.Name, namespace, svc, addonsURLTemplate, addonsURLMode, https, wait, interval); err != nil { diff --git a/cmd/minikube/cmd/config/profile.go b/cmd/minikube/cmd/config/profile.go index d0a8e5e8ea81..aa569f596148 100644 --- a/cmd/minikube/cmd/config/profile.go +++ b/cmd/minikube/cmd/config/profile.go @@ -34,7 +34,7 @@ var ProfileCmd = &cobra.Command{ Use: "profile [MINIKUBE_PROFILE_NAME]. You can return to the default minikube profile by running `minikube profile default`", Short: "Get or list the current profiles (clusters)", Long: "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) == 0 { profile := ClusterFlagValue() out.Styled(style.Empty, profile) diff --git a/cmd/minikube/cmd/config/profile_list.go b/cmd/minikube/cmd/config/profile_list.go index a1c86449473a..36fb8294726e 100644 --- a/cmd/minikube/cmd/config/profile_list.go +++ b/cmd/minikube/cmd/config/profile_list.go @@ -23,38 +23,49 @@ import ( "strconv" "strings" - "k8s.io/minikube/pkg/minikube/bootstrapper/bsutil/kverify" + "k8s.io/minikube/cmd/minikube/cmd/flags" + "k8s.io/minikube/pkg/minikube/cluster" "k8s.io/minikube/pkg/minikube/config" - "k8s.io/minikube/pkg/minikube/driver" + "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/machine" + "k8s.io/minikube/pkg/minikube/notify" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" + "k8s.io/minikube/pkg/minikube/run" "k8s.io/minikube/pkg/minikube/style" "github.com/docker/machine/libmachine" - "github.com/docker/machine/libmachine/state" "github.com/olekukonko/tablewriter" + "github.com/olekukonko/tablewriter/tw" "github.com/spf13/cobra" "k8s.io/klog/v2" ) -var output string -var isLight bool +var ( + profileOutput string + isLight bool + isDetailed bool +) var profileListCmd = &cobra.Command{ Use: "list", Short: "Lists all minikube profiles.", Long: "Lists all valid minikube profiles and detects all possible invalid profiles.", - Run: func(cmd *cobra.Command, args []string) { - switch strings.ToLower(output) { + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() + output := strings.ToLower(profileOutput) + out.SetJSON(output == "json") + go notify.MaybePrintUpdateTextFromGithub(options) + + switch output { case "json": - printProfilesJSON() + printProfilesJSON(options) case "table": - printProfilesTable() + printProfilesTable(options) default: - exit.Message(reason.Usage, fmt.Sprintf("invalid output format: %s. Valid values: 'table', 'json'", output)) + exit.Message(reason.Usage, fmt.Sprintf("invalid output format: %s. Valid values: 'table', 'json'", profileOutput)) } }, } @@ -69,7 +80,7 @@ func listProfiles() (validProfiles, invalidProfiles []*config.Profile, err error return validProfiles, invalidProfiles, err } -func printProfilesTable() { +func printProfilesTable(options *run.CommandOptions) { validProfiles, invalidProfiles, err := listProfiles() if err != nil { @@ -77,15 +88,15 @@ func printProfilesTable() { } if len(validProfiles) == 0 { - exit.Message(reason.UsageNoProfileRunning, "No minikube profile was found. ") + exit.Message(reason.UsageNoProfileRunning, "No minikube profile was found.") } - updateProfilesStatus(validProfiles) + updateProfilesStatus(validProfiles, options) renderProfilesTable(profilesToTableData(validProfiles)) warnInvalidProfiles(invalidProfiles) } -func updateProfilesStatus(profiles []*config.Profile) { +func updateProfilesStatus(profiles []*config.Profile, options *run.CommandOptions) { if isLight { for _, p := range profiles { p.Status = "Skipped" @@ -93,78 +104,90 @@ func updateProfilesStatus(profiles []*config.Profile) { return } - api, err := machine.NewAPIClient() + api, err := machine.NewAPIClient(options) if err != nil { klog.Errorf("failed to get machine api client %v", err) } defer api.Close() for _, p := range profiles { - p.Status = profileStatus(p, api) + p.Status = profileStatus(p, api).StatusName } } -func profileStatus(p *config.Profile, api libmachine.API) string { - cp, err := config.PrimaryControlPlane(p.Config) - if err != nil { - exit.Error(reason.GuestCpConfig, "error getting primary control plane", err) - } - - host, err := machine.LoadHost(api, config.MachineName(*p.Config, cp)) - if err != nil { - klog.Warningf("error loading profiles: %v", err) - return "Unknown" +func profileStatus(p *config.Profile, api libmachine.API) cluster.State { + cps := config.ControlPlanes(*p.Config) + if len(cps) == 0 { + exit.Message(reason.GuestCpConfig, "No control-plane nodes found.") } - - // The machine isn't running, no need to check inside - s, err := host.Driver.GetState() + statuses, err := cluster.GetStatus(api, p.Config) if err != nil { - klog.Warningf("error getting host state: %v", err) - return "Unknown" - } - if s != state.Running { - return s.String() - } - - cr, err := machine.CommandRunner(host) - if err != nil { - klog.Warningf("error loading profiles: %v", err) - return "Unknown" - } - - hostname, _, port, err := driver.ControlPlaneEndpoint(p.Config, &cp, host.DriverName) - if err != nil { - klog.Warningf("error loading profiles: %v", err) - return "Unknown" + klog.Errorf("error getting statuses: %v", err) + return cluster.State{ + BaseState: cluster.BaseState{ + Name: "Unknown", + StatusCode: 520, + }, + } } + clusterStatus := cluster.GetState(statuses, ClusterFlagValue(), p.Config) - status, err := kverify.APIServerStatus(cr, hostname, port) - if err != nil { - klog.Warningf("error getting apiserver status for %s: %v", p.Name, err) - return "Unknown" - } - return status.String() + return clusterStatus } func renderProfilesTable(ps [][]string) { table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Profile", "VM Driver", "Runtime", "IP", "Port", "Version", "Status", "Nodes"}) - table.SetAutoFormatHeaders(false) - table.SetBorders(tablewriter.Border{Left: true, Top: true, Right: true, Bottom: true}) - table.SetCenterSeparator("|") - table.AppendBulk(ps) - table.Render() + if isDetailed { + table.Header("Profile", "Driver", "Runtime", "IP", "Port", "Version", + "Status", "Nodes", "Active Profile", "Active Kubecontext") + } else { + table.Header("Profile", "Driver", "Runtime", "IP", "Version", "Status", + "Nodes", "Active Profile", "Active Kubecontext") + } + table.Options( + tablewriter.WithHeaderAutoFormat(tw.Off), + ) + if err := table.Bulk(ps); err != nil { + klog.Error("Error while bulk render table: ", err) + } + if err := table.Render(); err != nil { + klog.Error("Error while rendering profile table: ", err) + } } func profilesToTableData(profiles []*config.Profile) [][]string { var data [][]string + currentProfile := ClusterFlagValue() for _, p := range profiles { - cp, err := config.PrimaryControlPlane(p.Config) - if err != nil { - exit.Error(reason.GuestCpConfig, "error getting primary control plane", err) + cpIP := p.Config.KubernetesConfig.APIServerHAVIP + cpPort := p.Config.APIServerPort + if !config.IsHA(*p.Config) { + cp, err := config.ControlPlane(*p.Config) + if err != nil { + exit.Error(reason.GuestCpConfig, "error getting control-plane node", err) + } + cpIP = cp.IP + cpPort = cp.Port } - data = append(data, []string{p.Name, p.Config.Driver, p.Config.KubernetesConfig.ContainerRuntime, cp.IP, strconv.Itoa(cp.Port), p.Config.KubernetesConfig.KubernetesVersion, p.Status, strconv.Itoa(len(p.Config.Nodes))}) + k8sVersion := p.Config.KubernetesConfig.KubernetesVersion + if k8sVersion == constants.NoKubernetesVersion { // for --no-kubernetes flag + k8sVersion = "N/A" + } + var c, k string + if p.Name == currentProfile { + c = "*" + } + if p.ActiveKubeContext { + k = "*" + } + if isDetailed { + data = append(data, []string{p.Name, p.Config.Driver, p.Config.KubernetesConfig.ContainerRuntime, + cpIP, strconv.Itoa(cpPort), k8sVersion, p.Status, strconv.Itoa(len(p.Config.Nodes)), c, k}) + } else { + data = append(data, []string{p.Name, p.Config.Driver, p.Config.KubernetesConfig.ContainerRuntime, + cpIP, k8sVersion, p.Status, strconv.Itoa(len(p.Config.Nodes)), c, k}) + } } return data } @@ -181,25 +204,24 @@ func warnInvalidProfiles(invalidProfiles []*config.Profile) { out.ErrT(style.Tip, "You can delete them using the following command(s): ") for _, p := range invalidProfiles { - out.Err(fmt.Sprintf("\t $ minikube delete -p %s \n", p.Name)) + out.Errf("\t $ minikube delete -p %s \n", p.Name) } } -func printProfilesJSON() { +func printProfilesJSON(options *run.CommandOptions) { validProfiles, invalidProfiles, err := listProfiles() - - updateProfilesStatus(validProfiles) + updateProfilesStatus(validProfiles, options) var body = map[string]interface{}{} if err == nil || config.IsNotExist(err) { body["valid"] = profilesOrDefault(validProfiles) body["invalid"] = profilesOrDefault(invalidProfiles) jsonString, _ := json.Marshal(body) - out.String(string(jsonString)) + os.Stdout.Write(jsonString) } else { body["error"] = err jsonString, _ := json.Marshal(body) - out.String(string(jsonString)) + os.Stdout.Write(jsonString) os.Exit(reason.ExGuestError) } } @@ -212,7 +234,8 @@ func profilesOrDefault(profiles []*config.Profile) []*config.Profile { } func init() { - profileListCmd.Flags().StringVarP(&output, "output", "o", "table", "The output format. One of 'json', 'table'") + profileListCmd.Flags().StringVarP(&profileOutput, "output", "o", "table", "The output format. One of 'json', 'table'") profileListCmd.Flags().BoolVarP(&isLight, "light", "l", false, "If true, returns list of profiles faster by skipping validating the status of the cluster.") + profileListCmd.Flags().BoolVarP(&isDetailed, "detailed", "d", false, "If true, returns a detailed list of profiles.") ProfileCmd.AddCommand(profileListCmd) } diff --git a/cmd/minikube/cmd/config/prompt.go b/cmd/minikube/cmd/config/prompt.go index 1a8b49821dff..bd8a62c7db69 100644 --- a/cmd/minikube/cmd/config/prompt.go +++ b/cmd/minikube/cmd/config/prompt.go @@ -21,6 +21,7 @@ import ( "io" "log" "os" + "slices" "strings" "golang.org/x/term" @@ -36,7 +37,7 @@ func AskForYesNoConfirmation(s string, posResponses, negResponses []string) bool reader := bufio.NewReader(os.Stdin) for { - out.String("%s [y/n]: ", s) + out.Stringf("%s [y/n]: ", s) response, err := reader.ReadString('\n') if err != nil { @@ -44,9 +45,9 @@ func AskForYesNoConfirmation(s string, posResponses, negResponses []string) bool } switch r := strings.ToLower(strings.TrimSpace(response)); { - case containsString(posResponses, r): + case slices.Contains(posResponses, r): return true - case containsString(negResponses, r): + case slices.Contains(negResponses, r): return false default: out.Err("Please type yes or no:") @@ -78,7 +79,7 @@ func AskForStaticValueOptional(s string) string { } func getStaticValue(reader *bufio.Reader, s string) string { - out.String("%s", s) + out.String(s) response, err := reader.ReadString('\n') if err != nil { @@ -137,22 +138,6 @@ func AskForPasswordValue(s string) string { return result } -// posString returns the first index of element in slice. -// If slice does not contain element, returns -1. -func posString(slice []string, element string) int { - for index, elem := range slice { - if elem == element { - return index - } - } - return -1 -} - -// containsString returns true if slice contains element -func containsString(slice []string, element string) bool { - return posString(slice, element) != -1 -} - // AskForStaticValidatedValue asks for a single value to enter and check for valid input func AskForStaticValidatedValue(s string, validator func(s string) bool) string { reader := bufio.NewReader(os.Stdin) diff --git a/cmd/minikube/cmd/config/set.go b/cmd/minikube/cmd/config/set.go index b7422c9e9502..41ae18c9e79a 100644 --- a/cmd/minikube/cmd/config/set.go +++ b/cmd/minikube/cmd/config/set.go @@ -31,12 +31,12 @@ var configSetCmd = &cobra.Command{ Short: "Sets an individual value in a minikube config file", Long: `Sets the PROPERTY_NAME config value to PROPERTY_VALUE These values can be overwritten by flags or environment variables at runtime.`, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) < 2 { exit.Message(reason.Usage, "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE", out.V{"ArgCount": len(args)}) } if len(args) > 2 { - exit.Message(reason.Usage, "toom any arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE", out.V{"ArgCount": len(args)}) + exit.Message(reason.Usage, "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE", out.V{"ArgCount": len(args)}) } err := Set(args[0], args[1]) if err != nil { @@ -56,7 +56,7 @@ func Set(name string, value string) error { return errors.Wrapf(err, "find settings for %q value of %q", name, value) } // Validate the new value - err = run(name, value, s.validations) + err = invoke(name, value, s.validations) if err != nil { return errors.Wrapf(err, "run validations for %q with value of %q", name, value) } @@ -72,7 +72,7 @@ func Set(name string, value string) error { } // Run any callbacks for this property - err = run(name, value, s.callbacks) + err = invoke(name, value, s.callbacks) if err != nil { return errors.Wrapf(err, "run callbacks for %q with value of %q", name, value) } diff --git a/cmd/minikube/cmd/config/set_test.go b/cmd/minikube/cmd/config/set_test.go index e54ebdc0e0ab..fd1b068af8a8 100644 --- a/cmd/minikube/cmd/config/set_test.go +++ b/cmd/minikube/cmd/config/set_test.go @@ -17,7 +17,6 @@ limitations under the License. package config import ( - "io/ioutil" "os" "testing" @@ -39,14 +38,14 @@ func TestSetNotAllowed(t *testing.T) { t.Fatalf("Set did not return error for unallowed value: %+v", err) } err = Set("memory", "10a") - if err == nil || err.Error() != "run validations for \"memory\" with value of \"10a\": [invalid memory size: invalid size: '10a']" { + if err == nil || err.Error() != "run validations for \"memory\" with value of \"10a\": [invalid memory size: invalid suffix: 'a']" { t.Fatalf("Set did not return error for unallowed value: %+v", err) } } func TestSetOK(t *testing.T) { createTestConfig(t) - err := Set("driver", "virtualbox") + err := Set("driver", "ssh") defer func() { err = Unset("driver") if err != nil { @@ -60,36 +59,23 @@ func TestSetOK(t *testing.T) { if err != nil { t.Fatalf("Get returned error for valid property: %+v", err) } - if val != "virtualbox" { - t.Fatalf("Get returned %s, expected \"virtualbox\"", val) + if val != "ssh" { + t.Fatalf("Get returned %s, expected \"ssh\"", val) } } func createTestConfig(t *testing.T) { t.Helper() - td, err := ioutil.TempDir("", "config") - if err != nil { - t.Fatalf("tempdir: %v", err) - } + td := t.TempDir() - err = os.Setenv(localpath.MinikubeHome, td) - if err != nil { - t.Fatalf("error setting up test environment. could not set %s due to %+v", localpath.MinikubeHome, err) - } + t.Setenv(localpath.MinikubeHome, td) // Not necessary, but it is a handy random alphanumeric - if err = os.MkdirAll(localpath.MakeMiniPath("config"), 0777); err != nil { + if err := os.MkdirAll(localpath.MakeMiniPath("config"), 0777); err != nil { t.Fatalf("error creating temporary directory: %+v", err) } - if err = os.MkdirAll(localpath.MakeMiniPath("profiles"), 0777); err != nil { + if err := os.MkdirAll(localpath.MakeMiniPath("profiles"), 0777); err != nil { t.Fatalf("error creating temporary profiles directory: %+v", err) } - - t.Cleanup(func() { - err := os.RemoveAll(td) - if err != nil { - t.Errorf("failed to clean up temp folder %q", td) - } - }) } diff --git a/cmd/minikube/cmd/config/unset.go b/cmd/minikube/cmd/config/unset.go index b3581abd3732..bce6da57842f 100644 --- a/cmd/minikube/cmd/config/unset.go +++ b/cmd/minikube/cmd/config/unset.go @@ -28,7 +28,7 @@ var configUnsetCmd = &cobra.Command{ Use: "unset PROPERTY_NAME", Short: "unsets an individual value in a minikube config file", Long: "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) != 1 { exit.Message(reason.Usage, "usage: minikube config unset PROPERTY_NAME") } diff --git a/cmd/minikube/cmd/config/util.go b/cmd/minikube/cmd/config/util.go index 0546590d5d94..14a4a67f4450 100644 --- a/cmd/minikube/cmd/config/util.go +++ b/cmd/minikube/cmd/config/util.go @@ -25,8 +25,8 @@ import ( "k8s.io/minikube/pkg/minikube/out" ) -// Runs all the validation or callback functions and collects errors -func run(name string, value string, fns []setFn) error { +// Invoke all the validation or callback functions and collects errors +func invoke(name string, value string, fns []setFn) error { var errors []error for _, fn := range fns { err := fn(name, value) diff --git a/cmd/minikube/cmd/config/validations.go b/cmd/minikube/cmd/config/validations.go index 5a06786cd988..27362ac8b984 100644 --- a/cmd/minikube/cmd/config/validations.go +++ b/cmd/minikube/cmd/config/validations.go @@ -32,7 +32,7 @@ import ( ) // IsValidDriver checks if a driver is supported -func IsValidDriver(string, name string) error { +func IsValidDriver(_, name string) error { if driver.Supported(name) { return nil } @@ -40,13 +40,13 @@ func IsValidDriver(string, name string) error { } // RequiresRestartMsg returns the "requires restart" message -func RequiresRestartMsg(string, string) error { +func RequiresRestartMsg(_, _ string) error { out.WarningT("These changes will take effect upon a minikube delete and then a minikube start") return nil } // IsValidDiskSize checks if a string is a valid disk size -func IsValidDiskSize(name string, disksize string) error { +func IsValidDiskSize(_, disksize string) error { _, err := units.FromHumanSize(disksize) if err != nil { return fmt.Errorf("invalid disk size: %v", err) @@ -55,16 +55,16 @@ func IsValidDiskSize(name string, disksize string) error { } // IsValidCPUs checks if a string is a valid number of CPUs -func IsValidCPUs(name string, cpus string) error { - if cpus == constants.MaxResources { +func IsValidCPUs(name, cpus string) error { + if cpus == constants.MaxResources || cpus == constants.NoLimit { return nil } return IsPositive(name, cpus) } // IsValidMemory checks if a string is a valid memory size -func IsValidMemory(name string, memsize string) error { - if memsize == constants.MaxResources { +func IsValidMemory(_, memsize string) error { + if memsize == constants.MaxResources || memsize == constants.NoLimit { return nil } _, err := units.FromHumanSize(memsize) @@ -75,7 +75,7 @@ func IsValidMemory(name string, memsize string) error { } // IsValidURL checks if a location is a valid URL -func IsValidURL(name string, location string) error { +func IsValidURL(_, location string) error { _, err := url.Parse(location) if err != nil { return fmt.Errorf("%s is not a valid URL", location) @@ -84,7 +84,7 @@ func IsValidURL(name string, location string) error { } // IsURLExists checks if a location actually exists -func IsURLExists(name string, location string) error { +func IsURLExists(_, location string) error { parsed, err := url.Parse(location) if err != nil { return fmt.Errorf("%s is not a valid URL", location) @@ -118,7 +118,7 @@ func IsURLExists(name string, location string) error { } // IsPositive checks if an integer is positive -func IsPositive(name string, val string) error { +func IsPositive(name, val string) error { i, err := strconv.Atoi(val) if err != nil { return fmt.Errorf("%s:%v", name, err) @@ -130,7 +130,7 @@ func IsPositive(name string, val string) error { } // IsValidCIDR checks if a string parses as a CIDR -func IsValidCIDR(name string, cidr string) error { +func IsValidCIDR(_, cidr string) error { _, _, err := net.ParseCIDR(cidr) if err != nil { return fmt.Errorf("invalid CIDR: %v", err) @@ -139,7 +139,7 @@ func IsValidCIDR(name string, cidr string) error { } // IsValidPath checks if a string is a valid path -func IsValidPath(name string, path string) error { +func IsValidPath(name, path string) error { _, err := os.Stat(path) if err != nil { return fmt.Errorf("%s path is not valid: %v", name, err) @@ -148,7 +148,7 @@ func IsValidPath(name string, path string) error { } // IsValidRuntime checks if a string is a valid runtime -func IsValidRuntime(name string, runtime string) error { +func IsValidRuntime(_, runtime string) error { _, err := cruntime.New(cruntime.Config{Type: runtime}) if err != nil { return fmt.Errorf("invalid runtime: %v", err) diff --git a/cmd/minikube/cmd/config/validations_test.go b/cmd/minikube/cmd/config/validations_test.go index 0cfc87f5c7a7..a1a0d839314c 100644 --- a/cmd/minikube/cmd/config/validations_test.go +++ b/cmd/minikube/cmd/config/validations_test.go @@ -17,7 +17,9 @@ limitations under the License. package config import ( + "net/url" "os" + "path/filepath" "testing" ) @@ -126,23 +128,54 @@ func TestValidRuntime(t *testing.T) { } func TestIsURLExists(t *testing.T) { - self, err := os.Executable() if err != nil { t.Error(err) } + u := (&url.URL{ + Scheme: "file", + Path: filepath.ToSlash(self), + }).String() + tests := []validationTest{ { - value: "file://" + self, + value: u, shouldErr: false, }, - { - value: "file://" + self + "/subpath-of-file", + value: u + "/subpath-of-file", shouldErr: true, }, } runValidations(t, tests, "url", IsURLExists) } + +func TestIsValidCPUs(t *testing.T) { + tests := []validationTest{ + {"2", false}, + {"16", false}, + {"max", false}, + {"no-limit", false}, + {"abc", true}, + {"-2", true}, + {"", true}, + } + + runValidations(t, tests, "cpus", IsValidCPUs) +} + +func TestIsValidMemory(t *testing.T) { + tests := []validationTest{ + {"4000mb", false}, + {"8gb", false}, + {"max", false}, + {"no-limit", false}, + {"-4000", true}, + {"abc", true}, + {"", true}, + } + + runValidations(t, tests, "memory", IsValidMemory) +} diff --git a/cmd/minikube/cmd/config/view.go b/cmd/minikube/cmd/config/view.go index a65574079dde..836aef11fc79 100644 --- a/cmd/minikube/cmd/config/view.go +++ b/cmd/minikube/cmd/config/view.go @@ -40,8 +40,10 @@ type ViewTemplate struct { var configViewCmd = &cobra.Command{ Use: "view", Short: "Display values currently set in the minikube config file", - Long: "Display values currently set in the minikube config file.", - Run: func(cmd *cobra.Command, args []string) { + Long: `Display values currently set in the minikube config file. + The output format can be customized using the --format flag, which accepts a Go template. + The config file is typically located at "~/.minikube/config/config.json".`, + Run: func(_ *cobra.Command, _ []string) { err := View() if err != nil { exit.Error(reason.InternalConfigView, "config view failed", err) @@ -51,8 +53,8 @@ var configViewCmd = &cobra.Command{ func init() { configViewCmd.Flags().StringVar(&viewFormat, "format", defaultConfigViewFormat, - `Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/ -For the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate`) + `Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template +For the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate`) ConfigCmd.AddCommand(configViewCmd) } diff --git a/cmd/minikube/cmd/cp.go b/cmd/minikube/cmd/cp.go index 2ad6290085e5..ca0cf70033f0 100644 --- a/cmd/minikube/cmd/cp.go +++ b/cmd/minikube/cmd/cp.go @@ -17,6 +17,8 @@ limitations under the License. package cmd import ( + "path/filepath" + "github.com/pkg/errors" "github.com/spf13/cobra" @@ -25,7 +27,7 @@ import ( pt "path" "strings" - "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/command" "k8s.io/minikube/pkg/minikube/exit" @@ -36,98 +38,180 @@ import ( "k8s.io/minikube/pkg/minikube/reason" ) -// placeholders for flag values -var ( - srcPath string - dstPath string - dstNode string -) +type remotePath struct { + node string + path string +} // cpCmd represents the cp command, similar to docker cp var cpCmd = &cobra.Command{ - Use: "cp :", + Use: "cp : :", Short: "Copy the specified file into minikube", - Long: "Copy the specified file into minikube, it will be saved at path in your minikube.\n" + - "Example Command : \"minikube cp a.txt /home/docker/b.txt\"\n" + - " \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n", - Run: func(cmd *cobra.Command, args []string) { + Long: `Copy the specified file into minikube, it will be saved at path in your minikube. +Default target node controlplane and If is omitted, It will trying to copy from host. + +Example Command : "minikube cp a.txt /home/docker/b.txt" + + "minikube cp a.txt minikube-m02:/home/docker/b.txt" + "minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt"`, + Run: func(_ *cobra.Command, args []string) { if len(args) != 2 { - exit.Message(reason.Usage, `Please specify the path to copy: + exit.Message(reason.Usage, `Please specify the path to copy: minikube cp (example: "minikube cp a/b.txt /copied.txt")`) } - srcPath = args[0] - dstPath = args[1] - - // if destination path is not a absolute path, trying to parse with : format - if !strings.HasPrefix(dstPath, "/") { - if sp := strings.SplitN(dstPath, ":", 2); len(sp) == 2 { - dstNode = sp[0] - dstPath = sp[1] - } - } - - validateArgs(srcPath, dstPath) - - fa, err := assets.NewFileAsset(srcPath, pt.Dir(dstPath), pt.Base(dstPath), "0644") - if err != nil { - out.ErrLn("%v", errors.Wrap(err, "getting file asset")) - os.Exit(1) - } - defer func() { - if err := fa.Close(); err != nil { - klog.Warningf("error closing the file %s: %v", fa.GetSourcePath(), err) - } - }() + options := flags.CommandOptions() + srcPath := args[0] + dstPath := setDstFileNameFromSrc(args[1], srcPath) + src := newRemotePath(srcPath) + dst := newRemotePath(dstPath) + validateArgs(src, dst) - co := mustload.Running(ClusterFlagValue()) + co := mustload.Running(ClusterFlagValue(), options) var runner command.Runner - if dstNode == "" { + + if dst.node != "" { + runner = remoteCommandRunner(&co, dst.node) + } else if src.node == "" { + // if node name not explicitly specified in both of source and target, + // consider target is control-plane node for backward compatibility. runner = co.CP.Runner } else { - n, _, err := node.Retrieve(*co.Config, dstNode) - if err != nil { - exit.Message(reason.GuestNodeRetrieve, "Node {{.nodeName}} does not exist.", out.V{"nodeName": dstNode}) - } - - h, err := machine.GetHost(co.API, *co.Config, *n) - if err != nil { - exit.Error(reason.GuestLoadHost, "Error getting host", err) - } - - runner, err = machine.CommandRunner(h) - if err != nil { - exit.Error(reason.InternalCommandRunner, "Failed to get command runner", err) - } + runner = command.NewExecRunner(false) } - if err = runner.Copy(fa); err != nil { + fa := copyableFile(&co, src, dst) + if err := runner.Copy(fa); err != nil { exit.Error(reason.InternalCommandRunner, fmt.Sprintf("Fail to copy file %s", fa.GetSourcePath()), err) } }, } -func init() { +// setDstFileNameFromSrc sets the src filename as dst filename +// when the dst file name is not provided and ends with a `/`. +// Otherwise this function is a no-op and returns the passed dst. +func setDstFileNameFromSrc(dst, src string) string { + srcPath := newRemotePath(src) + dstPath := newRemotePath(dst) + guestToHost := srcPath.node != "" && dstPath.node == "" + guestToGuest := srcPath.node != "" && dstPath.node != "" + + // Since Host can be any OS and Guest can only be linux, use + // filepath and path respectively + var dd, df, sf string + switch { + case guestToHost: + _, sf = pt.Split(src) + dd, df = filepath.Split(dst) + case guestToGuest: + _, sf = pt.Split(src) + dd, df = pt.Split(dst) + default: + _, sf = filepath.Split(src) + dd, df = pt.Split(dst) + } + + // if dst is empty, dd and df will be empty, so return dst + // validation will be happening in `validateArgs` + if dd == "" && df == "" { + return "" + } + + // if filename is already provided, return dst + if df != "" { + return dst + } + + // if src filename is empty, return dst + if sf == "" { + return dst + } + + // https://github.com/kubernetes/minikube/pull/15519/files#r1261750910 + if guestToHost { + return filepath.Join(dd, sf) + } + + return pt.Join(dd, sf) +} + +// split path to node name and file path +func newRemotePath(path string) *remotePath { + // if destination path is not a absolute path, trying to parse with : format + sp := strings.SplitN(path, ":", 2) + if len(sp) == 2 && len(sp[0]) > 0 && !strings.Contains(sp[0], "/") && strings.HasPrefix(sp[1], "/") { + return &remotePath{node: sp[0], path: sp[1]} + } + + return &remotePath{node: "", path: path} } -func validateArgs(srcPath string, dstPath string) { - if srcPath == "" { - exit.Message(reason.Usage, "Source {{.path}} can not be empty", out.V{"path": srcPath}) +func remoteCommandRunner(co *mustload.ClusterController, nodeName string) command.Runner { + n, _, err := node.Retrieve(*co.Config, nodeName) + if err != nil { + exit.Message(reason.GuestNodeRetrieve, "Node {{.nodeName}} does not exist.", out.V{"nodeName": nodeName}) } - if dstPath == "" { - exit.Message(reason.Usage, "Target {{.path}} can not be empty", out.V{"path": dstPath}) + h, err := machine.GetHost(co.API, *co.Config, *n) + if err != nil { + out.ErrLn("%v", errors.Wrap(err, "getting host")) + os.Exit(1) } - if _, err := os.Stat(srcPath); err != nil { + runner, err := machine.CommandRunner(h) + if err != nil { + out.ErrLn("%v", errors.Wrap(err, "getting command runner")) + os.Exit(1) + } + + return runner +} + +func copyableFile(co *mustload.ClusterController, src, dst *remotePath) assets.CopyableFile { + // get assets.CopyableFile from minikube node + if src.node != "" { + runner := remoteCommandRunner(co, src.node) + f, err := runner.ReadableFile(src.path) + if err != nil { + out.ErrLn("%v", errors.Wrapf(err, "getting file from %s node", src.node)) + os.Exit(1) + } + + fakeWriter := func(_ []byte) (n int, err error) { + return 0, nil + } + + return assets.NewBaseCopyableFile(f, fakeWriter, pt.Dir(dst.path), pt.Base(dst.path)) + } + + if _, err := os.Stat(src.path); err != nil { if os.IsNotExist(err) { - exit.Message(reason.HostPathMissing, "Cannot find directory {{.path}} for copy", out.V{"path": srcPath}) + exit.Message(reason.HostPathMissing, "Cannot find directory {{.path}} for copy", out.V{"path": src}) } else { exit.Error(reason.HostPathStat, "stat failed", err) } } - if !strings.HasPrefix(dstPath, "/") { - exit.Message(reason.Usage, ` must be an absolute Path. Relative Path is not allowed (example: "/home/docker/copied.txt")`) + fa, err := assets.NewFileAsset(src.path, pt.Dir(dst.path), pt.Base(dst.path), "0644") + if err != nil { + out.ErrLn("%v", errors.Wrap(err, "getting file asset")) + os.Exit(1) + } + + return fa +} + +func validateArgs(src, dst *remotePath) { + if src.path == "" { + exit.Message(reason.Usage, "Source {{.path}} can not be empty", out.V{"path": src.path}) + } + + if dst.path == "" { + exit.Message(reason.Usage, "Target {{.path}} can not be empty", out.V{"path": dst.path}) + } + + // if node name not explicitly specified in both of source and target, + // consider target node is control-plane for backward compatibility. + if src.node == "" && dst.node == "" && !strings.HasPrefix(dst.path, "/") { + exit.Message(reason.Usage, `Target must be an absolute Path. Relative Path is not allowed (example: "minikube:/home/docker/copied.txt")`) } } diff --git a/cmd/minikube/cmd/cp_test.go b/cmd/minikube/cmd/cp_test.go new file mode 100644 index 000000000000..1ec319f9ea20 --- /dev/null +++ b/cmd/minikube/cmd/cp_test.go @@ -0,0 +1,85 @@ +/* +Copyright 2021 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cmd + +import ( + "testing" +) + +func TestParsePath(t *testing.T) { + var passedCases = []struct { + path string + expectedNode string + expectedPath string + }{ + + {"", "", ""}, + {":", "", ":"}, + {":/a", "", ":/a"}, + {":a", "", ":a"}, + {"minikube:", "", "minikube:"}, + {"minikube:./a", "", "minikube:./a"}, + {"minikube:a", "", "minikube:a"}, + {"minikube::a", "", "minikube::a"}, + {"./a", "", "./a"}, + {"./a/b", "", "./a/b"}, + {"a", "", "a"}, + {"a/b", "", "a/b"}, + {"/a", "", "/a"}, + {"/a/b", "", "/a/b"}, + {"./:a/b", "", "./:a/b"}, + {"c:\\a", "", "c:\\a"}, + {"c:\\a\\b", "", "c:\\a\\b"}, + {"minikube:/a", "minikube", "/a"}, + {"minikube:/a/b", "minikube", "/a/b"}, + {"minikube:/a/b:c", "minikube", "/a/b:c"}, + } + + for _, c := range passedCases { + rp := newRemotePath(c.path) + expected := remotePath{ + node: c.expectedNode, + path: c.expectedPath, + } + if *rp != expected { + t.Errorf("parsePath \"%s\" expected: %q, got: %q", c.path, expected, *rp) + } + } +} + +func TestSetDstFileNameFromSrc(t *testing.T) { + cases := []struct { + src string + dst string + want string + }{ + {"./a/b", "/c/", "/c/b"}, + {"./a/b", "node:/c/", "node:/c/b"}, + {"./a", "/c/", "/c/a"}, + {"", "/c/", "/c/"}, + {"./a/b", "", ""}, + {"./a/b", "/c", "/c"}, + {"./a/", "/c/", "/c/"}, + } + + for _, c := range cases { + got := setDstFileNameFromSrc(c.dst, c.src) + if c.want != got { + t.Fatalf("wrong dst path for src=%s & dst=%s. want: %q, got: %q", c.src, c.dst, c.want, got) + } + } +} diff --git a/cmd/minikube/cmd/dashboard.go b/cmd/minikube/cmd/dashboard.go index 141b3ab212e6..5afbcca26ff6 100644 --- a/cmd/minikube/cmd/dashboard.go +++ b/cmd/minikube/cmd/dashboard.go @@ -30,6 +30,7 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/addons" "k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/style" @@ -47,9 +48,9 @@ import ( var ( dashboardURLMode bool dashboardExposedPort int - // Matches: 127.0.0.1:8001 + // Matches: "127.0.0.1:8001" or "127.0.0.1 40012" etc. // TODO(tstromberg): Get kubectl to implement a stable supported output format. - hostPortRe = regexp.MustCompile(`127.0.0.1:\d{4,}`) + hostPortRe = regexp.MustCompile(`127\.0\.0\.1(:| )\d{4,}`) ) // dashboardCmd represents the dashboard command @@ -57,9 +58,10 @@ var dashboardCmd = &cobra.Command{ Use: "dashboard", Short: "Access the Kubernetes dashboard running within the minikube cluster", Long: `Access the Kubernetes dashboard running within the minikube cluster`, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() cname := ClusterFlagValue() - co := mustload.Healthy(cname) + co := mustload.Healthy(cname, options) for _, n := range co.Config.Nodes { if err := proxy.ExcludeIP(n.IP); err != nil { @@ -79,10 +81,10 @@ var dashboardCmd = &cobra.Command{ enabled := addon.IsEnabled(co.Config) if !enabled { - // Send status messages to stderr for folks re-using this output. + // Send status messages to stderr for folks reusing this output. out.ErrT(style.Enabling, "Enabling dashboard ...") // Enable the dashboard add-on - err = addons.SetAndSave(cname, "dashboard", "true") + err = addons.SetAndSave(cname, "dashboard", "true", options) if err != nil { exit.Error(reason.InternalAddonEnable, "Unable to enable dashboard", err) } @@ -98,7 +100,7 @@ var dashboardCmd = &cobra.Command{ } out.ErrT(style.Launch, "Launching proxy ...") - p, hostPort, err := kubectlProxy(kubectlVersion, cname, dashboardExposedPort) + p, hostPort, err := kubectlProxy(kubectlVersion, co.Config.BinaryMirror, cname, dashboardExposedPort) if err != nil { exit.Error(reason.HostKubectlProxy, "kubectl proxy", err) } @@ -132,7 +134,7 @@ var dashboardCmd = &cobra.Command{ } // kubectlProxy runs "kubectl proxy", returning host:port -func kubectlProxy(kubectlVersion string, contextName string, port int) (*exec.Cmd, string, error) { +func kubectlProxy(kubectlVersion string, binaryURL string, contextName string, port int) (*exec.Cmd, string, error) { // port=0 picks a random system port kubectlArgs := []string{"--context", contextName, "proxy", "--port", strconv.Itoa(port)} @@ -140,7 +142,7 @@ func kubectlProxy(kubectlVersion string, contextName string, port int) (*exec.Cm var cmd *exec.Cmd if kubectl, err := exec.LookPath("kubectl"); err == nil { cmd = exec.Command(kubectl, kubectlArgs...) - } else if cmd, err = KubectlCommand(kubectlVersion, kubectlArgs...); err != nil { + } else if cmd, err = KubectlCommand(kubectlVersion, binaryURL, kubectlArgs...); err != nil { return nil, "", err } @@ -157,7 +159,7 @@ func kubectlProxy(kubectlVersion string, contextName string, port int) (*exec.Cm klog.Infof("Waiting for kubectl to output host:port ...") reader := bufio.NewReader(stdoutPipe) - var out []byte + var outData []byte for { r, timedOut, err := readByteWithTimeout(reader, 5*time.Second) if err != nil { @@ -170,16 +172,20 @@ func kubectlProxy(kubectlVersion string, contextName string, port int) (*exec.Cm klog.Infof("timed out waiting for input: possibly due to an old kubectl version.") break } - out = append(out, r) + outData = append(outData, r) } - klog.Infof("proxy stdout: %s", string(out)) - return cmd, hostPortRe.FindString(string(out)), nil + klog.Infof("proxy stdout: %s", string(outData)) + return cmd, hostPortRe.FindString(string(outData)), nil } // readByteWithTimeout returns a byte from a reader or an indicator that a timeout has occurred. func readByteWithTimeout(r io.ByteReader, timeout time.Duration) (byte, bool, error) { bc := make(chan byte, 1) ec := make(chan error, 1) + defer func() { + close(bc) + close(ec) + }() go func() { b, err := r.ReadByte() if err != nil { @@ -187,8 +193,6 @@ func readByteWithTimeout(r io.ByteReader, timeout time.Duration) (byte, bool, er } else { bc <- b } - close(bc) - close(ec) }() select { case b := <-bc: @@ -201,17 +205,16 @@ func readByteWithTimeout(r io.ByteReader, timeout time.Duration) (byte, bool, er } // dashboardURL generates a URL for accessing the dashboard service -func dashboardURL(proxy string, ns string, svc string) string { +func dashboardURL(addr string, ns string, svc string) string { // Reference: https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above - return fmt.Sprintf("http://%s/api/v1/namespaces/%s/services/http:%s:/proxy/", proxy, ns, svc) + return fmt.Sprintf("http://%s/api/v1/namespaces/%s/services/http:%s:/proxy/", addr, ns, svc) } // checkURL checks if a URL returns 200 HTTP OK func checkURL(url string) error { resp, err := http.Get(url) - klog.Infof("%s response: %v %+v", url, err, resp) if err != nil { - return errors.Wrap(err, "checkURL") + return errors.Wrapf(err, "hitting URL:%q\n response: %+v", url, resp) } if resp.StatusCode != http.StatusOK { return &retry.RetriableError{ diff --git a/cmd/minikube/cmd/delete.go b/cmd/minikube/cmd/delete.go index ec657fe817a6..2f59daf4a06f 100644 --- a/cmd/minikube/cmd/delete.go +++ b/cmd/minikube/cmd/delete.go @@ -19,11 +19,11 @@ package cmd import ( "context" "fmt" - "io/ioutil" "os" "os/exec" "path/filepath" "strconv" + "strings" "time" "github.com/docker/machine/libmachine/mcnerror" @@ -35,12 +35,15 @@ import ( "github.com/spf13/viper" "k8s.io/klog/v2" cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config" + "k8s.io/minikube/cmd/minikube/cmd/flags" + "k8s.io/minikube/pkg/drivers/kic" "k8s.io/minikube/pkg/drivers/kic/oci" "k8s.io/minikube/pkg/minikube/cluster" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/delete" + "k8s.io/minikube/pkg/minikube/download" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/kubeconfig" @@ -49,6 +52,8 @@ import ( "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/out/register" "k8s.io/minikube/pkg/minikube/reason" + "k8s.io/minikube/pkg/minikube/run" + "k8s.io/minikube/pkg/minikube/sshagent" "k8s.io/minikube/pkg/minikube/style" ) @@ -83,14 +88,17 @@ type DeletionError struct { Errtype typeOfError } -func (error DeletionError) Error() string { - return error.Err.Error() +func (deletionError DeletionError) Error() string { + return deletionError.Err.Error() } var hostAndDirsDeleter = func(api libmachine.API, cc *config.ClusterConfig, profileName string) error { if err := killMountProcess(); err != nil { out.FailureT("Failed to kill mount process: {{.error}}", out.V{"error": err}) } + if err := sshagent.Stop(profileName); err != nil && !config.IsNotExist(err) { + out.FailureT("Failed to stop ssh-agent process: {{.error}}", out.V{"error": err}) + } deleteHosts(api, cc) @@ -108,6 +116,7 @@ var hostAndDirsDeleter = func(api libmachine.API, cc *config.ClusterConfig, prof func init() { deleteCmd.Flags().BoolVar(&deleteAll, "all", false, "Set flag to delete all profiles") deleteCmd.Flags().BoolVar(&purge, "purge", false, "Set this flag to delete the '.minikube' folder from your user directory.") + deleteCmd.Flags().StringVarP(&outputFormat, "output", "o", "text", "Format to print stdout in. Options include: [text,json]") if err := viper.BindPFlags(deleteCmd.Flags()); err != nil { exit.Error(reason.InternalBindFlags, "unable to bind flags", err) @@ -145,19 +154,76 @@ func deleteContainersAndVolumes(ctx context.Context, ociBin string) { } } +// kicbaseImages returns kicbase images +func kicbaseImages(ctx context.Context, ociBin string) ([]string, error) { + if _, err := exec.LookPath(ociBin); err != nil { + return nil, nil + } + + // create list of possible kicbase images + kicImages := []string{kic.BaseImage} + kicImages = append(kicImages, kic.FallbackImages...) + + kicImagesRepo := []string{} + for _, img := range kicImages { + kicImagesRepo = append(kicImagesRepo, strings.Split(img, ":")[0]) + } + + allImages, err := oci.ListImagesRepository(ctx, ociBin) + if err != nil { + return nil, err + } + + var result []string + for _, img := range allImages { + for _, kicImg := range kicImagesRepo { + if kicImg == strings.Split(img, ":")[0] { + result = append(result, img) + break + } + } + } + return result, nil +} + +// printDeleteImagesCommand prints command which remove images +func printDeleteImagesCommand(ociBin string, imageNames []string) { + if _, err := exec.LookPath(ociBin); err != nil { + return + } + + if len(imageNames) > 0 { + out.Styled(style.Command, `{{.ociBin}} rmi {{.images}}`, out.V{"ociBin": ociBin, "images": strings.Join(imageNames, " ")}) + } +} + +// printDeleteImageInfo prints info about removing kicbase images +func printDeleteImageInfo(dockerImageNames, podmanImageNames []string) { + if len(dockerImageNames) == 0 && len(podmanImageNames) == 0 { + return + } + + out.Styled(style.Notice, `Kicbase images have not been deleted. To delete images run:`) + printDeleteImagesCommand(oci.Docker, dockerImageNames) + printDeleteImagesCommand(oci.Podman, podmanImageNames) +} + // runDelete handles the executes the flow of "minikube delete" -func runDelete(cmd *cobra.Command, args []string) { +func runDelete(_ *cobra.Command, args []string) { if len(args) > 0 { exit.Message(reason.Usage, "Usage: minikube delete") } - // register.SetEventLogPath(localpath.EventLog(ClusterFlagValue())) - register.Reg.SetStep(register.Deleting) + options := flags.CommandOptions() + out.SetJSON(outputFormat == "json") + register.Reg.SetStep(register.Deleting) + download.CleanUpOlderPreloads() validProfiles, invalidProfiles, err := config.ListProfiles() if err != nil { klog.Warningf("'error loading profiles in minikube home %q: %v", localpath.MiniPath(), err) } - profilesToDelete := append(validProfiles, invalidProfiles...) + profilesToDelete := validProfiles + profilesToDelete = append(profilesToDelete, invalidProfiles...) // in the case user has more than 1 profile and runs --purge // to prevent abandoned VMs/containers, force user to run with delete --all if purge && len(profilesToDelete) > 1 && !deleteAll { @@ -174,7 +240,7 @@ func runDelete(cmd *cobra.Command, args []string) { deleteContainersAndVolumes(delCtx, oci.Docker) deleteContainersAndVolumes(delCtx, oci.Podman) - errs := DeleteProfiles(profilesToDelete) + errs := DeleteProfiles(profilesToDelete, options) register.Reg.SetStep(register.Done) if len(errs) > 0 { @@ -196,7 +262,7 @@ func runDelete(cmd *cobra.Command, args []string) { orphan = true } - errs := DeleteProfiles([]*config.Profile{profile}) + errs := DeleteProfiles([]*config.Profile{profile}, options) register.Reg.SetStep(register.Done) if len(errs) > 0 { @@ -212,6 +278,16 @@ func runDelete(cmd *cobra.Command, args []string) { // If the purge flag is set, go ahead and delete the .minikube directory. if purge { purgeMinikubeDirectory() + + dockerImageNames, err := kicbaseImages(delCtx, oci.Docker) + if err != nil { + klog.Warningf("error fetching docker images: %v", err) + } + podmanImageNames, err := kicbaseImages(delCtx, oci.Podman) + if err != nil { + klog.Warningf("error fetching podman images: %v", err) + } + printDeleteImageInfo(dockerImageNames, podmanImageNames) } } @@ -220,26 +296,27 @@ func purgeMinikubeDirectory() { if err := os.RemoveAll(localpath.MiniPath()); err != nil { exit.Error(reason.HostPurge, "unable to delete minikube config folder", err) } + register.Reg.SetStep(register.Purging) out.Step(style.Deleted, "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]", out.V{"minikubeDirectory": localpath.MiniPath()}) } // DeleteProfiles deletes one or more profiles -func DeleteProfiles(profiles []*config.Profile) []error { +func DeleteProfiles(profiles []*config.Profile, options *run.CommandOptions) []error { klog.Infof("DeleteProfiles") var errs []error for _, profile := range profiles { - errs = append(errs, deleteProfileTimeout(profile)...) + errs = append(errs, deleteProfileTimeout(profile, options)...) } return errs } -func deleteProfileTimeout(profile *config.Profile) []error { +func deleteProfileTimeout(profile *config.Profile, options *run.CommandOptions) []error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) defer cancel() - if err := deleteProfile(ctx, profile); err != nil { + if err := deleteProfile(ctx, profile, options); err != nil { - mm, loadErr := machine.LoadMachine(profile.Name) + mm, loadErr := machine.LoadMachine(profile.Name, options) if !profile.IsValid() || (loadErr != nil || !mm.IsValid()) { invalidProfileDeletionErrs := deleteInvalidProfile(profile) if len(invalidProfileDeletionErrs) > 0 { @@ -252,7 +329,7 @@ func deleteProfileTimeout(profile *config.Profile) []error { return nil } -func deleteProfile(ctx context.Context, profile *config.Profile) error { +func deleteProfile(ctx context.Context, profile *config.Profile, options *run.CommandOptions) error { klog.Infof("Deleting %s", profile.Name) register.Reg.SetStep(register.Deleting) @@ -262,10 +339,10 @@ func deleteProfile(ctx context.Context, profile *config.Profile) error { // if driver is oci driver, delete containers and volumes if driver.IsKIC(profile.Config.Driver) { - if err := unpauseIfNeeded(profile); err != nil { + if err := unpauseIfNeeded(profile, options); err != nil { klog.Warningf("failed to unpause %s : %v", profile.Name, err) } - out.Step(style.DeletingHost, `Deleting "{{.profile_name}}" in {{.driver_name}} ...`, out.V{"profile_name": profile.Name, "driver_name": profile.Config.Driver}) + out.Styled(style.DeletingHost, `Deleting "{{.profile_name}}" in {{.driver_name}} ...`, out.V{"profile_name": profile.Name, "driver_name": profile.Config.Driver}) for _, n := range profile.Config.Nodes { machineName := config.MachineName(*profile.Config, n) delete.PossibleLeftOvers(ctx, machineName, profile.Config.Driver) @@ -275,7 +352,7 @@ func deleteProfile(ctx context.Context, profile *config.Profile) error { klog.Infof("%s has no configuration, will try to make it work anyways", profile.Name) } - api, err := machine.NewAPIClient() + api, err := machine.NewAPIClient(options) if err != nil { delErr := profileDeletionErr(profile.Name, fmt.Sprintf("error getting client %v", err)) return DeletionError{Err: delErr, Errtype: Fatal} @@ -304,11 +381,11 @@ func deleteProfile(ctx context.Context, profile *config.Profile) error { return err } - out.Step(style.Deleted, `Removed all traces of the "{{.name}}" cluster.`, out.V{"name": profile.Name}) + out.Styled(style.Deleted, `Removed all traces of the "{{.name}}" cluster.`, out.V{"name": profile.Name}) return nil } -func unpauseIfNeeded(profile *config.Profile) error { +func unpauseIfNeeded(profile *config.Profile, options *run.CommandOptions) error { // there is a known issue with removing kicbase container with paused containerd/crio containers inside // unpause it before we delete it crName := profile.Config.KubernetesConfig.ContainerRuntime @@ -316,7 +393,7 @@ func unpauseIfNeeded(profile *config.Profile) error { return nil } - api, err := machine.NewAPIClient() + api, err := machine.NewAPIClient(options) if err != nil { return err } @@ -334,7 +411,7 @@ func unpauseIfNeeded(profile *config.Profile) error { cr, err := cruntime.New(cruntime.Config{Type: crName, Runner: r}) if err != nil { - exit.Error(reason.InternalNewRuntime, "Failed to create runtime", err) + return err } paused, err := cluster.CheckIfPaused(cr, nil) @@ -394,7 +471,7 @@ func deleteContext(machineName string) error { } func deleteInvalidProfile(profile *config.Profile) []error { - out.Step(style.DeletingHost, "Trying to delete invalid profile {{.profile}}", out.V{"profile": profile.Name}) + out.Styled(style.DeletingHost, "Trying to delete invalid profile {{.profile}}", out.V{"profile": profile.Name}) var errs []error pathToProfile := config.ProfileFolderPath(profile.Name, localpath.MiniPath()) @@ -420,7 +497,7 @@ func profileDeletionErr(cname string, additionalInfo string) error { } func uninstallKubernetes(api libmachine.API, cc config.ClusterConfig, n config.Node, bsName string) error { - out.Step(style.Resetting, "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...", out.V{"kubernetes_version": cc.KubernetesConfig.KubernetesVersion, "bootstrapper_name": bsName}) + out.Styled(style.Resetting, "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...", out.V{"kubernetes_version": cc.KubernetesConfig.KubernetesVersion, "bootstrapper_name": bsName}) host, err := machine.LoadHost(api, config.MachineName(cc, n)) if err != nil { return DeletionError{Err: fmt.Errorf("unable to load host: %v", err), Errtype: MissingCluster} @@ -454,11 +531,11 @@ func uninstallKubernetes(api libmachine.API, cc config.ClusterConfig, n config.N } // HandleDeletionErrors handles deletion errors from DeleteProfiles -func HandleDeletionErrors(errors []error) { - if len(errors) == 1 { - handleSingleDeletionError(errors[0]) +func HandleDeletionErrors(errs []error) { + if len(errs) == 1 { + handleSingleDeletionError(errs[0]) } else { - handleMultipleDeletionErrors(errors) + handleMultipleDeletionErrors(errs) } } @@ -468,23 +545,25 @@ func handleSingleDeletionError(err error) { if ok { switch deletionError.Errtype { case Fatal: - out.FatalT(deletionError.Error()) + out.ErrT(style.Fatal, "Failed to delete profile(s): {{.error}}", out.V{"error": deletionError.Error()}) + os.Exit(reason.ExGuestError) case MissingProfile: out.ErrT(style.Sad, deletionError.Error()) case MissingCluster: out.ErrT(style.Meh, deletionError.Error()) default: - out.FatalT(deletionError.Error()) + out.ErrT(style.Fatal, "Unable to delete profile(s): {{.error}}", out.V{"error": deletionError.Error()}) + os.Exit(reason.ExGuestError) } } else { exit.Error(reason.GuestDeletion, "Could not process error from failed deletion", err) } } -func handleMultipleDeletionErrors(errors []error) { +func handleMultipleDeletionErrors(errs []error) { out.ErrT(style.Sad, "Multiple errors deleting profiles") - for _, err := range errors { + for _, err := range errs { deletionError, ok := err.(DeletionError) if ok { @@ -498,7 +577,7 @@ func handleMultipleDeletionErrors(errors []error) { func deleteProfileDirectory(profile string) { machineDir := filepath.Join(localpath.MiniPath(), "machines", profile) if _, err := os.Stat(machineDir); err == nil { - out.Step(style.DeletingHost, `Removing {{.directory}} ...`, out.V{"directory": machineDir}) + out.Styled(style.DeletingHost, `Removing {{.directory}} ...`, out.V{"directory": machineDir}) err := os.RemoveAll(machineDir) if err != nil { exit.Error(reason.GuestProfileDeletion, "Unable to remove machine directory", err) @@ -515,50 +594,138 @@ func deleteMachineDirectories(cc *config.ClusterConfig) { } } -// killMountProcess kills the mount process, if it is running +// killMountProcess looks for the legacy path and for profile path for a pidfile, +// it then tries to kill all the pids listed in the pidfile (one or more) func killMountProcess() error { - pidPath := filepath.Join(localpath.MiniPath(), constants.MountProcessFileName) + profile := ClusterFlagValue() + paths := []string{ + localpath.MiniPath(), // legacy mount-process path for backwards compatibility + localpath.Profile(profile), + } + + for _, path := range paths { + if err := killProcess(path); err != nil { + return err + } + } + + return nil +} + +// killProcess takes a path to look for a pidfile (space-separated), +// it reads the file and converts it to a bunch of pid ints, +// then it tries to kill each one of them. +// If no errors were encountered, it cleans the pidfile +func killProcess(path string) error { + pidPath := filepath.Join(path, constants.MountProcessFileName) if _, err := os.Stat(pidPath); os.IsNotExist(err) { return nil } - klog.Infof("Found %s ...", pidPath) - out, err := ioutil.ReadFile(pidPath) + + ppp, err := getPids(pidPath) if err != nil { - return errors.Wrap(err, "ReadFile") + return err } - klog.Infof("pidfile contents: %s", out) - pid, err := strconv.Atoi(string(out)) - if err != nil { - return errors.Wrap(err, "error parsing pid") + + // we're trying to kill each process, without stopping at first error encountered + // error handling is done below + var errs []error + for _, pp := range ppp { + err := trySigKillProcess(pp) + if err != nil { + errs = append(errs, err) + } + } - // os.FindProcess does not check if pid is running :( - entry, err := ps.FindProcess(pid) + + if len(errs) == 1 { + // if we've encountered only one error, we're returning it: + return errs[0] + } else if len(errs) != 0 { + // if multiple errors were encountered, combine them into a single error + out.Styled(style.Failure, "Multiple errors encountered:") + for _, e := range errs { + out.Errf("%v\n", e) + } + return errors.New("multiple errors encountered while closing mount processes") + } + + // if no errors were encountered, it's safe to delete pidFile + if err := os.Remove(pidPath); err != nil { + return errors.Wrap(err, "while closing mount-pids file") + } + + return nil +} + +// trySigKillProcess takes a PID as argument and tries to SIGKILL it. +// It performs an ownership check of the pid, +// before trying to send a sigkill signal to it +func trySigKillProcess(pid int) error { + itDoes, err := isMinikubeProcess(pid) if err != nil { - return errors.Wrap(err, "ps.FindProcess") + return err } - if entry == nil { - klog.Infof("Stale pid: %d", pid) - if err := os.Remove(pidPath); err != nil { - return errors.Wrap(err, "Removing stale pid") - } - return nil + + if !itDoes { + return fmt.Errorf("stale pid: %d", pid) } - // We found a process, but it still may not be ours. - klog.Infof("Found process %d: %s", pid, entry.Executable()) proc, err := os.FindProcess(pid) if err != nil { - return errors.Wrap(err, "os.FindProcess") + return errors.Wrapf(err, "os.FindProcess: %d", pid) } klog.Infof("Killing pid %d ...", pid) if err := proc.Kill(); err != nil { klog.Infof("Kill failed with %v - removing probably stale pid...", err) - if err := os.Remove(pidPath); err != nil { - return errors.Wrap(err, "Removing likely stale unkillable pid") - } - return errors.Wrap(err, fmt.Sprintf("Kill(%d/%s)", pid, entry.Executable())) + return errors.Wrapf(err, "removing likely stale unkillable pid: %d", pid) } + return nil } + +// doesPIDBelongToMinikube tries to find the process with that PID +// and checks if the executable name contains the string "minikube" +var isMinikubeProcess = func(pid int) (bool, error) { + entry, err := ps.FindProcess(pid) + if err != nil { + return false, errors.Wrapf(err, "ps.FindProcess for %d", pid) + } + if entry == nil { + klog.Infof("Process not found. pid %d", pid) + return false, nil + } + + klog.Infof("Found process %d", pid) + if !strings.Contains(entry.Executable(), "minikube") { + klog.Infof("process %d was not started by minikube", pid) + return false, nil + } + + return true, nil +} + +// getPids opens the file at PATH and tries to read +// one or more space separated pids +func getPids(path string) ([]int, error) { + data, err := os.ReadFile(path) + if err != nil { + return nil, errors.Wrap(err, "ReadFile") + } + klog.Infof("pidfile contents: %s", data) + + pids := []int{} + strPids := strings.Fields(string(data)) + for _, p := range strPids { + intPid, err := strconv.Atoi(p) + if err != nil { + return nil, err + } + + pids = append(pids, intPid) + } + + return pids, nil +} diff --git a/cmd/minikube/cmd/delete_test.go b/cmd/minikube/cmd/delete_test.go index fff2ffabf88c..360258ae080c 100644 --- a/cmd/minikube/cmd/delete_test.go +++ b/cmd/minikube/cmd/delete_test.go @@ -18,10 +18,11 @@ package cmd import ( "fmt" - "io/ioutil" "os" + "os/exec" "path/filepath" "testing" + "time" "github.com/docker/machine/libmachine" "github.com/google/go-cmp/cmp" @@ -31,9 +32,10 @@ import ( cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/localpath" + "k8s.io/minikube/pkg/minikube/run" ) -// except returns a list of strings, minus the excluded ones +// exclude returns a list of strings, minus the excluded ones func exclude(vals []string, exclude []string) []string { result := []string{} for _, v := range vals { @@ -53,7 +55,7 @@ func exclude(vals []string, exclude []string) []string { func fileNames(path string) ([]string, error) { result := []string{} - fis, err := ioutil.ReadDir(path) + fis, err := os.ReadDir(path) if err != nil { return result, err } @@ -64,20 +66,9 @@ func fileNames(path string) ([]string, error) { } func TestDeleteProfile(t *testing.T) { - td, err := ioutil.TempDir("", "single") - if err != nil { - t.Fatalf("tempdir: %v", err) - } - - t.Cleanup(func() { - err := os.RemoveAll(td) - if err != nil { - t.Errorf("failed to clean up temp folder %q", td) - } - }) + td := t.TempDir() - err = copy.Copy("../../../pkg/minikube/config/testdata/delete-single", td) - if err != nil { + if err := copy.Copy("../../../pkg/minikube/config/testdata/delete-single", td); err != nil { t.Fatalf("copy: %v", err) } @@ -96,12 +87,10 @@ func TestDeleteProfile(t *testing.T) { {"partial-mach", "p8_partial_machine_config", []string{"p8_partial_machine_config"}}, } + options := &run.CommandOptions{} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err = os.Setenv(localpath.MinikubeHome, td) - if err != nil { - t.Errorf("setenv: %v", err) - } + t.Setenv(localpath.MinikubeHome, td) beforeProfiles, err := fileNames(filepath.Join(localpath.MiniPath(), "profiles")) if err != nil { @@ -118,7 +107,7 @@ func TestDeleteProfile(t *testing.T) { } hostAndDirsDeleter = hostAndDirsDeleterMock - errs := DeleteProfiles([]*config.Profile{profile}) + errs := DeleteProfiles([]*config.Profile{profile}, options) if len(errs) > 0 { HandleDeletionErrors(errs) t.Errorf("Errors while deleting profiles: %v", errs) @@ -158,9 +147,7 @@ func TestDeleteProfile(t *testing.T) { } } -var hostAndDirsDeleterMock = func(api libmachine.API, cc *config.ClusterConfig, profileName string) error { - return deleteContextTest() -} +var hostAndDirsDeleterMock = func(_ libmachine.API, _ *config.ClusterConfig, _ string) error { return deleteContextTest() } func deleteContextTest() error { if err := cmdcfg.Unset(config.ProfileName); err != nil { @@ -170,26 +157,13 @@ func deleteContextTest() error { } func TestDeleteAllProfiles(t *testing.T) { - td, err := ioutil.TempDir("", "all") - if err != nil { - t.Fatalf("tempdir: %v", err) - } - defer func() { // clean up tempdir - err := os.RemoveAll(td) - if err != nil { - t.Errorf("failed to clean up temp folder %q", td) - } - }() + td := t.TempDir() - err = copy.Copy("../../../pkg/minikube/config/testdata/delete-all", td) - if err != nil { + if err := copy.Copy("../../../pkg/minikube/config/testdata/delete-all", td); err != nil { t.Fatalf("copy: %v", err) } - err = os.Setenv(localpath.MinikubeHome, td) - if err != nil { - t.Errorf("error setting up test environment. could not set %s", localpath.MinikubeHome) - } + t.Setenv(localpath.MinikubeHome, td) pFiles, err := fileNames(filepath.Join(localpath.MiniPath(), "profiles")) if err != nil { @@ -221,9 +195,10 @@ func TestDeleteAllProfiles(t *testing.T) { t.Errorf("ListProfiles length = %d, expected %d\nvalid: %v\ninvalid: %v\n", len(validProfiles)+len(inValidProfiles), numberOfTotalProfileDirs, validProfiles, inValidProfiles) } - profiles := append(validProfiles, inValidProfiles...) + profiles := validProfiles + profiles = append(profiles, inValidProfiles...) hostAndDirsDeleter = hostAndDirsDeleterMock - errs := DeleteProfiles(profiles) + errs := DeleteProfiles(profiles, &run.CommandOptions{}) if errs != nil { t.Errorf("errors while deleting all profiles: %v", errs) @@ -233,7 +208,7 @@ func TestDeleteAllProfiles(t *testing.T) { if err != nil { t.Errorf("profiles: %v", err) } - afterMachines, err := ioutil.ReadDir(filepath.Join(localpath.MiniPath(), "machines")) + afterMachines, err := os.ReadDir(filepath.Join(localpath.MiniPath(), "machines")) if err != nil { t.Errorf("machines: %v", err) } @@ -247,3 +222,71 @@ func TestDeleteAllProfiles(t *testing.T) { viper.Set(config.ProfileName, "") } + +// TestTryKillOne spawns a go child process that waits to be SIGKILLed, +// then tries to execute the tryKillOne function on it; +// if after tryKillOne the process still exists, we consider it a failure +func TestTryKillOne(t *testing.T) { + + var waitForSig = []byte(` +package main + +import ( + "os" + "os/signal" + "syscall" +) + +// This is used to unit test functions that send termination +// signals to processes, in a cross-platform way. +func main() { + ch := make(chan os.Signal, 1) + done := make(chan struct{}) + defer close(ch) + + signal.Notify(ch, syscall.SIGTERM) + defer signal.Stop(ch) + + go func() { + <-ch + close(done) + }() + + <-done +} +`) + td := t.TempDir() + tmpfile := filepath.Join(td, "waitForSig.go") + + if err := os.WriteFile(tmpfile, waitForSig, 0o600); err != nil { + t.Fatalf("copying source to %s: %v\n", tmpfile, err) + } + + processToKill := exec.Command("go", "run", tmpfile) + err := processToKill.Start() + if err != nil { + t.Fatalf("while executing child process: %v\n", err) + } + pid := processToKill.Process.Pid + + isMinikubeProcess = func(int) (bool, error) { + return true, nil + } + + err = trySigKillProcess(pid) + if err != nil { + t.Fatalf("while trying to kill child proc %d: %v\n", pid, err) + } + + done := make(chan error, 1) + go func() { done <- processToKill.Wait() }() + + var waitErr error + select { + case waitErr = <-done: + t.Logf("child process wait result: %v", waitErr) + case <-time.After(1 * time.Second): + t.Fatalf("timed out waiting for process %d to exit", pid) + } + +} diff --git a/cmd/minikube/cmd/docker-env.go b/cmd/minikube/cmd/docker-env.go index 83858724b600..6107788155b5 100644 --- a/cmd/minikube/cmd/docker-env.go +++ b/cmd/minikube/cmd/docker-env.go @@ -14,12 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Part of this code is heavily inspired/copied by the following file: -// github.com/docker/machine/commands/env.go - package cmd import ( + "context" + "encoding/json" "fmt" "io" "net" @@ -33,10 +32,12 @@ import ( apiWait "k8s.io/apimachinery/pkg/util/wait" "github.com/spf13/cobra" + "gopkg.in/yaml.v2" "k8s.io/klog/v2" - kconst "k8s.io/kubernetes/cmd/kubeadm/app/constants" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/drivers/kic/oci" + "k8s.io/minikube/pkg/drivers/qemu" "k8s.io/minikube/pkg/minikube/bootstrapper/bsutil/kverify" "k8s.io/minikube/pkg/minikube/command" "k8s.io/minikube/pkg/minikube/constants" @@ -47,7 +48,10 @@ import ( "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" "k8s.io/minikube/pkg/minikube/shell" + "k8s.io/minikube/pkg/minikube/sshagent" "k8s.io/minikube/pkg/minikube/sysinit" + pkgnetwork "k8s.io/minikube/pkg/network" + kconst "k8s.io/minikube/third_party/kubeadm/app/constants" ) const minLogCheckTime = 60 * time.Second @@ -69,6 +73,12 @@ var dockerEnvTCPTmpl = fmt.Sprintf( "{{ if .NoProxyVar }}"+ "{{ .Prefix }}{{ .NoProxyVar }}{{ .Delimiter }}{{ .NoProxyValue }}{{ .Suffix }}"+ "{{ end }}"+ + "{{ if .SSHAuthSock }}"+ + "{{ .Prefix }}%s{{ .Delimiter }}{{ .SSHAuthSock }}{{ .Suffix }}"+ + "{{ end }}"+ + "{{ if .SSHAgentPID }}"+ + "{{ .Prefix }}%s{{ .Delimiter }}{{ .SSHAgentPID }}{{ .Suffix }}"+ + "{{ end }}"+ "{{ .UsageHint }}", constants.DockerTLSVerifyEnv, constants.DockerHostEnv, @@ -76,13 +86,23 @@ var dockerEnvTCPTmpl = fmt.Sprintf( constants.ExistingDockerTLSVerifyEnv, constants.ExistingDockerHostEnv, constants.ExistingDockerCertPathEnv, - constants.MinikubeActiveDockerdEnv) + constants.MinikubeActiveDockerdEnv, + constants.SSHAuthSock, + constants.SSHAgentPID) var dockerEnvSSHTmpl = fmt.Sprintf( "{{ .Prefix }}%s{{ .Delimiter }}{{ .DockerHost }}{{ .Suffix }}"+ "{{ .Prefix }}%s{{ .Delimiter }}{{ .MinikubeDockerdProfile }}{{ .Suffix }}"+ + "{{ if .SSHAuthSock }}"+ + "{{ .Prefix }}%s{{ .Delimiter }}{{ .SSHAuthSock }}{{ .Suffix }}"+ + "{{ end }}"+ + "{{ if .SSHAgentPID }}"+ + "{{ .Prefix }}%s{{ .Delimiter }}{{ .SSHAgentPID }}{{ .Suffix }}"+ + "{{ end }}"+ "{{ .UsageHint }}", constants.DockerHostEnv, - constants.MinikubeActiveDockerdEnv) + constants.MinikubeActiveDockerdEnv, + constants.SSHAuthSock, + constants.SSHAgentPID) // DockerShellConfig represents the shell config for Docker type DockerShellConfig struct { @@ -97,6 +117,9 @@ type DockerShellConfig struct { ExistingDockerCertPath string ExistingDockerHost string ExistingDockerTLSVerify string + + SSHAuthSock string + SSHAgentPID string } var ( @@ -140,6 +163,9 @@ func dockerShellCfgSet(ec DockerEnvConfig, envMap map[string]string) *DockerShel s.MinikubeDockerdProfile = envMap[constants.MinikubeActiveDockerdEnv] + s.SSHAuthSock = envMap[constants.SSHAuthSock] + s.SSHAgentPID = envMap[constants.SSHAgentPID] + if ec.noProxy { noProxyVar, noProxyValue := defaultNoProxyGetter.GetNoProxyVar() @@ -195,15 +221,14 @@ func mustRestartDockerd(name string, runner command.Runner) { if err := sysinit.New(runner).Reload("docker"); err != nil { klog.Warningf("will try to restart dockerd because reload failed: %v", err) if err := sysinit.New(runner).Restart("docker"); err != nil { - klog.Warningf("Couldn't restart docker inside minikbue within '%v' because: %v", name, err) + klog.Warningf("Couldn't restart docker inside minikube within '%v' because: %v", name, err) return } // if we get to the point that we have to restart docker (instead of reload) // will need to wait for apisever container to come up, this usually takes 5 seconds // verifying apisever using kverify would add code complexity for a rare case. klog.Warningf("waiting to ensure apisever container is up...") - startTime := time.Now() - if err = waitForAPIServerProcess(runner, startTime, time.Second*30); err != nil { + if err = waitForAPIServerProcess(runner, time.Now(), time.Second*30); err != nil { klog.Warningf("apiserver container isn't up, error: %v", err) } } @@ -211,7 +236,7 @@ func mustRestartDockerd(name string, runner command.Runner) { func waitForAPIServerProcess(cr command.Runner, start time.Time, timeout time.Duration) error { klog.Infof("waiting for apiserver process to appear ...") - err := apiWait.PollImmediate(time.Millisecond*500, timeout, func() (bool, error) { + err := apiWait.PollUntilContextTimeout(context.Background(), time.Millisecond*500, timeout, true, func(_ context.Context) (bool, error) { if time.Since(start) > timeout { return false, fmt.Errorf("cluster wait timed out during process check") } @@ -237,11 +262,17 @@ func waitForAPIServerProcess(cr command.Runner, start time.Time, timeout time.Du // dockerEnvCmd represents the docker-env command var dockerEnvCmd = &cobra.Command{ Use: "docker-env", - Short: "Configure environment to use minikube's Docker daemon", - Long: `Sets up docker env variables; similar to '$(docker-machine env)'.`, - Run: func(cmd *cobra.Command, args []string) { + Short: "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)", + Long: `Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube) + +For example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube. + +Note: You need the docker-cli to be installed on your machine. +docker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps`, + Run: func(_ *cobra.Command, _ []string) { var err error + options := flags.CommandOptions() shl := shell.ForceShell if shl == "" { shl, err = shell.Detect() @@ -266,7 +297,8 @@ var dockerEnvCmd = &cobra.Command{ } cname := ClusterFlagValue() - co := mustload.Running(cname) + + co := mustload.Running(cname, options) driverName := co.CP.Host.DriverName @@ -277,14 +309,41 @@ var dockerEnvCmd = &cobra.Command{ if len(co.Config.Nodes) > 1 { exit.Message(reason.EnvMultiConflict, `The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/`) } + cr := co.Config.KubernetesConfig.ContainerRuntime + if err := dockerEnvSupported(cr, driverName); err != nil { + exit.Message(reason.Usage, err.Error()) + } + + // for the sake of docker-env command, start nerdctl and nerdctld + if cr == constants.Containerd { + out.WarningT("Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better") - if co.Config.KubernetesConfig.ContainerRuntime != "docker" { - exit.Message(reason.Usage, `The docker-env command is only compatible with the "docker" runtime, but this cluster was configured to use the "{{.runtime}}" runtime.`, - out.V{"runtime": co.Config.KubernetesConfig.ContainerRuntime}) + startNerdctld(options) + + // docker-env on containerd depends on nerdctld (https://github.com/afbjorklund/nerdctld) as "docker" daeomn + // and nerdctld daemon must be used with ssh connection (it is set in kicbase image's Dockerfile) + // so directly set --ssh-host --ssh-add to true, even user didn't specify them + sshAdd = true + sshHost = true + + // start the ssh-agent + if err := sshagent.Start(cname); err != nil { + exit.Message(reason.SSHAgentStart, err.Error()) + } + // cluster config must be reloaded + // otherwise we won't be able to get SSH_AUTH_SOCK and SSH_AGENT_PID from cluster config. + co = mustload.Running(cname, options) + + // set the ssh-agent envs for current process + os.Setenv("SSH_AUTH_SOCK", co.Config.SSHAuthSock) + os.Setenv("SSH_AGENT_PID", strconv.Itoa(co.Config.SSHAgentPID)) } r := co.CP.Runner - ensureDockerd(cname, r) + + if cr == constants.Docker { + ensureDockerd(cname, r) + } d := co.CP.Host.Driver port := constants.DockerDaemonPort @@ -293,6 +352,8 @@ var dockerEnvCmd = &cobra.Command{ if err != nil { exit.Message(reason.DrvPortForward, "Error getting port binding for '{{.driver_name}} driver: {{.error}}", out.V{"driver_name": driverName, "error": err}) } + } else if driver.IsQEMU(driverName) && pkgnetwork.IsBuiltinQEMU(co.Config.Network) { + port = d.(*qemu.Driver).EnginePort } hostname, err := d.GetSSHHostname() @@ -307,18 +368,20 @@ var dockerEnvCmd = &cobra.Command{ hostIP := co.CP.IP.String() ec := DockerEnvConfig{ - EnvConfig: sh, - profile: cname, - driver: driverName, - ssh: sshHost, - hostIP: hostIP, - port: port, - certsDir: localpath.MakeMiniPath("certs"), - noProxy: noProxy, - username: d.GetSSHUsername(), - hostname: hostname, - sshport: sshport, - keypath: d.GetSSHKeyPath(), + EnvConfig: sh, + profile: cname, + driver: driverName, + ssh: sshHost, + hostIP: hostIP, + port: port, + certsDir: localpath.MakeMiniPath("certs"), + noProxy: noProxy, + username: d.GetSSHUsername(), + hostname: hostname, + sshport: sshport, + keypath: d.GetSSHKeyPath(), + sshAuthSock: co.Config.SSHAuthSock, + sshAgentPID: co.Config.SSHAgentPID, } dockerPath, err := exec.LookPath("docker") @@ -348,13 +411,24 @@ var dockerEnvCmd = &cobra.Command{ if err != nil { exit.Error(reason.IfSSHClient, "Error with ssh-add", err) } - cmd := exec.Command(path, d.GetSSHKeyPath()) cmd.Stderr = os.Stderr + + // TODO: refactor to work with docker, temp fix to resolve regression + if cr == constants.Containerd { + cmd.Env = append(cmd.Env, fmt.Sprintf("SSH_AUTH_SOCK=%s", co.Config.SSHAuthSock)) + cmd.Env = append(cmd.Env, fmt.Sprintf("SSH_AGENT_PID=%d", co.Config.SSHAgentPID)) + } err = cmd.Run() if err != nil { exit.Error(reason.IfSSHClient, "Error with ssh-add", err) } + + // TODO: refactor to work with docker, temp fix to resolve regression + if cr == constants.Containerd { + // eventually, run something similar to ssh --append-known + appendKnownHelper(nodeName, true) + } } }, } @@ -362,17 +436,19 @@ var dockerEnvCmd = &cobra.Command{ // DockerEnvConfig encapsulates all external inputs into shell generation for Docker type DockerEnvConfig struct { shell.EnvConfig - profile string - driver string - ssh bool - hostIP string - port int - certsDir string - noProxy bool - username string - hostname string - sshport int - keypath string + profile string + driver string + ssh bool + hostIP string + port int + certsDir string + noProxy bool + username string + hostname string + sshport int + keypath string + sshAuthSock string + sshAgentPID int } // dockerSetScript writes out a shell-compatible 'docker-env' script @@ -384,12 +460,92 @@ func dockerSetScript(ec DockerEnvConfig, w io.Writer) error { dockerSetEnvTmpl = dockerEnvTCPTmpl } envVars := dockerEnvVars(ec) - return shell.SetScript(ec.EnvConfig, w, dockerSetEnvTmpl, dockerShellCfgSet(ec, envVars)) + if ec.Shell == "none" { + switch outputFormat { + case "": + // shell "none" + case "text": + for k, v := range envVars { + _, err := fmt.Fprintf(w, "%s=%s\n", k, v) + if err != nil { + return err + } + } + return nil + case "json": + jsondata, err := json.Marshal(envVars) + if err != nil { + return err + } + _, err = w.Write(jsondata) + if err != nil { + return err + } + _, err = w.Write([]byte{'\n'}) + if err != nil { + return err + } + return nil + case "yaml": + yamldata, err := yaml.Marshal(envVars) + if err != nil { + return err + } + _, err = w.Write(yamldata) + if err != nil { + return err + } + return nil + default: + exit.Message(reason.InternalOutputUsage, "error: --output must be 'text', 'yaml' or 'json'") + } + } + return shell.SetScript(w, dockerSetEnvTmpl, dockerShellCfgSet(ec, envVars)) } -// dockerSetScript writes out a shell-compatible 'docker-env unset' script +// dockerUnsetScript writes out a shell-compatible 'docker-env unset' script func dockerUnsetScript(ec DockerEnvConfig, w io.Writer) error { vars := dockerEnvNames(ec) + if ec.Shell == "none" { + switch outputFormat { + case "": + // shell "none" + case "text": + for _, n := range vars { + _, err := fmt.Fprintf(w, "%s\n", n) + if err != nil { + return err + } + } + return nil + case "json": + jsondata, err := json.Marshal(vars) + if err != nil { + return err + } + _, err = w.Write(jsondata) + if err != nil { + return err + } + _, err = w.Write([]byte{'\n'}) + if err != nil { + return err + } + return nil + case "yaml": + yamldata, err := yaml.Marshal(vars) + if err != nil { + return err + } + _, err = w.Write(yamldata) + if err != nil { + return err + } + return nil + default: + exit.Message(reason.InternalOutputUsage, "error: --output must be 'text', 'yaml' or 'json'") + } + } return shell.UnsetScript(ec.EnvConfig, w, vars) } @@ -406,15 +562,24 @@ func sshURL(username string, hostname string, port int) string { // dockerEnvVars gets the necessary docker env variables to allow the use of minikube's docker daemon func dockerEnvVars(ec DockerEnvConfig) map[string]string { + agentPID := strconv.Itoa(ec.sshAgentPID) + // set agentPID to nil value if not set + if agentPID == "0" { + agentPID = "" + } envTCP := map[string]string{ constants.DockerTLSVerifyEnv: "1", constants.DockerHostEnv: dockerURL(ec.hostIP, ec.port), constants.DockerCertPathEnv: ec.certsDir, constants.MinikubeActiveDockerdEnv: ec.profile, + constants.SSHAuthSock: ec.sshAuthSock, + constants.SSHAgentPID: agentPID, } envSSH := map[string]string{ constants.DockerHostEnv: sshURL(ec.username, ec.hostname, ec.sshport), constants.MinikubeActiveDockerdEnv: ec.profile, + constants.SSHAuthSock: ec.sshAuthSock, + constants.SSHAgentPID: agentPID, } var rt map[string]string @@ -441,6 +606,8 @@ func dockerEnvNames(ec DockerEnvConfig) []string { constants.DockerHostEnv, constants.DockerCertPathEnv, constants.MinikubeActiveDockerdEnv, + constants.SSHAuthSock, + constants.SSHAgentPID, } if ec.noProxy { @@ -459,6 +626,8 @@ func dockerEnvVarsList(ec DockerEnvConfig) []string { fmt.Sprintf("%s=%s", constants.DockerHostEnv, dockerURL(ec.hostIP, ec.port)), fmt.Sprintf("%s=%s", constants.DockerCertPathEnv, ec.certsDir), fmt.Sprintf("%s=%s", constants.MinikubeActiveDockerdEnv, ec.profile), + fmt.Sprintf("%s=%s", constants.SSHAuthSock, ec.sshAuthSock), + fmt.Sprintf("%s=%d", constants.SSHAgentPID, ec.sshAgentPID), } } @@ -502,11 +671,23 @@ func tryDockerConnectivity(bin string, ec DockerEnvConfig) ([]byte, error) { return c.CombinedOutput() } +func dockerEnvSupported(containerRuntime, driverName string) error { + if containerRuntime != constants.Docker && containerRuntime != constants.Containerd { + return fmt.Errorf("the docker-env command only supports the docker and containerd runtimes") + } + // we only support containerd-env on the Docker driver + if containerRuntime == constants.Containerd && driverName != driver.Docker { + return fmt.Errorf("the docker-env command only supports the containerd runtime with the docker driver") + } + return nil +} + func init() { defaultNoProxyGetter = &EnvNoProxyGetter{} dockerEnvCmd.Flags().BoolVar(&noProxy, "no-proxy", false, "Add machine IP to NO_PROXY environment variable") dockerEnvCmd.Flags().BoolVar(&sshHost, "ssh-host", false, "Use SSH connection instead of HTTPS (port 2376)") dockerEnvCmd.Flags().BoolVar(&sshAdd, "ssh-add", false, "Add SSH identity key to SSH authentication agent") dockerEnvCmd.Flags().StringVar(&shell.ForceShell, "shell", "", "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect") + dockerEnvCmd.Flags().StringVarP(&outputFormat, "output", "o", "", "One of 'text', 'yaml' or 'json'.") dockerEnvCmd.Flags().BoolVarP(&dockerUnset, "unset", "u", false, "Unset variables instead of setting them") } diff --git a/cmd/minikube/cmd/docker-env_test.go b/cmd/minikube/cmd/docker-env_test.go index 915b3da622b9..8ef535a81af5 100644 --- a/cmd/minikube/cmd/docker-env_test.go +++ b/cmd/minikube/cmd/docker-env_test.go @@ -18,10 +18,13 @@ package cmd import ( "bytes" - "os" + "encoding/json" + "strings" "testing" "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "gopkg.in/yaml.v2" ) type FakeNoProxyGetter struct { @@ -36,13 +39,16 @@ func (f FakeNoProxyGetter) GetNoProxyVar() (string, string) { func TestGenerateDockerScripts(t *testing.T) { var tests = []struct { shell string + output string config DockerEnvConfig noProxyGetter *FakeNoProxyGetter wantSet string wantUnset string + diffOpts []cmp.Option }{ { "bash", + "", DockerEnvConfig{profile: "dockerdriver", driver: "docker", hostIP: "127.0.0.1", port: 32842, certsDir: "/certs"}, nil, `export DOCKER_TLS_VERIFY="1" @@ -57,10 +63,14 @@ export MINIKUBE_ACTIVE_DOCKERD="dockerdriver" unset DOCKER_HOST; unset DOCKER_CERT_PATH; unset MINIKUBE_ACTIVE_DOCKERD; +unset SSH_AUTH_SOCK; +unset SSH_AGENT_PID; `, + nil, }, { "bash", + "", DockerEnvConfig{profile: "dockerdriver", driver: "docker", ssh: true, username: "root", hostname: "host", sshport: 22}, nil, `export DOCKER_HOST="ssh://root@host:22" @@ -73,10 +83,14 @@ export MINIKUBE_ACTIVE_DOCKERD="dockerdriver" unset DOCKER_HOST; unset DOCKER_CERT_PATH; unset MINIKUBE_ACTIVE_DOCKERD; +unset SSH_AUTH_SOCK; +unset SSH_AGENT_PID; `, + nil, }, { "bash", + "", DockerEnvConfig{profile: "bash", driver: "kvm2", hostIP: "127.0.0.1", port: 2376, certsDir: "/certs"}, nil, `export DOCKER_TLS_VERIFY="1" @@ -91,10 +105,14 @@ export MINIKUBE_ACTIVE_DOCKERD="bash" unset DOCKER_HOST; unset DOCKER_CERT_PATH; unset MINIKUBE_ACTIVE_DOCKERD; +unset SSH_AUTH_SOCK; +unset SSH_AGENT_PID; `, + nil, }, { "bash", + "", DockerEnvConfig{profile: "ipv6", driver: "kvm2", hostIP: "fe80::215:5dff:fe00:a903", port: 2376, certsDir: "/certs"}, nil, `export DOCKER_TLS_VERIFY="1" @@ -109,10 +127,14 @@ export MINIKUBE_ACTIVE_DOCKERD="ipv6" unset DOCKER_HOST; unset DOCKER_CERT_PATH; unset MINIKUBE_ACTIVE_DOCKERD; +unset SSH_AUTH_SOCK; +unset SSH_AGENT_PID; `, + nil, }, { "fish", + "", DockerEnvConfig{profile: "fish", driver: "kvm2", hostIP: "127.0.0.1", port: 2376, certsDir: "/certs"}, nil, `set -gx DOCKER_TLS_VERIFY "1"; @@ -127,10 +149,14 @@ set -gx MINIKUBE_ACTIVE_DOCKERD "fish"; set -e DOCKER_HOST; set -e DOCKER_CERT_PATH; set -e MINIKUBE_ACTIVE_DOCKERD; +set -e SSH_AUTH_SOCK; +set -e SSH_AGENT_PID; `, + nil, }, { "powershell", + "", DockerEnvConfig{profile: "powershell", driver: "hyperv", hostIP: "192.168.0.1", port: 2376, certsDir: "/certs"}, nil, `$Env:DOCKER_TLS_VERIFY = "1" @@ -138,17 +164,21 @@ $Env:DOCKER_HOST = "tcp://192.168.0.1:2376" $Env:DOCKER_CERT_PATH = "/certs" $Env:MINIKUBE_ACTIVE_DOCKERD = "powershell" # To point your shell to minikube's docker-daemon, run: -# & minikube -p powershell docker-env | Invoke-Expression +# & minikube -p powershell docker-env --shell powershell | Invoke-Expression `, `Remove-Item Env:\\DOCKER_TLS_VERIFY Remove-Item Env:\\DOCKER_HOST Remove-Item Env:\\DOCKER_CERT_PATH Remove-Item Env:\\MINIKUBE_ACTIVE_DOCKERD +Remove-Item Env:\\SSH_AUTH_SOCK +Remove-Item Env:\\SSH_AGENT_PID `, + nil, }, { "cmd", + "", DockerEnvConfig{profile: "cmd", driver: "hyperv", hostIP: "192.168.0.1", port: 2376, certsDir: "/certs"}, nil, `SET DOCKER_TLS_VERIFY=1 @@ -156,17 +186,21 @@ SET DOCKER_HOST=tcp://192.168.0.1:2376 SET DOCKER_CERT_PATH=/certs SET MINIKUBE_ACTIVE_DOCKERD=cmd REM To point your shell to minikube's docker-daemon, run: -REM @FOR /f "tokens=*" %i IN ('minikube -p cmd docker-env') DO @%i +REM @FOR /f "tokens=*" %i IN ('minikube -p cmd docker-env --shell cmd') DO @%i `, `SET DOCKER_TLS_VERIFY= SET DOCKER_HOST= SET DOCKER_CERT_PATH= SET MINIKUBE_ACTIVE_DOCKERD= +SET SSH_AUTH_SOCK= +SET SSH_AGENT_PID= `, + nil, }, { "emacs", + "", DockerEnvConfig{profile: "emacs", driver: "hyperv", hostIP: "192.168.0.1", port: 2376, certsDir: "/certs"}, nil, `(setenv "DOCKER_TLS_VERIFY" "1") @@ -180,10 +214,14 @@ SET MINIKUBE_ACTIVE_DOCKERD= (setenv "DOCKER_HOST" nil) (setenv "DOCKER_CERT_PATH" nil) (setenv "MINIKUBE_ACTIVE_DOCKERD" nil) +(setenv "SSH_AUTH_SOCK" nil) +(setenv "SSH_AGENT_PID" nil) `, + nil, }, { "bash", + "", DockerEnvConfig{profile: "bash-no-proxy", driver: "kvm2", hostIP: "127.0.0.1", port: 2376, certsDir: "/certs", noProxy: true}, &FakeNoProxyGetter{"NO_PROXY", "127.0.0.1"}, `export DOCKER_TLS_VERIFY="1" @@ -200,11 +238,15 @@ export NO_PROXY="127.0.0.1" unset DOCKER_HOST; unset DOCKER_CERT_PATH; unset MINIKUBE_ACTIVE_DOCKERD; +unset SSH_AUTH_SOCK; +unset SSH_AGENT_PID; unset NO_PROXY; `, + nil, }, { "bash", + "", DockerEnvConfig{profile: "bash-no-proxy-lower", driver: "kvm2", hostIP: "127.0.0.1", port: 2376, certsDir: "/certs", noProxy: true}, &FakeNoProxyGetter{"no_proxy", "127.0.0.1"}, `export DOCKER_TLS_VERIFY="1" @@ -221,11 +263,15 @@ export no_proxy="127.0.0.1" unset DOCKER_HOST; unset DOCKER_CERT_PATH; unset MINIKUBE_ACTIVE_DOCKERD; +unset SSH_AUTH_SOCK; +unset SSH_AGENT_PID; unset no_proxy; `, + nil, }, { "powershell", + "", DockerEnvConfig{profile: "powershell-no-proxy-idempotent", driver: "hyperv", hostIP: "192.168.0.1", port: 2376, certsDir: "/certs", noProxy: true}, &FakeNoProxyGetter{"no_proxy", "192.168.0.1"}, `$Env:DOCKER_TLS_VERIFY = "1" @@ -234,18 +280,22 @@ $Env:DOCKER_CERT_PATH = "/certs" $Env:MINIKUBE_ACTIVE_DOCKERD = "powershell-no-proxy-idempotent" $Env:no_proxy = "192.168.0.1" # To point your shell to minikube's docker-daemon, run: -# & minikube -p powershell-no-proxy-idempotent docker-env | Invoke-Expression +# & minikube -p powershell-no-proxy-idempotent docker-env --shell powershell | Invoke-Expression `, `Remove-Item Env:\\DOCKER_TLS_VERIFY Remove-Item Env:\\DOCKER_HOST Remove-Item Env:\\DOCKER_CERT_PATH Remove-Item Env:\\MINIKUBE_ACTIVE_DOCKERD +Remove-Item Env:\\SSH_AUTH_SOCK +Remove-Item Env:\\SSH_AGENT_PID Remove-Item Env:\\no_proxy `, + nil, }, { "bash", + "", DockerEnvConfig{profile: "sh-no-proxy-add", driver: "kvm2", hostIP: "127.0.0.1", port: 2376, certsDir: "/certs", noProxy: true}, &FakeNoProxyGetter{"NO_PROXY", "192.168.0.1,10.0.0.4"}, `export DOCKER_TLS_VERIFY="1" @@ -262,11 +312,15 @@ export NO_PROXY="192.168.0.1,10.0.0.4,127.0.0.1" unset DOCKER_HOST; unset DOCKER_CERT_PATH; unset MINIKUBE_ACTIVE_DOCKERD; +unset SSH_AUTH_SOCK; +unset SSH_AGENT_PID; unset NO_PROXY; `, + nil, }, { "none", + "", DockerEnvConfig{profile: "noneshell", driver: "docker", hostIP: "127.0.0.1", port: 32842, certsDir: "/certs"}, nil, `DOCKER_TLS_VERIFY=1 @@ -278,12 +332,106 @@ MINIKUBE_ACTIVE_DOCKERD=noneshell DOCKER_HOST DOCKER_CERT_PATH MINIKUBE_ACTIVE_DOCKERD +SSH_AUTH_SOCK +SSH_AGENT_PID +`, + nil, + }, + { + "none", + "text", + DockerEnvConfig{profile: "nonetext", driver: "docker", hostIP: "127.0.0.1", port: 32842, certsDir: "/certs", sshAuthSock: "/var/folders/9l/6wpxv6wd1b901m1146r579wc00rqw3/T//ssh-KCQt1sNqrCPI/agent.29227", sshAgentPID: 29228}, + nil, + `DOCKER_TLS_VERIFY=1 +DOCKER_HOST=tcp://127.0.0.1:32842 +DOCKER_CERT_PATH=/certs +MINIKUBE_ACTIVE_DOCKERD=nonetext +SSH_AUTH_SOCK=/var/folders/9l/6wpxv6wd1b901m1146r579wc00rqw3/T//ssh-KCQt1sNqrCPI/agent.29227 +SSH_AGENT_PID=29228 +`, + `DOCKER_TLS_VERIFY +DOCKER_HOST +DOCKER_CERT_PATH +MINIKUBE_ACTIVE_DOCKERD +SSH_AUTH_SOCK +SSH_AGENT_PID +`, + []cmp.Option{ + cmpopts.AcyclicTransformer("SplitLines", func(s string) []string { + return strings.Split(s, "\n") + }), + cmpopts.SortSlices(func(a, b string) bool { + return a < b + }), + }, + }, + { + "none", + "json", + DockerEnvConfig{profile: "nonejson", driver: "docker", hostIP: "127.0.0.1", port: 32842, certsDir: "/certs", sshAuthSock: "/var/folders/9l/6wpxv6wd1b901m1146r579wc00rqw3/T//ssh-KCQt1sNqrCPI/agent.29227", sshAgentPID: 29228}, + nil, + `{ + "DOCKER_TLS_VERIFY": "1", + "DOCKER_HOST": "tcp://127.0.0.1:32842", + "DOCKER_CERT_PATH": "/certs", + "MINIKUBE_ACTIVE_DOCKERD": "nonejson", + "SSH_AUTH_SOCK": "/var/folders/9l/6wpxv6wd1b901m1146r579wc00rqw3/T//ssh-KCQt1sNqrCPI/agent.29227", + "SSH_AGENT_PID": "29228" + }`, + `[ + "DOCKER_TLS_VERIFY", + "DOCKER_HOST", + "DOCKER_CERT_PATH", + "MINIKUBE_ACTIVE_DOCKERD", + "SSH_AUTH_SOCK", + "SSH_AGENT_PID" + ]`, + []cmp.Option{ + cmp.FilterValues(func(x, y string) bool { + return json.Valid([]byte(x)) && json.Valid([]byte(y)) + }, + cmp.Transformer("ParseJSON", func(in string) (out interface{}) { + if err := json.Unmarshal([]byte(in), &out); err != nil { + panic(err) // should never occur given previous filter to ensure valid JSON + } + return out + })), + }, + }, + { + "none", + "yaml", + DockerEnvConfig{profile: "noneyaml", driver: "docker", hostIP: "127.0.0.1", port: 32842, certsDir: "/certs", sshAuthSock: "/var/folders/9l/6wpxv6wd1b901m1146r579wc00rqw3/T//ssh-KCQt1sNqrCPI/agent.29227", sshAgentPID: 29228}, + nil, + `DOCKER_TLS_VERIFY: "1" +DOCKER_HOST: tcp://127.0.0.1:32842 +DOCKER_CERT_PATH: /certs +MINIKUBE_ACTIVE_DOCKERD: noneyaml +SSH_AUTH_SOCK: /var/folders/9l/6wpxv6wd1b901m1146r579wc00rqw3/T//ssh-KCQt1sNqrCPI/agent.29227 +SSH_AGENT_PID: "29228" +`, + `- DOCKER_TLS_VERIFY +- DOCKER_HOST +- DOCKER_CERT_PATH +- MINIKUBE_ACTIVE_DOCKERD +- SSH_AUTH_SOCK +- SSH_AGENT_PID `, + []cmp.Option{ + cmpopts.AcyclicTransformer("ParseYAML", func(in string) (out interface{}) { + if err := yaml.Unmarshal([]byte(in), &out); err != nil { + return nil + } + return out + }), + }, }, } for _, tc := range tests { t.Run(tc.config.profile, func(t *testing.T) { - tc.config.EnvConfig.Shell = tc.shell + tc.config.Shell = tc.shell + // set global variable + outputFormat = tc.output defaultNoProxyGetter = tc.noProxyGetter var b []byte buf := bytes.NewBuffer(b) @@ -291,7 +439,7 @@ MINIKUBE_ACTIVE_DOCKERD t.Errorf("setScript(%+v) error: %v", tc.config, err) } got := buf.String() - if diff := cmp.Diff(tc.wantSet, got); diff != "" { + if diff := cmp.Diff(tc.wantSet, got, tc.diffOpts...); diff != "" { t.Errorf("setScript(%+v) mismatch (-want +got):\n%s\n\nraw output:\n%s\nquoted: %q", tc.config, diff, got, got) } @@ -300,7 +448,7 @@ MINIKUBE_ACTIVE_DOCKERD t.Errorf("unsetScript(%+v) error: %v", tc.config, err) } got = buf.String() - if diff := cmp.Diff(tc.wantUnset, got); diff != "" { + if diff := cmp.Diff(tc.wantUnset, got, tc.diffOpts...); diff != "" { t.Errorf("unsetScript(%+v) mismatch (-want +got):\n%s\n\nraw output:\n%s\nquoted: %q", tc.config, diff, got, got) } @@ -332,7 +480,7 @@ func TestValidDockerProxy(t *testing.T) { } for _, tc := range tests { - os.Setenv("ALL_PROXY", tc.proxy) + t.Setenv("ALL_PROXY", tc.proxy) valid := isValidDockerProxy("ALL_PROXY") if tc.isValid && valid != tc.isValid { t.Errorf("Expect %#v to be valid docker proxy", tc.proxy) diff --git a/cmd/minikube/cmd/flags/flags.go b/cmd/minikube/cmd/flags/flags.go new file mode 100644 index 000000000000..e6d928a2305b --- /dev/null +++ b/cmd/minikube/cmd/flags/flags.go @@ -0,0 +1,38 @@ +/* +Copyright 2025 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package flags + +import ( + "github.com/spf13/viper" + "k8s.io/minikube/pkg/minikube/run" +) + +// Flag names passed to minikube via run.CommandOptions. +const ( + Interactive = "interactive" + DownloadOnly = "download-only" +) + +// CommandOptions returns minikube runtime options from command line flags. +// Flags that must be handled outside of the cmd package must be added to +// run.CommandOptions. +func CommandOptions() *run.CommandOptions { + return &run.CommandOptions{ + NonInteractive: !viper.GetBool(Interactive), + DownloadOnly: viper.GetBool(DownloadOnly), + } +} diff --git a/cmd/minikube/cmd/generate-docs.go b/cmd/minikube/cmd/generate-docs.go index 8b9a847c7bf9..0cd4c89116cb 100644 --- a/cmd/minikube/cmd/generate-docs.go +++ b/cmd/minikube/cmd/generate-docs.go @@ -38,7 +38,7 @@ var generateDocs = &cobra.Command{ Long: "Populates the specified folder with documentation in markdown about minikube", Example: "minikube generate-docs --path ", Hidden: true, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { // if directory does not exist st, err := os.Stat(docsPath) if err != nil || !st.IsDir() { diff --git a/cmd/minikube/cmd/generate-docs_test.go b/cmd/minikube/cmd/generate-docs_test.go index 91ce515de66e..412c6a0c0f76 100644 --- a/cmd/minikube/cmd/generate-docs_test.go +++ b/cmd/minikube/cmd/generate-docs_test.go @@ -17,7 +17,6 @@ limitations under the License. package cmd import ( - "io/ioutil" "os" "path/filepath" "strings" @@ -27,18 +26,13 @@ import ( ) func TestGenerateTestDocs(t *testing.T) { - tempdir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatalf("creating temp dir failed: %v", err) - } - defer os.RemoveAll(tempdir) + tempdir := t.TempDir() docPath := filepath.Join(tempdir, "tests.md") - err = generate.TestDocs(docPath, "../../../test/integration") - if err != nil { + if err := generate.TestDocs(docPath, "../../../test/integration"); err != nil { t.Fatalf("error generating test docs: %v", err) } - actualContents, err := ioutil.ReadFile(docPath) + actualContents, err := os.ReadFile(docPath) if err != nil { t.Fatalf("error reading generated file: %v", err) } diff --git a/cmd/minikube/cmd/image.go b/cmd/minikube/cmd/image.go index 85616c09c49c..51e551ea47c7 100644 --- a/cmd/minikube/cmd/image.go +++ b/cmd/minikube/cmd/image.go @@ -18,7 +18,6 @@ package cmd import ( "io" - "io/ioutil" "net/url" "os" "path/filepath" @@ -27,14 +26,20 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/image" "k8s.io/minikube/pkg/minikube/machine" + "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" docker "k8s.io/minikube/third_party/go-dockerclient" ) +var ( + allNodes bool +) + // imageCmd represents the image command var imageCmd = &cobra.Command{ Use: "image COMMAND", @@ -51,10 +56,11 @@ var ( dockerFile string buildEnv []string buildOpt []string + format string ) func saveFile(r io.Reader) (string, error) { - tmp, err := ioutil.TempFile("", "build.*.tar") + tmp, err := os.CreateTemp("", "build.*.tar") if err != nil { return "", err } @@ -72,13 +78,15 @@ func saveFile(r io.Reader) (string, error) { // loadImageCmd represents the image load command var loadImageCmd = &cobra.Command{ Use: "load IMAGE | ARCHIVE | -", - Short: "Load a image into minikube", - Long: "Load a image into minikube", + Short: "Load an image into minikube", + Long: "Load an image into minikube", Example: "minikube image load image\nminikube image load image.tar", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) == 0 { exit.Message(reason.Usage, "Please provide an image in your local daemon to load into minikube via ") } + + options := flags.CommandOptions() // Cache and load images into container runtime profile, err := config.LoadProfile(viper.GetString(config.ProfileName)) if err != nil { @@ -88,7 +96,7 @@ var loadImageCmd = &cobra.Command{ if pull { // Pull image from remote registry, without doing any caching except in container runtime. // This is similar to daemon.Image but it is done by the container runtime in the cluster. - if err := machine.PullImages(args, profile); err != nil { + if err := machine.PullImages(args, profile, options); err != nil { exit.Error(reason.GuestImageLoad, "Failed to pull image", err) } return @@ -131,19 +139,92 @@ var loadImageCmd = &cobra.Command{ if imgDaemon || imgRemote { image.UseDaemon(imgDaemon) image.UseRemote(imgRemote) - if err := machine.CacheAndLoadImages(args, []*config.Profile{profile}, overwrite); err != nil { + if err := machine.CacheAndLoadImages(args, []*config.Profile{profile}, overwrite, options); err != nil { exit.Error(reason.GuestImageLoad, "Failed to load image", err) } } else if local { // Load images from local files, without doing any caching or checks in container runtime // This is similar to tarball.Image but it is done by the container runtime in the cluster. - if err := machine.DoLoadImages(args, []*config.Profile{profile}, "", overwrite); err != nil { + if err := machine.DoLoadImages(args, []*config.Profile{profile}, "", overwrite, options); err != nil { exit.Error(reason.GuestImageLoad, "Failed to load image", err) } } }, } +func readFile(w io.Writer, tmp string) error { + r, err := os.Open(tmp) + if err != nil { + return err + } + _, err = io.Copy(w, r) + if err != nil { + return err + } + err = r.Close() + if err != nil { + return err + } + return nil +} + +// saveImageCmd represents the image load command +var saveImageCmd = &cobra.Command{ + Use: "save IMAGE [ARCHIVE | -]", + Short: "Save a image from minikube", + Long: "Save a image from minikube", + Example: "minikube image save image\nminikube image save image image.tar", + Run: func(_ *cobra.Command, args []string) { + if len(args) == 0 { + exit.Message(reason.Usage, "Please provide an image in the container runtime to save from minikube via ") + } + + options := flags.CommandOptions() + // Save images from container runtime + profile, err := config.LoadProfile(viper.GetString(config.ProfileName)) + if err != nil { + exit.Error(reason.Usage, "loading profile", err) + } + + if len(args) > 1 { + output = args[1] + + if args[1] == "-" { + tmp, err := os.CreateTemp("", "image.*.tar") + if err != nil { + exit.Error(reason.GuestImageSave, "Failed to get temp", err) + } + tmp.Close() + output = tmp.Name() + } + + if err := machine.DoSaveImages([]string{args[0]}, output, []*config.Profile{profile}, "", options); err != nil { + exit.Error(reason.GuestImageSave, "Failed to save image", err) + } + + if args[1] == "-" { + err := readFile(os.Stdout, output) + if err != nil { + exit.Error(reason.GuestImageSave, "Failed to read temp", err) + } + os.Remove(output) + } + } else { + if err := machine.SaveAndCacheImages([]string{args[0]}, []*config.Profile{profile}, options); err != nil { + exit.Error(reason.GuestImageSave, "Failed to save image", err) + } + if imgDaemon || imgRemote { + image.UseDaemon(imgDaemon) + image.UseRemote(imgRemote) + err := image.UploadCachedImage(args[0]) + if err != nil { + exit.Error(reason.GuestImageSave, "Failed to save image", err) + } + } + } + }, +} + var removeImageCmd = &cobra.Command{ Use: "rm IMAGE [IMAGE...]", Short: "Remove one or more images", @@ -154,17 +235,37 @@ $ minikube image unload image busybox `, Args: cobra.MinimumNArgs(1), Aliases: []string{"remove", "unload"}, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { + options := flags.CommandOptions() profile, err := config.LoadProfile(viper.GetString(config.ProfileName)) if err != nil { exit.Error(reason.Usage, "loading profile", err) } - if err := machine.RemoveImages(args, profile); err != nil { + if err := machine.RemoveImages(args, profile, options); err != nil { exit.Error(reason.GuestImageRemove, "Failed to remove image", err) } }, } +var pullImageCmd = &cobra.Command{ + Use: "pull", + Short: "Pull images", + Example: ` +$ minikube image pull busybox +`, + Run: func(_ *cobra.Command, args []string) { + options := flags.CommandOptions() + profile, err := config.LoadProfile(viper.GetString(config.ProfileName)) + if err != nil { + exit.Error(reason.Usage, "loading profile", err) + } + + if err := machine.PullImages(args, profile, options); err != nil { + exit.Error(reason.GuestImagePull, "Failed to pull images", err) + } + }, +} + func createTar(dir string) (string, error) { tar, err := docker.CreateTarStream(dir, dockerFile) if err != nil { @@ -179,10 +280,12 @@ var buildImageCmd = &cobra.Command{ Short: "Build a container image in minikube", Long: "Build a container image, using the container runtime.", Example: `minikube image build .`, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) < 1 { exit.Message(reason.Usage, "Please provide a path or url to build") } + + options := flags.CommandOptions() // Build images into container runtime profile, err := config.LoadProfile(viper.GetString(config.ProfileName)) if err != nil { @@ -217,7 +320,13 @@ var buildImageCmd = &cobra.Command{ // Otherwise, assume it's a tar } } - if err := machine.BuildImage(img, dockerFile, tag, push, buildEnv, buildOpt, []*config.Profile{profile}); err != nil { + if runtime.GOOS == "windows" && strings.Contains(dockerFile, "\\") { + // if dockerFile is a DOS path, translate it into UNIX path + // because we are going to build this image in UNIX environment + out.Stringf("minikube detects that you are using DOS-style path %s. minikube will convert it to UNIX-style by replacing all \\ to /\n", dockerFile) + dockerFile = strings.ReplaceAll(dockerFile, "\\", "/") + } + if err := machine.BuildImage(img, dockerFile, tag, push, buildEnv, buildOpt, []*config.Profile{profile}, allNodes, nodeName, options); err != nil { exit.Error(reason.GuestImageBuild, "Failed to build image", err) } if tmp != "" { @@ -233,30 +342,83 @@ var listImageCmd = &cobra.Command{ $ minikube image ls `, Aliases: []string{"list"}, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() profile, err := config.LoadProfile(viper.GetString(config.ProfileName)) if err != nil { exit.Error(reason.Usage, "loading profile", err) } - if err := machine.ListImages(profile); err != nil { + if err := machine.ListImages(profile, format, options); err != nil { exit.Error(reason.GuestImageList, "Failed to list images", err) } }, } +var tagImageCmd = &cobra.Command{ + Use: "tag", + Short: "Tag images", + Example: ` +$ minikube image tag source target +`, + Aliases: []string{"list"}, + Run: func(_ *cobra.Command, args []string) { + if len(args) != 2 { + exit.Message(reason.Usage, "Please provide source and target image") + } + + options := flags.CommandOptions() + profile, err := config.LoadProfile(viper.GetString(config.ProfileName)) + if err != nil { + exit.Error(reason.Usage, "loading profile", err) + } + + if err := machine.TagImage(profile, args[0], args[1], options); err != nil { + exit.Error(reason.GuestImageTag, "Failed to tag images", err) + } + }, +} + +var pushImageCmd = &cobra.Command{ + Use: "push", + Short: "Push images", + Example: ` +$ minikube image push busybox +`, + Run: func(_ *cobra.Command, args []string) { + options := flags.CommandOptions() + profile, err := config.LoadProfile(viper.GetString(config.ProfileName)) + if err != nil { + exit.Error(reason.Usage, "loading profile", err) + } + + if err := machine.PushImages(args, profile, options); err != nil { + exit.Error(reason.GuestImagePush, "Failed to push images", err) + } + }, +} + func init() { - loadImageCmd.Flags().BoolVarP(&pull, "pull", "", false, "Pull the remote image (no caching)") + loadImageCmd.Flags().BoolVar(&pull, "pull", false, "Pull the remote image (no caching)") loadImageCmd.Flags().BoolVar(&imgDaemon, "daemon", false, "Cache image from docker daemon") loadImageCmd.Flags().BoolVar(&imgRemote, "remote", false, "Cache image from remote registry") loadImageCmd.Flags().BoolVar(&overwrite, "overwrite", true, "Overwrite image even if same image:tag name exists") imageCmd.AddCommand(loadImageCmd) imageCmd.AddCommand(removeImageCmd) + imageCmd.AddCommand(pullImageCmd) buildImageCmd.Flags().StringVarP(&tag, "tag", "t", "", "Tag to apply to the new image (optional)") - buildImageCmd.Flags().BoolVarP(&push, "push", "", false, "Push the new image (requires tag)") + buildImageCmd.Flags().BoolVar(&push, "push", false, "Push the new image (requires tag)") buildImageCmd.Flags().StringVarP(&dockerFile, "file", "f", "", "Path to the Dockerfile to use (optional)") buildImageCmd.Flags().StringArrayVar(&buildEnv, "build-env", nil, "Environment variables to pass to the build. (format: key=value)") buildImageCmd.Flags().StringArrayVar(&buildOpt, "build-opt", nil, "Specify arbitrary flags to pass to the build. (format: key=value)") + buildImageCmd.Flags().StringVarP(&nodeName, "node", "n", "", "The node to build on. Defaults to the primary control plane.") + buildImageCmd.Flags().BoolVar(&allNodes, "all", false, "Build image on all nodes.") imageCmd.AddCommand(buildImageCmd) + saveImageCmd.Flags().BoolVar(&imgDaemon, "daemon", false, "Cache image to docker daemon") + saveImageCmd.Flags().BoolVar(&imgRemote, "remote", false, "Cache image to remote registry") + imageCmd.AddCommand(saveImageCmd) + listImageCmd.Flags().StringVar(&format, "format", "short", "Format output. One of: short|table|json|yaml") imageCmd.AddCommand(listImageCmd) + imageCmd.AddCommand(tagImageCmd) + imageCmd.AddCommand(pushImageCmd) } diff --git a/cmd/minikube/cmd/ip.go b/cmd/minikube/cmd/ip.go index 3a34fad294d0..5f0453368d5f 100644 --- a/cmd/minikube/cmd/ip.go +++ b/cmd/minikube/cmd/ip.go @@ -18,6 +18,7 @@ package cmd import ( "github.com/spf13/cobra" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/node" @@ -30,8 +31,9 @@ var ipCmd = &cobra.Command{ Use: "ip", Short: "Retrieves the IP address of the specified node", Long: `Retrieves the IP address of the specified node, and writes it to STDOUT.`, - Run: func(cmd *cobra.Command, args []string) { - co := mustload.Running(ClusterFlagValue()) + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() + co := mustload.Running(ClusterFlagValue(), options) n, _, err := node.Retrieve(*co.Config, nodeName) if err != nil { exit.Error(reason.GuestNodeRetrieve, "retrieving node", err) diff --git a/cmd/minikube/cmd/kubectl.go b/cmd/minikube/cmd/kubectl.go index 35c776d0eba8..cd5fa6b27e11 100644 --- a/cmd/minikube/cmd/kubectl.go +++ b/cmd/minikube/cmd/kubectl.go @@ -21,10 +21,12 @@ import ( "os" "os/exec" "path" + "strings" "syscall" "github.com/spf13/cobra" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/detect" @@ -52,24 +54,27 @@ but optionally you can also run it directly on the control plane over the ssh co This can be useful if you cannot run kubectl locally for some reason, like unsupported host. Please be aware that when using --ssh all paths will apply to the remote machine.`, Example: "minikube kubectl -- --help\nminikube kubectl -- get pods --namespace kube-system", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { + options := flags.CommandOptions() cc, err := config.Load(ClusterFlagValue()) version := constants.DefaultKubernetesVersion + binaryMirror := "" if err == nil { version = cc.KubernetesConfig.KubernetesVersion + binaryMirror = cc.BinaryMirror } cname := ClusterFlagValue() if useSSH { - co := mustload.Running(cname) + co := mustload.Running(cname, options) n := co.CP.Node kc := []string{"sudo"} kc = append(kc, kubectlPath(*co.Config)) kc = append(kc, "--kubeconfig") - kc = append(kc, kubeconfigPath(*co.Config)) + kc = append(kc, kubeconfigPath()) args = append(kc, args...) klog.Infof("Running SSH %v", args) @@ -94,12 +99,27 @@ host. Please be aware that when using --ssh all paths will apply to the remote m os.Exit(1) } - if len(args) > 1 && args[0] != "--help" { - cluster := []string{"--cluster", cname} - args = append(cluster, args...) + if len(args) > 0 { + insertIndex := 0 + if args[0] == cobra.ShellCompRequestCmd || args[0] == cobra.ShellCompNoDescRequestCmd { + // Insert right after __complete to allow code completion from the correct cluster. + insertIndex = 1 + } else { + // Add cluster argument before first flag, but after all commands. + // This improves error message of kubectl in case the command is wrong. + insertIndex = len(args) + for i, arg := range args { + if strings.HasPrefix(arg, "-") { + insertIndex = i + break + } + } + } + clusterArg := "--cluster=" + cname + args = append(append(append([]string{}, args[:insertIndex]...), clusterArg), args[insertIndex:]...) } - c, err := KubectlCommand(version, args...) + c, err := KubectlCommand(version, binaryMirror, args...) if err != nil { out.ErrLn("Error caching kubectl: %v", err) os.Exit(1) @@ -129,22 +149,22 @@ func kubectlPath(cfg config.ClusterConfig) string { } // kubeconfigPath returns the path to kubeconfig -func kubeconfigPath(cfg config.ClusterConfig) string { +func kubeconfigPath() string { return "/etc/kubernetes/admin.conf" } // KubectlCommand will return kubectl command with a version matching the cluster -func KubectlCommand(version string, args ...string) (*exec.Cmd, error) { +func KubectlCommand(version, binaryURL string, args ...string) (*exec.Cmd, error) { if version == "" { version = constants.DefaultKubernetesVersion } - path, err := node.CacheKubectlBinary(version) + binary, err := node.CacheKubectlBinary(version, binaryURL) if err != nil { return nil, err } - return exec.Command(path, args...), nil + return exec.Command(binary, args...), nil } func init() { diff --git a/cmd/minikube/cmd/license.go b/cmd/minikube/cmd/license.go new file mode 100644 index 000000000000..986a7d58928b --- /dev/null +++ b/cmd/minikube/cmd/license.go @@ -0,0 +1,42 @@ +/* +Copyright 2022 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cmd + +import ( + "github.com/spf13/cobra" + "k8s.io/minikube/pkg/minikube/download" + "k8s.io/minikube/pkg/minikube/exit" + "k8s.io/minikube/pkg/minikube/reason" +) + +var dir string + +// licenseCmd represents the credits command +var licenseCmd = &cobra.Command{ + Use: "license", + Short: "Outputs the licenses of dependencies to a directory", + Long: "Outputs the licenses of dependencies to a directory", + Run: func(_ *cobra.Command, _ []string) { + if err := download.Licenses(dir); err != nil { + exit.Error(reason.InetLicenses, "Failed to download licenses", err) + } + }, +} + +func init() { + licenseCmd.Flags().StringVarP(&dir, "dir", "d", ".", "Directory to output licenses to") +} diff --git a/cmd/minikube/cmd/logs.go b/cmd/minikube/cmd/logs.go index 9bf434847982..e1fbc3c0971c 100644 --- a/cmd/minikube/cmd/logs.go +++ b/cmd/minikube/cmd/logs.go @@ -19,17 +19,23 @@ package cmd import ( "os" + "github.com/docker/machine/libmachine/state" "github.com/spf13/cobra" "github.com/spf13/viper" "k8s.io/klog/v2" cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/cluster" + "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/logs" + "k8s.io/minikube/pkg/minikube/machine" "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" + "k8s.io/minikube/pkg/minikube/run" + "k8s.io/minikube/pkg/minikube/style" ) const ( @@ -47,6 +53,10 @@ var ( showProblems bool // fileOutput is where to write logs to. If omitted, writes to stdout. fileOutput string + // auditLogs only shows the audit logs + auditLogs bool + // lastStartOnly shows logs from last start + lastStartOnly bool ) // logsCmd represents the logs command @@ -54,8 +64,9 @@ var logsCmd = &cobra.Command{ Use: "logs", Short: "Returns logs to debug a local Kubernetes cluster", Long: `Gets the logs of the running instance, used for debugging minikube, not user code.`, - Run: func(cmd *cobra.Command, args []string) { - var logOutput *os.File = os.Stdout + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() + logOutput := os.Stdout var err error if fileOutput != "" { @@ -63,17 +74,34 @@ var logsCmd = &cobra.Command{ defer func() { err := logOutput.Close() if err != nil { - klog.Warning("Failed to close file: %v", err) + klog.Warningf("Failed to close file: %v", err) } }() if err != nil { exit.Error(reason.Usage, "Failed to create file", err) } } - + if lastStartOnly { + err := logs.OutputLastStart() + if err != nil { + klog.Errorf("failed to output last start logs: %v", err) + } + return + } + if auditLogs { + err := logs.OutputAudit(numberOfLines) + if err != nil { + klog.Errorf("failed to output audit logs: %v", err) + } + return + } logs.OutputOffline(numberOfLines, logOutput) - co := mustload.Running(ClusterFlagValue()) + if shouldSilentFail(options) { + return + } + + co := mustload.Running(ClusterFlagValue(), options) bs, err := cluster.Bootstrapper(co.API, viper.GetString(cmdcfg.Bootstrapper), *co.Config, co.CP.Runner) if err != nil { @@ -84,7 +112,6 @@ var logsCmd = &cobra.Command{ if err != nil { exit.Error(reason.InternalNewRuntime, "Unable to get runtime", err) } - if followLogs { err := logs.Follow(cr, bs, *co.Config, co.CP.Runner, logOutput) if err != nil { @@ -97,20 +124,43 @@ var logsCmd = &cobra.Command{ logs.OutputProblems(problems, numberOfProblems, logOutput) return } - err = logs.Output(cr, bs, *co.Config, co.CP.Runner, numberOfLines, logOutput) - if err != nil { - out.Ln("") - // Avoid exit.Error, since it outputs the issue URL - out.WarningT("{{.error}}", out.V{"error": err}) - os.Exit(reason.ExSvcError) + logs.Output(cr, bs, *co.Config, co.CP.Runner, numberOfLines, logOutput) + if fileOutput != "" { + out.Styled(style.Success, "Logs file created ({{.logPath}}), remember to include it when reporting issues!", out.V{"logPath": fileOutput}) } }, } +// shouldSilentFail returns true if the user specifies the --file flag and the host isn't running +// This is to prevent outputting the message 'The control plane node must be running for this command' which confuses +// many users while gathering logs to report their issue as the message makes them think the log file wasn't generated +func shouldSilentFail(options *run.CommandOptions) bool { + if fileOutput == "" { + return false + } + + api, cc := mustload.Partial(ClusterFlagValue(), options) + + cp, err := config.ControlPlane(*cc) + if err != nil { + return false + } + + machineName := config.MachineName(*cc, cp) + hs, err := machine.Status(api, machineName) + if err != nil { + return false + } + + return hs != state.Running.String() +} + func init() { logsCmd.Flags().BoolVarP(&followLogs, "follow", "f", false, "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.") logsCmd.Flags().BoolVar(&showProblems, "problems", false, "Show only log entries which point to known problems") logsCmd.Flags().IntVarP(&numberOfLines, "length", "n", 60, "Number of lines back to go within the log") logsCmd.Flags().StringVar(&nodeName, "node", "", "The node to get logs from. Defaults to the primary control plane.") logsCmd.Flags().StringVar(&fileOutput, "file", "", "If present, writes to the provided file instead of stdout.") + logsCmd.Flags().BoolVar(&auditLogs, "audit", false, "Show only the audit logs") + logsCmd.Flags().BoolVar(&lastStartOnly, "last-start-only", false, "Show only the last start logs.") } diff --git a/cmd/minikube/cmd/mount.go b/cmd/minikube/cmd/mount.go index d1908b0e6398..a04f7fc09aeb 100644 --- a/cmd/minikube/cmd/mount.go +++ b/cmd/minikube/cmd/mount.go @@ -21,6 +21,7 @@ import ( "net" "os" "os/signal" + "path/filepath" "runtime" "strconv" "strings" @@ -30,35 +31,57 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/cluster" + "k8s.io/minikube/pkg/minikube/constants" + "k8s.io/minikube/pkg/minikube/detect" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/exit" + "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" "k8s.io/minikube/pkg/minikube/style" + pkgnetwork "k8s.io/minikube/pkg/network" + "k8s.io/minikube/pkg/util/lock" "k8s.io/minikube/third_party/go9p/ufs" ) const ( // nineP is the value of --type used for the 9p filesystem. - nineP = "9p" - defaultMountVersion = "9p2000.L" - defaultMsize = 262144 + nineP = "9p" + defaultMount9PVersion = "9p2000.L" + mount9PVersionDescription = "Specify the 9p version that the mount should use" + defaultMountGID = "docker" + mountGIDDescription = "Default group id used for the mount" + defaultMountIP = "" + mountIPDescription = "Specify the ip that the mount should be setup on" + defaultMountMSize = 262144 + mountMSizeDescription = "The number of bytes to use for 9p packet payload" + mountOptionsDescription = "Additional mount options, such as cache=fscache" + defaultMountPort = 0 + mountPortDescription = "Specify the port that the mount should be setup on, where 0 means any free port." + defaultMountType = nineP + mountTypeDescription = "Specify the mount filesystem type (supported types: 9p)" + defaultMountUID = "docker" + mountUIDDescription = "Default user id used for the mount" ) +func defaultMountOptions() []string { + return []string{} +} + // placeholders for flag values var ( - mountIP string - mountPort uint16 - mountVersion string - mountType string - isKill bool - uid string - gid string - mSize int - options []string - mode uint + mountIP string + mountPort uint16 + mountVersion string + mountType string + isKill bool + uid string + gid string + mSize int + mountOptionsValue []string ) // supportedFilesystems is a map of filesystem types to not warn against. @@ -69,7 +92,7 @@ var mountCmd = &cobra.Command{ Use: "mount [flags] :", Short: "Mounts the specified directory into minikube", Long: `Mounts the specified directory into minikube.`, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if isKill { if err := killMountProcess(); err != nil { exit.Error(reason.HostKillMountProc, "Error killing mount process", err) @@ -78,9 +101,11 @@ var mountCmd = &cobra.Command{ } if len(args) != 1 { - exit.Message(reason.Usage, `Please specify the directory to be mounted: + exit.Message(reason.Usage, `Please specify the directory to be mounted: minikube mount : (example: "/host-home:/vm-home")`) } + + options := flags.CommandOptions() mountString := args[0] idx := strings.LastIndex(mountString, ":") if idx == -1 { // no ":" was present @@ -103,15 +128,34 @@ var mountCmd = &cobra.Command{ debugVal = 1 // ufs.StartServer takes int debug param } - co := mustload.Running(ClusterFlagValue()) + co := mustload.Running(ClusterFlagValue(), options) if co.CP.Host.Driver.DriverName() == driver.None { exit.Message(reason.Usage, `'none' driver does not support 'minikube mount' command`) } + if driver.IsQEMU(co.Config.Driver) && pkgnetwork.IsBuiltinQEMU(co.Config.Network) { + msg := "minikube mount is not currently implemented with the builtin network on QEMU" + if runtime.GOOS == "darwin" { + msg += ", try starting minikube with '--network=socket_vmnet'" + } + exit.Message(reason.Unimplemented, msg) + } var ip net.IP var err error if mountIP == "" { - ip, err = cluster.HostIP(co.CP.Host, co.Config.Name) + if detect.IsMicrosoftWSL() { + klog.Infof("Selecting IP for WSL. This may be incorrect...") + ip, err = func() (net.IP, error) { + conn, err := net.Dial("udp", "8.8.8.8:80") + if err != nil { + return nil, err + } + defer conn.Close() + return conn.LocalAddr().(*net.UDPAddr).IP, nil + }() + } else { + ip, err = cluster.HostIP(co.CP.Host, co.Config.Name) + } if err != nil { exit.Error(reason.IfHostIP, "Error getting the host IP address to use from within the VM", err) } @@ -133,11 +177,10 @@ var mountCmd = &cobra.Command{ Version: mountVersion, MSize: mSize, Port: port, - Mode: os.FileMode(mode), Options: map[string]string{}, } - for _, o := range options { + for _, o := range mountOptionsValue { if !strings.Contains(o, "=") { cfg.Options[o] = "" continue @@ -146,6 +189,11 @@ var mountCmd = &cobra.Command{ cfg.Options[parts[0]] = parts[1] } + if runtime.GOOS == "linux" && !detect.IsNinePSupported() { + exit.Message(reason.HostUnsupported, "The host does not support filesystem 9p.") + + } + // An escape valve to allow future hackers to try NFS, VirtFS, or other FS types. if !supportedFilesystems[cfg.Type] { out.WarningT("{{.type}} is not yet a supported filesystem. We will try anyways!", out.V{"type": cfg.Type}) @@ -156,25 +204,27 @@ var mountCmd = &cobra.Command{ bindIP = "127.0.0.1" } out.Step(style.Mounting, "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...", out.V{"sourcePath": hostPath, "destinationPath": vmPath}) - out.Infof("Mount type: {{.name}}", out.V{"type": cfg.Type}) + out.Infof("Mount type: {{.name}}", out.V{"name": cfg.Type}) out.Infof("User ID: {{.userID}}", out.V{"userID": cfg.UID}) out.Infof("Group ID: {{.groupID}}", out.V{"groupID": cfg.GID}) out.Infof("Version: {{.version}}", out.V{"version": cfg.Version}) out.Infof("Message Size: {{.size}}", out.V{"size": cfg.MSize}) - out.Infof("Permissions: {{.octalMode}} ({{.writtenMode}})", out.V{"octalMode": fmt.Sprintf("%o", cfg.Mode), "writtenMode": cfg.Mode}) out.Infof("Options: {{.options}}", out.V{"options": cfg.Options}) out.Infof("Bind Address: {{.Address}}", out.V{"Address": net.JoinHostPort(bindIP, fmt.Sprint(port))}) var wg sync.WaitGroup + pidchan := make(chan int) if cfg.Type == nineP { wg.Add(1) - go func() { + go func(pid chan int) { + pid <- os.Getpid() out.Styled(style.Fileserver, "Userspace file server: ") ufs.StartServer(net.JoinHostPort(bindIP, strconv.Itoa(port)), debugVal, hostPath) out.Step(style.Stopped, "Userspace file server is shutdown") wg.Done() - }() + }(pidchan) } + pid := <-pidchan // Unmount if Ctrl-C or kill request is received. c := make(chan os.Signal, 1) @@ -186,11 +236,17 @@ var mountCmd = &cobra.Command{ if err != nil { out.FailureT("Failed unmount: {{.error}}", out.V{"error": err}) } + + err = removePidFromFile(pid) + if err != nil { + out.FailureT("Failed removing pid from pidfile: {{.error}}", out.V{"error": err}) + } + exit.Message(reason.Interrupted, "Received {{.name}} signal", out.V{"name": sig}) } }() - err = cluster.Mount(co.CP.Runner, ip.String(), vmPath, cfg) + err = cluster.Mount(co.CP.Runner, ip.String(), vmPath, cfg, pid) if err != nil { if rtErr, ok := err.(*cluster.MountError); ok && rtErr.ErrorType == cluster.MountErrorConnect { exit.Error(reason.GuestMountCouldNotConnect, "mount could not connect", rtErr) @@ -205,16 +261,15 @@ var mountCmd = &cobra.Command{ } func init() { - mountCmd.Flags().StringVar(&mountIP, "ip", "", "Specify the ip that the mount should be setup on") - mountCmd.Flags().Uint16Var(&mountPort, "port", 0, "Specify the port that the mount should be setup on, where 0 means any free port.") - mountCmd.Flags().StringVar(&mountType, "type", nineP, "Specify the mount filesystem type (supported types: 9p)") - mountCmd.Flags().StringVar(&mountVersion, "9p-version", defaultMountVersion, "Specify the 9p version that the mount should use") + mountCmd.Flags().StringVar(&mountIP, constants.MountIPFlag, defaultMountIP, mountIPDescription) + mountCmd.Flags().Uint16Var(&mountPort, constants.MountPortFlag, defaultMountPort, mountPortDescription) + mountCmd.Flags().StringVar(&mountType, constants.MountTypeFlag, defaultMountType, mountTypeDescription) + mountCmd.Flags().StringVar(&mountVersion, constants.Mount9PVersionFlag, defaultMount9PVersion, mount9PVersionDescription) mountCmd.Flags().BoolVar(&isKill, "kill", false, "Kill the mount process spawned by minikube start") - mountCmd.Flags().StringVar(&uid, "uid", "docker", "Default user id used for the mount") - mountCmd.Flags().StringVar(&gid, "gid", "docker", "Default group id used for the mount") - mountCmd.Flags().UintVar(&mode, "mode", 0o755, "File permissions used for the mount") - mountCmd.Flags().StringSliceVar(&options, "options", []string{}, "Additional mount options, such as cache=fscache") - mountCmd.Flags().IntVar(&mSize, "msize", defaultMsize, "The number of bytes to use for 9p packet payload") + mountCmd.Flags().StringVar(&uid, constants.MountUIDFlag, defaultMountUID, mountUIDDescription) + mountCmd.Flags().StringVar(&gid, constants.MountGIDFlag, defaultMountGID, mountGIDDescription) + mountCmd.Flags().StringSliceVar(&mountOptionsValue, constants.MountOptionsFlag, defaultMountOptions(), mountOptionsDescription) + mountCmd.Flags().IntVar(&mSize, constants.MountMSizeFlag, defaultMountMSize, mountMSizeDescription) } // getPort uses the requested port or asks the kernel for a free open port that is ready to use @@ -231,3 +286,56 @@ func getPort() (int, error) { defer l.Close() return l.Addr().(*net.TCPAddr).Port, nil } + +// removePidFromFile looks at the default locations for the mount-pids file, +// for the profile in use. If a file is found and its content shows PID, PID gets removed. +func removePidFromFile(pid int) error { + profile := ClusterFlagValue() + paths := []string{ + localpath.MiniPath(), // legacy mount-process path for backwards compatibility + localpath.Profile(profile), + } + + for _, path := range paths { + err := removePid(path, strconv.Itoa(pid)) + if err != nil { + return err + } + } + + return nil +} + +// removePid reads the file at PATH and tries to remove PID from it if found +func removePid(path string, pid string) error { + // is it the file we're looking for? + pidPath := filepath.Join(path, constants.MountProcessFileName) + if _, err := os.Stat(pidPath); os.IsNotExist(err) { + return nil + } + + // we found the correct file + // we're reading the pids... + data, err := os.ReadFile(pidPath) + if err != nil { + return errors.Wrap(err, "readFile") + } + + pids := []string{} + // we're splitting the mount-pids file content into a slice of strings + // so that we can compare each to the PID we're looking for + strPids := strings.Fields(string(data)) + for _, p := range strPids { + // If we find the PID, we don't add it to the slice + if p == pid { + continue + } + + // if p doesn't correspond to PID, we add to a list + pids = append(pids, p) + } + + // we write the slice that we obtained back to the mount-pids file + newPids := strings.Join(pids, " ") + return lock.WriteFile(pidPath, []byte(newPids), 0o644) +} diff --git a/cmd/minikube/cmd/node.go b/cmd/minikube/cmd/node.go index 5b6fbb4c5b9d..f0883baeb1ec 100644 --- a/cmd/minikube/cmd/node.go +++ b/cmd/minikube/cmd/node.go @@ -27,7 +27,7 @@ var nodeCmd = &cobra.Command{ Use: "node", Short: "Add, remove, or list additional nodes", Long: "Operations on nodes", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { exit.Message(reason.Usage, "Usage: minikube node [add|start|stop|delete|list]") }, } diff --git a/cmd/minikube/cmd/node_add.go b/cmd/minikube/cmd/node_add.go index 622a2d3d018d..bd53ce85cb30 100644 --- a/cmd/minikube/cmd/node_add.go +++ b/cmd/minikube/cmd/node_add.go @@ -19,6 +19,8 @@ package cmd import ( "github.com/spf13/cobra" "github.com/spf13/viper" + + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/cni" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/driver" @@ -26,36 +28,56 @@ import ( "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/node" "k8s.io/minikube/pkg/minikube/out" + "k8s.io/minikube/pkg/minikube/out/register" "k8s.io/minikube/pkg/minikube/reason" "k8s.io/minikube/pkg/minikube/style" ) var ( - cp bool - worker bool + cpNode bool + workerNode bool + deleteNodeOnFailure bool ) var nodeAddCmd = &cobra.Command{ Use: "add", Short: "Adds a node to the given cluster.", Long: "Adds a node to the given cluster config, and starts it.", - Run: func(cmd *cobra.Command, args []string) { - co := mustload.Healthy(ClusterFlagValue()) + Run: func(cmd *cobra.Command, _ []string) { + options := flags.CommandOptions() + + co := mustload.Healthy(ClusterFlagValue(), options) cc := co.Config if driver.BareMetal(cc.Driver) { out.FailureT("none driver does not support multi-node clusters") } - name := node.Name(len(cc.Nodes) + 1) + if cpNode && !config.IsHA(*cc) { + out.FailureT("Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.") + } - out.Step(style.Happy, "Adding node {{.name}} to cluster {{.cluster}}", out.V{"name": name, "cluster": cc.Name}) + roles := []string{} + if workerNode { + roles = append(roles, "worker") + } + if cpNode { + roles = append(roles, "control-plane") + } + + // calculate appropriate new node name with id following the last existing one + lastID, err := node.ID(cc.Nodes[len(cc.Nodes)-1].Name) + if err != nil { + lastID = len(cc.Nodes) + out.ErrLn("determining last node index (will assume %d): %v", lastID, err) + } + name := node.Name(lastID + 1) - // TODO: Deal with parameters better. Ideally we should be able to acceot any node-specific minikube start params here. + out.Step(style.Happy, "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}", out.V{"name": name, "cluster": cc.Name, "roles": roles}) n := config.Node{ Name: name, - Worker: worker, - ControlPlane: cp, + Worker: workerNode, + ControlPlane: cpNode, KubernetesVersion: cc.KubernetesConfig.KubernetesVersion, } @@ -70,8 +92,9 @@ var nodeAddCmd = &cobra.Command{ } } - if err := node.Add(cc, n, false); err != nil { - _, err := maybeDeleteAndRetry(cmd, *cc, n, nil, err) + register.Reg.SetStep(register.InitialSetup) + if err := node.Add(cc, n, deleteNodeOnFailure, options); err != nil { + _, err := maybeDeleteAndRetry(cmd, *cc, n, nil, err, options) if err != nil { exit.Error(reason.GuestNodeAdd, "failed to add node", err) } @@ -86,10 +109,9 @@ var nodeAddCmd = &cobra.Command{ } func init() { - // TODO(https://github.com/kubernetes/minikube/issues/7366): We should figure out which minikube start flags to actually import - nodeAddCmd.Flags().BoolVar(&cp, "control-plane", false, "If true, the node added will also be a control plane in addition to a worker.") - nodeAddCmd.Flags().BoolVar(&worker, "worker", true, "If true, the added node will be marked for work. Defaults to true.") - nodeAddCmd.Flags().Bool(deleteOnFailure, false, "If set, delete the current cluster if start fails and try again. Defaults to false.") + nodeAddCmd.Flags().BoolVar(&cpNode, "control-plane", false, "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.") + nodeAddCmd.Flags().BoolVar(&workerNode, "worker", true, "If set, added node will be available as worker. Defaults to true.") + nodeAddCmd.Flags().BoolVar(&deleteNodeOnFailure, "delete-on-failure", false, "If set, delete the current cluster if start fails and try again. Defaults to false.") nodeCmd.AddCommand(nodeAddCmd) } diff --git a/cmd/minikube/cmd/node_delete.go b/cmd/minikube/cmd/node_delete.go index 686fdf6a3881..3b817ab08670 100644 --- a/cmd/minikube/cmd/node_delete.go +++ b/cmd/minikube/cmd/node_delete.go @@ -21,6 +21,7 @@ import ( "time" "github.com/spf13/cobra" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/delete" "k8s.io/minikube/pkg/minikube/driver" @@ -36,16 +37,18 @@ var nodeDeleteCmd = &cobra.Command{ Use: "delete", Short: "Deletes a node from a cluster.", Long: "Deletes a node from a cluster.", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) == 0 { exit.Message(reason.Usage, "Usage: minikube node delete [name]") } + + options := flags.CommandOptions() name := args[0] - co := mustload.Healthy(ClusterFlagValue()) + co := mustload.Healthy(ClusterFlagValue(), options) out.Step(style.DeletingHost, "Deleting node {{.name}} from cluster {{.cluster}}", out.V{"name": name, "cluster": co.Config.Name}) - n, err := node.Delete(*co.Config, name) + n, err := node.Delete(*co.Config, name, options) if err != nil { exit.Error(reason.GuestNodeDelete, "deleting node", err) } diff --git a/cmd/minikube/cmd/node_list.go b/cmd/minikube/cmd/node_list.go index 006366b8ccd9..429e3486ea61 100644 --- a/cmd/minikube/cmd/node_list.go +++ b/cmd/minikube/cmd/node_list.go @@ -22,6 +22,7 @@ import ( "github.com/spf13/cobra" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/mustload" @@ -32,13 +33,14 @@ var nodeListCmd = &cobra.Command{ Use: "list", Short: "List nodes.", Long: "List existing minikube nodes.", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) != 0 { exit.Message(reason.Usage, "Usage: minikube node list") } + options := flags.CommandOptions() cname := ClusterFlagValue() - _, cc := mustload.Partial(cname) + _, cc := mustload.Partial(cname, options) if len(cc.Nodes) < 1 { klog.Warningf("Did not found any minikube node.") diff --git a/cmd/minikube/cmd/node_start.go b/cmd/minikube/cmd/node_start.go index 35ed190411c2..767c4ff18188 100644 --- a/cmd/minikube/cmd/node_start.go +++ b/cmd/minikube/cmd/node_start.go @@ -21,6 +21,7 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/machine" @@ -41,7 +42,9 @@ var nodeStartCmd = &cobra.Command{ exit.Message(reason.Usage, "Usage: minikube node start [name]") } - api, cc := mustload.Partial(ClusterFlagValue()) + options := flags.CommandOptions() + + api, cc := mustload.Partial(ClusterFlagValue(), options) name := args[0] n, _, err := node.Retrieve(*cc, name) @@ -56,7 +59,7 @@ var nodeStartCmd = &cobra.Command{ } register.Reg.SetStep(register.InitialSetup) - r, p, m, h, err := node.Provision(cc, n, n.ControlPlane, viper.GetBool(deleteOnFailure)) + r, p, m, h, err := node.Provision(cc, n, viper.GetBool(deleteOnFailure), options) if err != nil { exit.Error(reason.GuestNodeProvision, "provisioning host for node", err) } @@ -68,14 +71,12 @@ var nodeStartCmd = &cobra.Command{ Host: h, Cfg: cc, Node: n, - ExistingAddons: nil, + ExistingAddons: cc.Addons, } - _, err = node.Start(s, n.ControlPlane) - if err != nil { - _, err := maybeDeleteAndRetry(cmd, *cc, *n, nil, err) - if err != nil { - node.ExitIfFatal(err) + if _, err = node.Start(s, options); err != nil { + if _, err := maybeDeleteAndRetry(cmd, *cc, *n, nil, err, options); err != nil { + node.ExitIfFatal(err, false) exit.Error(reason.GuestNodeStart, "failed to start node", err) } } diff --git a/cmd/minikube/cmd/node_stop.go b/cmd/minikube/cmd/node_stop.go index 65c92f71f8af..a9bc09b985d7 100644 --- a/cmd/minikube/cmd/node_stop.go +++ b/cmd/minikube/cmd/node_stop.go @@ -17,7 +17,10 @@ limitations under the License. package cmd import ( + "os" + "github.com/spf13/cobra" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/machine" @@ -32,13 +35,14 @@ var nodeStopCmd = &cobra.Command{ Use: "stop", Short: "Stops a node in a cluster.", Long: "Stops a node in a cluster.", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { if len(args) == 0 { exit.Message(reason.Usage, "Usage: minikube node stop [name]") } + options := flags.CommandOptions() name := args[0] - api, cc := mustload.Partial(ClusterFlagValue()) + api, cc := mustload.Partial(ClusterFlagValue(), options) n, _, err := node.Retrieve(*cc, name) if err != nil { @@ -49,7 +53,8 @@ var nodeStopCmd = &cobra.Command{ err = machine.StopHost(api, machineName) if err != nil { - out.FatalT("Failed to stop node {{.name}}", out.V{"name": name}) + out.ErrT(style.Fatal, "Failed to stop node {{.name}}: {{.error}}", out.V{"name": name, "error": err}) + os.Exit(reason.ExHostError) } out.Step(style.Stopped, "Successfully stopped node {{.name}}", out.V{"name": machineName}) }, diff --git a/cmd/minikube/cmd/options.go b/cmd/minikube/cmd/options.go index 63211aefbbb9..395bd290ac71 100644 --- a/cmd/minikube/cmd/options.go +++ b/cmd/minikube/cmd/options.go @@ -31,12 +31,12 @@ var optionsCmd = &cobra.Command{ Use: "options", Short: "Show a list of global command-line options (applies to all commands).", Long: "Show a list of global command-line options (applies to all commands).", - Hidden: true, + Hidden: false, Run: runOptions, } // runOptions handles the executes the flow of "minikube options" -func runOptions(cmd *cobra.Command, args []string) { +func runOptions(cmd *cobra.Command, _ []string) { out.String("The following options can be passed to any command:\n\n") cmd.Root().PersistentFlags().VisitAll(func(flag *pflag.Flag) { out.String(flagUsage(flag)) diff --git a/cmd/minikube/cmd/pause.go b/cmd/minikube/cmd/pause.go index 4fd7ceefe2c7..c7a180c544c3 100644 --- a/cmd/minikube/cmd/pause.go +++ b/cmd/minikube/cmd/pause.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/viper" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/cluster" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" @@ -49,9 +50,10 @@ var pauseCmd = &cobra.Command{ Run: runPause, } -func runPause(cmd *cobra.Command, args []string) { +func runPause(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() out.SetJSON(outputFormat == "json") - co := mustload.Running(ClusterFlagValue()) + co := mustload.Running(ClusterFlagValue(), options) register.SetEventLogPath(localpath.EventLog(ClusterFlagValue())) register.Reg.SetStep(register.Pausing) diff --git a/cmd/minikube/cmd/podman-env.go b/cmd/minikube/cmd/podman-env.go index eacf79dd187c..95ff6ed7058e 100644 --- a/cmd/minikube/cmd/podman-env.go +++ b/cmd/minikube/cmd/podman-env.go @@ -14,9 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Part of this code is heavily inspired/copied by the following file: -// github.com/docker/machine/commands/env.go - package cmd import ( @@ -29,6 +26,7 @@ import ( "github.com/docker/machine/libmachine/drivers" "github.com/docker/machine/libmachine/ssh" "github.com/spf13/cobra" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/drivers/kic/oci" "k8s.io/minikube/pkg/minikube/command" "k8s.io/minikube/pkg/minikube/constants" @@ -141,7 +139,8 @@ var podmanEnvCmd = &cobra.Command{ Use: "podman-env", Short: "Configure environment to use minikube's Podman service", Long: `Sets up podman env variables; similar to '$(podman-machine env)'.`, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() sh := shell.EnvConfig{ Shell: shell.ForceShell, } @@ -159,7 +158,7 @@ var podmanEnvCmd = &cobra.Command{ } cname := ClusterFlagValue() - co := mustload.Running(cname) + co := mustload.Running(cname, options) driverName := co.CP.Host.DriverName if driverName == driver.None { @@ -170,6 +169,11 @@ var podmanEnvCmd = &cobra.Command{ exit.Message(reason.Usage, `The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/`) } + if co.Config.KubernetesConfig.ContainerRuntime != constants.CRIO { + exit.Message(reason.Usage, `The podman-env command is only compatible with the "crio" runtime, but this cluster was configured to use the "{{.runtime}}" runtime.`, + out.V{"runtime": co.Config.KubernetesConfig.ContainerRuntime}) + } + r := co.CP.Runner if ok := isPodmanAvailable(r); !ok { exit.Message(reason.EnvPodmanUnavailable, `The podman service within '{{.cluster}}' is not active`, out.V{"cluster": cname}) @@ -240,7 +244,7 @@ func podmanSetScript(ec PodmanEnvConfig, w io.Writer) error { podmanEnvTmpl = podmanEnv2Tmpl } envVars := podmanEnvVars(ec) - return shell.SetScript(ec.EnvConfig, w, podmanEnvTmpl, podmanShellCfgSet(ec, envVars)) + return shell.SetScript(w, podmanEnvTmpl, podmanShellCfgSet(ec, envVars)) } // podmanUnsetScript writes out a shell-compatible 'podman-env unset' script @@ -251,10 +255,10 @@ func podmanUnsetScript(ec PodmanEnvConfig, w io.Writer) error { // podmanBridge returns the command to use in a var for accessing the podman varlink bridge over ssh func podmanBridge(client *ssh.ExternalClient) string { - command := []string{client.BinaryPath} - command = append(command, client.BaseArgs...) - command = append(command, "--", "sudo", "varlink", "-A", `\'podman varlink \\\$VARLINK_ADDRESS\'`, "bridge") - return strings.Join(command, " ") + cmd := []string{client.BinaryPath} + cmd = append(cmd, client.BaseArgs...) + cmd = append(cmd, "--", "sudo", "varlink", "-A", `\'podman varlink \\\$VARLINK_ADDRESS\'`, "bridge") + return strings.Join(cmd, " ") } // podmanURL returns the url to use in a var for accessing the podman socket over ssh diff --git a/cmd/minikube/cmd/podman-env_test.go b/cmd/minikube/cmd/podman-env_test.go index 7215fe9a1fd0..097891dd694a 100644 --- a/cmd/minikube/cmd/podman-env_test.go +++ b/cmd/minikube/cmd/podman-env_test.go @@ -71,7 +71,7 @@ unset MINIKUBE_ACTIVE_PODMAN; } for _, tc := range tests { t.Run(tc.config.profile, func(t *testing.T) { - tc.config.EnvConfig.Shell = tc.shell + tc.config.Shell = tc.shell defaultNoProxyGetter = tc.noProxyGetter var b []byte buf := bytes.NewBuffer(b) diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index 785a2db36bb5..0d35165d5d2b 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -23,7 +23,6 @@ import ( "path/filepath" "runtime" "strings" - "time" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -45,23 +44,26 @@ import ( "k8s.io/minikube/pkg/version" ) -var dirs = [...]string{ - localpath.MiniPath(), - localpath.MakeMiniPath("certs"), - localpath.MakeMiniPath("machines"), - localpath.MakeMiniPath("cache"), - localpath.MakeMiniPath("config"), - localpath.MakeMiniPath("addons"), - localpath.MakeMiniPath("files"), - localpath.MakeMiniPath("logs"), -} +var ( + dirs = [...]string{ + localpath.MiniPath(), + localpath.MakeMiniPath("certs"), + localpath.MakeMiniPath("machines"), + localpath.MakeMiniPath("cache"), + localpath.MakeMiniPath("config"), + localpath.MakeMiniPath("addons"), + localpath.MakeMiniPath("files"), + localpath.MakeMiniPath("logs"), + } + auditID string +) // RootCmd represents the base command when called without any subcommands var RootCmd = &cobra.Command{ Use: "minikube", Short: "minikube quickly sets up a local Kubernetes cluster", Long: `minikube provisions and manages local Kubernetes clusters optimized for development workflows.`, - PersistentPreRun: func(cmd *cobra.Command, args []string) { + PersistentPreRun: func(_ *cobra.Command, _ []string) { for _, path := range dirs { if err := os.MkdirAll(path, 0777); err != nil { exit.Error(reason.HostHomeMkdir, "Error creating minikube directory", err) @@ -72,14 +74,28 @@ var RootCmd = &cobra.Command{ out.WarningT("User name '{{.username}}' is not valid", out.V{"username": userName}) exit.Message(reason.Usage, "User name must be 60 chars or less.") } + var err error + auditID, err = audit.LogCommandStart() + if err != nil { + klog.Warningf("failed to log command start to audit: %v", err) + } + // viper maps $MINIKUBE_ROOTLESS to "rootless" property automatically, but it does not do vice versa, + // so we map "rootless" property to $MINIKUBE_ROOTLESS expliclity here. + // $MINIKUBE_ROOTLESS is referred by KIC runner, which is decoupled from viper. + if viper.GetBool(config.Rootless) { + os.Setenv(constants.MinikubeRootlessEnv, "true") + } + }, + PersistentPostRun: func(_ *cobra.Command, _ []string) { + if err := audit.LogCommandEnd(auditID); err != nil { + klog.Warningf("failed to log command end to audit: %v", err) + } }, } // Execute adds all child commands to the root command sets flags appropriately. // This is called by main.main(). It only needs to happen once to the rootCmd. func Execute() { - defer audit.Log(time.Now()) - // Check whether this is a windows binary (.exe) running inisde WSL. if runtime.GOOS == "windows" && detect.IsMicrosoftWSL() { var found = false @@ -95,7 +111,7 @@ func Execute() { } if runtime.GOOS == "darwin" && detect.IsAmd64M1Emulation() { - out.Infof("You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)", + out.Boxed("You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}", out.V{"url": notify.DownloadURL(version.GetVersion(), "darwin", "arm64")}) } @@ -107,7 +123,9 @@ func Execute() { profile := "" for i, a := range os.Args { if a == "--context" { - profile = fmt.Sprintf("--profile=%s", os.Args[i+1]) + if len(os.Args) > i+1 { + profile = fmt.Sprintf("--profile=%s", os.Args[i+1]) + } break } else if strings.HasPrefix(a, "--context=") { context := strings.Split(a, "=")[1] @@ -122,7 +140,7 @@ func Execute() { } } - for _, c := range RootCmd.Commands() { + applyToAllCommands(RootCmd, func(c *cobra.Command) { c.Short = translate.T(c.Short) c.Long = translate.T(c.Long) c.Flags().VisitAll(func(f *pflag.Flag) { @@ -130,7 +148,8 @@ func Execute() { }) c.SetUsageTemplate(usageTemplate()) - } + }) + RootCmd.Short = translate.T(RootCmd.Short) RootCmd.Long = translate.T(RootCmd.Long) RootCmd.Flags().VisitAll(func(f *pflag.Flag) { @@ -204,6 +223,10 @@ func init() { RootCmd.PersistentFlags().StringP(config.ProfileName, "p", constants.DefaultClusterName, `The name of the minikube VM being used. This can be set to allow having multiple instances of minikube independently.`) RootCmd.PersistentFlags().StringP(configCmd.Bootstrapper, "b", "kubeadm", "The name of the cluster bootstrapper that will set up the Kubernetes cluster.") RootCmd.PersistentFlags().String(config.UserFlag, "", "Specifies the user executing the operation. Useful for auditing operations executed by 3rd party tools. Defaults to the operating system username.") + RootCmd.PersistentFlags().Bool(config.SkipAuditFlag, false, "Skip recording the current command in the audit logs.") + RootCmd.PersistentFlags().Bool(config.Rootless, false, "Force to use rootless driver (docker and podman driver only)") + + translate.DetermineLocale() groups := templates.CommandGroups{ { @@ -270,13 +293,13 @@ func init() { // Ungrouped commands will show up in the "Other Commands" section RootCmd.AddCommand(completionCmd) + RootCmd.AddCommand(licenseCmd) templates.ActsAsRootCommand(RootCmd, []string{"options"}, groups...) if err := viper.BindPFlags(RootCmd.PersistentFlags()); err != nil { exit.Error(reason.InternalBindFlags, "Unable to bind flags", err) } - translate.DetermineLocale() cobra.OnInitialize(initConfig) } @@ -306,14 +329,26 @@ func setupViper() { viper.SetDefault(config.ReminderWaitPeriodInHours, 24) viper.SetDefault(config.WantNoneDriverWarning, true) viper.SetDefault(config.WantVirtualBoxDriverWarning, true) + viper.SetDefault(config.MaxAuditEntries, 1000) + viper.SetDefault(config.SkipAuditFlag, false) } func addToPath(dir string) { - new := fmt.Sprintf("%s:%s", dir, os.Getenv("PATH")) + path := fmt.Sprintf("%s:%s", dir, os.Getenv("PATH")) klog.Infof("Updating PATH: %s", dir) - os.Setenv("PATH", new) + os.Setenv("PATH", path) } func validateUsername(name string) bool { return len(name) <= 60 } + +// applyToAllCommands applies the provided func to all commands including sub commands +func applyToAllCommands(cmd *cobra.Command, f func(subCmd *cobra.Command)) { + for _, c := range cmd.Commands() { + f(c) + if c.HasSubCommands() { + applyToAllCommands(c, f) + } + } +} diff --git a/cmd/minikube/cmd/root_test.go b/cmd/minikube/cmd/root_test.go index af7d34e254ed..328dd657531b 100644 --- a/cmd/minikube/cmd/root_test.go +++ b/cmd/minikube/cmd/root_test.go @@ -34,8 +34,7 @@ func runCommand(f func(*cobra.Command, []string)) { func TestPreRunDirectories(t *testing.T) { // Make sure we create the required directories. - tempDir := tests.MakeTempDir() - defer tests.RemoveTempDir(tempDir) + tests.MakeTempDir(t) runCommand(RootCmd.PersistentPreRun) diff --git a/cmd/minikube/cmd/service.go b/cmd/minikube/cmd/service.go index e2a1626fc030..02c3c808e4a5 100644 --- a/cmd/minikube/cmd/service.go +++ b/cmd/minikube/cmd/service.go @@ -17,6 +17,7 @@ limitations under the License. package cmd import ( + "bytes" "errors" "fmt" "net/url" @@ -30,8 +31,8 @@ import ( "time" "github.com/spf13/cobra" - "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/drivers/kic/oci" "k8s.io/minikube/pkg/kapi" "k8s.io/minikube/pkg/minikube/browser" @@ -44,12 +45,14 @@ import ( "k8s.io/minikube/pkg/minikube/service" "k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/minikube/tunnel/kic" + pkgnetwork "k8s.io/minikube/pkg/network" ) const defaultServiceFormatTemplate = "http://{{.IP}}:{{.Port}}" var ( namespace string + all bool https bool serviceURLMode bool serviceURLFormat string @@ -62,7 +65,7 @@ var ( var serviceCmd = &cobra.Command{ Use: "service [flags] SERVICE", Short: "Returns a URL to connect to a service", - Long: `Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.`, + Long: `Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.`, PersistentPreRun: func(cmd *cobra.Command, args []string) { t, err := template.New("serviceURL").Parse(serviceURLFormat) if err != nil { @@ -72,38 +75,118 @@ var serviceCmd = &cobra.Command{ RootCmd.PersistentPreRun(cmd, args) }, - Run: func(cmd *cobra.Command, args []string) { - if len(args) == 0 || len(args) > 1 { - exit.Message(reason.Usage, "You must specify a service name") + Run: func(_ *cobra.Command, args []string) { + if len(args) == 0 && !all || (len(args) > 0 && all) { + exit.Message(reason.Usage, "You must specify service name(s) or --all") } - svc := args[0] + options := flags.CommandOptions() + svcArgs := make(map[string]bool) + for _, v := range args { + svcArgs[v] = true + } cname := ClusterFlagValue() - co := mustload.Healthy(cname) + co := mustload.Healthy(cname, options) + + if driver.IsQEMU(co.Config.Driver) && pkgnetwork.IsBuiltinQEMU(co.Config.Network) { + msg := "minikube service is not currently implemented with the builtin network on QEMU" + if runtime.GOOS == "darwin" { + msg += ", try starting minikube with '--network=socket_vmnet'" + } + exit.Message(reason.Unimplemented, msg) + } - urls, err := service.WaitForService(co.API, co.Config.Name, namespace, svc, serviceURLTemplate, serviceURLMode, https, wait, interval) + var services service.URLs + services, err := service.GetServiceURLs(co.API, co.Config.Name, namespace, serviceURLTemplate) if err != nil { - var s *service.SVCNotFoundError - if errors.As(err, &s) { - exit.Message(reason.SvcNotFound, `Service '{{.service}}' was not found in '{{.namespace}}' namespace. + out.ErrT(style.Fatal, "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}", out.V{"error": err}) + os.Exit(reason.ExSvcUnavailable) + } + + if len(args) >= 1 { + var newServices service.URLs + for _, svc := range services { + if _, ok := svcArgs[svc.Name]; ok { + newServices = append(newServices, svc) + } + } + services = newServices + } + + if len(services) == 0 && all { + exit.Message(reason.SvcNotFound, `No services were found in the '{{.namespace}}' namespace. +You may select another namespace by using 'minikube service --all -n '`, out.V{"namespace": namespace}) + } else if len(services) == 0 { + exit.Message(reason.SvcNotFound, `Service '{{.service}}' was not found in '{{.namespace}}' namespace. +You may select another namespace by using 'minikube service {{.service}} -n '. Or list out all the services using 'minikube service list'`, out.V{"service": args[0], "namespace": namespace}) + } + + var data [][]string + var noNodePortServices service.URLs + + for _, svc := range services { + openUrls, err := service.WaitForService(co.API, co.Config.Name, namespace, svc.Name, serviceURLTemplate, serviceURLMode, https, wait, interval) + + if err != nil { + var s *service.SVCNotFoundError + if errors.As(err, &s) { + exit.Message(reason.SvcNotFound, `Service '{{.service}}' was not found in '{{.namespace}}' namespace. You may select another namespace by using 'minikube service {{.service}} -n '. Or list out all the services using 'minikube service list'`, out.V{"service": svc, "namespace": namespace}) + } + exit.Error(reason.SvcTimeout, "Error opening service", err) + } + + if len(openUrls) == 0 { + data = append(data, []string{svc.Namespace, svc.Name, "No node port"}) + noNodePortServices = append(noNodePortServices, svc) + } else { + servicePortNames := strings.Join(svc.PortNames, "\n") + serviceURLs := strings.Join(openUrls, "\n") + + // if we are running Docker on OSX we empty the internal service URLs + if runtime.GOOS == "darwin" && co.Config.Driver == oci.Docker { + serviceURLs = "" + } + + data = append(data, []string{svc.Namespace, svc.Name, servicePortNames, serviceURLs}) + + if serviceURLMode && !driver.NeedsPortForward(co.Config.Driver) { + out.Stringf("%s\n", serviceURLs) + } + } + // check whether there are running pods for this service + if err := service.CheckServicePods(cname, svc.Name, namespace); err != nil { + exit.Error(reason.SvcUnreachable, "service not available", err) } - exit.Error(reason.SvcTimeout, "Error opening service", err) } - if driver.NeedsPortForward(co.Config.Driver) { - startKicServiceTunnel(svc, cname) - return + noNodePortSvcNames := []string{} + for _, svc := range noNodePortServices { + noNodePortSvcNames = append(noNodePortSvcNames, fmt.Sprintf("%s/%s", svc.Namespace, svc.Name)) + } + if len(noNodePortServices) > 0 { + out.WarningT("Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !", out.V{"svc_names": noNodePortSvcNames}) } - openURLs(svc, urls) + if driver.NeedsPortForward(co.Config.Driver) { + svcs := services + if len(svcs) == 0 && len(noNodePortServices) > 0 { + svcs = noNodePortServices + } + if len(svcs) > 0 { + startKicServiceTunnel(svcs, cname, co.Config.Driver) + } + } else if !serviceURLMode { + openURLs(data) + } }, } func init() { serviceCmd.Flags().StringVarP(&namespace, "namespace", "n", "default", "The service namespace") serviceCmd.Flags().BoolVar(&serviceURLMode, "url", false, "Display the Kubernetes service URL in the CLI instead of opening it in the default browser") + serviceCmd.Flags().BoolVar(&all, "all", false, "Forwards all services in a namespace (defaults to \"false\")") serviceCmd.Flags().BoolVar(&https, "https", false, "Open the service URL with https instead of http (defaults to \"false\")") serviceCmd.Flags().IntVar(&wait, "wait", service.DefaultWait, "Amount of time to wait for a service in seconds") serviceCmd.Flags().IntVar(&interval, "interval", service.DefaultInterval, "The initial time interval for each check that wait performs in seconds") @@ -111,7 +194,7 @@ func init() { serviceCmd.PersistentFlags().StringVar(&serviceURLFormat, "format", defaultServiceFormatTemplate, "Format to output service URL in. This format will be applied to each url individually and they will be printed one at a time.") } -func startKicServiceTunnel(svc, configName string) { +func startKicServiceTunnel(services service.URLs, configName, driverName string) { ctrlC := make(chan os.Signal, 1) signal.Notify(ctrlC, os.Interrupt) @@ -120,52 +203,107 @@ func startKicServiceTunnel(svc, configName string) { exit.Error(reason.InternalKubernetesClient, "error creating clientset", err) } - port, err := oci.ForwardedPort(oci.Docker, configName, 22) - if err != nil { - exit.Error(reason.DrvPortForward, "error getting ssh port", err) - } - sshPort := strconv.Itoa(port) - sshKey := filepath.Join(localpath.MiniPath(), "machines", configName, "id_rsa") + var data [][]string + for _, svc := range services { + port, err := oci.ForwardedPort(driverName, configName, 22) + if err != nil { + exit.Error(reason.DrvPortForward, "error getting ssh port", err) + } + sshPort := strconv.Itoa(port) + sshKey := filepath.Join(localpath.MiniPath(), "machines", configName, "id_rsa") - serviceTunnel := kic.NewServiceTunnel(sshPort, sshKey, clientset.CoreV1()) - urls, err := serviceTunnel.Start(svc, namespace) - if err != nil { - exit.Error(reason.SvcTunnelStart, "error starting tunnel", err) + serviceTunnel := kic.NewServiceTunnel(sshPort, sshKey, clientset.CoreV1(), serviceURLMode) + urls, err := serviceTunnel.Start(svc.Name, namespace) + + if err != nil { + exit.Error(reason.SvcTunnelStart, "error starting tunnel", err) + } + // mutate response urls to HTTPS if needed + urls, err = mutateURLs(svc.Name, urls) + + if err != nil { + exit.Error(reason.SvcTunnelStart, "error creating urls", err) + } + + defer serviceTunnel.Stop() + svc.URLs = urls + data = append(data, []string{namespace, svc.Name, "", strings.Join(urls, "\n")}) } - // wait for tunnel to come up time.Sleep(1 * time.Second) - data := [][]string{{namespace, svc, "", strings.Join(urls, "\n")}} - service.PrintServiceList(os.Stdout, data) + if !serviceURLMode { + service.PrintServiceList(os.Stdout, data) + } else { + for _, row := range data { + out.Stringf("%s\n", row[3]) + } + } + + if !serviceURLMode { + openURLs(data) + } - openURLs(svc, urls) out.WarningT("Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.", out.V{"operating_system": runtime.GOOS}) <-ctrlC +} - err = serviceTunnel.Stop() - if err != nil { - exit.Error(reason.SvcTunnelStop, "error stopping tunnel", err) +func mutateURLs(serviceName string, urls []string) ([]string, error) { + formattedUrls := make([]string, 0) + for _, rawURL := range urls { + var doc bytes.Buffer + parsedURL, err := url.Parse(rawURL) + if err != nil { + exit.Error(reason.SvcTunnelStart, "No valid URL found for tunnel.", err) + } + port, err := strconv.Atoi(parsedURL.Port()) + if err != nil { + exit.Error(reason.SvcTunnelStart, "No valid port found for tunnel.", err) + } + err = serviceURLTemplate.Execute(&doc, struct { + IP string + Port int32 + Name string + }{ + parsedURL.Hostname(), + int32(port), + serviceName, + }) + + if err != nil { + return nil, err + } + + httpsURL, _ := service.OptionallyHTTPSFormattedURLString(doc.String(), https) + formattedUrls = append(formattedUrls, httpsURL) } + + return formattedUrls, nil } -func openURLs(svc string, urls []string) { +func openURLs(urls [][]string) { for _, u := range urls { - _, err := url.Parse(u) + + if len(u) < 4 { + klog.Warning("No URL found") + continue + } + + _, err := url.Parse(u[3]) if err != nil { - klog.Warningf("failed to parse url %q: %v (will not open)", u, err) - out.String(fmt.Sprintf("%s\n", u)) + klog.Warningf("failed to parse url %q: %v (will not open)", u[3], err) + out.Stringf("%s\n", u) continue } if serviceURLMode { - out.String(fmt.Sprintf("%s\n", u)) + out.Stringf("%s\n", u) continue } - out.Styled(style.Celebrate, "Opening service {{.namespace_name}}/{{.service_name}} in default browser...", out.V{"namespace_name": namespace, "service_name": svc}) - if err := browser.OpenURL(u); err != nil { + out.Styled(style.Celebrate, "Opening service {{.namespace_name}}/{{.service_name}} in default browser...", out.V{"namespace_name": namespace, "service_name": u[1]}) + if err := browser.OpenURL(u[3]); err != nil { exit.Error(reason.HostBrowser, fmt.Sprintf("open url failed: %s", u), err) } } diff --git a/cmd/minikube/cmd/service_list.go b/cmd/minikube/cmd/service_list.go index 97df14d1564b..c6d477df5c42 100644 --- a/cmd/minikube/cmd/service_list.go +++ b/cmd/minikube/cmd/service_list.go @@ -17,13 +17,16 @@ limitations under the License. package cmd import ( + "encoding/json" + "fmt" "os" - "runtime" "strings" "github.com/spf13/cobra" core "k8s.io/api/core/v1" - "k8s.io/minikube/pkg/drivers/kic/oci" + "k8s.io/minikube/cmd/minikube/cmd/flags" + "k8s.io/minikube/pkg/minikube/driver" + "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" @@ -32,44 +35,68 @@ import ( ) var serviceListNamespace string +var profileOutput string // serviceListCmd represents the service list command var serviceListCmd = &cobra.Command{ Use: "list [flags]", Short: "Lists the URLs for the services in your local cluster", Long: `Lists the URLs for the services in your local cluster`, - Run: func(cmd *cobra.Command, args []string) { - co := mustload.Healthy(ClusterFlagValue()) + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() + co := mustload.Healthy(ClusterFlagValue(), options) + output := strings.ToLower(profileOutput) serviceURLs, err := service.GetServiceURLs(co.API, co.Config.Name, serviceListNamespace, serviceURLTemplate) if err != nil { - out.FatalT("Failed to get service URL: {{.error}}", out.V{"error": err}) - out.ErrT(style.Notice, "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.") + out.ErrT(style.Fatal, "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}", out.V{"error": err}) os.Exit(reason.ExSvcUnavailable) } + serviceURLs = updatePortsAndURLs(serviceURLs, co) - var data [][]string - for _, serviceURL := range serviceURLs { - if len(serviceURL.URLs) == 0 { - data = append(data, []string{serviceURL.Namespace, serviceURL.Name, "No node port"}) - } else { - servicePortNames := strings.Join(serviceURL.PortNames, "\n") - serviceURLs := strings.Join(serviceURL.URLs, "\n") - - // if we are running Docker on OSX we empty the internal service URLs - if runtime.GOOS == "darwin" && co.Config.Driver == oci.Docker { - serviceURLs = "" - } + switch output { + case "table": + printServicesTable(serviceURLs) + case "json": + printServicesJSON(serviceURLs) + default: + exit.Message(reason.Usage, fmt.Sprintf("invalid output format: %s. Valid values: 'table', 'json'", output)) + } + }, +} - data = append(data, []string{serviceURL.Namespace, serviceURL.Name, servicePortNames, serviceURLs}) - } +// updatePortsAndURLs sets the port name to "No node port" if a service has no URLs and removes the URLs +// if the driver needs port forwarding as the user won't be able to hit the listed URLs which could confuse them +func updatePortsAndURLs(serviceURLs service.URLs, co mustload.ClusterController) service.URLs { + needsPortForward := driver.NeedsPortForward(co.Config.Driver) + for i := range serviceURLs { + if len(serviceURLs[i].URLs) == 0 { + serviceURLs[i].PortNames = []string{"No node port"} + } else if needsPortForward { + serviceURLs[i].URLs = []string{} } + } + return serviceURLs +} - service.PrintServiceList(os.Stdout, data) - }, +func printServicesTable(serviceURLs service.URLs) { + var data [][]string + for _, serviceURL := range serviceURLs { + portNames := strings.Join(serviceURL.PortNames, "\n") + urls := strings.Join(serviceURL.URLs, "\n") + data = append(data, []string{serviceURL.Namespace, serviceURL.Name, portNames, urls}) + } + + service.PrintServiceList(os.Stdout, data) +} + +func printServicesJSON(serviceURLs service.URLs) { + jsonString, _ := json.Marshal(serviceURLs) + os.Stdout.Write(jsonString) } func init() { + serviceListCmd.Flags().StringVarP(&profileOutput, "output", "o", "table", "The output format. One of 'json', 'table'") serviceListCmd.Flags().StringVarP(&serviceListNamespace, "namespace", "n", core.NamespaceAll, "The services namespace") serviceCmd.AddCommand(serviceListCmd) } diff --git a/cmd/minikube/cmd/ssh-host.go b/cmd/minikube/cmd/ssh-host.go index 1755c30ea77a..97984a7e13b0 100644 --- a/cmd/minikube/cmd/ssh-host.go +++ b/cmd/minikube/cmd/ssh-host.go @@ -24,6 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/client-go/util/homedir" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/exit" @@ -44,70 +45,87 @@ var sshHostCmd = &cobra.Command{ Use: "ssh-host", Short: "Retrieve the ssh host key of the specified node", Long: "Retrieve the ssh host key of the specified node.", - Run: func(cmd *cobra.Command, args []string) { - cname := ClusterFlagValue() - co := mustload.Running(cname) - if co.CP.Host.DriverName == driver.None { - exit.Message(reason.Usage, "'none' driver does not support 'minikube ssh-host' command") + Run: func(_ *cobra.Command, _ []string) { + appendKnownHelper(nodeName, appendKnown) + }, +} + +func appendKnownHelper(nodeName string, appendKnown bool) { + options := flags.CommandOptions() + cname := ClusterFlagValue() + co := mustload.Running(cname, options) + if co.CP.Host.DriverName == driver.None { + exit.Message(reason.Usage, "'none' driver does not support 'minikube ssh-host' command") + } + + var err error + var n *config.Node + if nodeName == "" { + n = co.CP.Node + } else { + n, _, err = node.Retrieve(*co.Config, nodeName) + if err != nil { + exit.Message(reason.GuestNodeRetrieve, "Node {{.nodeName}} does not exist.", out.V{"nodeName": nodeName}) } + } + + scanArgs := []string{"-t", "rsa"} + + keys, err := machine.RunSSHHostCommand(co.API, *co.Config, *n, "ssh-keyscan", scanArgs) + if err != nil { + // This is typically due to a non-zero exit code, so no need for flourish. + out.ErrLn("ssh-keyscan: %v", err) + // It'd be nice if we could pass up the correct error code here :( + os.Exit(1) + } - var err error - var n *config.Node - if nodeName == "" { - n = co.CP.Node - } else { - n, _, err = node.Retrieve(*co.Config, nodeName) - if err != nil { - exit.Message(reason.GuestNodeRetrieve, "Node {{.nodeName}} does not exist.", out.V{"nodeName": nodeName}) - } + if appendKnown { + addr, port, err := machine.GetSSHHostAddrPort(co.API, *co.Config, *n) + if err != nil { + out.ErrLn("GetSSHHostAddrPort: %v", err) + os.Exit(1) } - scanArgs := []string{"-t", "rsa"} + host := addr + if port != 22 { + host = fmt.Sprintf("[%s]:%d", addr, port) + } - keys, err := machine.RunSSHHostCommand(co.API, *co.Config, *n, "ssh-keyscan", scanArgs) + sshDir := filepath.Join(homedir.HomeDir(), ".ssh") + err = os.MkdirAll(sshDir, os.FileMode(0700)) // drwx------, to match ssh-keygen behavior if err != nil { - // This is typically due to a non-zero exit code, so no need for flourish. - out.ErrLn("ssh-keyscan: %v", err) - // It'd be nice if we could pass up the correct error code here :( + out.ErrLn("MkdirAll: %v", err) os.Exit(1) } - if appendKnown { - addr, port, err := machine.GetSSHHostAddrPort(co.API, *co.Config, *n) - if err != nil { - out.ErrLn("GetSSHHostAddrPort: %v", err) - os.Exit(1) - } - - host := addr - if port != 22 { - host = fmt.Sprintf("[%s]:%d", addr, port) - } - knownHosts := filepath.Join(homedir.HomeDir(), ".ssh", "known_hosts") - - fmt.Fprintf(os.Stderr, "Host added: %s (%s)\n", knownHosts, host) - if sshutil.KnownHost(host, knownHosts) { - return - } - - f, err := os.OpenFile(knownHosts, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600) - if err != nil { - out.ErrLn("OpenFile: %v", err) - os.Exit(1) - } - defer f.Close() - - _, err = f.WriteString(keys) - if err != nil { - out.ErrLn("WriteString: %v", err) - os.Exit(1) - } + knownHosts := filepath.Join(sshDir, "known_hosts") + if sshutil.KnownHost(host, knownHosts) { return } - fmt.Printf("%s", keys) - }, + f, err := os.OpenFile(knownHosts, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600) + if err != nil { + out.ErrLn("OpenFile: %v", err) + os.Exit(1) + } + + _, err = f.WriteString(keys) + if err != nil { + out.ErrLn("WriteString: %v", err) + f.Close() + os.Exit(1) + } + + if err := f.Close(); err != nil { + out.ErrLn("Close: %v", err) + os.Exit(1) + } + + fmt.Fprintf(os.Stderr, "Host added: %s (%s)\n", knownHosts, host) + + return + } } func init() { diff --git a/cmd/minikube/cmd/ssh-key.go b/cmd/minikube/cmd/ssh-key.go index 7cdf6b564e1d..d7e389890de5 100644 --- a/cmd/minikube/cmd/ssh-key.go +++ b/cmd/minikube/cmd/ssh-key.go @@ -20,6 +20,7 @@ import ( "path/filepath" "github.com/spf13/cobra" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/localpath" @@ -34,8 +35,9 @@ var sshKeyCmd = &cobra.Command{ Use: "ssh-key", Short: "Retrieve the ssh identity key path of the specified node", Long: "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.", - Run: func(cmd *cobra.Command, args []string) { - _, cc := mustload.Partial(ClusterFlagValue()) + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() + _, cc := mustload.Partial(ClusterFlagValue(), options) n, _, err := node.Retrieve(*cc, nodeName) if err != nil { exit.Error(reason.GuestNodeRetrieve, "retrieving node", err) diff --git a/cmd/minikube/cmd/ssh.go b/cmd/minikube/cmd/ssh.go index 15621092476b..f58b1f9f46e6 100644 --- a/cmd/minikube/cmd/ssh.go +++ b/cmd/minikube/cmd/ssh.go @@ -21,6 +21,7 @@ import ( "github.com/spf13/cobra" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/exit" @@ -38,9 +39,10 @@ var sshCmd = &cobra.Command{ Use: "ssh", Short: "Log into the minikube environment (for debugging)", Long: "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, args []string) { + options := flags.CommandOptions() cname := ClusterFlagValue() - co := mustload.Running(cname) + co := mustload.Running(cname, options) if co.CP.Host.DriverName == driver.None { exit.Message(reason.Usage, "'none' driver does not support 'minikube ssh' command") } diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index d51fec280a0d..4dbcddbe95fd 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -28,26 +28,35 @@ import ( "os/user" "regexp" "runtime" + "slices" "sort" "strconv" "strings" + "time" + "github.com/Delta456/box-cli-maker/v2" "github.com/blang/semver/v4" + "github.com/docker/go-connections/nat" "github.com/docker/machine/libmachine/ssh" "github.com/google/go-containerregistry/pkg/authn" "github.com/google/go-containerregistry/pkg/name" "github.com/google/go-containerregistry/pkg/v1/remote" "github.com/pkg/errors" - "github.com/shirou/gopsutil/v3/cpu" - gopshost "github.com/shirou/gopsutil/v3/host" + "github.com/shirou/gopsutil/v4/cpu" + gopshost "github.com/shirou/gopsutil/v4/host" "github.com/spf13/cobra" "github.com/spf13/viper" - + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/klog/v2" + cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/drivers/kic/oci" "k8s.io/minikube/pkg/minikube/bootstrapper/bsutil" + "k8s.io/minikube/pkg/minikube/bootstrapper/bsutil/kverify" "k8s.io/minikube/pkg/minikube/bootstrapper/images" + "k8s.io/minikube/pkg/minikube/command" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/cruntime" @@ -56,6 +65,7 @@ import ( "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/driver/auxdriver" "k8s.io/minikube/pkg/minikube/exit" + "k8s.io/minikube/pkg/minikube/firewall" "k8s.io/minikube/pkg/minikube/kubeconfig" "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/machine" @@ -64,22 +74,34 @@ import ( "k8s.io/minikube/pkg/minikube/notify" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/out/register" + "k8s.io/minikube/pkg/minikube/pause" "k8s.io/minikube/pkg/minikube/reason" - "k8s.io/minikube/pkg/minikube/style" - pkgtrace "k8s.io/minikube/pkg/trace" - "k8s.io/minikube/pkg/minikube/registry" + "k8s.io/minikube/pkg/minikube/run" + "k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/minikube/translate" + netutil "k8s.io/minikube/pkg/network" + pkgtrace "k8s.io/minikube/pkg/trace" "k8s.io/minikube/pkg/util" "k8s.io/minikube/pkg/version" + kconst "k8s.io/minikube/third_party/kubeadm/app/constants" ) +type versionJSON struct { + IsoVersion string `json:"iso_version"` + KicbaseVersion string `json:"kicbase_version"` + MinikubeVersion string `json:"minikube_version"` + Commit string `json:"commit"` +} + var ( - registryMirror []string - insecureRegistry []string - apiServerNames []string - apiServerIPs []net.IP - hostRe = regexp.MustCompile(`^[^-][\w\.-]+$`) + // ErrKubernetesPatchNotFound is when a patch was not found for the given . version + ErrKubernetesPatchNotFound = errors.New("Unable to detect the latest patch release for specified Kubernetes version") + registryMirror []string + insecureRegistry []string + apiServerNames []string + apiServerIPs []net.IP + hostRe = regexp.MustCompile(`^[^-][\w\.-]+$`) ) func init() { @@ -107,7 +129,7 @@ func platform() string { // Show the distro version if possible hi, err := gopshost.Info() if err == nil { - s.WriteString(fmt.Sprintf("%s %s", strings.Title(hi.Platform), hi.PlatformVersion)) + s.WriteString(fmt.Sprintf("%s %s", cases.Title(language.Und).String(hi.Platform), hi.PlatformVersion)) klog.Infof("hostinfo: %+v", hi) } else { klog.Warningf("gopshost.Info returned error: %v", err) @@ -133,7 +155,9 @@ func platform() string { } // runStart handles the executes the flow of "minikube start" -func runStart(cmd *cobra.Command, args []string) { +func runStart(cmd *cobra.Command, _ []string) { + options := flags.CommandOptions() + register.SetEventLogPath(localpath.EventLog(ClusterFlagValue())) ctx := context.Background() out.SetJSON(outputFormat == "json") @@ -141,13 +165,12 @@ func runStart(cmd *cobra.Command, args []string) { exit.Message(reason.Usage, "error initializing tracing: {{.Error}}", out.V{"Error": err.Error()}) } defer pkgtrace.Cleanup() + displayVersion(version.GetVersion()) + go download.CleanUpOlderPreloads() - // No need to do the update check if no one is going to see it - if !viper.GetBool(interactive) || !viper.GetBool(dryRun) { - // Avoid blocking execution on optional HTTP fetches - go notify.MaybePrintUpdateTextFromGithub() - } + // Avoid blocking execution on optional HTTP fetches + go notify.MaybePrintUpdateTextFromGithub(options) displayEnviron(os.Environ()) if viper.GetBool(force) { @@ -184,10 +207,11 @@ func runStart(cmd *cobra.Command, args []string) { validateProfileName() } - validateSpecifiedDriver(existing) + validateSpecifiedDriver(existing, options) validateKubernetesVersion(existing) + validateContainerRuntime(existing) - ds, alts, specified := selectDriver(existing) + ds, alts, specified := selectDriver(existing, options) if cmd.Flag(kicBaseImage).Changed { if !isBaseImageApplicable(ds.Name) { exit.Message(reason.Usage, @@ -204,9 +228,11 @@ func runStart(cmd *cobra.Command, args []string) { } } - starter, err := provisionWithDriver(cmd, ds, existing) + useForce := viper.GetBool(force) + + starter, err := provisionWithDriver(cmd, ds, existing, options) if err != nil { - node.ExitIfFatal(err) + node.ExitIfFatal(err, useForce) machine.MaybeDisplayAdvice(err, ds.Name) if specified { // If the user specified a driver, don't fallback to anything else @@ -227,18 +253,17 @@ func runStart(cmd *cobra.Command, args []string) { klog.Warningf("%s profile does not exist, trying anyways.", ClusterFlagValue()) } - err = deleteProfile(ctx, profile) + err = deleteProfile(ctx, profile, options) if err != nil { out.WarningT("Failed to delete cluster {{.name}}, proceeding with retry anyway.", out.V{"name": ClusterFlagValue()}) } - starter, err = provisionWithDriver(cmd, ds, existing) + starter, err = provisionWithDriver(cmd, ds, existing, options) if err != nil { continue - } else { - // Success! - success = true - break } + // Success! + success = true + break } if !success { exitGuestProvision(err) @@ -246,34 +271,40 @@ func runStart(cmd *cobra.Command, args []string) { } } - if existing != nil && driver.IsKIC(existing.Driver) { - if viper.GetBool(createMount) { - old := "" - if len(existing.ContainerVolumeMounts) > 0 { - old = existing.ContainerVolumeMounts[0] - } - if mount := viper.GetString(mountString); old != mount { - exit.Message(reason.GuestMountConflict, "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'", out.V{ - "driver": existing.Driver, - "new": mount, - "old": old, - }) - } + validateBuiltImageVersion(starter.Runner, ds.Name) + + if existing != nil && driver.IsKIC(existing.Driver) && viper.GetString(mountString) != "" { + old := "" + if len(existing.ContainerVolumeMounts) > 0 { + old = existing.ContainerVolumeMounts[0] + } + if mount := viper.GetString(mountString); old != mount { + exit.Message(reason.GuestMountConflict, "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'", out.V{ + "driver": existing.Driver, + "new": mount, + "old": old, + }) } } - kubeconfig, err := startWithDriver(cmd, starter, existing) + configInfo, err := startWithDriver(cmd, starter, existing, options) if err != nil { - node.ExitIfFatal(err) + node.ExitIfFatal(err, useForce) exit.Error(reason.GuestStart, "failed to start node", err) } - if err := showKubectlInfo(kubeconfig, starter.Node.KubernetesVersion, starter.Cfg.Name); err != nil { + if starter.Cfg.VerifyComponents[kverify.ExtraKey] { + if err := kverify.WaitExtra(ClusterFlagValue(), kverify.CorePodsLabels, kconst.DefaultControlPlaneTimeout); err != nil { + exit.Message(reason.GuestStart, "extra waiting: {{.error}}", out.V{"error": err}) + } + } + + if err := showKubectlInfo(configInfo, starter.Node.KubernetesVersion, starter.Node.ContainerRuntime, starter.Cfg.Name); err != nil { klog.Errorf("kubectl info: %v", err) } } -func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing *config.ClusterConfig) (node.Starter, error) { +func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing *config.ClusterConfig, options *run.CommandOptions) (node.Starter, error) { driverName := ds.Name klog.Infof("selected driver: %s", driverName) validateDriver(ds, existing) @@ -282,21 +313,53 @@ func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing * klog.Errorf("Error autoSetOptions : %v", err) } + virtualBoxMacOS13PlusWarning(driverName) + hyperkitDeprecationWarning(driverName) validateFlags(cmd, driverName) validateUser(driverName) if driverName == oci.Docker { validateDockerStorageDriver(driverName) } + k8sVersion, err := getKubernetesVersion(existing) + if err != nil { + klog.Warningf("failed getting Kubernetes version: %v", err) + } + + // Disallow accepting addons flag without Kubernetes + // It places here because cluster config is required to get the old version. + if cmd.Flags().Changed(config.AddonListFlag) { + if k8sVersion == constants.NoKubernetesVersion || viper.GetBool(noKubernetes) { + exit.Message(reason.Usage, "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable") + } + } + // Download & update the driver, even in --download-only mode if !viper.GetBool(dryRun) { updateDriver(driverName) } - k8sVersion := getKubernetesVersion(existing) - cc, n, err := generateClusterConfig(cmd, existing, k8sVersion, driverName) + // Check whether we may need to stop Kubernetes. + var stopk8s bool + if existing != nil && viper.GetBool(noKubernetes) { + stopk8s = true + } + + rtime := getContainerRuntime(existing) + cc, n, err := generateClusterConfig(cmd, existing, k8sVersion, rtime, driverName, options) if err != nil { - return node.Starter{}, errors.Wrap(err, "Failed to generate config") + return node.Starter{}, errors.Wrap(err, "Failed to generate cluster config") + } + klog.Infof("cluster config:\n%+v", cc) + + if firewall.IsBootpdBlocked(cc) { + if err := firewall.UnblockBootpd(options); err != nil { + klog.Warningf("failed unblocking bootpd from firewall: %v", err) + } + } + + if driver.IsVM(cc.Driver) && runtime.GOARCH == "arm64" && cc.KubernetesConfig.ContainerRuntime == "crio" { + exit.Message(reason.Unimplemented, "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.") } // This is about as far as we can go without overwriting config files @@ -306,11 +369,11 @@ func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing * } if driver.IsVM(driverName) && !driver.IsSSH(driverName) { - url, err := download.ISO(viper.GetStringSlice(isoURL), cmd.Flags().Changed(isoURL)) + urlString, err := download.ISO(viper.GetStringSlice(isoURL), cmd.Flags().Changed(isoURL)) if err != nil { return node.Starter{}, errors.Wrap(err, "Failed to cache ISO") } - cc.MinikubeISO = url + cc.MinikubeISO = urlString } var existingAddons map[string]bool @@ -327,7 +390,7 @@ func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing * ssh.SetDefaultClient(ssh.External) } - mRunner, preExists, mAPI, host, err := node.Provision(&cc, &n, true, viper.GetBool(deleteOnFailure)) + mRunner, preExists, mAPI, host, err := node.Provision(&cc, &n, viper.GetBool(deleteOnFailure), options) if err != nil { return node.Starter{}, err } @@ -335,6 +398,7 @@ func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing * return node.Starter{ Runner: mRunner, PreExists: preExists, + StopK8s: stopk8s, MachineAPI: mAPI, Host: host, ExistingAddons: existingAddons, @@ -343,56 +407,127 @@ func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing * }, nil } -func startWithDriver(cmd *cobra.Command, starter node.Starter, existing *config.ClusterConfig) (*kubeconfig.Settings, error) { - kubeconfig, err := node.Start(starter, true) +func virtualBoxMacOS13PlusWarning(driverName string) { + if !driver.IsVirtualBox(driverName) || !detect.MacOS13Plus() { + return + } + out.WarningT(`Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'. + https://minikube.sigs.k8s.io/docs/drivers/vfkit/ + https://minikube.sigs.k8s.io/docs/drivers/qemu/ + https://minikube.sigs.k8s.io/docs/drivers/docker/ + For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274 +`) +} + +// hyperkitDeprecationWarning prints a deprecation warning for the hyperkit driver +func hyperkitDeprecationWarning(driverName string) { + if !driver.IsHyperKit(driverName) { + return + } + out.WarningT(`The 'hyperkit' driver is deprecated and will be removed in a future release. + You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'. + https://minikube.sigs.k8s.io/docs/drivers/vfkit/ + https://minikube.sigs.k8s.io/docs/drivers/qemu/ + https://minikube.sigs.k8s.io/docs/drivers/docker/ + `) +} + +func validateBuiltImageVersion(r command.Runner, driverName string) { + if driver.IsNone(driverName) { + return + } + res, err := r.RunCmd(exec.Command("cat", "/version.json")) + if err != nil { + klog.Warningf("Unable to open version.json: %s", err) + return + } + + var versionDetails versionJSON + if err := json.Unmarshal(res.Stdout.Bytes(), &versionDetails); err != nil { + out.WarningT("Unable to parse version.json: {{.error}}, json: {{.json}}", out.V{"error": err, "json": res.Stdout.String()}) + return + } + + if !imageMatchesBinaryVersion(versionDetails.MinikubeVersion, version.GetVersion()) { + out.WarningT("Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -> Actual minikube version: {{.minikubeVersion}}", out.V{"imageMinikubeVersion": versionDetails.MinikubeVersion, "minikubeVersion": version.GetVersion()}) + } +} + +func imageMatchesBinaryVersion(imageVersion, binaryVersion string) bool { + if binaryVersion == imageVersion { + return true + } + + // the map below is used to map the binary version to the version the image expects + // this is usually done when a patch version is released but a new ISO/Kicbase is not needed + // that way a version mismatch warning won't be thrown + // + // ex. + // the v1.31.0 and v1.31.1 minikube binaries both use v1.31.0 ISO & Kicbase + // to prevent the v1.31.1 binary from throwing a version mismatch warning we use the map to change the binary version used in the comparison + + mappedVersions := map[string]string{ + "v1.31.1": "v1.31.0", + "v1.31.2": "v1.31.0", + } + binaryVersion, ok := mappedVersions[binaryVersion] + + return ok && binaryVersion == imageVersion +} + +func startWithDriver(cmd *cobra.Command, starter node.Starter, existing *config.ClusterConfig, options *run.CommandOptions) (*kubeconfig.Settings, error) { + // start primary control-plane node + configInfo, err := node.Start(starter, options) if err != nil { - kubeconfig, err = maybeDeleteAndRetry(cmd, *starter.Cfg, *starter.Node, starter.ExistingAddons, err) + configInfo, err = maybeDeleteAndRetry(cmd, *starter.Cfg, *starter.Node, starter.ExistingAddons, err, options) if err != nil { return nil, err } } + // target total and number of control-plane nodes + numCPNodes := 1 numNodes := viper.GetInt(nodes) if existing != nil { - if numNodes > 1 { - // We ignore the --nodes parameter if we're restarting an existing cluster - out.WarningT(`The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use "minikube node add" to add nodes to an existing cluster.`, out.V{"cluster": existing.Name}) + numCPNodes = 0 + for _, n := range existing.Nodes { + if n.ControlPlane { + numCPNodes++ + } } numNodes = len(existing.Nodes) + } else if viper.GetBool(ha) { + numCPNodes = 3 } - if numNodes > 1 { - if driver.BareMetal(starter.Cfg.Driver) { - exit.Message(reason.DrvUnsupportedMulti, "The none driver is not compatible with multi-node clusters.") + + // apart from starter, add any additional existing or new nodes + for i := 1; i < numNodes; i++ { + var n config.Node + if existing != nil { + n = existing.Nodes[i] } else { - if existing == nil { - for i := 1; i < numNodes; i++ { - nodeName := node.Name(i + 1) - n := config.Node{ - Name: nodeName, - Worker: true, - ControlPlane: false, - KubernetesVersion: starter.Cfg.KubernetesConfig.KubernetesVersion, - } - out.Ln("") // extra newline for clarity on the command line - err := node.Add(starter.Cfg, n, viper.GetBool(deleteOnFailure)) - if err != nil { - return nil, errors.Wrap(err, "adding node") - } - } - } else { - for _, n := range existing.Nodes { - if !n.ControlPlane { - err := node.Add(starter.Cfg, n, viper.GetBool(deleteOnFailure)) - if err != nil { - return nil, errors.Wrap(err, "adding node") - } - } - } + nodeName := node.Name(i + 1) + n = config.Node{ + Name: nodeName, + Port: starter.Cfg.APIServerPort, + KubernetesVersion: starter.Cfg.KubernetesConfig.KubernetesVersion, + ContainerRuntime: starter.Cfg.KubernetesConfig.ContainerRuntime, + Worker: true, + } + if i < numCPNodes { // starter node is also counted as (primary) cp node + n.ControlPlane = true } } + + out.Ln("") // extra newline for clarity on the command line + if err := node.Add(starter.Cfg, n, viper.GetBool(deleteOnFailure), options); err != nil { + return nil, errors.Wrap(err, "adding node") + } } - return kubeconfig, nil + pause.RemovePausedFile(starter.Runner) + + return configInfo, nil } func warnAboutMultiNodeCNI() { @@ -400,28 +535,34 @@ func warnAboutMultiNodeCNI() { } func updateDriver(driverName string) { - v, err := version.GetSemverVersion() - if err != nil { - out.WarningT("Error parsing minikube version: {{.error}}", out.V{"error": err}) - } else if err := auxdriver.InstallOrUpdate(driverName, localpath.MakeMiniPath("bin"), v, viper.GetBool(interactive), viper.GetBool(autoUpdate)); err != nil { + if err := auxdriver.InstallOrUpdate(driverName, localpath.MakeMiniPath("bin"), viper.GetBool(flags.Interactive), viper.GetBool(autoUpdate)); err != nil { + if errors.Is(err, auxdriver.ErrAuxDriverVersionCommandFailed) { + exit.Error(reason.DrvAuxNotHealthy, "Aux driver "+driverName, err) + } + if errors.Is(err, auxdriver.ErrAuxDriverVersionNotinPath) { + exit.Error(reason.DrvAuxNotHealthy, "Aux driver"+driverName, err) + } // if failed to update but not a fatal error, log it and continue (old version might still work) out.WarningT("Unable to update {{.driver}} driver: {{.error}}", out.V{"driver": driverName, "error": err}) } } -func displayVersion(version string) { +func displayVersion(ver string) { prefix := "" if ClusterFlagValue() != constants.DefaultClusterName { prefix = fmt.Sprintf("[%s] ", ClusterFlagValue()) } register.Reg.SetStep(register.InitialSetup) - out.Step(style.Happy, "{{.prefix}}minikube {{.version}} on {{.platform}}", out.V{"prefix": prefix, "version": version, "platform": platform()}) + out.Step(style.Happy, "{{.prefix}}minikube {{.version}} on {{.platform}}", out.V{"prefix": prefix, "version": ver, "platform": platform()}) } // displayEnviron makes the user aware of environment variables that will affect how minikube operates func displayEnviron(env []string) { for _, kv := range env { bits := strings.SplitN(kv, "=", 2) + if len(bits) < 2 { + continue + } k := bits[0] v := bits[1] if strings.HasPrefix(k, "MINIKUBE_") || k == constants.KubeconfigEnvVar { @@ -430,7 +571,29 @@ func displayEnviron(env []string) { } } -func showKubectlInfo(kcs *kubeconfig.Settings, k8sVersion string, machineName string) error { +func showKubectlInfo(kcs *kubeconfig.Settings, k8sVersion, rtime, machineName string) error { + if k8sVersion == constants.NoKubernetesVersion { + register.Reg.SetStep(register.Done) + out.Step(style.Ready, "Done! minikube is ready without Kubernetes!") + + // Runtime message. + boxConfig := box.Config{Py: 1, Px: 4, Type: "Round", Color: "Green"} + switch rtime { + case constants.Docker: + out.BoxedWithConfig(boxConfig, style.Tip, "Things to try without Kubernetes ...", `- "minikube ssh" to SSH into minikube's node. +- "minikube docker-env" to point your docker-cli to the docker inside minikube. +- "minikube image" to build images without docker.`) + case constants.Containerd: + out.BoxedWithConfig(boxConfig, style.Tip, "Things to try without Kubernetes ...", `- "minikube ssh" to SSH into minikube's node. +- "minikube image" to build images without docker.`) + case constants.CRIO: + out.BoxedWithConfig(boxConfig, style.Tip, "Things to try without Kubernetes ...", `- "minikube ssh" to SSH into minikube's node. +- "minikube podman-env" to point your podman-cli to the podman inside minikube. +- "minikube image" to build images without docker.`) + } + return nil + } + // To be shown at the end, regardless of exit path defer func() { register.Reg.SetStep(register.Done) @@ -463,14 +626,14 @@ func showKubectlInfo(kcs *kubeconfig.Settings, k8sVersion string, machineName st if client.Major != cluster.Major || minorSkew > 1 { out.Ln("") - out.WarningT("{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.", + out.WarningT("{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.", out.V{"path": path, "client_version": client, "cluster_version": cluster}) out.Infof("Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'", out.V{"version": k8sVersion}) } return nil } -func maybeDeleteAndRetry(cmd *cobra.Command, existing config.ClusterConfig, n config.Node, existingAddons map[string]bool, originalErr error) (*kubeconfig.Settings, error) { +func maybeDeleteAndRetry(cmd *cobra.Command, existing config.ClusterConfig, n config.Node, existingAddons map[string]bool, originalErr error, options *run.CommandOptions) (*kubeconfig.Settings, error) { if viper.GetBool(deleteOnFailure) { out.WarningT("Node {{.name}} failed to start, deleting and trying again.", out.V{"name": n.Name}) // Start failed, delete the cluster and try again @@ -479,16 +642,17 @@ func maybeDeleteAndRetry(cmd *cobra.Command, existing config.ClusterConfig, n co out.ErrT(style.Meh, `"{{.name}}" profile does not exist, trying anyways.`, out.V{"name": existing.Name}) } - err = deleteProfile(context.Background(), profile) + err = deleteProfile(context.Background(), profile, options) if err != nil { out.WarningT("Failed to delete cluster {{.name}}, proceeding with retry anyway.", out.V{"name": existing.Name}) } // Re-generate the cluster config, just in case the failure was related to an old config format cc := updateExistingConfigFromFlags(cmd, &existing) - var kubeconfig *kubeconfig.Settings + var configInfo *kubeconfig.Settings + for _, n := range cc.Nodes { - r, p, m, h, err := node.Provision(&cc, &n, n.ControlPlane, false) + r, p, m, h, err := node.Provision(&cc, &n, false, options) s := node.Starter{ Runner: r, PreExists: p, @@ -503,16 +667,16 @@ func maybeDeleteAndRetry(cmd *cobra.Command, existing config.ClusterConfig, n co return nil, err } - k, err := node.Start(s, n.ControlPlane) + k, err := node.Start(s, options) if n.ControlPlane { - kubeconfig = k + configInfo = k } if err != nil { // Ok we failed again, let's bail return nil, err } } - return kubeconfig, nil + return configInfo, nil } // Don't delete the cluster unless they ask return nil, originalErr @@ -544,14 +708,14 @@ func kubectlVersion(path string) (string, error) { } // returns (current_driver, suggested_drivers, "true, if the driver is set by command line arg or in the config file") -func selectDriver(existing *config.ClusterConfig) (registry.DriverState, []registry.DriverState, bool) { +func selectDriver(existing *config.ClusterConfig, options *run.CommandOptions) (registry.DriverState, []registry.DriverState, bool) { // Technically unrelated, but important to perform before detection driver.SetLibvirtURI(viper.GetString(kvmQemuURI)) register.Reg.SetStep(register.SelectingDriver) // By default, the driver is whatever we used last time if existing != nil { - old := hostDriver(existing) - ds := driver.Status(old) + old := hostDriver(existing, options) + ds := driver.Status(old, options) out.Step(style.Sparkle, `Using the {{.driver}} driver based on existing profile`, out.V{"driver": ds.String()}) return ds, nil, true } @@ -568,7 +732,7 @@ func selectDriver(existing *config.ClusterConfig) (registry.DriverState, []regis ` out.WarningT(warning, out.V{"driver": d, "vmd": vmd}) } - ds := driver.Status(d) + ds := driver.Status(d, options) if ds.Name == "" { exit.Message(reason.DrvUnsupportedOS, "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}", out.V{"driver": d, "os": runtime.GOOS, "arch": runtime.GOARCH}) } @@ -578,7 +742,7 @@ func selectDriver(existing *config.ClusterConfig) (registry.DriverState, []regis // Fallback to old driver parameter if d := viper.GetString("vm-driver"); d != "" { - ds := driver.Status(viper.GetString("vm-driver")) + ds := driver.Status(viper.GetString("vm-driver"), options) if ds.Name == "" { exit.Message(reason.DrvUnsupportedOS, "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}", out.V{"driver": d, "os": runtime.GOOS, "arch": runtime.GOARCH}) } @@ -586,7 +750,7 @@ func selectDriver(existing *config.ClusterConfig) (registry.DriverState, []regis return ds, nil, true } - choices := driver.Choices(viper.GetBool("vm")) + choices := driver.Choices(viper.GetBool("vm"), options) pick, alts, rejects := driver.Suggest(choices) if pick.Name == "" { out.Step(style.ThumbsDown, "Unable to pick a default driver. Here is what was considered, in preference order:") @@ -596,8 +760,21 @@ func selectDriver(existing *config.ClusterConfig) (registry.DriverState, []regis } return rejects[i].Priority > rejects[j].Priority }) + + // Display the issue for installed drivers for _, r := range rejects { - if !r.Default { + if r.Default && r.State.Installed { + out.Infof("{{ .name }}: {{ .rejection }}", out.V{"name": r.Name, "rejection": r.Rejection}) + if r.Suggestion != "" { + out.Infof("{{ .name }}: Suggestion: {{ .suggestion}}", out.V{"name": r.Name, "suggestion": r.Suggestion}) + } + } + } + + // Display the other drivers users can install + out.Step(style.Tip, "Alternatively you could install one of these drivers:") + for _, r := range rejects { + if !r.Default || r.State.Installed { continue } out.Infof("{{ .name }}: {{ .rejection }}", out.V{"name": r.Name, "rejection": r.Rejection}) @@ -616,11 +793,12 @@ func selectDriver(existing *config.ClusterConfig) (registry.DriverState, []regis break } } - if foundStoppedDocker { + switch { + case foundStoppedDocker: exit.Message(reason.DrvDockerNotRunning, "Found docker, but the docker service isn't running. Try restarting the docker service.") - } else if foundUnhealthy { + case foundUnhealthy: exit.Message(reason.DrvNotHealthy, "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.") - } else { + default: exit.Message(reason.DrvNotDetected, "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/") } } @@ -638,28 +816,27 @@ func selectDriver(existing *config.ClusterConfig) (registry.DriverState, []regis } // hostDriver returns the actual driver used by a libmachine host, which can differ from our config -func hostDriver(existing *config.ClusterConfig) string { +func hostDriver(existing *config.ClusterConfig, options *run.CommandOptions) string { if existing == nil { return "" } - api, err := machine.NewAPIClient() + + api, err := machine.NewAPIClient(options) if err != nil { klog.Warningf("selectDriver NewAPIClient: %v", err) return existing.Driver } - cp, err := config.PrimaryControlPlane(existing) + cp, err := config.ControlPlane(*existing) if err != nil { - klog.Warningf("Unable to get control plane from existing config: %v", err) + klog.Errorf("Unable to get primary control-plane node from existing config: %v", err) return existing.Driver } + machineName := config.MachineName(*existing, cp) h, err := api.Load(machineName) if err != nil { - klog.Warningf("api.Load failed for %s: %v", machineName, err) - if existing.VMDriver != "" { - return existing.VMDriver - } + klog.Errorf("api.Load failed for %s: %v", machineName, err) return existing.Driver } @@ -687,7 +864,7 @@ func validateProfileName() { // validateSpecifiedDriver makes sure that if a user has passed in a driver // it matches the existing cluster if there is one -func validateSpecifiedDriver(existing *config.ClusterConfig) { +func validateSpecifiedDriver(existing *config.ClusterConfig, options *run.CommandOptions) { if existing == nil { return } @@ -704,7 +881,7 @@ func validateSpecifiedDriver(existing *config.ClusterConfig) { return } - old := hostDriver(existing) + old := hostDriver(existing, options) if requested == old { return } @@ -715,15 +892,15 @@ func validateSpecifiedDriver(existing *config.ClusterConfig) { return } - out.WarningT("Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ", out.V{"name": existing.Name, "driver_name": old}) if viper.GetBool(deleteOnFailure) { + out.WarningT("Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ", out.V{"name": existing.Name, "driver_name": old}) // Start failed, delete the cluster profile, err := config.LoadProfile(existing.Name) if err != nil { out.ErrT(style.Meh, `"{{.name}}" profile does not exist, trying anyways.`, out.V{"name": existing.Name}) } - err = deleteProfile(context.Background(), profile) + err = deleteProfile(context.Background(), profile, options) if err != nil { out.WarningT("Failed to delete cluster {{.name}}.", out.V{"name": existing.Name}) } @@ -745,21 +922,21 @@ func validateSpecifiedDriver(existing *config.ClusterConfig) { // validateDriver validates that the selected driver appears sane, exits if not func validateDriver(ds registry.DriverState, existing *config.ClusterConfig) { - name := ds.Name - os := detect.RuntimeOS() + driverName := ds.Name + osName := detect.RuntimeOS() arch := detect.RuntimeArch() - klog.Infof("validating driver %q against %+v", name, existing) - if !driver.Supported(name) { - exit.Message(reason.DrvUnsupportedOS, "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}", out.V{"driver": name, "os": os, "arch": arch}) + klog.Infof("validating driver %q against %+v", driverName, existing) + if !driver.Supported(driverName) { + exit.Message(reason.DrvUnsupportedOS, "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}", out.V{"driver": driverName, "os": osName, "arch": arch}) } // if we are only downloading artifacts for a driver, we can stop validation here - if viper.GetBool("download-only") { + if viper.GetBool(flags.DownloadOnly) { return } st := ds.State - klog.Infof("status for %s: %+v", name, st) + klog.Infof("status for %s: %+v", driverName, st) if st.NeedsImprovement { out.Styled(style.Improvement, `For improved {{.driver}} performance, {{.fix}}`, out.V{"driver": driver.FullName(ds.Name), "fix": translate.T(st.Fix)}) @@ -767,7 +944,7 @@ func validateDriver(ds registry.DriverState, existing *config.ClusterConfig) { if ds.Priority == registry.Obsolete { exit.Message(reason.Kind{ - ID: fmt.Sprintf("PROVIDER_%s_OBSOLETE", strings.ToUpper(name)), + ID: fmt.Sprintf("PROVIDER_%s_OBSOLETE", strings.ToUpper(driverName)), Advice: translate.T(st.Fix), ExitCode: reason.ExProviderUnsupported, URL: st.Doc, @@ -786,23 +963,23 @@ func validateDriver(ds registry.DriverState, existing *config.ClusterConfig) { if !st.Installed { exit.Message(reason.Kind{ - ID: fmt.Sprintf("PROVIDER_%s_NOT_FOUND", strings.ToUpper(name)), + ID: fmt.Sprintf("PROVIDER_%s_NOT_FOUND", strings.ToUpper(driverName)), Advice: translate.T(st.Fix), ExitCode: reason.ExProviderNotFound, URL: st.Doc, Style: style.Shrug, - }, `The '{{.driver}}' provider was not found: {{.error}}`, out.V{"driver": name, "error": st.Error}) + }, `The '{{.driver}}' provider was not found: {{.error}}`, out.V{"driver": driverName, "error": st.Error}) } id := st.Reason if id == "" { - id = fmt.Sprintf("PROVIDER_%s_ERROR", strings.ToUpper(name)) + id = fmt.Sprintf("PROVIDER_%s_ERROR", strings.ToUpper(driverName)) } code := reason.ExProviderUnavailable if !st.Running { - id = fmt.Sprintf("PROVIDER_%s_NOT_RUNNING", strings.ToUpper(name)) + id = fmt.Sprintf("PROVIDER_%s_NOT_RUNNING", strings.ToUpper(driverName)) code = reason.ExProviderNotRunning } @@ -878,7 +1055,7 @@ func validateUser(drvName string) { // None driver works with root and without root on Linux if runtime.GOOS == "linux" && drvName == driver.None { - if !viper.GetBool(interactive) { + if !viper.GetBool(flags.Interactive) { test := exec.Command("sudo", "-n", "echo", "-n") if err := test.Run(); err != nil { exit.Message(reason.DrvNeedsRoot, `sudo requires a password, and --interactive=false`) @@ -892,7 +1069,7 @@ func validateUser(drvName string) { return } - out.ErrT(style.Stopped, `The "{{.driver_name}}" driver should not be used with root privileges.`, out.V{"driver_name": drvName}) + out.ErrT(style.Stopped, `The "{{.driver_name}}" driver should not be used with root privileges. If you wish to continue as root, use --force.`, out.V{"driver_name": drvName}) out.ErrT(style.Tip, "If you are running minikube within a VM, consider using --driver=none:") out.ErrT(style.Documentation, " {{.url}}", out.V{"url": "https://minikube.sigs.k8s.io/docs/reference/drivers/none/"}) @@ -935,13 +1112,14 @@ func memoryLimits(drvName string) (int, int, error) { return sysLimit, containerLimit, nil } -// suggestMemoryAllocation calculates the default memory footprint in MiB -func suggestMemoryAllocation(sysLimit int, containerLimit int, nodes int) int { - if mem := viper.GetInt(memory); mem != 0 { +// suggestMemoryAllocation calculates the default memory footprint in MiB. +func suggestMemoryAllocation(sysLimit, containerLimit, nodes int) int { + if mem := viper.GetInt(memory); mem != 0 && mem < sysLimit { return mem } - fallback := 2200 - maximum := 6000 + + const fallback = 3072 + maximum := 6144 if sysLimit > 0 && fallback > sysLimit { return sysLimit @@ -997,6 +1175,11 @@ func validateRequestedMemorySize(req int, drvName string) { exitIfNotForced(reason.RsrcInsufficientSysMemory, "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes", out.V{"size": sysLimit, "req": minUsableMem}) } + // if --memory=no-limit, ignore remaining checks + if req == 0 && driver.IsKIC(drvName) { + return + } + if req < minUsableMem { exitIfNotForced(reason.RsrcInsufficientReqMemory, "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB", out.V{"requested": req, "minimum_memory": minUsableMem}) } @@ -1026,6 +1209,10 @@ func validateRequestedMemorySize(req int, drvName string) { `The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.`, out.V{"requested": req, "system_limit": sysLimit, "advised": advised}) } + + if driver.IsHyperV(drvName) && req%2 == 1 { + exitIfNotForced(reason.RsrcInvalidHyperVMemory, "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`", out.V{"memory": req, "suggestMemory": req - 1}) + } } // validateCPUCount validates the cpu count matches the minimum recommended & not exceeding the available cpu count @@ -1052,6 +1239,23 @@ func validateCPUCount(drvName string) { availableCPUs = ci } + switch { + case availableCPUs < 2: + switch { + case drvName == oci.Docker && runtime.GOOS == "darwin": + exitIfNotForced(reason.RsrcInsufficientDarwinDockerCores, "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available") + case drvName == oci.Docker && runtime.GOOS == "windows": + exitIfNotForced(reason.RsrcInsufficientWindowsDockerCores, "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available") + default: + exitIfNotForced(reason.RsrcInsufficientCores, "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available", out.V{"driver_name": driver.FullName(viper.GetString("driver"))}) + } + } + + // if --cpus=no-limit, ignore remaining checks + if cpuCount == 0 && driver.IsKIC(drvName) { + return + } + if cpuCount < minimumCPUS { exitIfNotForced(reason.RsrcInsufficientCores, "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}", out.V{"requested_cpus": cpuCount, "minimum_cpus": minimumCPUS}) } @@ -1070,31 +1274,14 @@ func validateCPUCount(drvName string) { exitIfNotForced(reason.RsrcInsufficientCores, "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}", out.V{"requested_cpus": cpuCount, "avail_cpus": availableCPUs}) } - - // looks good - if availableCPUs >= 2 { - return - } - - if drvName == oci.Docker && runtime.GOOS == "darwin" { - exitIfNotForced(reason.RsrcInsufficientDarwinDockerCores, "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available") - } else if drvName == oci.Docker && runtime.GOOS == "windows" { - exitIfNotForced(reason.RsrcInsufficientWindowsDockerCores, "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available") - } else { - exitIfNotForced(reason.RsrcInsufficientCores, "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available", out.V{"driver_name": driver.FullName(viper.GetString("driver"))}) - } } // validateFlags validates the supplied flags against known bad combinations -func validateFlags(cmd *cobra.Command, drvName string) { +func validateFlags(cmd *cobra.Command, drvName string) { //nolint:gocyclo if cmd.Flags().Changed(humanReadableDiskSize) { - diskSizeMB, err := util.CalculateSizeInMB(viper.GetString(humanReadableDiskSize)) + err := validateDiskSize(viper.GetString(humanReadableDiskSize)) if err != nil { - exitIfNotForced(reason.Usage, "Validation unable to parse disk size '{{.diskSize}}': {{.error}}", out.V{"diskSize": viper.GetString(humanReadableDiskSize), "error": err}) - } - - if diskSizeMB < minimumDiskSize { - exitIfNotForced(reason.RsrcInsufficientStorage, "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}", out.V{"requested_size": diskSizeMB, "minimum_size": minimumDiskSize}) + exitIfNotForced(reason.Usage, "{{.err}}", out.V{"err": err}) } } @@ -1106,6 +1293,10 @@ func validateFlags(cmd *cobra.Command, drvName string) { validateCPUCount(drvName) + if drvName == driver.None && viper.GetBool(noKubernetes) { + exit.Message(reason.Usage, "Cannot use the option --no-kubernetes on the {{.name}} driver", out.V{"name": drvName}) + } + if cmd.Flags().Changed(memory) { validateChangedMemoryFlags(drvName) } @@ -1118,48 +1309,44 @@ func validateFlags(cmd *cobra.Command, drvName string) { viper.Set(imageRepository, validateImageRepository(viper.GetString(imageRepository))) } - if cmd.Flags().Changed(containerRuntime) { - runtime := strings.ToLower(viper.GetString(containerRuntime)) - - validOptions := cruntime.ValidRuntimes() - // `crio` is accepted as an alternative spelling to `cri-o` - validOptions = append(validOptions, constants.CRIO) + if cmd.Flags().Changed(ports) { + err := validatePorts(viper.GetStringSlice(ports)) + if err != nil { + exit.Message(reason.Usage, "{{.err}}", out.V{"err": err}) + } - var validRuntime bool - for _, option := range validOptions { - if runtime == option { - validRuntime = true - } + } - // Convert `cri-o` to `crio` as the K8s config uses the `crio` spelling - if runtime == "cri-o" { - viper.Set(containerRuntime, constants.CRIO) - } + if cmd.Flags().Changed(subnet) { + err := validateSubnet(viper.GetString(subnet)) + if err != nil { + exit.Message(reason.Usage, "{{.err}}", out.V{"err": err}) } + } - if !validRuntime { - exit.Message(reason.Usage, `Invalid Container Runtime: "{{.runtime}}". Valid runtimes are: {{.validOptions}}`, out.V{"runtime": runtime, "validOptions": strings.Join(cruntime.ValidRuntimes(), ", ")}) + if cmd.Flags().Changed(containerRuntime) { + err := validateRuntime(viper.GetString(containerRuntime)) + if err != nil { + exit.Message(reason.Usage, "{{.err}}", out.V{"err": err}) } - - validateCNI(cmd, runtime) + validateCNI(cmd, viper.GetString(containerRuntime)) } - if driver.BareMetal(drvName) { - if ClusterFlagValue() != constants.DefaultClusterName { - exit.Message(reason.DrvUnsupportedProfile, "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", out.V{"name": drvName}) + if cmd.Flags().Changed(staticIP) { + if err := validateStaticIP(viper.GetString(staticIP), drvName, viper.GetString(subnet)); err != nil { + exit.Message(reason.Usage, "{{.err}}", out.V{"err": err}) } + } - runtime := viper.GetString(containerRuntime) - if runtime != "docker" { - out.WarningT("Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!", out.V{"runtime": runtime}) + if cmd.Flags().Changed(gpus) { + if err := validateGPUs(viper.GetString(gpus), drvName, viper.GetString(containerRuntime)); err != nil { + exit.Message(reason.Usage, "{{.err}}", out.V{"err": err}) } + } - // conntrack is required starting with Kubernetes 1.18, include the release candidates for completion - version, _ := util.ParseKubernetesVersion(getKubernetesVersion(nil)) - if version.GTE(semver.MustParse("1.18.0-beta.1")) { - if _, err := exec.LookPath("conntrack"); err != nil { - exit.Message(reason.GuestMissingConntrack, "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path", out.V{"k8sVersion": version.String()}) - } + if cmd.Flags().Changed(autoPauseInterval) { + if err := validateAutoPauseInterval(viper.GetDuration(autoPauseInterval)); err != nil { + exit.Message(reason.Usage, "{{.err}}", out.V{"err": err}) } } @@ -1192,8 +1379,8 @@ func validateFlags(cmd *cobra.Command, drvName string) { // check that kubeadm extra args contain only allowed parameters for param := range config.ExtraOptions.AsMap().Get(bsutil.Kubeadm) { - if !config.ContainsParam(bsutil.KubeadmExtraArgsAllowed[bsutil.KubeadmCmdParam], param) && - !config.ContainsParam(bsutil.KubeadmExtraArgsAllowed[bsutil.KubeadmConfigParam], param) { + if !slices.Contains(bsutil.KubeadmExtraArgsAllowed[bsutil.KubeadmCmdParam], param) && + !slices.Contains(bsutil.KubeadmExtraArgsAllowed[bsutil.KubeadmConfigParam], param) { exit.Message(reason.Usage, "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config", out.V{"parameter_name": param}) } } @@ -1202,20 +1389,163 @@ func validateFlags(cmd *cobra.Command, drvName string) { exit.Message(reason.Usage, "Sorry, please set the --output flag to one of the following valid options: [text,json]") } + validateBareMetal(drvName) validateRegistryMirror() validateInsecureRegistry() } +// validatePorts validates that the --ports are not outside range +func validatePorts(ports []string) error { + var exposedPorts, hostPorts, portSpecs []string + for _, p := range ports { + if strings.Contains(p, ":") { + portSpecs = append(portSpecs, p) + } else { + exposedPorts = append(exposedPorts, p) + } + } + _, portBindingsMap, err := nat.ParsePortSpecs(portSpecs) + if err != nil { + return errors.Errorf("Sorry, one of the ports provided with --ports flag is not valid %s (%v)", ports, err) + } + for exposedPort, portBindings := range portBindingsMap { + exposedPorts = append(exposedPorts, exposedPort.Port()) + for _, portBinding := range portBindings { + hostPorts = append(hostPorts, portBinding.HostPort) + } + } + for _, p := range exposedPorts { + if err := validatePort(p); err != nil { + return err + } + } + for _, p := range hostPorts { + if err := validatePort(p); err != nil { + return err + } + } + return nil +} + +func validatePort(port string) error { + p, err := strconv.Atoi(port) + if err != nil { + return errors.Errorf("Sorry, one of the ports provided with --ports flag is not valid: %s", port) + } + if p > 65535 || p < 1 { + return errors.Errorf("Sorry, one of the ports provided with --ports flag is outside range: %s", port) + } + return nil +} + +// validateDiskSize validates the supplied disk size +func validateDiskSize(diskSize string) error { + diskSizeMB, err := util.CalculateSizeInMB(diskSize) + if err != nil { + return errors.Errorf("Validation unable to parse disk size %v: %v", diskSize, err) + } + if diskSizeMB < minimumDiskSize { + return errors.Errorf("Requested disk size %v is less than minimum of %v", diskSizeMB, minimumDiskSize) + } + return nil +} + +// validateRuntime validates the supplied runtime +func validateRuntime(rtime string) error { + validOptions := cruntime.ValidRuntimes() + // `crio` is accepted as an alternative spelling to `cri-o` + validOptions = append(validOptions, constants.CRIO) + + if rtime == constants.DefaultContainerRuntime { + return nil + } + + var validRuntime bool + for _, option := range validOptions { + if rtime == option { + validRuntime = true + } + + // Convert `cri-o` to `crio` as the K8s config uses the `crio` spelling + if rtime == "cri-o" { + viper.Set(containerRuntime, constants.CRIO) + } + + } + + if (rtime == "crio" || rtime == "cri-o") && (strings.HasPrefix(runtime.GOARCH, "ppc64") || detect.RuntimeArch() == "arm" || strings.HasPrefix(detect.RuntimeArch(), "arm/")) { + return errors.Errorf("The %s runtime is not compatible with the %s architecture. See https://github.com/cri-o/cri-o/issues/2467 for more details", rtime, runtime.GOARCH) + } + + if !validRuntime { + return errors.Errorf("Invalid Container Runtime: %s. Valid runtimes are: %s", rtime, cruntime.ValidRuntimes()) + } + return nil +} + +// validateGPUs validates that a valid option was given, and if so, can it be used with the given configuration +func validateGPUs(value, drvName, rtime string) error { + if value == "" { + return nil + } + if err := validateGPUsArch(); err != nil { + return err + } + if value != "nvidia" && value != "all" && value != "amd" && value != "nvidia.com" { + return errors.Errorf(`The gpus flag must be passed a value of "nvidia", "nvidia.com", "amd" or "all"`) + } + if drvName == constants.Docker && (rtime == constants.Docker || rtime == constants.DefaultContainerRuntime) { + return nil + } + return errors.Errorf("The gpus flag can only be used with the docker driver and docker container-runtime") +} + +func validateGPUsArch() error { + switch runtime.GOARCH { + case "amd64", "arm64", "ppc64le": + return nil + } + return errors.Errorf("The GPUs flag is only supported on amd64, arm64 & ppc64le, currently using %s", runtime.GOARCH) +} + +func validateAutoPauseInterval(interval time.Duration) error { + if interval != interval.Abs() || interval.String() == "0s" { + return errors.New("auto-pause-interval must be greater than 0s") + } + return nil +} + +func getContainerRuntime(old *config.ClusterConfig) string { + paramRuntime := viper.GetString(containerRuntime) + + // try to load the old version first if the user didn't specify anything + if paramRuntime == constants.DefaultContainerRuntime && old != nil { + paramRuntime = old.KubernetesConfig.ContainerRuntime + } + + if paramRuntime == constants.DefaultContainerRuntime { + paramRuntime = defaultRuntime() + } + + return paramRuntime +} + +// defaultRuntime returns the default container runtime +func defaultRuntime() string { + // minikube default + return constants.Docker +} + // if container runtime is not docker, check that cni is not disabled -func validateCNI(cmd *cobra.Command, runtime string) { - if runtime == "docker" { +func validateCNI(cmd *cobra.Command, runtimeName string) { + if runtimeName == constants.Docker { return } if cmd.Flags().Changed(cniFlag) && strings.ToLower(viper.GetString(cniFlag)) == "false" { if viper.GetBool(force) { - out.WarnReason(reason.Usage, "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI", out.V{"name": runtime}) + out.WarnReason(reason.Usage, "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI", out.V{"name": runtimeName}) } else { - exit.Message(reason.Usage, "The \"{{.name}}\" container runtime requires CNI", out.V{"name": runtime}) + exit.Message(reason.Usage, "The \"{{.name}}\" container runtime requires CNI", out.V{"name": runtimeName}) } } } @@ -1232,13 +1562,19 @@ func validateChangedMemoryFlags(drvName string) { var req int var err error memString := viper.GetString(memory) - if memString == constants.MaxResources { + switch { + case memString == constants.NoLimit && driver.IsKIC(drvName): + req = 0 + case memString == constants.MaxResources: sysLimit, containerLimit, err := memoryLimits(drvName) if err != nil { klog.Warningf("Unable to query memory limits: %+v", err) } - req = noLimitMemory(sysLimit, containerLimit) - } else { + req = noLimitMemory(sysLimit, containerLimit, drvName) + default: + if memString == constants.NoLimit { + exit.Message(reason.Usage, "The '{{.name}}' driver does not support --memory=no-limit", out.V{"name": drvName}) + } req, err = util.CalculateSizeInMB(memString) if err != nil { exitIfNotForced(reason.Usage, "Unable to parse memory '{{.memory}}': {{.error}}", out.V{"memory": memString, "error": err}) @@ -1247,12 +1583,23 @@ func validateChangedMemoryFlags(drvName string) { validateRequestedMemorySize(req, drvName) } -func noLimitMemory(sysLimit int, containerLimit int) int { +func noLimitMemory(sysLimit, containerLimit int, drvName string) int { if containerLimit != 0 { return containerLimit } // Recommend 1GB to handle OS/VM overhead - return sysLimit - 1024 + sysOverhead := 1024 + if driver.IsVirtualBox(drvName) { + // VirtualBox fully allocates all requested memory on start, it doesn't dynamically allocate when needed like other drivers + // Because of this allow more system overhead to prevent out of memory issues + sysOverhead = 1536 + } + mem := sysLimit - sysOverhead + // Hyper-V requires an even number of MB, so if odd remove one MB + if driver.IsHyperV(drvName) && mem%2 == 1 { + mem-- + } + return mem } // This function validates if the --registry-mirror @@ -1276,32 +1623,39 @@ func validateRegistryMirror() { // args match the format of registry.cn-hangzhou.aliyuncs.com/google_containers // also "[:]" func validateImageRepository(imageRepo string) (validImageRepo string) { + expression := regexp.MustCompile(`^(?:(\w+)\:\/\/)?([-a-zA-Z0-9]{1,}(?:\.[-a-zA-Z0-9]{1,}){0,})(?:\:(\d+))?(\/.*)?$`) if strings.ToLower(imageRepo) == "auto" { - validImageRepo = "auto" + imageRepo = "auto" } - URL, err := url.Parse(imageRepo) - if err != nil { - klog.Errorln("Error Parsing URL: ", err) + if !expression.MatchString(imageRepo) { + klog.Errorln("Provided repository is not a valid URL. Defaulting to \"auto\"") + imageRepo = "auto" } var imageRepoPort string + groups := expression.FindStringSubmatch(imageRepo) - if URL.Port() != "" && strings.Contains(imageRepo, ":"+URL.Port()) { - imageRepoPort = ":" + URL.Port() + scheme := groups[1] + hostname := groups[2] + port := groups[3] + path := groups[4] + + if port != "" && strings.Contains(imageRepo, ":"+port) { + imageRepoPort = ":" + port } // tips when imageRepo ended with a trailing /. if strings.HasSuffix(imageRepo, "/") { - out.Infof("The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically") + out.Infof("The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically") } // tips when imageRepo started with scheme such as http(s). - if URL.Scheme != "" { - out.Infof("The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically", out.V{"scheme": URL.Scheme}) + if scheme != "" { + out.Infof("The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically", out.V{"scheme": scheme}) } - validImageRepo = URL.Hostname() + imageRepoPort + strings.TrimSuffix(URL.Path, "/") + validImageRepo = hostname + imageRepoPort + strings.TrimSuffix(path, "/") return validImageRepo } @@ -1351,36 +1705,46 @@ func validateInsecureRegistry() { } } -func createNode(cc config.ClusterConfig, kubeNodeName string, existing *config.ClusterConfig) (config.ClusterConfig, config.Node, error) { - // Create the initial node, which will necessarily be a control plane - if existing != nil { - cp, err := config.PrimaryControlPlane(existing) - cp.KubernetesVersion = getKubernetesVersion(&cc) - if err != nil { - return cc, config.Node{}, err - } +// configureNodes creates primary control-plane node config on first cluster start or updates existing cluster nodes configs on restart. +// It will return updated cluster config and primary control-plane node or any error occurred. +func configureNodes(cc config.ClusterConfig, existing *config.ClusterConfig) (config.ClusterConfig, config.Node, error) { + kv, err := getKubernetesVersion(&cc) + if err != nil { + return cc, config.Node{}, errors.Wrapf(err, "failed getting kubernetes version") + } + cr := getContainerRuntime(&cc) - // Make sure that existing nodes honor if KubernetesVersion gets specified on restart - // KubernetesVersion is the only attribute that the user can override in the Node object - nodes := []config.Node{} - for _, n := range existing.Nodes { - n.KubernetesVersion = getKubernetesVersion(&cc) - nodes = append(nodes, n) + // create the initial node, which will necessarily be primary control-plane node + if existing == nil { + pcp := config.Node{ + Port: cc.APIServerPort, + KubernetesVersion: kv, + ContainerRuntime: cr, + ControlPlane: true, + Worker: true, } - cc.Nodes = nodes + cc.Nodes = []config.Node{pcp} + return cc, pcp, nil + } - return cc, cp, nil + // Make sure that existing nodes honor if KubernetesVersion gets specified on restart + // KubernetesVersion is the only attribute that the user can override in the Node object + nodes := []config.Node{} + for _, n := range existing.Nodes { + n.KubernetesVersion = kv + n.ContainerRuntime = cr + nodes = append(nodes, n) } + cc.Nodes = nodes - cp := config.Node{ - Port: cc.KubernetesConfig.NodePort, - KubernetesVersion: getKubernetesVersion(&cc), - Name: kubeNodeName, - ControlPlane: true, - Worker: true, + pcp, err := config.ControlPlane(*existing) + if err != nil { + return cc, config.Node{}, errors.Wrapf(err, "failed getting control-plane node") } - cc.Nodes = []config.Node{cp} - return cc, cp, nil + pcp.KubernetesVersion = kv + pcp.ContainerRuntime = cr + + return cc, pcp, nil } // autoSetDriverOptions sets the options needed for specific driver automatically. @@ -1421,19 +1785,59 @@ func autoSetDriverOptions(cmd *cobra.Command, drvName string) (err error) { // validateKubernetesVersion ensures that the requested version is reasonable func validateKubernetesVersion(old *config.ClusterConfig) { - nvs, _ := semver.Make(strings.TrimPrefix(getKubernetesVersion(old), version.VersionPrefix)) - - oldestVersion, err := semver.Make(strings.TrimPrefix(constants.OldestKubernetesVersion, version.VersionPrefix)) - if err != nil { - exit.Message(reason.InternalSemverParse, "Unable to parse oldest Kubernetes version from constants: {{.error}}", out.V{"error": err}) - } - defaultVersion, err := semver.Make(strings.TrimPrefix(constants.DefaultKubernetesVersion, version.VersionPrefix)) + paramVersion := viper.GetString(kubernetesVersion) + paramVersion = strings.TrimPrefix(strings.ToLower(paramVersion), version.VersionPrefix) + kubernetesVer, err := getKubernetesVersion(old) if err != nil { - exit.Message(reason.InternalSemverParse, "Unable to parse default Kubernetes version from constants: {{.error}}", out.V{"error": err}) + if errors.Is(err, ErrKubernetesPatchNotFound) { + exit.Message(reason.PatchNotFound, "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}", + out.V{"majorminor": paramVersion}) + } + exit.Message(reason.Usage, `Unable to parse "{{.kubernetes_version}}": {{.error}}`, out.V{"kubernetes_version": paramVersion, "error": err}) + } + nvs, _ := semver.Make(strings.TrimPrefix(kubernetesVer, version.VersionPrefix)) + oldestVersion := semver.MustParse(strings.TrimPrefix(constants.OldestKubernetesVersion, version.VersionPrefix)) + defaultVersion := semver.MustParse(strings.TrimPrefix(constants.DefaultKubernetesVersion, version.VersionPrefix)) + newestVersion := semver.MustParse(strings.TrimPrefix(constants.NewestKubernetesVersion, version.VersionPrefix)) + zeroVersion := semver.MustParse(strings.TrimPrefix(constants.NoKubernetesVersion, version.VersionPrefix)) + + if isTwoDigitSemver(paramVersion) && getLatestPatch(paramVersion) != "" { + out.Styled(style.Workaround, `Using Kubernetes {{.version}} since patch version was unspecified`, out.V{"version": nvs}) + } + if nvs.Equals(zeroVersion) { + klog.Infof("No Kubernetes version set for minikube, setting Kubernetes version to %s", constants.NoKubernetesVersion) + return + } + if nvs.Major > newestVersion.Major { + out.WarningT("Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}", out.V{"specifiedMajor": nvs.Major, "newestMajor": newestVersion.Major}) + if !viper.GetBool(force) { + out.WarningT("You can force an unsupported Kubernetes version via the --force flag") + } + exitIfNotForced(reason.KubernetesTooNew, "Kubernetes {{.version}} is not supported by this release of minikube", out.V{"version": nvs}) + } + if nvs.GT(newestVersion) { + out.WarningT("Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.", out.V{"specified": nvs, "newest": constants.NewestKubernetesVersion}) + if slices.Contains(constants.ValidKubernetesVersions, kubernetesVer) { + out.Styled(style.Check, "Kubernetes version {{.specified}} found in version list", out.V{"specified": nvs}) + } else { + out.WarningT("Specified Kubernetes version {{.specified}} not found in Kubernetes version list", out.V{"specified": nvs}) + out.Styled(style.Verifying, "Searching the internet for Kubernetes version...") + found, err := cmdcfg.IsInGitHubKubernetesVersions(kubernetesVer) + if err != nil && !viper.GetBool(force) { + exit.Error(reason.KubernetesNotConnect, "error fetching Kubernetes version list from GitHub", err) + } + if found { + out.Styled(style.Check, "Kubernetes version {{.specified}} found in GitHub version list", out.V{"specified": nvs}) + } else if !viper.GetBool(force) { + out.WarningT("Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag") + exitIfNotForced(reason.KubernetesTooNew, "Kubernetes version {{.version}} is not supported by this release of minikube", out.V{"version": nvs}) + } + } + } if nvs.LT(oldestVersion) { - out.WarningT("Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}", out.V{"specified": nvs, "oldest": constants.OldestKubernetesVersion}) + out.WarningT("Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.", out.V{"specified": nvs, "oldest": constants.OldestKubernetesVersion}) if !viper.GetBool(force) { out.WarningT("You can force an unsupported Kubernetes version via the --force flag") } @@ -1473,11 +1877,37 @@ func validateKubernetesVersion(old *config.ClusterConfig) { } } +// validateContainerRuntime ensures that the container runtime is reasonable +func validateContainerRuntime(old *config.ClusterConfig) { + if old == nil || old.KubernetesConfig.ContainerRuntime == "" { + return + } + + if err := validateRuntime(old.KubernetesConfig.ContainerRuntime); err != nil { + klog.Errorf("Error parsing old runtime %q: %v", old.KubernetesConfig.ContainerRuntime, err) + } +} + func isBaseImageApplicable(drv string) bool { return registry.IsKIC(drv) } -func getKubernetesVersion(old *config.ClusterConfig) string { +func getKubernetesVersion(old *config.ClusterConfig) (string, error) { + if viper.GetBool(noKubernetes) { + // Exit if --kubernetes-version is specified. + if viper.GetString(kubernetesVersion) != "" { + exit.Message(reason.Usage, `cannot specify --kubernetes-version with --no-kubernetes, +to unset a global config run: + +$ minikube config unset kubernetes-version`) + } + + klog.Infof("No Kubernetes flag is set, setting Kubernetes version to %s", constants.NoKubernetesVersion) + if old != nil { + old.KubernetesConfig.KubernetesVersion = constants.NoKubernetesVersion + } + } + paramVersion := viper.GetString(kubernetesVersion) // try to load the old version first if the user didn't specify anything @@ -1487,16 +1917,24 @@ func getKubernetesVersion(old *config.ClusterConfig) string { if paramVersion == "" || strings.EqualFold(paramVersion, "stable") { paramVersion = constants.DefaultKubernetesVersion - } else if strings.EqualFold(paramVersion, "latest") { + } else if strings.EqualFold(strings.ToLower(paramVersion), "latest") || strings.EqualFold(strings.ToLower(paramVersion), "newest") { paramVersion = constants.NewestKubernetesVersion } - nvs, err := semver.Make(strings.TrimPrefix(paramVersion, version.VersionPrefix)) + kubernetesSemver := strings.TrimPrefix(strings.ToLower(paramVersion), version.VersionPrefix) + if isTwoDigitSemver(kubernetesSemver) { + potentialPatch := getLatestPatch(kubernetesSemver) + if potentialPatch == "" { + return "", ErrKubernetesPatchNotFound + } + kubernetesSemver = potentialPatch + } + nvs, err := semver.Make(kubernetesSemver) if err != nil { exit.Message(reason.Usage, `Unable to parse "{{.kubernetes_version}}": {{.error}}`, out.V{"kubernetes_version": paramVersion, "error": err}) } - return version.VersionPrefix + nvs.String() + return version.VersionPrefix + nvs.String(), nil } // validateDockerStorageDriver checks that docker is using overlay2 @@ -1514,13 +1952,95 @@ func validateDockerStorageDriver(drvName string) { viper.Set(preload, false) return } - if si.StorageDriver == "overlay2" { + if si.StorageDriver == "overlay2" || si.StorageDriver == "overlayfs" { return } - out.WarningT("{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance", out.V{"StorageDriver": si.StorageDriver, "Driver": drvName}) + out.WarningT("{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false", out.V{"StorageDriver": si.StorageDriver, "Driver": drvName}) viper.Set(preload, false) } +// validateSubnet checks that the subnet provided has a private IP +// and does not have a mask of more that /30 +func validateSubnet(subnet string) error { + ip, cidr, err := netutil.ParseAddr(subnet) + if err != nil { + return errors.Errorf("Sorry, unable to parse subnet: %v", err) + } + if !ip.IsPrivate() { + return errors.Errorf("Sorry, the subnet %s is not a private IP", ip) + } + + if cidr != nil { + mask, _ := cidr.Mask.Size() + if mask > 30 { + return errors.Errorf("Sorry, the subnet provided does not have a mask less than or equal to /30") + } + } + return nil +} + +func validateStaticIP(staticIP, drvName, subnet string) error { + if !driver.IsKIC(drvName) { + if staticIP != "" { + out.WarningT("--static-ip is only implemented on Docker and Podman drivers, flag will be ignored") + } + return nil + } + if subnet != "" { + out.WarningT("--static-ip overrides --subnet, --subnet will be ignored") + } + ip := net.ParseIP(staticIP) + if !ip.IsPrivate() { + return fmt.Errorf("static IP must be private") + } + if ip.To4() == nil { + return fmt.Errorf("static IP must be IPv4") + } + lastOctet, _ := strconv.Atoi(strings.Split(ip.String(), ".")[3]) + if lastOctet < 2 || lastOctet > 254 { + return fmt.Errorf("static IPs last octet must be between 2 and 254 (X.X.X.2 - X.X.X.254), for example 192.168.200.200") + } + return nil +} + +func validateBareMetal(drvName string) { + if !driver.BareMetal(drvName) { + return + } + + if viper.GetInt(nodes) > 1 || viper.GetBool(ha) { + exit.Message(reason.DrvUnsupportedMulti, "The none driver is not compatible with multi-node clusters.") + } + + if ClusterFlagValue() != constants.DefaultClusterName { + exit.Message(reason.DrvUnsupportedProfile, "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", out.V{"name": drvName}) + } + + // default container runtime varies, starting with Kubernetes 1.24 - assume that only the default container runtime has been tested + rtime := viper.GetString(containerRuntime) + if rtime != constants.DefaultContainerRuntime && rtime != defaultRuntime() { + out.WarningT("Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!", out.V{"runtime": rtime}) + } + + // conntrack is required starting with Kubernetes 1.18, include the release candidates for completion + kubeVer, err := getKubernetesVersion(nil) + if err != nil { + klog.Warningf("failed getting Kubernetes version: %v", err) + } + ver, _ := util.ParseKubernetesVersion(kubeVer) + if ver.GTE(semver.MustParse("1.18.0-beta.1")) { + if _, err := exec.LookPath("conntrack"); err != nil { + exit.Message(reason.GuestMissingConntrack, "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path", out.V{"k8sVersion": ver.String()}) + } + } + // crictl is required starting with Kubernetes 1.24, for all runtimes since the removal of dockershim + if ver.GTE(semver.MustParse("1.24.0-alpha.0")) { + if _, err := exec.LookPath("crictl"); err != nil { + exit.Message(reason.GuestMissingConntrack, "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path", out.V{"k8sVersion": ver.String()}) + } + } +} + func exitIfNotForced(r reason.Kind, message string, v ...out.V) { if !viper.GetBool(force) { exit.Message(r, message, v...) @@ -1537,3 +2057,51 @@ func exitGuestProvision(err error) { } exit.Error(reason.GuestProvision, "error provisioning guest", err) } + +// Example input = 1.26 => output = "1.26.5" +// Example input = 1.26.5 => output = "1.26.5" +// Example input = 1.26.999 => output = "" +func getLatestPatch(majorMinorVer string) string { + for _, k := range constants.ValidKubernetesVersions { + if strings.HasPrefix(k, fmt.Sprintf("v%s.", majorMinorVer)) { + return strings.TrimPrefix(k, version.VersionPrefix) + } + + } + return "" +} + +func isTwoDigitSemver(ver string) bool { + majorMinorOnly := regexp.MustCompile(`^(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)$`) + return majorMinorOnly.MatchString(ver) +} + +func startNerdctld(options *run.CommandOptions) { + // for containerd runtime using ssh, we have installed nerdctld and nerdctl into kicbase + // These things will be included in the ISO/Base image in the future versions + + // copy these binaries to the path of the containerd node + co := mustload.Running(ClusterFlagValue(), options) + runner := co.CP.Runner + + // and set 777 to these files + if rest, err := runner.RunCmd(exec.Command("sudo", "chmod", "777", "/usr/local/bin/nerdctl", "/usr/local/bin/nerdctld")); err != nil { + exit.Error(reason.StartNerdctld, fmt.Sprintf("Failed setting permission for nerdctl: %s", rest.Output()), err) + } + + // sudo systemctl start nerdctld.socket + if rest, err := runner.RunCmd(exec.Command("sudo", "systemctl", "start", "nerdctld.socket")); err != nil { + exit.Error(reason.StartNerdctld, fmt.Sprintf("Failed to enable nerdctld.socket: %s", rest.Output()), err) + } + // sudo systemctl start nerdctld.service + if rest, err := runner.RunCmd(exec.Command("sudo", "systemctl", "start", "nerdctld.service")); err != nil { + exit.Error(reason.StartNerdctld, fmt.Sprintf("Failed to enable nerdctld.service: %s", rest.Output()), err) + } + + // set up environment variable on remote machine. docker client uses 'non-login & non-interactive shell' therefore the only way is to modify .bashrc file of user 'docker' + // insert this at 4th line + envSetupCommand := exec.Command("/bin/bash", "-c", "sed -i '4i export DOCKER_HOST=unix:///run/nerdctld.sock' .bashrc") + if rest, err := runner.RunCmd(envSetupCommand); err != nil { + exit.Error(reason.StartNerdctld, fmt.Sprintf("Failed to set up DOCKER_HOST: %s", rest.Output()), err) + } +} diff --git a/cmd/minikube/cmd/start_flags.go b/cmd/minikube/cmd/start_flags.go index bfc39bda3a1f..b2ac8e8c3305 100644 --- a/cmd/minikube/cmd/start_flags.go +++ b/cmd/minikube/cmd/start_flags.go @@ -18,15 +18,18 @@ package cmd import ( "fmt" + "runtime" "strings" "time" "github.com/blang/semver/v4" "github.com/pkg/errors" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/spf13/cobra" "github.com/spf13/viper" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" + "k8s.io/minikube/pkg/drivers/common/vmnet" "k8s.io/minikube/pkg/drivers/kic" "k8s.io/minikube/pkg/drivers/kic/oci" "k8s.io/minikube/pkg/minikube/bootstrapper/bsutil" @@ -35,12 +38,14 @@ import ( "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/cruntime" + "k8s.io/minikube/pkg/minikube/detect" "k8s.io/minikube/pkg/minikube/download" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/proxy" "k8s.io/minikube/pkg/minikube/reason" + "k8s.io/minikube/pkg/minikube/run" "k8s.io/minikube/pkg/minikube/style" pkgutil "k8s.io/minikube/pkg/util" "k8s.io/minikube/pkg/version" @@ -54,11 +59,12 @@ const ( nfsSharesRoot = "nfs-shares-root" nfsShare = "nfs-share" kubernetesVersion = "kubernetes-version" + noKubernetes = "no-kubernetes" hostOnlyCIDR = "host-only-cidr" containerRuntime = "container-runtime" criSocket = "cri-socket" - networkPlugin = "network-plugin" - enableDefaultCNI = "enable-default-cni" + networkPlugin = "network-plugin" // deprecated, use --cni instead + enableDefaultCNI = "enable-default-cni" // deprecated, use --cni=bridge instead cniFlag = "cni" hypervVirtualSwitch = "hyperv-virtual-switch" hypervUseExternalSwitch = "hyperv-use-external-switch" @@ -81,6 +87,14 @@ const ( imageRepository = "image-repository" imageMirrorCountry = "image-mirror-country" mountString = "mount-string" + mount9PVersion = "mount-9p-version" + mountGID = "mount-gid" + mountIPFlag = "mount-ip" + mountMSize = "mount-msize" + mountOptions = "mount-options" + mountPortFlag = "mount-port" + mountTypeFlag = "mount-type" + mountUID = "mount-uid" disableDriverMounts = "disable-driver-mounts" cacheImages = "cache-images" uuid = "uuid" @@ -88,13 +102,11 @@ const ( vsockPorts = "hyperkit-vsock-ports" embedCerts = "embed-certs" noVTXCheck = "no-vtx-check" - downloadOnly = "download-only" dnsProxy = "dns-proxy" hostDNSResolver = "host-dns-resolver" waitComponents = "wait" force = "force" dryRun = "dry-run" - interactive = "interactive" waitTimeout = "wait-timeout" nativeSSH = "native-ssh" minUsableMem = 1800 // Kubernetes (kubeadm) will not start with less @@ -104,6 +116,7 @@ const ( autoUpdate = "auto-update-drivers" hostOnlyNicType = "host-only-nic-type" natNicType = "nat-nic-type" + ha = "ha" nodes = "nodes" preload = "preload" deleteOnFailure = "delete-on-failure" @@ -111,6 +124,7 @@ const ( kicBaseImage = "base-image" ports = "ports" network = "network" + subnet = "subnet" startNamespace = "namespace" trace = "trace" sshIPAddress = "ssh-ip-address" @@ -121,6 +135,18 @@ const ( defaultSSHPort = 22 listenAddress = "listen-address" extraDisks = "extra-disks" + certExpiration = "cert-expiration" + binaryMirror = "binary-mirror" + disableOptimizations = "disable-optimizations" + disableMetrics = "disable-metrics" + disableCoreDNSLog = "disable-coredns-log" + qemuFirmwarePath = "qemu-firmware-path" + socketVMnetClientPath = "socket-vmnet-client-path" + socketVMnetPath = "socket-vmnet-path" + staticIP = "static-ip" + gpus = "gpus" + autoPauseInterval = "auto-pause-interval" + preloadSrc = "preload-source" ) var ( @@ -135,24 +161,32 @@ func initMinikubeFlags() { viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_")) viper.AutomaticEnv() startCmd.Flags().Bool(force, false, "Force minikube to perform possibly dangerous operations") - startCmd.Flags().Bool(interactive, true, "Allow user prompts for more information") + startCmd.Flags().Bool(flags.Interactive, true, "Allow user prompts for more information") startCmd.Flags().Bool(dryRun, false, "dry-run mode. Validates configuration, but does not mutate system state") - startCmd.Flags().String(cpus, "2", fmt.Sprintf("Number of CPUs allocated to Kubernetes. Use %q to use the maximum number of CPUs.", constants.MaxResources)) - startCmd.Flags().String(memory, "", fmt.Sprintf("Amount of RAM to allocate to Kubernetes (format: [], where unit = b, k, m or g). Use %q to use the maximum amount of memory.", constants.MaxResources)) + startCmd.Flags().String(cpus, "2", fmt.Sprintf("Number of CPUs allocated to Kubernetes. Use %q to use the maximum number of CPUs. Use %q to not specify a limit (Docker/Podman only)", constants.MaxResources, constants.NoLimit)) + startCmd.Flags().StringP(memory, "m", "", fmt.Sprintf("Amount of RAM to allocate to Kubernetes (format: [], where unit = b, k, m or g). Use %q to use the maximum amount of memory. Use %q to not specify a limit (Docker/Podman only)", constants.MaxResources, constants.NoLimit)) startCmd.Flags().String(humanReadableDiskSize, defaultDiskSize, "Disk size allocated to the minikube VM (format: [], where unit = b, k, m or g).") - startCmd.Flags().Bool(downloadOnly, false, "If true, only download and cache files for later use - don't install or start anything.") + startCmd.Flags().Bool(flags.DownloadOnly, false, "If true, only download and cache files for later use - don't install or start anything.") startCmd.Flags().Bool(cacheImages, true, "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.") startCmd.Flags().StringSlice(isoURL, download.DefaultISOURLs(), "Locations to fetch the minikube ISO from.") startCmd.Flags().String(kicBaseImage, kic.BaseImage, "The base image to use for docker/podman drivers. Intended for local development.") startCmd.Flags().Bool(keepContext, false, "This will keep the existing kubectl context and will create a minikube context.") startCmd.Flags().Bool(embedCerts, false, "if true, will embed the certs in kubeconfig.") - startCmd.Flags().String(containerRuntime, constants.DefaultContainerRuntime, fmt.Sprintf("The container runtime to be used (%s).", strings.Join(cruntime.ValidRuntimes(), ", "))) - startCmd.Flags().Bool(createMount, false, "This will start the mount daemon and automatically mount files into minikube.") - startCmd.Flags().String(mountString, constants.DefaultMountDir+":/minikube-host", "The argument to pass the minikube mount command on start.") - startCmd.Flags().StringSlice(config.AddonListFlag, nil, "Enable addons. see `minikube addons list` for a list of valid addon names.") + startCmd.Flags().StringP(containerRuntime, "c", constants.DefaultContainerRuntime, fmt.Sprintf("The container runtime to be used. Valid options: %s (default: auto)", strings.Join(cruntime.ValidRuntimes(), ", "))) + startCmd.Flags().Bool(createMount, false, "Kept for backward compatibility, value is ignored.") + startCmd.Flags().String(mountString, "", "Directory to mount in the guest using format '/host-path:/guest-path'.") + startCmd.Flags().String(mount9PVersion, defaultMount9PVersion, mount9PVersionDescription) + startCmd.Flags().String(mountGID, defaultMountGID, mountGIDDescription) + startCmd.Flags().String(mountIPFlag, defaultMountIP, mountIPDescription) + startCmd.Flags().Int(mountMSize, defaultMountMSize, mountMSizeDescription) + startCmd.Flags().StringSlice(mountOptions, defaultMountOptions(), mountOptionsDescription) + startCmd.Flags().Uint16(mountPortFlag, defaultMountPort, mountPortDescription) + startCmd.Flags().String(mountTypeFlag, defaultMountType, mountTypeDescription) + startCmd.Flags().String(mountUID, defaultMountUID, mountUIDDescription) + startCmd.Flags().StringSlice(config.AddonListFlag, nil, "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.") startCmd.Flags().String(criSocket, "", "The cri socket path to be used.") - startCmd.Flags().String(networkPlugin, "", "Kubelet network plug-in to use (default: auto)") + startCmd.Flags().String(networkPlugin, "", "DEPRECATED: Replaced by --cni") startCmd.Flags().Bool(enableDefaultCNI, false, "DEPRECATED: Replaced by --cni=bridge") startCmd.Flags().String(cniFlag, "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)") startCmd.Flags().StringSlice(waitComponents, kverify.DefaultWaitList, fmt.Sprintf("comma separated list of Kubernetes components to verify and wait for after starting a cluster. defaults to %q, available options: %q . other acceptable values are 'all' or 'none', 'true' and 'false'", strings.Join(kverify.DefaultWaitList, ","), strings.Join(kverify.AllComponentsList, ","))) @@ -160,14 +194,25 @@ func initMinikubeFlags() { startCmd.Flags().Bool(nativeSSH, true, "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.") startCmd.Flags().Bool(autoUpdate, true, "If set, automatically updates drivers to the latest version. Defaults to true.") startCmd.Flags().Bool(installAddons, true, "If set, install addons. Defaults to true.") - startCmd.Flags().IntP(nodes, "n", 1, "The number of nodes to spin up. Defaults to 1.") + startCmd.Flags().Bool(ha, false, "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.") + startCmd.Flags().IntP(nodes, "n", 1, "The total number of nodes to spin up. Defaults to 1.") startCmd.Flags().Bool(preload, true, "If set, download tarball of preloaded images if available to improve start time. Defaults to true.") + startCmd.Flags().Bool(noKubernetes, false, "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)") startCmd.Flags().Bool(deleteOnFailure, false, "If set, delete the current cluster if start fails and try again. Defaults to false.") startCmd.Flags().Bool(forceSystemd, false, "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.") - startCmd.Flags().StringP(network, "", "", "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.") + startCmd.Flags().String(network, "", "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.") startCmd.Flags().StringVarP(&outputFormat, "output", "o", "text", "Format to print stdout in. Options include: [text,json]") - startCmd.Flags().StringP(trace, "", "", "Send trace events. Options include: [gcp]") - startCmd.Flags().Int(extraDisks, 0, "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)") + startCmd.Flags().String(trace, "", "Send trace events. Options include: [gcp]") + startCmd.Flags().Int(extraDisks, 0, "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)") + startCmd.Flags().Duration(certExpiration, constants.DefaultCertExpiration, "Duration until minikube certificate expiration, defaults to three years (26280h).") + startCmd.Flags().String(binaryMirror, "", "Location to fetch kubectl, kubelet, & kubeadm binaries from.") + startCmd.Flags().Bool(disableOptimizations, false, "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.") + startCmd.Flags().Bool(disableMetrics, false, "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.") + startCmd.Flags().Bool(disableCoreDNSLog, false, "If set, disable CoreDNS verbose logging. Defaults to false.") + startCmd.Flags().String(staticIP, "", "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)") + startCmd.Flags().StringP(gpus, "g", "", "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)") + startCmd.Flags().Duration(autoPauseInterval, time.Minute*1, "Duration of inactivity before the minikube VM is paused (default 1m0s)") + startCmd.Flags().String(preloadSrc, "auto", "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).") } // initKubernetesFlags inits the commandline flags for Kubernetes related options @@ -189,8 +234,22 @@ func initKubernetesFlags() { // initDriverFlags inits the commandline flags for vm drivers func initDriverFlags() { - startCmd.Flags().String("driver", "", fmt.Sprintf("Driver is one of: %v (defaults to auto-detect)", driver.DisplaySupportedDrivers())) + startCmd.Flags().StringP("driver", "d", "", fmt.Sprintf("Driver is one of: %v (defaults to auto-detect)", driver.DisplaySupportedDrivers())) startCmd.Flags().String("vm-driver", "", "DEPRECATED, use `driver` instead.") + // Hide the deprecated vm-driver flag from help text + if err := startCmd.Flags().MarkHidden("vm-driver"); err != nil { + klog.Warningf("Failed to hide vm-driver flag: %v\n", err) + } + // Hide the deprecated flag from help text so new users dont use it (still will be processed) + if err := startCmd.Flags().MarkHidden(enableDefaultCNI); err != nil { + klog.Warningf("Failed to hide %s flag: %v\n", enableDefaultCNI, err) + } + + // Hide the deprecated flag from help text so new users dont use it (still will be processed) + if err := startCmd.Flags().MarkHidden(networkPlugin); err != nil { + klog.Warningf("Failed to hide %s flag: %v\n", networkPlugin, err) + } + startCmd.Flags().Bool(disableDriverMounts, false, "Disables the filesystem mounts provided by the hypervisors") startCmd.Flags().Bool("vm", false, "Filter to use only VM Drivers") @@ -202,7 +261,7 @@ func initDriverFlags() { startCmd.Flags().Int(kvmNUMACount, 1, "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)") // virtualbox - startCmd.Flags().String(hostOnlyCIDR, "192.168.99.1/24", "The CIDR to be used for the minikube VM (virtualbox driver only)") + startCmd.Flags().String(hostOnlyCIDR, "192.168.59.1/24", "The CIDR to be used for the minikube VM (virtualbox driver only)") startCmd.Flags().Bool(dnsProxy, false, "Enable proxy for NAT DNS requests (virtualbox driver only)") startCmd.Flags().Bool(hostDNSResolver, true, "Enable host resolver for NAT DNS requests (virtualbox driver only)") startCmd.Flags().Bool(noVTXCheck, false, "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)") @@ -224,6 +283,10 @@ func initDriverFlags() { // docker & podman startCmd.Flags().String(listenAddress, "", "IP Address to use to expose ports (docker and podman driver only)") startCmd.Flags().StringSlice(ports, []string{}, "List of ports that should be exposed (docker and podman driver only)") + startCmd.Flags().String(subnet, "", "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)") + + // qemu + startCmd.Flags().String(qemuFirmwarePath, "", "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share") } // initNetworkingFlags inits the commandline flags for connectivity related flags for start @@ -241,6 +304,10 @@ func initNetworkingFlags() { startCmd.Flags().String(sshSSHUser, defaultSSHUser, "SSH user (ssh driver only)") startCmd.Flags().String(sshSSHKey, "", "SSH key (ssh driver only)") startCmd.Flags().Int(sshSSHPort, defaultSSHPort, "SSH port (ssh driver only)") + + // socket vmnet + startCmd.Flags().String(socketVMnetClientPath, "", "Path to the socket vmnet client binary (QEMU driver only)") + startCmd.Flags().String(socketVMnetPath, "", "Path to socket vmnet binary (QEMU driver only)") } // ClusterFlagValue returns the current cluster name based on flags @@ -249,19 +316,18 @@ func ClusterFlagValue() string { } // generateClusterConfig generate a config.ClusterConfig based on flags or existing cluster config -func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k8sVersion string, drvName string) (config.ClusterConfig, config.Node, error) { +func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k8sVersion string, rtime string, drvName string, options *run.CommandOptions) (config.ClusterConfig, config.Node, error) { var cc config.ClusterConfig if existing != nil { cc = updateExistingConfigFromFlags(cmd, existing) // identify appropriate cni then configure cruntime accordingly - _, err := cni.New(&cc) - if err != nil { + if _, err := cni.New(&cc); err != nil { return cc, config.Node{}, errors.Wrap(err, "cni") } } else { klog.Info("no existing cluster config was found, will generate one from the flags ") - cc = generateNewConfigFromFlags(cmd, k8sVersion, drvName) + cc = generateNewConfigFromFlags(cmd, k8sVersion, rtime, drvName, options) cnm, err := cni.New(&cc) if err != nil { @@ -274,8 +340,6 @@ func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k } } - klog.Infof("config:\n%+v", cc) - r, err := cruntime.New(cruntime.Config{Type: cc.KubernetesConfig.ContainerRuntime}) if err != nil { return cc, config.Node{}, errors.Wrap(err, "new runtime manager") @@ -287,14 +351,16 @@ func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k proxy.SetDockerEnv() } - var kubeNodeName string - if driver.BareMetal(cc.Driver) { - kubeNodeName = "m01" - } - return createNode(cc, kubeNodeName, existing) + return configureNodes(cc, existing) } func getCPUCount(drvName string) int { + if viper.GetString(cpus) == constants.NoLimit { + if driver.IsKIC(drvName) { + return 0 + } + exit.Message(reason.Usage, "The '{{.name}}' driver does not support --cpus=no-limit", out.V{"name": drvName}) + } if viper.GetString(cpus) != constants.MaxResources { return viper.GetInt(cpus) } @@ -328,9 +394,12 @@ func getMemorySize(cmd *cobra.Command, drvName string) int { if cmd.Flags().Changed(memory) || viper.IsSet(memory) { memString := viper.GetString(memory) var err error - if memString == constants.MaxResources { - mem = noLimitMemory(sysLimit, containerLimit) - } else { + switch { + case memString == constants.NoLimit && driver.IsKIC(drvName): + mem = 0 + case memString == constants.MaxResources: + mem = noLimitMemory(sysLimit, containerLimit, drvName) + default: mem, err = pkgutil.CalculateSizeInMB(memString) if err != nil { exit.Message(reason.Usage, "Generate unable to parse memory '{{.memory}}': {{.error}}", out.V{"memory": memString, "error": err}) @@ -356,6 +425,27 @@ func getDiskSize() int { return diskSize } +func getExtraOptions() config.ExtraOptionSlice { + options := []string{} + if detect.IsCloudShell() { + options = append(options, "kubelet.cgroups-per-qos=false", "kubelet.enforce-node-allocatable=\"\"") + } + if viper.GetBool(disableMetrics) { + options = append(options, "kubelet.housekeeping-interval=5m") + } + for _, eo := range options { + if config.ExtraOptions.Exists(eo) { + klog.Infof("skipping extra-config %q.", eo) + continue + } + klog.Infof("setting extra-config: %s", eo) + if err := config.ExtraOptions.Set(eo); err != nil { + exit.Error(reason.InternalConfigSet, "failed to set extra option", err) + } + } + return config.ExtraOptions +} + func getRepository(cmd *cobra.Command, k8sVersion string) string { repository := viper.GetString(imageRepository) mirrorCountry := strings.ToLower(viper.GetString(imageMirrorCountry)) @@ -376,6 +466,10 @@ func getRepository(cmd *cobra.Command, k8sVersion string) string { repository = autoSelectedRepository } + if repository == constants.AliyunMirror { + download.SetAliyunMirror() + } + if cmd.Flags().Changed(imageRepository) || cmd.Flags().Changed(imageMirrorCountry) { out.Styled(style.Success, "Using image repository {{.name}}", out.V{"name": repository}) } @@ -393,8 +487,72 @@ func getCNIConfig(cmd *cobra.Command) string { return chosenCNI } +func getNetwork(driverName string, options *run.CommandOptions) string { + n := viper.GetString(network) + if driver.IsQEMU(driverName) { + return validateQemuNetwork(n) + } else if driver.IsVFKit(driverName) { + return validateVfkitNetwork(n, options) + } + return n +} + +func validateQemuNetwork(n string) string { + switch n { + case "socket_vmnet": + if runtime.GOOS != "darwin" { + exit.Message(reason.Usage, "The socket_vmnet network is only supported on macOS") + } + if !detect.SocketVMNetInstalled() { + exit.Message(reason.NotFoundSocketVMNet, "\n\n") + } + case "": + if detect.SocketVMNetInstalled() { + n = "socket_vmnet" + } else { + n = "builtin" + } + out.Styled(style.Internet, "Automatically selected the {{.network}} network", out.V{"network": n}) + case "user": + n = "builtin" + case "builtin": + default: + exit.Message(reason.Usage, "--network with QEMU must be 'builtin' or 'socket_vmnet'") + } + if n == "builtin" { + msg := "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` & `minikube tunnel` commands." + if runtime.GOOS == "darwin" { + msg += "\nTo try the dedicated network see: https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking" + } + out.WarningT(msg) + } + return n +} + +func validateVfkitNetwork(n string, options *run.CommandOptions) string { + if runtime.GOOS != "darwin" { + exit.Message(reason.Usage, "The vfkit driver is only supported on macOS") + } + switch n { + case "nat": + // always available + case "vmnet-shared": + // "vment-shared" provides access between machines, with lower performance compared to "nat". + if err := vmnet.ValidateHelper(options); err != nil { + vmnetErr := err.(*vmnet.Error) + exit.Message(vmnetErr.Kind, "failed to validate {{.network}} network: {{.reason}}", out.V{"network": n, "reason": err}) + } + case "": + // Default to nat since it is always available and provides the best performance. + n = "nat" + default: + exit.Message(reason.Usage, "--network with vfkit must be 'nat' or 'vmnet-shared'") + } + return n +} + // generateNewConfigFromFlags generate a config.ClusterConfig based on flags -func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, drvName string) config.ClusterConfig { +func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime string, drvName string, options *run.CommandOptions) config.ClusterConfig { var cc config.ClusterConfig // networkPlugin cni deprecation warning @@ -403,10 +561,12 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, drvName s out.WarningT("With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative") } - if !(driver.IsKIC(drvName) || driver.IsKVM(drvName)) && viper.GetString(network) != "" { - out.WarningT("--network flag is only valid with the docker/podman and KVM drivers, it will be ignored") + if viper.GetString(network) != "" && !driver.SupportsNetworkFlag(drvName) { + out.WarningT("--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored") } + validateHANodeCount(cmd) + checkNumaCount(k8sVersion) checkExtraDiskOptions(cmd, drvName) @@ -417,7 +577,8 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, drvName s EmbedCerts: viper.GetBool(embedCerts), MinikubeISO: viper.GetString(isoURL), KicBaseImage: viper.GetString(kicBaseImage), - Network: viper.GetString(network), + Network: getNetwork(drvName, options), + Subnet: viper.GetString(subnet), Memory: getMemorySize(cmd, drvName), CPUs: getCPUCount(drvName), DiskSize: getDiskSize(), @@ -440,6 +601,7 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, drvName s KVMGPU: viper.GetBool(kvmGPU), KVMHidden: viper.GetBool(kvmHidden), KVMNUMACount: viper.GetInt(kvmNUMACount), + APIServerPort: viper.GetInt(apiServerPort), DisableDriverMounts: viper.GetBool(disableDriverMounts), UUID: viper.GetString(uuid), NoVTXCheck: viper.GetBool(noVTXCheck), @@ -454,6 +616,24 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, drvName s SSHKey: viper.GetString(sshSSHKey), SSHPort: viper.GetInt(sshSSHPort), ExtraDisks: viper.GetInt(extraDisks), + CertExpiration: viper.GetDuration(certExpiration), + MountString: viper.GetString(mountString), + Mount9PVersion: viper.GetString(mount9PVersion), + MountGID: viper.GetString(mountGID), + MountIP: viper.GetString(mountIPFlag), + MountMSize: viper.GetInt(mountMSize), + MountOptions: viper.GetStringSlice(mountOptions), + MountPort: uint16(viper.GetUint(mountPortFlag)), + MountType: viper.GetString(mountTypeFlag), + MountUID: viper.GetString(mountUID), + BinaryMirror: viper.GetString(binaryMirror), + DisableOptimizations: viper.GetBool(disableOptimizations), + DisableMetrics: viper.GetBool(disableMetrics), + DisableCoreDNSLog: viper.GetBool(disableCoreDNSLog), + CustomQemuFirmwarePath: viper.GetString(qemuFirmwarePath), + SocketVMnetClientPath: detect.SocketVMNetClientPath(), + SocketVMnetPath: detect.SocketVMNetPath(), + StaticIP: viper.GetString(staticIP), KubernetesConfig: config.KubernetesConfig{ KubernetesVersion: k8sVersion, ClusterName: ClusterFlagValue(), @@ -463,26 +643,98 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, drvName s APIServerIPs: apiServerIPs, DNSDomain: viper.GetString(dnsDomain), FeatureGates: viper.GetString(featureGates), - ContainerRuntime: viper.GetString(containerRuntime), + ContainerRuntime: rtime, CRISocket: viper.GetString(criSocket), NetworkPlugin: chosenNetworkPlugin, ServiceCIDR: viper.GetString(serviceCIDR), ImageRepository: getRepository(cmd, k8sVersion), - ExtraOptions: config.ExtraOptions, + ExtraOptions: getExtraOptions(), ShouldLoadCachedImages: viper.GetBool(cacheImages), CNI: getCNIConfig(cmd), - NodePort: viper.GetInt(apiServerPort), }, - MultiNodeRequested: viper.GetInt(nodes) > 1, + MultiNodeRequested: viper.GetInt(nodes) > 1 || viper.GetBool(ha), + GPUs: viper.GetString(gpus), + AutoPauseInterval: viper.GetDuration(autoPauseInterval), } cc.VerifyComponents = interpretWaitFlag(*cmd) - if viper.GetBool(createMount) && driver.IsKIC(drvName) { + + if viper.GetString(mountString) != "" && driver.IsKIC(drvName) { cc.ContainerVolumeMounts = []string{viper.GetString(mountString)} } + if driver.IsKIC(drvName) { + si, err := oci.CachedDaemonInfo(drvName) + if err != nil { + exit.Message(reason.Usage, "Ensure your {{.driver_name}} is running and is healthy.", out.V{"driver_name": driver.FullName(drvName)}) + } + if si.Rootless { + out.Styled(style.Notice, "Using rootless {{.driver_name}} driver", out.V{"driver_name": driver.FullName(drvName)}) + // KubeletInUserNamespace feature gate is essential for rootless driver. + // See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-in-userns/ + cc.KubernetesConfig.FeatureGates = addFeatureGate(cc.KubernetesConfig.FeatureGates, "KubeletInUserNamespace=true") + } else { + if oci.IsRootlessForced() { + if driver.IsDocker(drvName) { + exit.Message(reason.Usage, "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .") + } else { + exit.Message(reason.Usage, "Using rootless driver was required, but the current driver does not seem rootless") + } + } + out.Styled(style.Notice, "Using {{.driver_name}} driver with root privileges", out.V{"driver_name": driver.FullName(drvName)}) + } + // for btrfs: if k8s < v1.25.0-beta.0 set kubelet's LocalStorageCapacityIsolation feature gate flag to false, + // and if k8s >= v1.25.0-beta.0 (when it went ga and removed as feature gate), set kubelet's localStorageCapacityIsolation option (via kubeadm config) to false. + // ref: https://github.com/kubernetes/minikube/issues/14728#issue-1327885840 + if si.StorageDriver == "btrfs" { + if semver.MustParse(strings.TrimPrefix(k8sVersion, version.VersionPrefix)).LT(semver.MustParse("1.25.0-beta.0")) { + klog.Info("auto-setting LocalStorageCapacityIsolation to false because using btrfs storage driver") + cc.KubernetesConfig.FeatureGates = addFeatureGate(cc.KubernetesConfig.FeatureGates, "LocalStorageCapacityIsolation=false") + } else if !cc.KubernetesConfig.ExtraOptions.Exists("kubelet.localStorageCapacityIsolation=false") { + if err := cc.KubernetesConfig.ExtraOptions.Set("kubelet.localStorageCapacityIsolation=false"); err != nil { + exit.Error(reason.InternalConfigSet, "failed to set extra option", err) + } + } + } + if runtime.GOOS == "linux" && si.DockerOS == "Docker Desktop" { + out.WarningT("For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server") + } + } + return cc } +func addFeatureGate(featureGates, s string) string { + if len(featureGates) == 0 { + return s + } + split := strings.Split(featureGates, ",") + m := make(map[string]struct{}, len(split)) + for _, v := range split { + m[v] = struct{}{} + } + if _, ok := m[s]; !ok { + split = append(split, s) + } + return strings.Join(split, ",") +} + +// validateHANodeCount ensures correct total number of nodes in ha (multi-control plane) cluster. +func validateHANodeCount(cmd *cobra.Command) { + if !viper.GetBool(ha) { + return + } + + // set total number of nodes in ha (multi-control plane) cluster to 3, if not otherwise defined by user + if !cmd.Flags().Changed(nodes) { + viper.Set(nodes, 3) + } + + // respect user preference, if correct + if cmd.Flags().Changed(nodes) && viper.GetInt(nodes) < 3 { + exit.Message(reason.Usage, "HA (multi-control plane) clusters require 3 or more control-plane nodes") + } +} + func checkNumaCount(k8sVersion string) { if viper.GetInt(kvmNUMACount) < 1 || viper.GetInt(kvmNUMACount) > 8 { exit.Message(reason.Usage, "--kvm-numa-count range is 1-8") @@ -505,11 +757,6 @@ func upgradeExistingConfig(cmd *cobra.Command, cc *config.ClusterConfig) { return } - if cc.VMDriver != "" && cc.Driver == "" { - klog.Infof("config upgrade: Driver=%s", cc.VMDriver) - cc.Driver = cc.VMDriver - } - if cc.Name == "" { klog.Infof("config upgrade: Name=%s", ClusterFlagValue()) cc.Name = ClusterFlagValue() @@ -521,35 +768,43 @@ func upgradeExistingConfig(cmd *cobra.Command, cc *config.ClusterConfig) { klog.Infof("config upgrade: KicBaseImage=%s", cc.KicBaseImage) } - if cc.CPUs == 0 { + if cc.CPUs == 0 && !driver.IsKIC(cc.Driver) { klog.Info("Existing config file was missing cpu. (could be an old minikube config), will use the default value") cc.CPUs = viper.GetInt(cpus) } - if cc.Memory == 0 { + if cc.Memory == 0 && !driver.IsKIC(cc.Driver) { klog.Info("Existing config file was missing memory. (could be an old minikube config), will use the default value") memInMB := getMemorySize(cmd, cc.Driver) cc.Memory = memInMB } - // pre minikube 1.9.2 cc.KubernetesConfig.NodePort was not populated. - // in minikube config there were two fields for api server port. - // one in cc.KubernetesConfig.NodePort and one in cc.Nodes.Port - // this makes sure api server port not be set as 0! - if cc.KubernetesConfig.NodePort == 0 { - cc.KubernetesConfig.NodePort = viper.GetInt(apiServerPort) + if cc.CertExpiration == 0 { + cc.CertExpiration = constants.DefaultCertExpiration } - } // updateExistingConfigFromFlags will update the existing config from the flags - used on a second start -// skipping updating existing docker env , docker opt, InsecureRegistry, registryMirror, extra-config, apiserver-ips +// skipping updating existing docker env, docker opt, InsecureRegistry, registryMirror, extra-config, apiserver-ips func updateExistingConfigFromFlags(cmd *cobra.Command, existing *config.ClusterConfig) config.ClusterConfig { //nolint to suppress cyclomatic complexity 45 of func `updateExistingConfigFromFlags` is high (> 30) - validateFlags(cmd, existing.Driver) cc := *existing + if cmd.Flags().Changed(nodes) { + out.WarningT("You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.") + } + + if cmd.Flags().Changed(ha) { + out.WarningT("Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.") + } + + if cmd.Flags().Changed(apiServerPort) && config.IsHA(*existing) { + out.WarningT("Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.") + } else { + updateIntFromFlag(cmd, &cc.APIServerPort, apiServerPort) + } + if cmd.Flags().Changed(memory) && getMemorySize(cmd, cc.Driver) != cc.Memory { out.WarningT("You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.") } @@ -570,7 +825,10 @@ func updateExistingConfigFromFlags(cmd *cobra.Command, existing *config.ClusterC out.WarningT("You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.") } - updateStringFromFlag(cmd, &cc.MinikubeISO, isoURL) + if cmd.Flags().Changed(staticIP) && viper.GetString(staticIP) != existing.StaticIP { + out.WarningT("You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.") + } + updateBoolFromFlag(cmd, &cc.KeepContext, keepContext) updateBoolFromFlag(cmd, &cc.EmbedCerts, embedCerts) updateStringFromFlag(cmd, &cc.MinikubeISO, isoURL) @@ -611,14 +869,36 @@ func updateExistingConfigFromFlags(cmd *cobra.Command, existing *config.ClusterC updateStringFromFlag(cmd, &cc.KubernetesConfig.NetworkPlugin, networkPlugin) updateStringFromFlag(cmd, &cc.KubernetesConfig.ServiceCIDR, serviceCIDR) updateBoolFromFlag(cmd, &cc.KubernetesConfig.ShouldLoadCachedImages, cacheImages) - updateIntFromFlag(cmd, &cc.KubernetesConfig.NodePort, apiServerPort) + updateDurationFromFlag(cmd, &cc.CertExpiration, certExpiration) + updateStringFromFlag(cmd, &cc.MountString, mountString) + updateStringFromFlag(cmd, &cc.Mount9PVersion, mount9PVersion) + updateStringFromFlag(cmd, &cc.MountGID, mountGID) + updateStringFromFlag(cmd, &cc.MountIP, mountIPFlag) + updateIntFromFlag(cmd, &cc.MountMSize, mountMSize) + updateStringSliceFromFlag(cmd, &cc.MountOptions, mountOptions) + updateUint16FromFlag(cmd, &cc.MountPort, mountPortFlag) + updateStringFromFlag(cmd, &cc.MountType, mountTypeFlag) + updateStringFromFlag(cmd, &cc.MountUID, mountUID) + updateStringFromFlag(cmd, &cc.BinaryMirror, binaryMirror) + updateBoolFromFlag(cmd, &cc.DisableOptimizations, disableOptimizations) + updateStringFromFlag(cmd, &cc.CustomQemuFirmwarePath, qemuFirmwarePath) + updateStringFromFlag(cmd, &cc.SocketVMnetClientPath, socketVMnetClientPath) + updateStringFromFlag(cmd, &cc.SocketVMnetPath, socketVMnetPath) + updateDurationFromFlag(cmd, &cc.AutoPauseInterval, autoPauseInterval) if cmd.Flags().Changed(kubernetesVersion) { - cc.KubernetesConfig.KubernetesVersion = getKubernetesVersion(existing) + kubeVer, err := getKubernetesVersion(existing) + if err != nil { + klog.Warningf("failed getting Kubernetes version: %v", err) + } + cc.KubernetesConfig.KubernetesVersion = kubeVer + } + if cmd.Flags().Changed(containerRuntime) { + cc.KubernetesConfig.ContainerRuntime = getContainerRuntime(existing) } if cmd.Flags().Changed("extra-config") { - cc.KubernetesConfig.ExtraOptions = config.ExtraOptions + cc.KubernetesConfig.ExtraOptions = getExtraOptions() } if cmd.Flags().Changed(cniFlag) || cmd.Flags().Changed(enableDefaultCNI) { @@ -629,11 +909,22 @@ func updateExistingConfigFromFlags(cmd *cobra.Command, existing *config.ClusterC cc.VerifyComponents = interpretWaitFlag(*cmd) } + if cmd.Flags().Changed("apiserver-ips") { + // IPSlice not supported in Viper + // https://github.com/spf13/viper/issues/460 + cc.KubernetesConfig.APIServerIPs = apiServerIPs + } + // Handle flags and legacy configuration upgrades that do not contain KicBaseImage if cmd.Flags().Changed(kicBaseImage) || cc.KicBaseImage == "" { cc.KicBaseImage = viper.GetString(kicBaseImage) } + // If this cluster was stopped by a scheduled stop, clear the config + if cc.ScheduledStop != nil && time.Until(time.Unix(cc.ScheduledStop.InitiationTime, 0).Add(cc.ScheduledStop.Duration)) <= 0 { + cc.ScheduledStop = nil + } + return cc } @@ -672,6 +963,13 @@ func updateDurationFromFlag(cmd *cobra.Command, v *time.Duration, key string) { } } +// updateUint16FromFlag will update the existing uint16 from the flag. +func updateUint16FromFlag(cmd *cobra.Command, v *uint16, key string) { + if cmd.Flags().Changed(key) { + *v = uint16(viper.GetUint(key)) + } +} + // interpretWaitFlag interprets the wait flag and respects the legacy minikube users // returns map of components to wait for func interpretWaitFlag(cmd cobra.Command) map[string]bool { @@ -718,7 +1016,7 @@ func interpretWaitFlag(cmd cobra.Command) map[string]bool { } func checkExtraDiskOptions(cmd *cobra.Command, driverName string) { - supportedDrivers := []string{driver.HyperKit} + supportedDrivers := []string{driver.HyperKit, driver.KVM2, driver.QEMU2, driver.VFKit, driver.Krunkit} if cmd.Flags().Changed(extraDisks) { supported := false diff --git a/cmd/minikube/cmd/start_test.go b/cmd/minikube/cmd/start_test.go index 30b91b5a3095..3c926139af4b 100644 --- a/cmd/minikube/cmd/start_test.go +++ b/cmd/minikube/cmd/start_test.go @@ -17,18 +17,22 @@ limitations under the License. package cmd import ( - "os" + "fmt" "strings" "testing" + "time" "github.com/blang/semver/v4" "github.com/spf13/cobra" "github.com/spf13/viper" + "k8s.io/klog/v2" cfg "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" + "k8s.io/minikube/pkg/minikube/cruntime" "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/proxy" + "k8s.io/minikube/pkg/minikube/run" ) func TestGetKubernetesVersion(t *testing.T) { @@ -60,6 +64,16 @@ func TestGetKubernetesVersion(t *testing.T) { paramVersion: "v1.16.0", cfg: &cfg.ClusterConfig{KubernetesConfig: cfg.KubernetesConfig{KubernetesVersion: "v1.15.0"}}, }, + { + description: "kubernetes-version without patch version", + expectedVersion: "v1.16.15", + paramVersion: "v1.16", + }, + { + description: "kubernetes-version without patch version", + expectedVersion: "v1.16.15", + paramVersion: "1.16", + }, { description: "kubernetes-version given as 'stable', no config", expectedVersion: constants.DefaultKubernetesVersion, @@ -70,12 +84,30 @@ func TestGetKubernetesVersion(t *testing.T) { expectedVersion: constants.NewestKubernetesVersion, paramVersion: "latest", }, + { + description: "kubernetes-version given as 'LATEST', no config", + expectedVersion: constants.NewestKubernetesVersion, + paramVersion: "LATEST", + }, + { + description: "kubernetes-version given as 'newest', no config", + expectedVersion: constants.NewestKubernetesVersion, + paramVersion: "newest", + }, + { + description: "kubernetes-version given as 'NEWEST', no config", + expectedVersion: constants.NewestKubernetesVersion, + paramVersion: "NEWEST", + }, } for _, test := range tests { t.Run(test.description, func(t *testing.T) { viper.SetDefault(kubernetesVersion, test.paramVersion) - version := getKubernetesVersion(test.cfg) + version, err := getKubernetesVersion(test.cfg) + if err != nil { + klog.Warningf("failed getting Kubernetes version: %v", err) + } // check whether we are getting the expected version if version != test.expectedVersion { @@ -85,15 +117,14 @@ func TestGetKubernetesVersion(t *testing.T) { } } -var checkRepoMock = func(v semver.Version, repo string) error { - return nil -} +var checkRepoMock = func(_ semver.Version, _ string) error { return nil } func TestMirrorCountry(t *testing.T) { // Set default disk size value in lieu of flag init viper.SetDefault(humanReadableDiskSize, defaultDiskSize) checkRepository = checkRepoMock k8sVersion := constants.DefaultKubernetesVersion + rtime := constants.DefaultContainerRuntime var tests = []struct { description string k8sVersion string @@ -139,7 +170,7 @@ func TestMirrorCountry(t *testing.T) { viper.SetDefault(imageRepository, test.imageRepository) viper.SetDefault(imageMirrorCountry, test.mirrorCountry) viper.SetDefault(kvmNUMACount, 1) - config, _, err := generateClusterConfig(cmd, nil, k8sVersion, driver.Mock) + config, _, err := generateClusterConfig(cmd, nil, k8sVersion, rtime, driver.Mock, &run.CommandOptions{}) if err != nil { t.Fatalf("Got unexpected error %v during config generation", err) } @@ -153,14 +184,8 @@ func TestGenerateCfgFromFlagsHTTPProxyHandling(t *testing.T) { // Set default disk size value in lieu of flag init viper.SetDefault(humanReadableDiskSize, defaultDiskSize) - originalEnv := os.Getenv("HTTP_PROXY") - defer func() { - err := os.Setenv("HTTP_PROXY", originalEnv) - if err != nil { - t.Fatalf("Error reverting env HTTP_PROXY to it's original value. Got err: %s", err) - } - }() k8sVersion := constants.NewestKubernetesVersion + rtime := constants.DefaultContainerRuntime var tests = []struct { description string proxy string @@ -202,13 +227,11 @@ func TestGenerateCfgFromFlagsHTTPProxyHandling(t *testing.T) { for _, test := range tests { t.Run(test.description, func(t *testing.T) { cmd := &cobra.Command{} - if err := os.Setenv("HTTP_PROXY", test.proxy); err != nil { - t.Fatalf("Unexpected error setting HTTP_PROXY: %v", err) - } + t.Setenv("HTTP_PROXY", test.proxy) cfg.DockerEnv = []string{} // clear docker env to avoid pollution proxy.SetDockerEnv() - config, _, err := generateClusterConfig(cmd, nil, k8sVersion, "none") + config, _, err := generateClusterConfig(cmd, nil, k8sVersion, rtime, "none", &run.CommandOptions{}) if err != nil { t.Fatalf("Got unexpected error %v during config generation", err) } @@ -255,26 +278,26 @@ func TestSuggestMemoryAllocation(t *testing.T) { nodes int want int }{ - {"128GB sys", 128000, 0, 1, 6000}, - {"64GB sys", 64000, 0, 1, 6000}, - {"32GB sys", 32768, 0, 1, 6000}, + {"128GB sys", 128000, 0, 1, 6144}, + {"64GB sys", 64000, 0, 1, 6144}, + {"32GB sys", 32768, 0, 1, 6144}, {"16GB sys", 16384, 0, 1, 4000}, {"odd sys", 14567, 0, 1, 3600}, - {"4GB sys", 4096, 0, 1, 2200}, + {"4GB sys", 4096, 0, 1, 3072}, {"2GB sys", 2048, 0, 1, 2048}, - {"Unable to poll sys", 0, 0, 1, 2200}, + {"Unable to poll sys", 0, 0, 1, 3072}, {"128GB sys, 16GB container", 128000, 16384, 1, 16336}, {"64GB sys, 16GB container", 64000, 16384, 1, 16000}, {"16GB sys, 4GB container", 16384, 4096, 1, 4000}, {"4GB sys, 3.5GB container", 16384, 3500, 1, 3452}, {"16GB sys, 2GB container", 16384, 2048, 1, 2048}, {"16GB sys, unable to poll container", 16384, 0, 1, 4000}, - {"128GB sys 2 nodes", 128000, 0, 2, 6000}, - {"8GB sys 3 nodes", 8192, 0, 3, 2200}, - {"16GB sys 2 nodes", 16384, 0, 2, 2200}, + {"128GB sys 2 nodes", 128000, 0, 2, 6144}, + {"8GB sys 3 nodes", 8192, 0, 3, 3072}, + {"16GB sys 2 nodes", 16384, 0, 2, 3072}, {"32GB sys 2 nodes", 32768, 0, 2, 4050}, - {"odd sys 2 nodes", 14567, 0, 2, 2200}, - {"4GB sys 2 nodes", 4096, 0, 2, 2200}, + {"odd sys 2 nodes", 14567, 0, 2, 3072}, + {"4GB sys 2 nodes", 4096, 0, 2, 3072}, {"2GB sys 3 nodes", 2048, 0, 3, 2048}, } for _, test := range tests { @@ -299,7 +322,6 @@ func TestBaseImageFlagDriverCombo(t *testing.T) { {driver.VirtualBox, false}, {driver.HyperKit, false}, {driver.VMware, false}, - {driver.VMwareFusion, false}, {driver.HyperV, false}, {driver.Parallels, false}, {"something_invalid", false}, @@ -326,6 +348,14 @@ func TestValidateImageRepository(t *testing.T) { imageRepository: "auto", validImageRepository: "auto", }, + { + imageRepository: "$$$$invalid", + validImageRepository: "auto", + }, + { + imageRepository: "", + validImageRepository: "auto", + }, { imageRepository: "http://registry.test.com/google_containers/", validImageRepository: "registry.test.com/google_containers", @@ -350,6 +380,26 @@ func TestValidateImageRepository(t *testing.T) { imageRepository: "https://registry.test.com:6666/google_containers", validImageRepository: "registry.test.com:6666/google_containers", }, + { + imageRepository: "registry.test.com:6666/google_containers", + validImageRepository: "registry.test.com:6666/google_containers", + }, + { + imageRepository: "registry.1test.com:6666/google_containers", + validImageRepository: "registry.1test.com:6666/google_containers", + }, + { + imageRepository: "registry.t1est.com:6666/google_containers", + validImageRepository: "registry.t1est.com:6666/google_containers", + }, + { + imageRepository: "registry.test1.com:6666/google_containers", + validImageRepository: "registry.test1.com:6666/google_containers", + }, + { + imageRepository: "abc.xyz1.example.com", + validImageRepository: "abc.xyz1.example.com", + }, } for _, test := range tests { @@ -361,5 +411,450 @@ func TestValidateImageRepository(t *testing.T) { } }) } +} + +func TestValidateDiskSize(t *testing.T) { + var tests = []struct { + diskSize string + errorMsg string + }{ + { + diskSize: "2G", + errorMsg: "", + }, + { + diskSize: "test", + errorMsg: "Validation unable to parse disk size test: FromHumanSize: invalid size: 'test'", + }, + { + diskSize: "6M", + errorMsg: fmt.Sprintf("Requested disk size 6 is less than minimum of %v", minimumDiskSize), + }, + } + for _, test := range tests { + t.Run(test.diskSize, func(t *testing.T) { + got := validateDiskSize(test.diskSize) + gotError := "" + if got != nil { + gotError = got.Error() + } + if gotError != test.errorMsg { + t.Errorf("validateDiskSize(diskSize=%v): got %v, expected %v", test.diskSize, got, test.errorMsg) + } + }) + } +} + +func TestValidateRuntime(t *testing.T) { + var tests = []struct { + runtime string + errorMsg string + }{ + { + runtime: "cri-o", + errorMsg: "", + }, + { + runtime: "docker", + errorMsg: "", + }, + { + runtime: "test", + errorMsg: fmt.Sprintf("Invalid Container Runtime: test. Valid runtimes are: %v", cruntime.ValidRuntimes()), + }, + } + for _, test := range tests { + t.Run(test.runtime, func(t *testing.T) { + got := validateRuntime(test.runtime) + gotError := "" + if got != nil { + gotError = got.Error() + } + if gotError != test.errorMsg { + t.Errorf("ValidateRuntime(runtime=%v): got %v, expected %v", test.runtime, got, test.errorMsg) + } + }) + } +} +func TestIsTwoDigitSemver(t *testing.T) { + var tcs = []struct { + desc string + version string + expected bool + }{ + { + desc: "a valid three digit version", + version: "1.26.5", + expected: false, + }, + { + desc: "a valid two digit version", + version: "1.26", + expected: true, + }, + { + desc: "a valid two digit version with a period", + version: "1.26.", + expected: false, + }, + { + desc: "an invalid major version", + version: "2", + expected: false, + }, + { + desc: "a valid major version", + version: "1", + expected: false, + }, + { + desc: "a two digit version with a 0 as the major/minor components", + version: "0.0", + expected: true, + }, + { + desc: "a two digit version with negative major version", + version: "-1.0", + expected: false, + }, + { + desc: "a two digit version with negative minor version", + version: "1.-1", + expected: false, + }, + { + desc: "a missing minor version", + version: "1.", + expected: false, + }, + { + desc: "a missing major version", + version: ".2", + expected: false, + }, + { + desc: "a valid two digit version with whitespace between components", + version: "1. 1", + expected: false, + }, + { + desc: "a two digit version with a non-digit major component", + version: "a.12", + expected: false, + }, + { + desc: "a two digit version with a non-digit minor component", + version: "1.a", + expected: false, + }, + { + desc: "a two digit version with extraneous non-digits in minor component", + version: "1.2a", + expected: false, + }, + { + desc: "a two digit version larger major/minor components", + version: "123456789.987654321", + expected: true, + }, + { + desc: "a valid two digit version with a version prefix", + version: "v1.26", + expected: false, + }, + { + desc: "a valid three digit version with a version prefix", + version: "v1.26.5", + expected: false, + }, + } + for _, tc := range tcs { + t.Run(tc.desc, func(t *testing.T) { + actual := isTwoDigitSemver(tc.version) + // check whether the function correctly verifies if it is a 2 digit semver + if actual != tc.expected { + t.Fatalf("test failed. Expected version %s to return %t", tc.version, tc.expected) + } + }) + } +} + +func TestValidatePorts(t *testing.T) { + type portTest struct { + ports []string + errorMsg string + } + var tests = []portTest{ + { + ports: []string{"8080:80"}, + errorMsg: "", + }, + { + ports: []string{"8080:80/tcp", "8080:80/udp"}, + errorMsg: "", + }, + { + ports: []string{"test:8080"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [test:8080] (Invalid hostPort: test)", + }, + { + ports: []string{"0:80"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is outside range: 0", + }, + { + ports: []string{"0:80/tcp"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is outside range: 0", + }, + { + ports: []string{"65536:80/udp"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [65536:80/udp] (Invalid hostPort: 65536)", + }, + { + ports: []string{"0-1:80-81/tcp"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is outside range: 0", + }, + { + ports: []string{"0-1:80-81/udp"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is outside range: 0", + }, + { + ports: []string{"80:80", "1023-1025:8023-8025", "1023-1025:8023-8025/tcp", "1023-1025:8023-8025/udp"}, + errorMsg: "", + }, + { + ports: []string{"127.0.0.1:8080:80", "127.0.0.1:8081:80/tcp", "127.0.0.1:8081:80/udp", "127.0.0.1:8082-8083:8082-8083/tcp"}, + errorMsg: "", + }, + { + ports: []string{"1000.0.0.1:80:80"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [1000.0.0.1:80:80] (Invalid ip address: 1000.0.0.1)", + }, + { + ports: []string{"127.0.0.1:80:80", "127.0.0.1:81:81/tcp", "127.0.0.1:81:81/udp", "127.0.0.1:82-83:82-83/tcp", "127.0.0.1:82-83:82-83/udp"}, + errorMsg: "", + }, + { + ports: []string{"80"}, + errorMsg: "", + }, + { + ports: []string{"80", "65535", "65536"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is outside range: 65536", + }, + { + ports: []string{"0", "80", "65535"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is outside range: 0", + }, + { + ports: []string{"cats"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is not valid: cats", + }, + { + ports: []string{"127.0.0.1:81:0/tcp"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is outside range: 0", + }, + { + ports: []string{"127.0.0.1:81:65536/tcp"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [127.0.0.1:81:65536/tcp] (Invalid containerPort: 65536)", + }, + { + ports: []string{"1-65536:80-81/tcp"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [1-65536:80-81/tcp] (Invalid hostPort: 1-65536)", + }, + { + ports: []string{"1-80:0-81/tcp"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [1-80:0-81/tcp] (Invalid ranges specified for container and host Ports: 0-81 and 1-80)", + }, + { + ports: []string{"1-80:1-65536/tcp"}, + errorMsg: "Sorry, one of the ports provided with --ports flag is not valid [1-80:1-65536/tcp] (Invalid containerPort: 1-65536)", + }, + } + for _, test := range tests { + t.Run(strings.Join(test.ports, ","), func(t *testing.T) { + gotError := "" + got := validatePorts(test.ports) + if got != nil { + gotError = got.Error() + } + if !strings.EqualFold(gotError, test.errorMsg) { + t.Errorf("validatePorts(ports=%v): got %v, expected %v", test.ports, got, test.errorMsg) + } + }) + } +} + +func TestValidateSubnet(t *testing.T) { + type subnetTest struct { + subnet string + errorMsg string + } + var tests = []subnetTest{ + { + subnet: "192.168.1.1", + errorMsg: "", + }, + { + subnet: "193.169.1.1", + errorMsg: "Sorry, the subnet 193.169.1.1 is not a private IP", + }, + { + subnet: "192.168.1.1/24", + errorMsg: "", + }, + { + subnet: "192.168.1.1/32", + errorMsg: "Sorry, the subnet provided does not have a mask less than or equal to /30", + }, + } + for _, test := range tests { + t.Run(test.subnet, func(t *testing.T) { + gotError := "" + got := validateSubnet(test.subnet) + if got != nil { + gotError = got.Error() + } + if gotError != test.errorMsg { + t.Errorf("validateSubnet(subnet=%v): got %v, expected %v", test.subnet, got, test.errorMsg) + } + }) + } +} + +func TestValidateStaticIP(t *testing.T) { + tests := []struct { + staticIP string + drvName string + errorMsg string + }{ + { + staticIP: "8.8.8.8", + drvName: "docker", + errorMsg: "static IP must be private", + }, + { + staticIP: "8.8.8.8", + drvName: "hyperkit", + errorMsg: "", + }, + { + staticIP: "fdfc:a4c0:e99e:7ad3::", + drvName: "docker", + errorMsg: "static IP must be IPv4", + }, + { + staticIP: "192.168.49.0", + drvName: "docker", + errorMsg: "static IPs last octet must be between 2 and 254 (X.X.X.2 - X.X.X.254), for example 192.168.200.200", + }, + { + staticIP: "192.168.49.1", + drvName: "docker", + errorMsg: "static IPs last octet must be between 2 and 254 (X.X.X.2 - X.X.X.254), for example 192.168.200.200", + }, + { + staticIP: "192.168.49.255", + drvName: "docker", + errorMsg: "static IPs last octet must be between 2 and 254 (X.X.X.2 - X.X.X.254), for example 192.168.200.200", + }, + { + staticIP: "192.168.49.2", + drvName: "docker", + errorMsg: "", + }, + { + staticIP: "192.168.49.254", + drvName: "docker", + errorMsg: "", + }, + } + for _, tt := range tests { + gotError := "" + got := validateStaticIP(tt.staticIP, tt.drvName, "") + if got != nil { + gotError = got.Error() + } + if gotError != tt.errorMsg { + t.Errorf("validateStaticIP(%s, %s): got %v, expected %v", tt.staticIP, tt.drvName, got, tt.errorMsg) + } + } +} + +func TestImageMatchesBinaryVersion(t *testing.T) { + tests := []struct { + imageVersion string + binaryVersion string + versionMatch bool + }{ + {"v1.17.0", "v1.17.0", true}, + {"v1.17.0", "v1.20.0", false}, + {"v1.31.0", "v1.31.1", true}, + {"v1.31.1", "v1.31.0", false}, + } + + for _, tc := range tests { + got := imageMatchesBinaryVersion(tc.imageVersion, tc.binaryVersion) + if got != tc.versionMatch { + t.Errorf("imageMatchesBinaryVersion(%s, %s) = %t; want = %t", tc.imageVersion, tc.binaryVersion, got, tc.versionMatch) + } + } +} + +func TestValidateGPUs(t *testing.T) { + tests := []struct { + gpus string + drvName string + runtime string + errorMsg string + }{ + {"", "kvm", "containerd", ""}, + {"all", "docker", "docker", ""}, + {"nvidia", "docker", "docker", ""}, + {"all", "docker", "", ""}, + {"nvidia", "docker", "", ""}, + {"all", "kvm", "docker", "The gpus flag can only be used with the docker driver and docker container-runtime"}, + {"nvidia", "docker", "containerd", "The gpus flag can only be used with the docker driver and docker container-runtime"}, + {"cat", "docker", "docker", `The gpus flag must be passed a value of "nvidia", "nvidia.com", "amd" or "all"`}, + {"amd", "docker", "docker", ""}, + {"amd", "docker", "", ""}, + {"amd", "docker", "containerd", "The gpus flag can only be used with the docker driver and docker container-runtime"}, + } + + for _, tc := range tests { + gotError := "" + got := validateGPUs(tc.gpus, tc.drvName, tc.runtime) + if got != nil { + gotError = got.Error() + } + if gotError != tc.errorMsg { + t.Errorf("validateGPUs(%s, %s, %s) = %q; want = %q", tc.gpus, tc.drvName, tc.runtime, got, tc.errorMsg) + } + } +} + +func TestValidateAutoPause(t *testing.T) { + tests := []struct { + interval string + shouldError bool + }{ + {"1m0s", false}, + {"5m", false}, + {"1s", false}, + {"0s", true}, + {"-2m", true}, + } + for _, tc := range tests { + input, err := time.ParseDuration(tc.interval) + if err != nil { + t.Fatalf("test has an invalid input duration of %q", tc.interval) + } + err = validateAutoPauseInterval(input) + if err != nil && !tc.shouldError { + t.Errorf("interval of %q failed validation; expected it to pass: %v", input, err) + } + if err == nil && tc.shouldError { + t.Errorf("interval of %q passed validation; expected it to fail: %v", input, err) + } + } } diff --git a/cmd/minikube/cmd/status.go b/cmd/minikube/cmd/status.go index 67d6ac724215..976f796afbe3 100644 --- a/cmd/minikube/cmd/status.go +++ b/cmd/minikube/cmd/status.go @@ -17,38 +17,28 @@ limitations under the License. package cmd import ( - "bufio" "encoding/json" "fmt" "io" "os" - "strconv" "strings" "text/template" "time" - cloudevents "github.com/cloudevents/sdk-go/v2" - "github.com/docker/machine/libmachine" "github.com/docker/machine/libmachine/state" "github.com/pkg/errors" "github.com/spf13/cobra" "k8s.io/klog/v2" - "k8s.io/minikube/pkg/minikube/bootstrapper/bsutil/kverify" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/cluster" "k8s.io/minikube/pkg/minikube/config" - "k8s.io/minikube/pkg/minikube/constants" - "k8s.io/minikube/pkg/minikube/driver" "k8s.io/minikube/pkg/minikube/exit" - "k8s.io/minikube/pkg/minikube/kubeconfig" - "k8s.io/minikube/pkg/minikube/localpath" - "k8s.io/minikube/pkg/minikube/machine" "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/node" + "k8s.io/minikube/pkg/minikube/notify" "k8s.io/minikube/pkg/minikube/out" - "k8s.io/minikube/pkg/minikube/out/register" "k8s.io/minikube/pkg/minikube/reason" - "k8s.io/minikube/pkg/version" ) var ( @@ -58,124 +48,6 @@ var ( watch time.Duration ) -// Additional legacy states -const ( - // Configured means configured - Configured = "Configured" // ~state.Saved - // Misconfigured means misconfigured - Misconfigured = "Misconfigured" // ~state.Error - // Nonexistent means the resource does not exist - Nonexistent = "Nonexistent" // ~state.None - // Irrelevant is used for statuses that aren't meaningful for worker nodes - Irrelevant = "Irrelevant" -) - -// New status modes, based roughly on HTTP/SMTP standards -const ( - - // 1xx signifies a transitional state. If retried, it will soon return a 2xx, 4xx, or 5xx - - Starting = 100 - Pausing = 101 - Unpausing = 102 - Stopping = 110 - Deleting = 120 - - // 2xx signifies that the API Server is able to service requests - - OK = 200 - Warning = 203 - - // 4xx signifies an error that requires help from the client to resolve - - NotFound = 404 - Stopped = 405 - Paused = 418 // I'm a teapot! - - // 5xx signifies a server-side error (that may be retryable) - - Error = 500 - InsufficientStorage = 507 - Unknown = 520 -) - -var ( - exitCodeToHTTPCode = map[int]int{ - // exit code 26 corresponds to insufficient storage - 26: 507, - } - - codeNames = map[int]string{ - 100: "Starting", - 101: "Pausing", - 102: "Unpausing", - 110: "Stopping", - 103: "Deleting", - - 200: "OK", - 203: "Warning", - - 404: "NotFound", - 405: "Stopped", - 418: "Paused", - - 500: "Error", - 507: "InsufficientStorage", - 520: "Unknown", - } - - codeDetails = map[int]string{ - 507: "/var is almost out of disk space", - } -) - -// Status holds string representations of component states -type Status struct { - Name string - Host string - Kubelet string - APIServer string - Kubeconfig string - Worker bool - TimeToStop string `json:",omitempty"` - DockerEnv string `json:",omitempty"` - PodManEnv string `json:",omitempty"` -} - -// ClusterState holds a cluster state representation -type ClusterState struct { - BaseState - - BinaryVersion string - TimeToStop string `json:",omitempty"` - Components map[string]BaseState - Nodes []NodeState -} - -// NodeState holds a node state representation -type NodeState struct { - BaseState - Components map[string]BaseState `json:",omitempty"` -} - -// BaseState holds a component state representation, such as "apiserver" or "kubeconfig" -type BaseState struct { - // Name is the name of the object - Name string - - // StatusCode is an HTTP-like status code for this object - StatusCode int - // Name is a human-readable name for the status code - StatusName string - // StatusDetail is long human-readable string describing why this particular status code was chosen - StatusDetail string `json:",omitempty"` // Not yet implemented - - // Step is which workflow step the object is at. - Step string `json:",omitempty"` - // StepDetail is a long human-readable string describing the step - StepDetail string `json:",omitempty"` -} - const ( minikubeNotRunningStatusFlag = 1 << 0 clusterNotRunningStatusFlag = 1 << 1 @@ -212,16 +84,18 @@ var statusCmd = &cobra.Command{ Long: `Gets the status of a local Kubernetes cluster. Exit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left. Eg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)`, - Run: func(cmd *cobra.Command, args []string) { + Run: func(cmd *cobra.Command, _ []string) { output = strings.ToLower(output) if output != "text" && statusFormat != defaultStatusFormat { exit.Message(reason.Usage, "Cannot use both --output and --format options") } + options := flags.CommandOptions() out.SetJSON(output == "json") + go notify.MaybePrintUpdateTextFromGithub(options) cname := ClusterFlagValue() - api, cc := mustload.Partial(cname) + api, cc := mustload.Partial(cname, options) duration := watch if !cmd.Flags().Changed("watch") || watch < 0 { @@ -234,7 +108,7 @@ var statusCmd = &cobra.Command{ // writeStatusesAtInterval writes statuses in a given output format - at intervals defined by duration func writeStatusesAtInterval(duration time.Duration, api libmachine.API, cc *config.ClusterConfig) { for { - var statuses []*Status + var statuses []*cluster.Status if nodeName != "" || statusFormat != defaultStatusFormat && len(cc.Nodes) > 1 { n, _, err := node.Retrieve(*cc, nodeName) @@ -242,25 +116,16 @@ func writeStatusesAtInterval(duration time.Duration, api libmachine.API, cc *con exit.Error(reason.GuestNodeRetrieve, "retrieving node", err) } - st, err := nodeStatus(api, *cc, *n) + st, err := cluster.NodeStatus(api, *cc, *n) if err != nil { klog.Errorf("status error: %v", err) } statuses = append(statuses, st) } else { - for _, n := range cc.Nodes { - machineName := config.MachineName(*cc, n) - klog.Infof("checking status of %s ...", machineName) - st, err := nodeStatus(api, *cc, n) - klog.Infof("%s status: %+v", machineName, st) - - if err != nil { - klog.Errorf("status error: %v", err) - } - if st.Host == Nonexistent { - klog.Errorf("The %q host does not exist!", machineName) - } - statuses = append(statuses, st) + var err error + statuses, err = cluster.GetStatus(api, cc) + if err != nil { + klog.Errorf("status error: %v", err) } } @@ -274,7 +139,7 @@ func writeStatusesAtInterval(duration time.Duration, api libmachine.API, cc *con case "json": // Layout is currently only supported for JSON mode if layout == "cluster" { - if err := clusterStatusJSON(statuses, os.Stdout); err != nil { + if err := clusterStatusJSON(statuses, os.Stdout, cc); err != nil { exit.Error(reason.InternalStatusJSON, "status json failure", err) } } else { @@ -293,145 +158,27 @@ func writeStatusesAtInterval(duration time.Duration, api libmachine.API, cc *con } } -// exitCode calcluates the appropriate exit code given a set of status messages -func exitCode(statuses []*Status) int { +// exitCode calculates the appropriate exit code given a set of status messages +func exitCode(statuses []*cluster.Status) int { c := 0 for _, st := range statuses { if st.Host != state.Running.String() { c |= minikubeNotRunningStatusFlag } - if (st.APIServer != state.Running.String() && st.APIServer != Irrelevant) || st.Kubelet != state.Running.String() { + if (st.APIServer != state.Running.String() && st.APIServer != cluster.Irrelevant) || st.Kubelet != state.Running.String() { c |= clusterNotRunningStatusFlag } - if st.Kubeconfig != Configured && st.Kubeconfig != Irrelevant { + if st.Kubeconfig != cluster.Configured && st.Kubeconfig != cluster.Irrelevant { c |= k8sNotRunningStatusFlag } } return c } -// nodeStatus looks up the status of a node -func nodeStatus(api libmachine.API, cc config.ClusterConfig, n config.Node) (*Status, error) { - controlPlane := n.ControlPlane - name := config.MachineName(cc, n) - - st := &Status{ - Name: name, - Host: Nonexistent, - APIServer: Nonexistent, - Kubelet: Nonexistent, - Kubeconfig: Nonexistent, - Worker: !controlPlane, - } - - hs, err := machine.Status(api, name) - klog.Infof("%s host status = %q (err=%v)", name, hs, err) - if err != nil { - return st, errors.Wrap(err, "host") - } - - // We have no record of this host. Return nonexistent struct - if hs == state.None.String() { - return st, nil - } - st.Host = hs - - // If it's not running, quickly bail out rather than delivering conflicting messages - if st.Host != state.Running.String() { - klog.Infof("host is not running, skipping remaining checks") - st.APIServer = st.Host - st.Kubelet = st.Host - st.Kubeconfig = st.Host - return st, nil - } - - // We have a fully operational host, now we can check for details - if _, err := cluster.DriverIP(api, name); err != nil { - klog.Errorf("failed to get driver ip: %v", err) - st.Host = state.Error.String() - return st, err - } - - st.Kubeconfig = Configured - if !controlPlane { - st.Kubeconfig = Irrelevant - st.APIServer = Irrelevant - } - - host, err := machine.LoadHost(api, name) - if err != nil { - return st, err - } - - cr, err := machine.CommandRunner(host) - if err != nil { - return st, err - } - - // Check storage - p, err := machine.DiskUsed(cr, "/var") - if err != nil { - klog.Errorf("failed to get storage capacity of /var: %v", err) - st.Host = state.Error.String() - return st, err - } - if p >= 99 { - st.Host = codeNames[InsufficientStorage] - } - - stk := kverify.ServiceStatus(cr, "kubelet") - st.Kubelet = stk.String() - if cc.ScheduledStop != nil { - initiationTime := time.Unix(cc.ScheduledStop.InitiationTime, 0) - st.TimeToStop = time.Until(initiationTime.Add(cc.ScheduledStop.Duration)).String() - } - if os.Getenv(constants.MinikubeActiveDockerdEnv) != "" { - st.DockerEnv = "in-use" - } - if os.Getenv(constants.MinikubeActivePodmanEnv) != "" { - st.PodManEnv = "in-use" - } - // Early exit for worker nodes - if !controlPlane { - return st, nil - } - - var hostname string - var port int - if cc.Addons["auto-pause"] { - hostname, _, port, err = driver.AutoPauseProxyEndpoint(&cc, &n, host.DriverName) - } else { - hostname, _, port, err = driver.ControlPlaneEndpoint(&cc, &n, host.DriverName) - } - - if err != nil { - klog.Errorf("forwarded endpoint: %v", err) - st.Kubeconfig = Misconfigured - } else { - err := kubeconfig.VerifyEndpoint(cc.Name, hostname, port) - if err != nil && st.Host != state.Starting.String() { - klog.Errorf("kubeconfig endpoint: %v", err) - st.Kubeconfig = Misconfigured - } - } - - sta, err := kverify.APIServerStatus(cr, hostname, port) - klog.Infof("%s apiserver status = %s (err=%v)", name, stk, err) - - if err != nil { - klog.Errorln("Error apiserver status:", err) - st.APIServer = state.Error.String() - } else { - st.APIServer = sta.String() - } - - return st, nil -} - func init() { statusCmd.Flags().StringVarP(&statusFormat, "format", "f", defaultStatusFormat, - `Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/ -For the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status`) + `Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template +For the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status`) statusCmd.Flags().StringVarP(&output, "output", "o", "text", `minikube status --output OUTPUT. json, text`) statusCmd.Flags().StringVarP(&layout, "layout", "l", "nodes", @@ -441,7 +188,7 @@ For the list accessible variables for the template, see the struct values here: statusCmd.Flags().Lookup("watch").NoOptDefVal = "1s" } -func statusText(st *Status, w io.Writer) error { +func statusText(st *cluster.Status, w io.Writer) error { tmpl, err := template.New("status").Parse(statusFormat) if st.Worker && statusFormat == defaultStatusFormat { tmpl, err = template.New("worker-status").Parse(workerStatusFormat) @@ -452,14 +199,14 @@ func statusText(st *Status, w io.Writer) error { if err := tmpl.Execute(w, st); err != nil { return err } - if st.Kubeconfig == Misconfigured { + if st.Kubeconfig == cluster.Misconfigured { _, err := w.Write([]byte("\nWARNING: Your kubectl is pointing to stale minikube-vm.\nTo fix the kubectl context, run `minikube update-context`\n")) return err } return nil } -func statusJSON(st []*Status, w io.Writer) error { +func statusJSON(st []*cluster.Status, w io.Writer) error { var js []byte var err error // Keep backwards compat with single node clusters to not break anyone @@ -475,185 +222,8 @@ func statusJSON(st []*Status, w io.Writer) error { return err } -// readEventLog reads cloudevent logs from $MINIKUBE_HOME/profiles//events.json -func readEventLog(name string) ([]cloudevents.Event, time.Time, error) { - path := localpath.EventLog(name) - - st, err := os.Stat(path) - if err != nil { - return nil, time.Time{}, errors.Wrap(err, "stat") - } - - f, err := os.Open(path) - if err != nil { - return nil, st.ModTime(), errors.Wrap(err, "open") - } - var events []cloudevents.Event - - scanner := bufio.NewScanner(f) - for scanner.Scan() { - ev := cloudevents.NewEvent() - if err = json.Unmarshal(scanner.Bytes(), &ev); err != nil { - return events, st.ModTime(), err - } - events = append(events, ev) - } - - return events, st.ModTime(), nil -} - -// clusterState converts Status structs into a ClusterState struct -func clusterState(sts []*Status) ClusterState { - statusName := sts[0].APIServer - if sts[0].Host == codeNames[InsufficientStorage] { - statusName = sts[0].Host - } - sc := statusCode(statusName) - - cs := ClusterState{ - BinaryVersion: version.GetVersion(), - - BaseState: BaseState{ - Name: ClusterFlagValue(), - StatusCode: sc, - StatusName: statusName, - StatusDetail: codeDetails[sc], - }, - - TimeToStop: sts[0].TimeToStop, - - Components: map[string]BaseState{ - "kubeconfig": {Name: "kubeconfig", StatusCode: statusCode(sts[0].Kubeconfig), StatusName: codeNames[statusCode(sts[0].Kubeconfig)]}, - }, - } - - for _, st := range sts { - ns := NodeState{ - BaseState: BaseState{ - Name: st.Name, - StatusCode: statusCode(st.Host), - }, - Components: map[string]BaseState{ - "kubelet": {Name: "kubelet", StatusCode: statusCode(st.Kubelet)}, - }, - } - - if st.APIServer != Irrelevant { - ns.Components["apiserver"] = BaseState{Name: "apiserver", StatusCode: statusCode(st.APIServer)} - } - - // Convert status codes to status names - ns.StatusName = codeNames[ns.StatusCode] - for k, v := range ns.Components { - v.StatusName = codeNames[v.StatusCode] - ns.Components[k] = v - } - - cs.Nodes = append(cs.Nodes, ns) - } - - evs, mtime, err := readEventLog(sts[0].Name) - if err != nil { - klog.Errorf("unable to read event log: %v", err) - return cs - } - - transientCode := 0 - var finalStep map[string]string - - for _, ev := range evs { - // klog.Infof("read event: %+v", ev) - if ev.Type() == "io.k8s.sigs.minikube.step" { - var data map[string]string - err := ev.DataAs(&data) - if err != nil { - klog.Errorf("unable to parse data: %v\nraw data: %s", err, ev.Data()) - continue - } - - switch data["name"] { - case string(register.InitialSetup): - transientCode = Starting - case string(register.Done): - transientCode = 0 - case string(register.Stopping): - klog.Infof("%q == %q", data["name"], register.Stopping) - transientCode = Stopping - case string(register.Deleting): - transientCode = Deleting - case string(register.Pausing): - transientCode = Pausing - case string(register.Unpausing): - transientCode = Unpausing - } - - finalStep = data - klog.Infof("transient code %d (%q) for step: %+v", transientCode, codeNames[transientCode], data) - } - if ev.Type() == "io.k8s.sigs.minikube.error" { - var data map[string]string - err := ev.DataAs(&data) - if err != nil { - klog.Errorf("unable to parse data: %v\nraw data: %s", err, ev.Data()) - continue - } - exitCode, err := strconv.Atoi(data["exitcode"]) - if err != nil { - klog.Errorf("exit code not found: %v", err) - continue - } - if val, ok := exitCodeToHTTPCode[exitCode]; ok { - exitCode = val - } - transientCode = exitCode - for _, n := range cs.Nodes { - n.StatusCode = transientCode - n.StatusName = codeNames[n.StatusCode] - } - - klog.Infof("transient code %d (%q) for step: %+v", transientCode, codeNames[transientCode], data) - } - } - - if finalStep != nil { - if mtime.Before(time.Now().Add(-10 * time.Minute)) { - klog.Warningf("event stream is too old (%s) to be considered a transient state", mtime) - } else { - cs.Step = strings.TrimSpace(finalStep["name"]) - cs.StepDetail = strings.TrimSpace(finalStep["message"]) - if transientCode != 0 { - cs.StatusCode = transientCode - } - } - } - - cs.StatusName = codeNames[cs.StatusCode] - cs.StatusDetail = codeDetails[cs.StatusCode] - return cs -} - -// statusCode returns a status code number given a name -func statusCode(st string) int { - // legacy names - switch st { - case "Running", "Configured": - return OK - case "Misconfigured": - return Error - } - - // new names - for code, name := range codeNames { - if name == st { - return code - } - } - - return Unknown -} - -func clusterStatusJSON(statuses []*Status, w io.Writer) error { - cs := clusterState(statuses) +func clusterStatusJSON(statuses []*cluster.Status, w io.Writer, cc *config.ClusterConfig) error { + cs := cluster.GetState(statuses, ClusterFlagValue(), cc) bs, err := json.Marshal(cs) if err != nil { diff --git a/cmd/minikube/cmd/status_test.go b/cmd/minikube/cmd/status_test.go index bd794cbe32d0..6bb310932a58 100644 --- a/cmd/minikube/cmd/status_test.go +++ b/cmd/minikube/cmd/status_test.go @@ -20,22 +20,24 @@ import ( "bytes" "encoding/json" "testing" + + "k8s.io/minikube/pkg/minikube/cluster" ) func TestExitCode(t *testing.T) { var tests = []struct { name string want int - state *Status + state *cluster.Status }{ - {"ok", 0, &Status{Host: "Running", Kubelet: "Running", APIServer: "Running", Kubeconfig: Configured}}, - {"paused", 2, &Status{Host: "Running", Kubelet: "Stopped", APIServer: "Paused", Kubeconfig: Configured}}, - {"down", 7, &Status{Host: "Stopped", Kubelet: "Stopped", APIServer: "Stopped", Kubeconfig: Misconfigured}}, - {"missing", 7, &Status{Host: "Nonexistent", Kubelet: "Nonexistent", APIServer: "Nonexistent", Kubeconfig: "Nonexistent"}}, + {"ok", 0, &cluster.Status{Host: "Running", Kubelet: "Running", APIServer: "Running", Kubeconfig: cluster.Configured}}, + {"paused", 2, &cluster.Status{Host: "Running", Kubelet: "Stopped", APIServer: "Paused", Kubeconfig: cluster.Configured}}, + {"down", 7, &cluster.Status{Host: "Stopped", Kubelet: "Stopped", APIServer: "Stopped", Kubeconfig: cluster.Misconfigured}}, + {"missing", 7, &cluster.Status{Host: "Nonexistent", Kubelet: "Nonexistent", APIServer: "Nonexistent", Kubeconfig: "Nonexistent"}}, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { - got := exitCode([]*Status{tc.state}) + got := exitCode([]*cluster.Status{tc.state}) if got != tc.want { t.Errorf("exitcode(%+v) = %d, want: %d", tc.state, got, tc.want) } @@ -46,22 +48,22 @@ func TestExitCode(t *testing.T) { func TestStatusText(t *testing.T) { var tests = []struct { name string - state *Status + state *cluster.Status want string }{ { name: "ok", - state: &Status{Name: "minikube", Host: "Running", Kubelet: "Running", APIServer: "Running", Kubeconfig: Configured, TimeToStop: "10m"}, + state: &cluster.Status{Name: "minikube", Host: "Running", Kubelet: "Running", APIServer: "Running", Kubeconfig: cluster.Configured, TimeToStop: "10m"}, want: "minikube\ntype: Control Plane\nhost: Running\nkubelet: Running\napiserver: Running\nkubeconfig: Configured\ntimeToStop: 10m\n\n", }, { name: "paused", - state: &Status{Name: "minikube", Host: "Running", Kubelet: "Stopped", APIServer: "Paused", Kubeconfig: Configured}, + state: &cluster.Status{Name: "minikube", Host: "Running", Kubelet: "Stopped", APIServer: "Paused", Kubeconfig: cluster.Configured}, want: "minikube\ntype: Control Plane\nhost: Running\nkubelet: Stopped\napiserver: Paused\nkubeconfig: Configured\n\n", }, { name: "down", - state: &Status{Name: "minikube", Host: "Stopped", Kubelet: "Stopped", APIServer: "Stopped", Kubeconfig: Misconfigured}, + state: &cluster.Status{Name: "minikube", Host: "Stopped", Kubelet: "Stopped", APIServer: "Stopped", Kubeconfig: cluster.Misconfigured}, want: "minikube\ntype: Control Plane\nhost: Stopped\nkubelet: Stopped\napiserver: Stopped\nkubeconfig: Misconfigured\n\n\nWARNING: Your kubectl is pointing to stale minikube-vm.\nTo fix the kubectl context, run `minikube update-context`\n", }, } @@ -84,21 +86,21 @@ func TestStatusText(t *testing.T) { func TestStatusJSON(t *testing.T) { var tests = []struct { name string - state *Status + state *cluster.Status }{ - {"ok", &Status{Host: "Running", Kubelet: "Running", APIServer: "Running", Kubeconfig: Configured, TimeToStop: "10m"}}, - {"paused", &Status{Host: "Running", Kubelet: "Stopped", APIServer: "Paused", Kubeconfig: Configured}}, - {"down", &Status{Host: "Stopped", Kubelet: "Stopped", APIServer: "Stopped", Kubeconfig: Misconfigured}}, + {"ok", &cluster.Status{Host: "Running", Kubelet: "Running", APIServer: "Running", Kubeconfig: cluster.Configured, TimeToStop: "10m"}}, + {"paused", &cluster.Status{Host: "Running", Kubelet: "Stopped", APIServer: "Paused", Kubeconfig: cluster.Configured}}, + {"down", &cluster.Status{Host: "Stopped", Kubelet: "Stopped", APIServer: "Stopped", Kubeconfig: cluster.Misconfigured}}, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { var b bytes.Buffer - err := statusJSON([]*Status{tc.state}, &b) + err := statusJSON([]*cluster.Status{tc.state}, &b) if err != nil { t.Errorf("json(%+v) error: %v", tc.state, err) } - st := &Status{} + st := &cluster.Status{} if err := json.Unmarshal(b.Bytes(), st); err != nil { t.Errorf("json(%+v) unmarshal error: %v", tc.state, err) } diff --git a/cmd/minikube/cmd/stop.go b/cmd/minikube/cmd/stop.go index 1db7ab203827..789570197c26 100644 --- a/cmd/minikube/cmd/stop.go +++ b/cmd/minikube/cmd/stop.go @@ -27,6 +27,7 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/kubeconfig" @@ -36,6 +37,7 @@ import ( "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/out/register" "k8s.io/minikube/pkg/minikube/reason" + "k8s.io/minikube/pkg/minikube/run" "k8s.io/minikube/pkg/minikube/schedule" "k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/util/retry" @@ -69,7 +71,8 @@ func init() { } // runStop handles the executes the flow of "minikube stop" -func runStop(cmd *cobra.Command, args []string) { +func runStop(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() out.SetJSON(outputFormat == "json") register.Reg.SetStep(register.Stopping) @@ -94,7 +97,7 @@ func runStop(cmd *cobra.Command, args []string) { } // Kill any existing scheduled stops - schedule.KillExisting(profilesToStop) + schedule.KillExisting(profilesToStop, options) if cancelScheduledStop { register.Reg.SetStep(register.Done) out.Step(style.Stopped, `All existing scheduled stops cancelled`) @@ -102,7 +105,7 @@ func runStop(cmd *cobra.Command, args []string) { } if scheduledStopDuration != 0 { - if err := schedule.Daemonize(profilesToStop, scheduledStopDuration); err != nil { + if err := schedule.Daemonize(profilesToStop, scheduledStopDuration, options); err != nil { exit.Message(reason.DaemonizeError, "unable to daemonize: {{.err}}", out.V{"err": err.Error()}) } // if OS is windows, scheduled stop is now being handled within minikube, so return @@ -115,24 +118,28 @@ func runStop(cmd *cobra.Command, args []string) { stoppedNodes := 0 for _, profile := range profilesToStop { - stoppedNodes = stopProfile(profile) + stoppedNodes = stopProfile(profile, options) } register.Reg.SetStep(register.Done) - if stoppedNodes > 0 { - out.Step(style.Stopped, `{{.count}} nodes stopped.`, out.V{"count": stoppedNodes}) - } + out.Step(style.Stopped, `{{.count}} node{{if gt .count 1}}s{{end}} stopped.`, out.V{"count": stoppedNodes}) } -func stopProfile(profile string) int { +func stopProfile(profile string, options *run.CommandOptions) int { stoppedNodes := 0 register.Reg.SetStep(register.Stopping) // end new code - api, cc := mustload.Partial(profile) + api, cc := mustload.Partial(profile, options) defer api.Close() - for _, n := range cc.Nodes { + if err := killMountProcess(); err != nil { + out.WarningT("Unable to kill mount process: {{.error}}", out.V{"error": err}) + } + + // stop nodes in reverse order, so last one being primary control-plane node, that will start first next time + for i := len(cc.Nodes) - 1; i >= 0; i-- { + n := cc.Nodes[i] machineName := config.MachineName(*cc, n) nonexistent := stop(api, machineName) @@ -141,10 +148,6 @@ func stopProfile(profile string) int { } } - if err := killMountProcess(); err != nil { - out.WarningT("Unable to kill mount process: {{.error}}", out.V{"error": err}) - } - if !keepActive { if err := kubeconfig.DeleteContext(profile, kubeconfig.PathFromEnv()); err != nil { exit.Error(reason.HostKubeconfigDeleteCtx, "delete ctx", err) diff --git a/cmd/minikube/cmd/tunnel.go b/cmd/minikube/cmd/tunnel.go index ffdd6cd8fb72..7e9f6f246d9e 100644 --- a/cmd/minikube/cmd/tunnel.go +++ b/cmd/minikube/cmd/tunnel.go @@ -18,14 +18,18 @@ package cmd import ( "context" + "fmt" "os" "os/signal" "path/filepath" + "runtime" "strconv" + "github.com/juju/fslock" "github.com/spf13/cobra" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/drivers/kic/oci" "k8s.io/minikube/pkg/kapi" "k8s.io/minikube/pkg/minikube/config" @@ -33,12 +37,17 @@ import ( "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/mustload" + "k8s.io/minikube/pkg/minikube/out" "k8s.io/minikube/pkg/minikube/reason" + "k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/minikube/tunnel" "k8s.io/minikube/pkg/minikube/tunnel/kic" + pkgnetwork "k8s.io/minikube/pkg/network" ) var cleanup bool +var bindAddress string +var lockHandle *fslock.Lock // tunnelCmd represents the tunnel command var tunnelCmd = &cobra.Command{ @@ -48,10 +57,19 @@ var tunnelCmd = &cobra.Command{ PersistentPreRun: func(cmd *cobra.Command, args []string) { RootCmd.PersistentPreRun(cmd, args) }, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() manager := tunnel.NewManager() cname := ClusterFlagValue() - co := mustload.Healthy(cname) + co := mustload.Healthy(cname, options) + + if driver.IsQEMU(co.Config.Driver) && pkgnetwork.IsBuiltinQEMU(co.Config.Network) { + msg := "minikube tunnel is not currently implemented with the builtin network on QEMU" + if runtime.GOOS == "darwin" { + msg += ", try starting minikube with '--network=socket_vmnet'" + } + exit.Message(reason.Unimplemented, msg) + } if cleanup { klog.Info("Checking for tunnels to cleanup...") @@ -60,6 +78,9 @@ var tunnelCmd = &cobra.Command{ } } + mustLockOrExit(cname) + defer cleanupLock() + // Tunnel uses the k8s clientset to query the API server for services in the LoadBalancerEmulator. // We define the tunnel and minikube error free if the API server responds within a second. // This also contributes to better UX, the tunnel status check can happen every second and @@ -77,16 +98,16 @@ var tunnelCmd = &cobra.Command{ cancel() }() - if driver.NeedsPortForward(co.Config.Driver) { - - port, err := oci.ForwardedPort(oci.Docker, cname, 22) + if driver.NeedsPortForward(co.Config.Driver) || bindAddress != "" { + port, err := oci.ForwardedPort(co.Config.Driver, cname, 22) if err != nil { exit.Error(reason.DrvPortForward, "error getting ssh port", err) } sshPort := strconv.Itoa(port) sshKey := filepath.Join(localpath.MiniPath(), "machines", cname, "id_rsa") - kicSSHTunnel := kic.NewSSHTunnel(ctx, sshPort, sshKey, clientset.CoreV1()) + outputTunnelStarted() + kicSSHTunnel := kic.NewSSHTunnel(ctx, sshPort, sshKey, bindAddress, clientset.CoreV1(), clientset.NetworkingV1()) err = kicSSHTunnel.Start() if err != nil { exit.Error(reason.SvcTunnelStart, "error starting tunnel", err) @@ -103,6 +124,36 @@ var tunnelCmd = &cobra.Command{ }, } +func cleanupLock() { + if lockHandle != nil { + err := lockHandle.Unlock() + if err != nil { + out.Styled(style.Warning, fmt.Sprintf("failed to release lock during cleanup: %v", err)) + } + } +} + +func mustLockOrExit(profile string) { + tunnelLockPath := filepath.Join(localpath.Profile(profile), ".tunnel_lock") + + lockHandle = fslock.New(tunnelLockPath) + err := lockHandle.TryLock() + if err == fslock.ErrLocked { + exit.Message(reason.SvcTunnelAlreadyRunning, "Another tunnel process is already running, terminate the existing instance to start a new one") + } + if err != nil { + exit.Error(reason.SvcTunnelStart, "failed to acquire lock due to unexpected error", err) + } +} + +func outputTunnelStarted() { + out.Styled(style.Success, "Tunnel successfully started") + out.Ln("") + out.Styled(style.Notice, "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...") + out.Ln("") +} + func init() { tunnelCmd.Flags().BoolVarP(&cleanup, "cleanup", "c", true, "call with cleanup=true to remove old tunnels") + tunnelCmd.Flags().StringVar(&bindAddress, "bind-address", "", "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces") } diff --git a/cmd/minikube/cmd/unpause.go b/cmd/minikube/cmd/unpause.go index e1c590961efe..ce7157deb493 100644 --- a/cmd/minikube/cmd/unpause.go +++ b/cmd/minikube/cmd/unpause.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/viper" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/cluster" "k8s.io/minikube/pkg/minikube/config" "k8s.io/minikube/pkg/minikube/constants" @@ -42,11 +43,12 @@ var unpauseCmd = &cobra.Command{ Use: "unpause", Aliases: []string{"resume"}, Short: "unpause Kubernetes", - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() cname := ClusterFlagValue() register.SetEventLogPath(localpath.EventLog(cname)) - co := mustload.Running(cname) + co := mustload.Running(cname, options) out.SetJSON(outputFormat == "json") register.Reg.SetStep(register.Unpausing) diff --git a/cmd/minikube/cmd/update-check.go b/cmd/minikube/cmd/update-check.go index 496ebb4ada7b..ce12428ba611 100644 --- a/cmd/minikube/cmd/update-check.go +++ b/cmd/minikube/cmd/update-check.go @@ -29,18 +29,18 @@ var updateCheckCmd = &cobra.Command{ Use: "update-check", Short: "Print current and latest version number", Long: `Print current and latest version number`, - Run: func(command *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { url := notify.GithubMinikubeReleasesURL r, err := notify.AllVersionsFromURL(url) if err != nil { exit.Error(reason.InetVersionUnavailable, "Unable to fetch latest version info", err) } - if len(r) < 1 { + if len(r.Releases) < 1 { exit.Message(reason.InetVersionEmpty, "Update server returned an empty list") } out.Ln("CurrentVersion: %s", version.GetVersion()) - out.Ln("LatestVersion: %s", r[0].Name) + out.Ln("LatestVersion: %s", r.Releases[0].Name) }, } diff --git a/cmd/minikube/cmd/update-context.go b/cmd/minikube/cmd/update-context.go index e50fb9b827c9..fc3e72b4b48a 100644 --- a/cmd/minikube/cmd/update-context.go +++ b/cmd/minikube/cmd/update-context.go @@ -18,6 +18,7 @@ package cmd import ( "github.com/spf13/cobra" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/kubeconfig" "k8s.io/minikube/pkg/minikube/mustload" @@ -32,9 +33,10 @@ var updateContextCmd = &cobra.Command{ Short: "Update kubeconfig in case of an IP or port change", Long: `Retrieves the IP address of the running cluster, checks it with IP in kubeconfig, and corrects kubeconfig if incorrect.`, - Run: func(cmd *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() cname := ClusterFlagValue() - co := mustload.Running(cname) + co := mustload.Running(cname, options) // cluster extension metada for kubeconfig updated, err := kubeconfig.UpdateEndpoint(cname, co.CP.Hostname, co.CP.Port, kubeconfig.PathFromEnv(), kubeconfig.NewExtension()) diff --git a/cmd/minikube/cmd/version.go b/cmd/minikube/cmd/version.go index 6f2a2da02b85..8dddeea0154d 100644 --- a/cmd/minikube/cmd/version.go +++ b/cmd/minikube/cmd/version.go @@ -18,13 +18,15 @@ package cmd import ( "encoding/json" + "maps" "os/exec" - "sort" + "slices" "strings" "github.com/spf13/cobra" "gopkg.in/yaml.v2" "k8s.io/klog/v2" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/mustload" "k8s.io/minikube/pkg/minikube/out" @@ -42,27 +44,30 @@ var versionCmd = &cobra.Command{ Use: "version", Short: "Print the version of minikube", Long: `Print the version of minikube.`, - Run: func(command *cobra.Command, args []string) { + Run: func(_ *cobra.Command, _ []string) { + options := flags.CommandOptions() minikubeVersion := version.GetVersion() gitCommitID := version.GetGitCommitID() - data := map[string]string{ + data := map[string]interface{}{ "minikubeVersion": minikubeVersion, "commit": gitCommitID, } if listComponentsVersions && !shortVersion { - co := mustload.Running(ClusterFlagValue()) + co := mustload.Running(ClusterFlagValue(), options) runner := co.CP.Runner versionCMDS := map[string]*exec.Cmd{ - "docker": exec.Command("docker", "--version"), - "dockerd": exec.Command("dockerd", "--version"), - "containerd": exec.Command("containerd", "--version"), - "crio": exec.Command("crio", "--version"), - "podman": exec.Command("sudo", "podman", "--version"), - "crictl": exec.Command("sudo", "crictl", "--version"), - "buildctl": exec.Command("buildctl", "--version"), - "ctr": exec.Command("ctr", "--version"), - "runc": exec.Command("runc", "--version"), + "docker": exec.Command("docker", "--version"), + "dockerd": exec.Command("dockerd", "--version"), + "cri-dockerd": exec.Command("cri-dockerd", "--version"), + "containerd": exec.Command("containerd", "--version"), + "crio": exec.Command("crio", "--version"), + "podman": exec.Command("sudo", "podman", "--version"), + "crictl": exec.Command("sudo", "crictl", "--version"), + "buildctl": exec.Command("buildctl", "--version"), + "ctr": exec.Command("ctr", "--version"), + "runc": exec.Command("runc", "--version"), + "crun": exec.Command("crun", "--version"), } for k, v := range versionCMDS { rr, err := runner.RunCmd(v) @@ -87,11 +92,7 @@ var versionCmd = &cobra.Command{ if gitCommitID != "" { out.Ln("commit: %v", gitCommitID) } - keys := make([]string, 0, len(data)) - for k := range data { - keys = append(keys, k) - } - sort.Strings(keys) + keys := slices.Sorted(maps.Keys(data)) for _, k := range keys { v := data[k] // for backward compatibility we keep displaying the old way for these two diff --git a/cmd/minikube/main.go b/cmd/minikube/main.go index 496ec6e9fd13..1c8b707a19f4 100644 --- a/cmd/minikube/main.go +++ b/cmd/minikube/main.go @@ -20,6 +20,7 @@ import ( "bytes" "crypto/sha1" "encoding/hex" + "errors" "flag" "fmt" "log" @@ -47,10 +48,15 @@ import ( "github.com/pkg/profile" "k8s.io/minikube/cmd/minikube/cmd" + "k8s.io/minikube/cmd/minikube/cmd/flags" "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/machine" "k8s.io/minikube/pkg/minikube/out" _ "k8s.io/minikube/pkg/provision" + + dconfig "github.com/docker/cli/cli/config" + ddocker "github.com/docker/cli/cli/context/docker" + dstore "github.com/docker/cli/cli/context/store" ) const minikubeEnableProfile = "MINIKUBE_ENABLE_PROFILING" @@ -60,12 +66,17 @@ var ( // unexpected errors from libmachine to the user. machineLogErrorRe = regexp.MustCompile(`VirtualizationException`) machineLogWarningRe = regexp.MustCompile(`(?i)warning`) + // This regex is to filter out logs that contain environment variables which could contain sensitive information + machineLogEnvironmentRe = regexp.MustCompile(`&exec\.Cmd`) ) func main() { + options := flags.CommandOptions() bridgeLogMessages() defer klog.Flush() + propagateDockerContextToEnv() + // Don't parse flags when running as kubectl _, callingCmd := filepath.Split(os.Args[0]) callingCmd = strings.TrimSuffix(callingCmd, ".exe") @@ -79,7 +90,7 @@ func main() { defer profile.Start(profile.TraceProfile).Stop() } if os.Getenv(constants.IsMinikubeChildProcess) == "" { - machine.StartDriver() + machine.StartDriver(options) } out.SetOutFile(os.Stdout) out.SetErrFile(os.Stderr) @@ -122,11 +133,14 @@ type machineLogBridge struct{} // Write passes machine driver logs to klog func (lb machineLogBridge) Write(b []byte) (n int, err error) { - if machineLogErrorRe.Match(b) { + switch { + case machineLogEnvironmentRe.Match(b): + return len(b), nil + case machineLogErrorRe.Match(b): klog.Errorf("libmachine: %s", b) - } else if machineLogWarningRe.Match(b) { + case machineLogWarningRe.Match(b): klog.Warningf("libmachine: %s", b) - } else { + default: klog.Infof("libmachine: %s", b) } return len(b), nil @@ -145,13 +159,13 @@ func checkLogFileMaxSize(file string, maxSizeKB int64) bool { // logFileName generates a default logfile name in the form minikube___.log from args func logFileName(dir string, logIdx int64) string { h := sha1.New() - user, err := user.Current() + userInfo, err := user.Current() if err != nil { klog.Warningf("Unable to get username to add to log filename hash: %v", err) } else { - _, err := h.Write([]byte(user.Username)) + _, err := h.Write([]byte(userInfo.Username)) if err != nil { - klog.Warningf("Unable to add username %s to log filename hash: %v", user.Username, err) + klog.Warningf("Unable to add username %s to log filename hash: %v", userInfo.Username, err) } } for _, s := range pflag.Args() { @@ -176,7 +190,7 @@ func logFileName(dir string, logIdx int64) string { // setFlags sets the flags func setFlags(parse bool) { - // parse flags beyond subcommand - get aroung go flag 'limitations': + // parse flags beyond subcommand - get around go flag 'limitations': // "Flag parsing stops just before the first non-flag argument" (ref: https://pkg.go.dev/flag#hdr-Command_line_flag_syntax) pflag.CommandLine.ParseErrorsWhitelist.UnknownFlags = true pflag.CommandLine.AddGoFlagSet(flag.CommandLine) @@ -225,7 +239,7 @@ func setFlags(parse bool) { // setLastStartFlags sets the log_file flag to lastStart.txt if start command and user doesn't specify log_file or log_dir flags. func setLastStartFlags() { - if len(os.Args) < 2 || os.Args[1] != "start" { + if pflag.Arg(0) != "start" { return } if pflag.CommandLine.Changed("log_file") || pflag.CommandLine.Changed("log_dir") { @@ -243,3 +257,55 @@ func setLastStartFlags() { klog.Warningf("Unable to set default flag value for log_file: %v", err) } } + +// propagateDockerContextToEnv propagates the current context in ~/.docker/config.json to $DOCKER_HOST, +// so that google/go-containerregistry can pick it up. +func propagateDockerContextToEnv() { + if os.Getenv("DOCKER_HOST") != "" { + // Already explicitly set + return + } + currentContext := os.Getenv("DOCKER_CONTEXT") + if currentContext == "" { + dockerConfigDir := dconfig.Dir() + if _, err := os.Stat(dockerConfigDir); err != nil { + if !errors.Is(err, os.ErrNotExist) { + klog.Warning(err) + } + return + } + cf, err := dconfig.Load(dockerConfigDir) + if err != nil { + klog.Warningf("Unable to load the current Docker config from %q: %v", dockerConfigDir, err) + return + } + currentContext = cf.CurrentContext + } + if currentContext == "" { + return + } + storeConfig := dstore.NewConfig( + func() interface{} { return &ddocker.EndpointMeta{} }, + dstore.EndpointTypeGetter(ddocker.DockerEndpoint, func() interface{} { return &ddocker.EndpointMeta{} }), + ) + st := dstore.New(dconfig.ContextStoreDir(), storeConfig) + md, err := st.GetMetadata(currentContext) + if err != nil { + klog.Warningf("Unable to resolve the current Docker CLI context %q: %v", currentContext, err) + klog.Warningf("Try running `docker context use %s` to resolve the above error", currentContext) + return + } + dockerEP, ok := md.Endpoints[ddocker.DockerEndpoint] + if !ok { + // No warning (the context is not for Docker) + return + } + dockerEPMeta, ok := dockerEP.(ddocker.EndpointMeta) + if !ok { + klog.Warningf("expected docker.EndpointMeta, got %T", dockerEP) + return + } + if dockerEPMeta.Host != "" { + os.Setenv("DOCKER_HOST", dockerEPMeta.Host) + } +} diff --git a/cmd/performance/mkcmp/cmd/README.md b/cmd/performance/mkcmp/cmd/README.md index 6df569350114..13dade54cf55 100644 --- a/cmd/performance/mkcmp/cmd/README.md +++ b/cmd/performance/mkcmp/cmd/README.md @@ -15,8 +15,8 @@ make out/mkcmp ./out/mkcmp ./out/minikube pr://400 ``` -mkcmp is primarily used for our prbot, which comments mkcmp output on valid PRs [example](https://github.com/kubernetes/minikube/pull/10430#issuecomment-776311409). -To make changes to the prbot output, submitting a PR to change mkcmp code should be sufficient. +mkcmp is primarily used for our pr-bot, which comments mkcmp output on valid PRs [example](https://github.com/kubernetes/minikube/pull/10430#issuecomment-776311409). +To make changes to the pr-bot output, submitting a PR to change mkcmp code should be sufficient. Note: STDOUT from mkcmp is *exactly* what is commented on github, so we want it to be in Markdown. diff --git a/cmd/performance/mkcmp/cmd/mkcmp.go b/cmd/performance/mkcmp/cmd/mkcmp.go index 16ed30ae40c8..6817cabe74d1 100644 --- a/cmd/performance/mkcmp/cmd/mkcmp.go +++ b/cmd/performance/mkcmp/cmd/mkcmp.go @@ -32,15 +32,15 @@ var rootCmd = &cobra.Command{ Short: "mkcmp is used to compare performance of two minikube binaries", SilenceUsage: true, SilenceErrors: true, - PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + PersistentPreRunE: func(_ *cobra.Command, args []string) error { return validateArgs(args) }, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(_ *cobra.Command, args []string) error { binaries, err := retrieveBinaries(args) if err != nil { return err } - return perf.CompareMinikubeStart(context.Background(), os.Stdout, binaries) + return perf.CompareMinikubeStart(context.Background(), binaries) }, } diff --git a/cmd/performance/pr-bot/bot.go b/cmd/performance/pr-bot/bot.go index 340c4ef8f4de..106c446f4bad 100644 --- a/cmd/performance/pr-bot/bot.go +++ b/cmd/performance/pr-bot/bot.go @@ -37,9 +37,9 @@ func main() { } // analyzePerformance is responsible for: -// 1. collecting PRs to run performance analysis on -// 2. running mkcmp against those PRs -// 3. commenting results on those PRs +// 1. collecting PRs to run performance analysis on +// 2. running mkcmp against those PRs +// 3. commenting results on those PRs func analyzePerformance(ctx context.Context) error { client := monitor.NewClient(ctx, monitor.GithubOwner, monitor.GithubRepo) prs, err := client.ListOpenPRsWithLabel(monitor.OkToTestLabel) diff --git a/deploy/addons/aliyun_mirror.json b/deploy/addons/aliyun_mirror.json new file mode 100644 index 000000000000..42bd7d63b34d --- /dev/null +++ b/deploy/addons/aliyun_mirror.json @@ -0,0 +1,100 @@ +{ + "docker.io/kubernetesui/dashboard": "registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard", + "docker.io/kubernetesui/metrics-scraper": "registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper", + "gcr.io/k8s-minikube/auto-pause-hook": "registry.cn-hangzhou.aliyuncs.com/google_containers/auto-pause-hook", + "quay.io/operator-framework/olm": "registry.cn-hangzhou.aliyuncs.com/google_containers/olm", + "quay.io/operator-framework/upstream-community-operators": "registry.cn-hangzhou.aliyuncs.com/google_containers/upstream-community-operators", + "registry.k8s.io/kube-registry-proxy": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-registry-proxy", + "docker.io/upmcenterprises/registry-creds": "registry.cn-hangzhou.aliyuncs.com/google_containers/registry-creds", + "quay.io/rhdevelopers/core-dns-patcher": "registry.cn-hangzhou.aliyuncs.com/google_containers/core-dns-patcher", + "docker.io/nvidia/k8s-device-plugin": "registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-device-plugin", + "docker.io/ivans3/minikube-log-viewer": "registry.cn-hangzhou.aliyuncs.com/google_containers/minikube-log-viewer", + "docker.io/cryptexlabs/minikube-ingress-dns": "registry.cn-hangzhou.aliyuncs.com/google_containers/minikube-ingress-dns", + "docker.io/kicbase/minikube-ingress-dns": "registry.cn-hangzhou.aliyuncs.com/google_containers/minikube-ingress-dns", + "quay.io/datawire/ambassador-operator": "registry.cn-hangzhou.aliyuncs.com/google_containers/ambassador-operator", + "docker.io/jettech/kube-webhook-certgen": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen", + "gcr.io/k8s-minikube/gcp-auth-webhook": "registry.cn-hangzhou.aliyuncs.com/google_containers/gcp-auth-webhook", + "registry.k8s.io/sig-storage/snapshot-controller": "registry.cn-hangzhou.aliyuncs.com/google_containers/snapshot-controller", + "registry.k8s.io/sig-storage/csi-attacher": "registry.cn-hangzhou.aliyuncs.com/google_containers/csi-attacher", + "registry.k8s.io/sig-storage/csi-external-health-monitor-agent": "registry.cn-hangzhou.aliyuncs.com/google_containers/csi-external-health-monitor-agent", + "registry.k8s.io/sig-storage/csi-external-health-monitor-controller": "registry.cn-hangzhou.aliyuncs.com/google_containers/csi-external-health-monitor-controller", + "registry.k8s.io/sig-storage/csi-node-driver-registrar": "registry.cn-hangzhou.aliyuncs.com/google_containers/csi-node-driver-registrar", + "registry.k8s.io/sig-storage/hostpathplugin": "registry.cn-hangzhou.aliyuncs.com/google_containers/hostpathplugin", + "registry.k8s.io/sig-storage/livenessprobe": "registry.cn-hangzhou.aliyuncs.com/google_containers/livenessprobe", + "registry.k8s.io/sig-storage/csi-resizer": "registry.cn-hangzhou.aliyuncs.com/google_containers/csi-resizer", + "registry.k8s.io/sig-storage/csi-snapshotter": "registry.cn-hangzhou.aliyuncs.com/google_containers/csi-snapshotter", + "registry.k8s.io/sig-storage/csi-provisioner": "registry.cn-hangzhou.aliyuncs.com/google_containers/csi-provisioner", + "docker.io/registry": "registry.cn-hangzhou.aliyuncs.com/google_containers/registry", + "docker.io/coredns/coredns": "registry.cn-hangzhou.aliyuncs.com/google_containers/coredns", + "docker.io/kindest/kindnetd": "registry.cn-hangzhou.aliyuncs.com/google_containers/kindnetd", + "registry.k8s.io/ingress-nginx/controller": "registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller", + "gcr.io/cloud-builders/gcs-fetcher": "registry.cn-hangzhou.aliyuncs.com/cloud-builders/gcs-fetcher", + "gcr.io/google-samples/freshpod": "registry.cn-hangzhou.aliyuncs.com/google_containers/freshpod", + "gcr.io/k8s-minikube/gvisor-addon": "registry.cn-hangzhou.aliyuncs.com/google_containers/gvisor-addon", + "gcr.io/k8s-minikube/kicbase": "registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase", + "gcr.io/k8s-minikube/storage-provisioner": "registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner", + "registry.k8s.io/addon-resizer": "registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer", + "registry.k8s.io/busybox": "registry.cn-hangzhou.aliyuncs.com/google_containers/busybox", + "registry.k8s.io/cluster-autoscaler": "registry.cn-hangzhou.aliyuncs.com/google_containers/cluster-autoscaler", + "registry.k8s.io/coredns/coredns": "registry.cn-hangzhou.aliyuncs.com/google_containers/coredns", + "registry.k8s.io/defaultbackend": "registry.cn-hangzhou.aliyuncs.com/google_containers/defaultbackend", + "registry.k8s.io/echoserver": "registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver", + "registry.k8s.io/elasticsearch": "registry.cn-hangzhou.aliyuncs.com/google_containers/elasticsearch", + "registry.k8s.io/etcd": "registry.cn-hangzhou.aliyuncs.com/google_containers/etcd", + "registry.k8s.io/etcd-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64", + "registry.k8s.io/exechealthz-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/exechealthz-amd64", + "registry.k8s.io/flannel-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/flannel-amd64", + "registry.k8s.io/fluentd-elasticsearch": "registry.cn-hangzhou.aliyuncs.com/google_containers/fluentd-elasticsearch", + "registry.k8s.io/heapster": "registry.cn-hangzhou.aliyuncs.com/google_containers/heapster", + "registry.k8s.io/heapster_grafana": "registry.cn-hangzhou.aliyuncs.com/google_containers/heapster_grafana", + "registry.k8s.io/heapster_influxdb": "registry.cn-hangzhou.aliyuncs.com/google_containers/heapster_influxdb", + "registry.k8s.io/heapster-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64", + "registry.k8s.io/heapster-grafana-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-grafana-amd64", + "registry.k8s.io/heapster-influxdb-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-influxdb-amd64", + "registry.k8s.io/k8s-dns-dnsmasq-nanny-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-dnsmasq-nanny-amd64", + "registry.k8s.io/k8s-dns-kube-dns-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-kube-dns-amd64", + "registry.k8s.io/k8s-dns-node-cache": "registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-node-cache", + "registry.k8s.io/k8s-dns-sidecar-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-sidecar-amd64", + "registry.k8s.io/kube-addon-manager": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-addon-manager", + "registry.k8s.io/kube-addon-manager-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-addon-manager-amd64", + "registry.k8s.io/kube-apiserver": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver", + "registry.k8s.io/kube-apiserver-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64", + "registry.k8s.io/kube-controller-manager": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager", + "registry.k8s.io/kube-controller-manager-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64", + "registry.k8s.io/kube-cross": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-cross", + "registry.k8s.io/kube-dnsmasq-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-dnsmasq-amd64", + "registry.k8s.io/kube-proxy": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy", + "registry.k8s.io/kube-proxy-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64", + "registry.k8s.io/kube-scheduler": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler", + "registry.k8s.io/kube-scheduler-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64", + "registry.k8s.io/kube-state-metrics": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-state-metrics", + "registry.k8s.io/kubedns-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/kubedns-amd64", + "registry.k8s.io/kubernetes-dashboard-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64", + "registry.k8s.io/metrics-server-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64", + "registry.k8s.io/minikube-nvidia-driver-installer": "registry.cn-hangzhou.aliyuncs.com/google_containers/minikube-nvidia-driver-installer", + "registry.k8s.io/mongodb-install": "registry.cn-hangzhou.aliyuncs.com/google_containers/mongodb-install", + "registry.k8s.io/nginx-slim": "registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-slim", + "registry.k8s.io/nvidia-gpu-device-plugin": "registry.cn-hangzhou.aliyuncs.com/google_containers/nvidia-gpu-device-plugin", + "registry.k8s.io/pause": "registry.cn-hangzhou.aliyuncs.com/google_containers/pause", + "registry.k8s.io/pause-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64", + "registry.k8s.io/spark": "registry.cn-hangzhou.aliyuncs.com/google_containers/spark", + "registry.k8s.io/spartakus-amd64": "registry.cn-hangzhou.aliyuncs.com/google_containers/spartakus-amd64", + "registry.k8s.io/zeppelin": "registry.cn-hangzhou.aliyuncs.com/google_containers/zeppelin", + "quay.io/coreos/configmap-reload": "registry.cn-hangzhou.aliyuncs.com/coreos_containers/configmap-reload", + "quay.io/coreos/grafana-watcher": "registry.cn-hangzhou.aliyuncs.com/coreos_containers/grafana-watcher", + "quay.io/coreos/hyperkube": "registry.cn-hangzhou.aliyuncs.com/coreos_containers/hyperkube", + "quay.io/coreos/kube-rbac-proxy": "registry.cn-hangzhou.aliyuncs.com/coreos_containers/kube-rbac-proxy", + "quay.io/coreos/kube-state-metrics": "registry.cn-hangzhou.aliyuncs.com/coreos_containers/kube-state-metrics", + "quay.io/coreos/monitoring-grafana": "registry.cn-hangzhou.aliyuncs.com/coreos_containers/monitoring-grafana", + "quay.io/coreos/prometheus-config-reloader": "registry.cn-hangzhou.aliyuncs.com/coreos_containers/prometheus-config-reloader", + "quay.io/coreos/prometheus-operator": "registry.cn-hangzhou.aliyuncs.com/coreos_containers/prometheus-operator", + "quay.io/kubernetes-ingress-controller/nginx-ingress-controller": "registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller", + "quay.io/kubernetes-service-catalog/service-catalog": "registry.cn-hangzhou.aliyuncs.com/kubernetes-service-catalog/service-catalog", + "quay.io/prometheus/alertmanager": "registry.cn-hangzhou.aliyuncs.com/google_containers/alertmanager", + "quay.io/prometheus/prometheus": "registry.cn-hangzhou.aliyuncs.com/google_containers/prometheus", + "registry.k8s.io/ingress-nginx/kube-webhook-certgen": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen", + "gcr.io/k8s-minikube/minikube-ingress-dns": "registry.cn-hangzhou.aliyuncs.com/google_containers/minikube-ingress-dns", + "gcr.io/google_containers/pause": "registry.cn-hangzhou.aliyuncs.com/google_containers/pause", + "registry.k8s.io/metrics-server/metrics-server": "registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server", + "gcr.io/google_containers/kube-registry-proxy": "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-registry-proxy" +} diff --git a/deploy/addons/ambassador/ambassador-operator-crds.yaml.tmpl b/deploy/addons/ambassador/ambassador-operator-crds.yaml similarity index 98% rename from deploy/addons/ambassador/ambassador-operator-crds.yaml.tmpl rename to deploy/addons/ambassador/ambassador-operator-crds.yaml index e8495d955111..b6a0d8a0f418 100644 --- a/deploy/addons/ambassador/ambassador-operator-crds.yaml.tmpl +++ b/deploy/addons/ambassador/ambassador-operator-crds.yaml @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: ambassadorinstallations.getambassador.io @@ -91,7 +91,7 @@ spec: instead of [AES](https://www.getambassador.io/docs/latest/topics/install/). Default is false which means it installs AES by default. TODO: 1. AES/AOSS is not installed and the user installs using `installOSS: - true`, then we straightaway install AOSS. 2. AOSS is installed via + true`, then we straight away install AOSS. 2. AOSS is installed via operator and the user sets `installOSS: false`, then we perform the migration as detailed here - https://www.getambassador.io/docs/latest/topics/install/upgrade-to-edge-stack/ 3. AES is installed and the user sets `installOSS: true`, then we diff --git a/deploy/addons/ambassador/ambassadorinstallation.yaml.tmpl b/deploy/addons/ambassador/ambassadorinstallation.yaml similarity index 100% rename from deploy/addons/ambassador/ambassadorinstallation.yaml.tmpl rename to deploy/addons/ambassador/ambassadorinstallation.yaml diff --git a/deploy/addons/assets.go b/deploy/addons/assets.go index 3fa5c6ced362..c58b114d7dbe 100644 --- a/deploy/addons/assets.go +++ b/deploy/addons/assets.go @@ -20,8 +20,7 @@ import "embed" var ( // AutoPauseAssets assets for auto-pause addon - //go:embed auto-pause/*.tmpl - //go:embed auto-pause/unpause.lua + //go:embed auto-pause/*.tmpl auto-pause/*.yaml auto-pause/unpause.lua AutoPauseAssets embed.FS // DashboardAssets assets for dashboard addon @@ -29,23 +28,23 @@ var ( DashboardAssets embed.FS // DefaultStorageClassAssets assets for default-storageclass addon - //go:embed storageclass/storageclass.yaml.tmpl + //go:embed storageclass/storageclass.yaml DefaultStorageClassAssets embed.FS // PodSecurityPolicyAssets assets for pod-security-policy addon - //go:embed pod-security-policy/pod-security-policy.yaml.tmpl + //go:embed pod-security-policy/pod-security-policy.yaml PodSecurityPolicyAssets embed.FS // StorageProvisionerAssets assets for storage-provisioner addon //go:embed storage-provisioner/storage-provisioner.yaml.tmpl StorageProvisionerAssets embed.FS - // StorageProvisionerGlusterAssets assets for storage-provisioner-gluster addon - //go:embed storage-provisioner-gluster/*.tmpl - StorageProvisionerGlusterAssets embed.FS + // StorageProvisionerRancherAssets assets for storage-provisioner-rancher addon + //go:embed storage-provisioner-rancher/*.tmpl + StorageProvisionerRancherAssets embed.FS // EfkAssets assets for efk addon - //go:embed efk/*.tmpl + //go:embed efk/*.tmpl efk/*.yaml EfkAssets embed.FS // IngressAssets assets for ingress addon @@ -57,23 +56,31 @@ var ( IstioProvisionerAssets embed.FS // IstioAssets assets for istio addon - //go:embed istio/istio-default-profile.yaml.tmpl + //go:embed istio/istio-default-profile.yaml IstioAssets embed.FS + // InspektorGadgetAssets assets for inspektor-gadget addon + //go:embed inspektor-gadget/*.tmpl + InspektorGadgetAssets embed.FS + + // KongAssets assets for kong addon + //go:embed kong/kong-ingress-controller.yaml.tmpl + KongAssets embed.FS + // KubevirtAssets assets for kubevirt addon //go:embed kubevirt/pod.yaml.tmpl KubevirtAssets embed.FS // MetricsServerAssets assets for metrics-server addon - //go:embed metrics-server/*.tmpl + //go:embed metrics-server/*.tmpl metrics-server/*.yaml MetricsServerAssets embed.FS // OlmAssets assets for olm addon - //go:embed olm/*.tmpl + //go:embed olm/*.tmpl olm/*.yaml OlmAssets embed.FS // RegistryAssets assets for registry addon - //go:embed registry/*.tmpl + //go:embed registry/*.tmpl registry/*.yaml RegistryAssets embed.FS // RegistryCredsAssets assets for registry-creds addon @@ -81,7 +88,7 @@ var ( RegistryCredsAssets embed.FS // RegistryAliasesAssets assets for registry-aliases addon - //go:embed registry-aliases/*.tmpl + //go:embed registry-aliases/*.tmpl registry-aliases/*.yaml RegistryAliasesAssets embed.FS // FreshpodAssets assets for freshpod addon @@ -96,18 +103,18 @@ var ( //go:embed gpu/nvidia-gpu-device-plugin.yaml.tmpl NvidiaGpuDevicePluginAssets embed.FS + // AmdGpuDevicePluginAssets assets for amd-gpu-device-plugin addon + //go:embed gpu/amd-gpu-device-plugin.yaml.tmpl + AmdGpuDevicePluginAssets embed.FS + // LogviewerAssets assets for logviewer addon - //go:embed logviewer/*.tmpl + //go:embed logviewer/*.tmpl logviewer/*.yaml LogviewerAssets embed.FS // GvisorAssets assets for gvisor addon - //go:embed gvisor/*.tmpl gvisor/*.toml + //go:embed gvisor/*.tmpl GvisorAssets embed.FS - // HelmTillerAssets assets for helm-tiller addon - //go:embed helm-tiller/*.tmpl - HelmTillerAssets embed.FS - // IngressDNSAssets assets for ingress-dns addon //go:embed ingress-dns/ingress-dns-pod.yaml.tmpl IngressDNSAssets embed.FS @@ -117,22 +124,58 @@ var ( MetallbAssets embed.FS // AmbassadorAssets assets for ambassador addon - //go:embed ambassador/*.tmpl + //go:embed ambassador/*.tmpl ambassador/*.yaml AmbassadorAssets embed.FS // GcpAuthAssets assets for gcp-auth addon - //go:embed gcp-auth/*.tmpl + //go:embed gcp-auth/*.tmpl gcp-auth/*.yaml GcpAuthAssets embed.FS + // VolcanoAssets assets for volcano addon + //go:embed volcano/*.tmpl + VolcanoAssets embed.FS + // VolumeSnapshotsAssets assets for volumesnapshots addon - //go:embed volumesnapshots/*.tmpl + //go:embed volumesnapshots/*.tmpl volumesnapshots/*.yaml VolumeSnapshotsAssets embed.FS // CsiHostpathDriverAssets assets for csi-hostpath-driver addon - //go:embed csi-hostpath-driver/deploy/*.tmpl csi-hostpath-driver/rbac/*.tmpl + //go:embed csi-hostpath-driver/deploy/*.tmpl csi-hostpath-driver/deploy/*.yaml csi-hostpath-driver/rbac/*.yaml CsiHostpathDriverAssets embed.FS // PortainerAssets assets for portainer addon //go:embed portainer/portainer.yaml.tmpl PortainerAssets embed.FS + + // AliyunMirror assets for aliyun_mirror.json + //go:embed aliyun_mirror.json + AliyunMirror embed.FS + + // InAccelAssets assets for inaccel addon + //go:embed inaccel/fpga-operator.yaml.tmpl + InAccelAssets embed.FS + + // HeadlampAssets assets for headlamp addon + //go:embed headlamp/*.yaml headlamp/*.tmpl + HeadlampAssets embed.FS + + // CloudSpanner assets for cloud-spanner addon + //go:embed cloud-spanner/*.tmpl + CloudSpanner embed.FS + + // Kubeflow assets for kubeflow addon + //go:embed kubeflow/*.yaml + Kubeflow embed.FS + + // NvidiaDevicePlugin assets for nvidia-device-plugin addon + //go:embed nvidia-device-plugin/*.tmpl + NvidiaDevicePlugin embed.FS + + // YakdAssets assets for yakd addon + //go:embed yakd/*.yaml yakd/*.tmpl + YakdAssets embed.FS + + // Kubetail assets for kubetail addon + //go:embed kubetail/*.yaml kubetail/*.tmpl + KubetailAssets embed.FS ) diff --git a/deploy/addons/auto-pause/Dockerfile b/deploy/addons/auto-pause/Dockerfile index cd217d9e2de2..e1d718951365 100644 --- a/deploy/addons/auto-pause/Dockerfile +++ b/deploy/addons/auto-pause/Dockerfile @@ -1,2 +1,9 @@ -FROM golang:1.8 -ADD auto-pause-hook /auto-pause-hook +FROM golang:1.25.5 AS builder +WORKDIR /app +COPY go.mod go.sum ./ +RUN go mod download +COPY ./ ./ +RUN GOOS=linux CGO_ENABLED=0 go build -a --ldflags '-extldflags "-static"' -tags netgo -installsuffix netgo -o auto-pause-hook cmd/auto-pause/auto-pause-hook/main.go cmd/auto-pause/auto-pause-hook/config.go cmd/auto-pause/auto-pause-hook/certs.go + +FROM scratch +COPY --from=builder /app/auto-pause-hook /auto-pause-hook diff --git a/deploy/addons/auto-pause/auto-pause.service.tmpl b/deploy/addons/auto-pause/auto-pause.service.tmpl index 0a5260a7b434..5e52966b1869 100644 --- a/deploy/addons/auto-pause/auto-pause.service.tmpl +++ b/deploy/addons/auto-pause/auto-pause.service.tmpl @@ -3,7 +3,7 @@ Description=Auto Pause Service [Service] Type=simple -ExecStart=/bin/auto-pause --container-runtime={{.ContainerRuntime}} +ExecStart=/bin/auto-pause --container-runtime={{.ContainerRuntime}} --interval={{.AutoPauseInterval}} Restart=always [Install] diff --git a/deploy/addons/auto-pause/auto-pause.yaml.tmpl b/deploy/addons/auto-pause/auto-pause.yaml similarity index 100% rename from deploy/addons/auto-pause/auto-pause.yaml.tmpl rename to deploy/addons/auto-pause/auto-pause.yaml diff --git a/deploy/addons/cloud-spanner/deployment.yaml.tmpl b/deploy/addons/cloud-spanner/deployment.yaml.tmpl new file mode 100644 index 000000000000..85e2500e2103 --- /dev/null +++ b/deploy/addons/cloud-spanner/deployment.yaml.tmpl @@ -0,0 +1,45 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cloud-spanner-emulator + labels: + app: cloud-spanner-emulator + gcp-auth-skip-secret: "true" + kubernetes.io/minikube-addons-endpoint: cloud-spanner +spec: + replicas: 1 + selector: + matchLabels: + app: cloud-spanner-emulator + template: + metadata: + labels: + app: cloud-spanner-emulator + spec: + containers: + - name: cloud-spanner-emulator + image: {{.CustomRegistries.CloudSpanner | default .ImageRepository | default .Registries.CloudSpanner}}{{.Images.CloudSpanner}} + imagePullPolicy: IfNotPresent + ports: + - containerPort: 9020 + name: http + - containerPort: 9010 + name: grpc + +--- +apiVersion: v1 +kind: Service +metadata: + name: cloud-spanner-emulator + labels: + app: cloud-spanner-emulator +spec: + type: NodePort + ports: + - port: 9020 + name: http + - port: 9010 + name: grpc + selector: + app: cloud-spanner-emulator diff --git a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-attacher.yaml.tmpl b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-attacher.yaml.tmpl index cf5a80154002..e49d56209610 100644 --- a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-attacher.yaml.tmpl +++ b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-attacher.yaml.tmpl @@ -38,25 +38,15 @@ spec: replicas: 1 selector: matchLabels: - app: csi-hostpath-attacher + app.kubernetes.io/name: csi-hostpath-attacher template: metadata: labels: - app: csi-hostpath-attacher + app.kubernetes.io/name: csi-hostpath-attacher addonmanager.kubernetes.io/mode: Reconcile kubernetes.io/minikube-addons: csi-hostpath-driver spec: - affinity: - podAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: app - operator: In - values: - - csi-hostpathplugin - topologyKey: kubernetes.io/hostname - serviceAccountName: csi-attacher + serviceAccount: csi-attacher containers: - name: csi-attacher image: {{.CustomRegistries.Attacher | default .ImageRepository | default .Registries.Attacher }}{{.Images.Attacher}} diff --git a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-driverinfo.yaml.tmpl b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-driverinfo.yaml similarity index 81% rename from deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-driverinfo.yaml.tmpl rename to deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-driverinfo.yaml index 4b2be01185d4..e509d234c20d 100644 --- a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-driverinfo.yaml.tmpl +++ b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-driverinfo.yaml @@ -27,3 +27,9 @@ spec: # To determine at runtime which mode a volume uses, pod info and its # "csi.storage.k8s.io/ephemeral" entry are needed. podInfoOnMount: true + # No attacher needed. + attachRequired: false + storageCapacity: true + # Kubernetes may use fsGroup to change permissions and ownership + # of the volume to match user requested fsGroup in the pod's SecurityPolicy + fsGroupPolicy: File diff --git a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl index b737e916ed1c..0975149ea701 100644 --- a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl +++ b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl @@ -16,64 +16,37 @@ # are needed only because of condition explained in # https://github.com/kubernetes/kubernetes/issues/69608 -kind: Service -apiVersion: v1 -metadata: - name: csi-hostpathplugin - namespace: kube-system - labels: - app: csi-hostpathplugin - addonmanager.kubernetes.io/mode: Reconcile -spec: - selector: - app: csi-hostpathplugin - ports: - - name: dummy - port: 12345 ---- -kind: StatefulSet +kind: DaemonSet apiVersion: apps/v1 metadata: name: csi-hostpathplugin namespace: kube-system labels: + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: plugin addonmanager.kubernetes.io/mode: Reconcile spec: - serviceName: "csi-hostpathplugin" - # One replica only: - # Host path driver only works when everything runs - # on a single node. We achieve that by starting it once and then - # co-locate all other pods via inter-pod affinity - replicas: 1 selector: matchLabels: - app: csi-hostpathplugin + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: plugin addonmanager.kubernetes.io/mode: Reconcile template: metadata: labels: - app: csi-hostpathplugin + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: plugin addonmanager.kubernetes.io/mode: Reconcile kubernetes.io/minikube-addons: csi-hostpath-driver spec: - serviceAccount: csi-external-health-monitor-controller + serviceAccount: csi-hostpathplugin-sa containers: - - name: csi-external-health-monitor-agent - image: {{.CustomRegistries.HostMonitorAgent | default .ImageRepository | default .Registries.HostMonitorAgent }}{{.Images.HostMonitorAgent}} - args: - - "--v=5" - - "--csi-address=$(ADDRESS)" - env: - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - - name: ADDRESS - value: /csi/csi.sock - imagePullPolicy: "IfNotPresent" - volumeMounts: - - name: socket-dir - mountPath: /csi - name: csi-external-health-monitor-controller image: {{.CustomRegistries.HostMonitorController | default .ImageRepository | default .Registries.HostMonitorController }}{{.Images.HostMonitorController}} args: @@ -163,6 +136,62 @@ spec: - --csi-address=/csi/csi.sock - --health-port=9898 + - name: csi-provisioner + image: {{.CustomRegistries.Provisioner | default .ImageRepository | default .Registries.Provisioner }}{{.Images.Provisioner}} + args: + - -v=5 + - --csi-address=/csi/csi.sock + - --feature-gates=Topology=true + - --enable-capacity + - --capacity-ownerref-level=0 # pod is owner + - --node-deployment=true + - --strict-topology=true + - --immediate-topology=false + - --worker-threads=5 + env: + - name: NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + securityContext: + # This is necessary only for systems with SELinux, where + # non-privileged sidecar containers cannot access unix domain socket + # created by privileged CSI driver container. + privileged: true + volumeMounts: + - mountPath: /csi + name: socket-dir + + - name: csi-snapshotter + image: {{.CustomRegistries.Snapshotter | default .ImageRepository | default .Registries.Snapshotter }}{{.Images.Snapshotter}} + args: + - -v=5 + - --csi-address=/csi/csi.sock + - --node-deployment + env: + - name: NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + securityContext: + # This is necessary only for systems with SELinux, where + # non-privileged sidecar containers cannot access unix domain socket + # created by privileged CSI driver container. + privileged: true + volumeMounts: + - mountPath: /csi + name: socket-dir + volumes: - hostPath: path: /var/lib/kubelet/plugins/csi-hostpath diff --git a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-provisioner.yaml.tmpl b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-provisioner.yaml.tmpl deleted file mode 100644 index b8c1acccc7df..000000000000 --- a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-provisioner.yaml.tmpl +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright 2018 The Kubernetes Authors All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -kind: Service -apiVersion: v1 -metadata: - name: csi-hostpath-provisioner - namespace: kube-system - labels: - app: csi-hostpath-provisioner - addonmanager.kubernetes.io/mode: Reconcile -spec: - selector: - app: csi-hostpath-provisioner - ports: - - name: dummy - port: 12345 - ---- -kind: StatefulSet -apiVersion: apps/v1 -metadata: - name: csi-hostpath-provisioner - namespace: kube-system - labels: - addonmanager.kubernetes.io/mode: Reconcile -spec: - serviceName: "csi-hostpath-provisioner" - replicas: 1 - selector: - matchLabels: - app: csi-hostpath-provisioner - template: - metadata: - labels: - app: csi-hostpath-provisioner - addonmanager.kubernetes.io/mode: Reconcile - kubernetes.io/minikube-addons: csi-hostpath-driver - spec: - affinity: - podAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: app - operator: In - values: - - csi-hostpathplugin - topologyKey: kubernetes.io/hostname - serviceAccountName: csi-provisioner - containers: - - name: csi-provisioner - image: {{.CustomRegistries.Provisioner | default .ImageRepository | default .Registries.Provisioner }}{{.Images.Provisioner}} - args: - - -v=5 - - --csi-address=/csi/csi.sock - - --feature-gates=Topology=true - securityContext: - # This is necessary only for systems with SELinux, where - # non-privileged sidecar containers cannot access unix domain socket - # created by privileged CSI driver container. - privileged: true - volumeMounts: - - mountPath: /csi - name: socket-dir - volumes: - - hostPath: - path: /var/lib/kubelet/plugins/csi-hostpath - type: DirectoryOrCreate - name: socket-dir diff --git a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-resizer.yaml.tmpl b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-resizer.yaml.tmpl index 7995ce80067f..e1270b6a709f 100644 --- a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-resizer.yaml.tmpl +++ b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-resizer.yaml.tmpl @@ -40,25 +40,15 @@ spec: replicas: 1 selector: matchLabels: - app: csi-hostpath-resizer + app.kubernetes.io/name: csi-hostpath-resizer template: metadata: labels: - app: csi-hostpath-resizer + app.kubernetes.io/name: csi-hostpath-resizer addonmanager.kubernetes.io/mode: Reconcile kubernetes.io/minikube-addons: csi-hostpath-driver spec: - affinity: - podAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: app - operator: In - values: - - csi-hostpathplugin - topologyKey: kubernetes.io/hostname - serviceAccountName: csi-resizer + serviceAccount: csi-resizer containers: - name: csi-resizer image: {{.CustomRegistries.Resizer | default .ImageRepository | default .Registries.Resizer }}{{.Images.Resizer}} diff --git a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-snapshotter.yaml.tmpl b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-snapshotter.yaml.tmpl deleted file mode 100644 index 708dd6119408..000000000000 --- a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-snapshotter.yaml.tmpl +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright 2018 The Kubernetes Authors All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -kind: Service -apiVersion: v1 -metadata: - name: csi-hostpath-snapshotter - namespace: kube-system - labels: - app: csi-hostpath-snapshotter - addonmanager.kubernetes.io/mode: Reconcile -spec: - selector: - app: csi-hostpath-snapshotter - ports: - - name: dummy - port: 12345 - ---- -kind: StatefulSet -apiVersion: apps/v1 -metadata: - name: csi-hostpath-snapshotter - namespace: kube-system - labels: - addonmanager.kubernetes.io/mode: Reconcile -spec: - serviceName: "csi-hostpath-snapshotter" - replicas: 1 - selector: - matchLabels: - app: csi-hostpath-snapshotter - addonmanager.kubernetes.io/mode: Reconcile - template: - metadata: - labels: - app: csi-hostpath-snapshotter - addonmanager.kubernetes.io/mode: Reconcile - kubernetes.io/minikube-addons: csi-hostpath-driver - spec: - affinity: - podAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: app - operator: In - values: - - csi-hostpathplugin - topologyKey: kubernetes.io/hostname - serviceAccount: csi-snapshotter - containers: - - name: csi-snapshotter - image: {{.CustomRegistries.Snapshotter | default .ImageRepository | default .Registries.Snapshotter }}{{.Images.Snapshotter}} - args: - - -v=5 - - --csi-address=/csi/csi.sock - securityContext: - # This is necessary only for systems with SELinux, where - # non-privileged sidecar containers cannot access unix domain socket - # created by privileged CSI driver container. - privileged: true - volumeMounts: - - mountPath: /csi - name: socket-dir - volumes: - - hostPath: - path: /var/lib/kubelet/plugins/csi-hostpath - type: DirectoryOrCreate - name: socket-dir diff --git a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-storageclass.yaml.tmpl b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-storageclass.yaml similarity index 100% rename from deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-storageclass.yaml.tmpl rename to deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-storageclass.yaml diff --git a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-attacher.yaml.tmpl b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-attacher.yaml similarity index 100% rename from deploy/addons/csi-hostpath-driver/rbac/rbac-external-attacher.yaml.tmpl rename to deploy/addons/csi-hostpath-driver/rbac/rbac-external-attacher.yaml diff --git a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-agent.yaml.tmpl b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-agent.yaml.tmpl deleted file mode 100644 index e2cb6fc82d3c..000000000000 --- a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-agent.yaml.tmpl +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright 2018 The Kubernetes Authors All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# This YAML file contains all RBAC objects that are necessary to run external -# CSI health monitor agent. -# -# In production, each CSI driver deployment has to be customized: -# - to avoid conflicts, use non-default namespace and different names -# for non-namespaced entities like the ClusterRole -# - decide whether the deployment replicates the external CSI -# health monitor agent, in which case leadership election must be enabled; -# this influences the RBAC setup, see below - -apiVersion: v1 -kind: ServiceAccount -metadata: - name: csi-external-health-monitor-agent - namespace: kube-system - ---- -# Health monitor agent must be able to work with PVs, PVCs, Nodes and Pods -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: external-health-monitor-agent-runner -rules: - - apiGroups: [""] - resources: ["persistentvolumes"] - verbs: ["get", "list", "watch"] - - apiGroups: [""] - resources: ["persistentvolumeclaims"] - verbs: ["get", "list", "watch"] - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get", "list", "watch"] - - apiGroups: [""] - resources: ["pods"] - verbs: ["get", "list", "watch"] - - apiGroups: [""] - resources: ["events"] - verbs: ["get", "list", "watch", "create", "patch"] - ---- -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: csi-external-health-monitor-agent-role -subjects: - - kind: ServiceAccount - name: csi-external-health-monitor-agent - namespace: kube-system -roleRef: - kind: ClusterRole - name: external-health-monitor-agent-runner - apiGroup: rbac.authorization.k8s.io \ No newline at end of file diff --git a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-controller.yaml.tmpl b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-controller.yaml similarity index 98% rename from deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-controller.yaml.tmpl rename to deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-controller.yaml index 0cc7a064557c..19c8eda4ae8b 100644 --- a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-controller.yaml.tmpl +++ b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-health-monitor-controller.yaml @@ -91,4 +91,4 @@ subjects: roleRef: kind: Role name: external-health-monitor-controller-cfg - apiGroup: rbac.authorization.k8s.io \ No newline at end of file + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-provisioner.yaml.tmpl b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-provisioner.yaml similarity index 80% rename from deploy/addons/csi-hostpath-driver/rbac/rbac-external-provisioner.yaml.tmpl rename to deploy/addons/csi-hostpath-driver/rbac/rbac-external-provisioner.yaml index 70f14c2dc70c..649176901248 100644 --- a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-provisioner.yaml.tmpl +++ b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-provisioner.yaml @@ -63,6 +63,10 @@ rules: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "watch"] + # Access to volumeattachments is only needed when the CSI driver + # has the PUBLISH_UNPUBLISH_VOLUME controller capability. + # In that case, external-provisioner will watch volumeattachments + # to determine when it is safe to delete a volume. - apiGroups: ["storage.k8s.io"] resources: ["volumeattachments"] verbs: ["get", "list", "watch"] @@ -92,12 +96,24 @@ metadata: rules: # Only one of the following rules for endpoints or leases is required based on # what is set for `--leader-election-type`. Endpoints are deprecated in favor of Leases. -- apiGroups: [""] - resources: ["endpoints"] - verbs: ["get", "watch", "list", "delete", "update", "create"] - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["get", "watch", "list", "delete", "update", "create"] +# Permissions for CSIStorageCapacity are only needed enabling the publishing +# of storage capacity information. +- apiGroups: ["storage.k8s.io"] + resources: ["csistoragecapacities"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] +# The GET permissions below are needed for walking up the ownership chain +# for CSIStorageCapacity. They are sufficient for deployment via +# StatefulSet (only needs to get Pod) and Deployment (needs to get +# Pod and then ReplicaSet to find the Deployment). +- apiGroups: [""] + resources: ["pods"] + verbs: ["get"] +- apiGroups: ["apps"] + resources: ["replicasets"] + verbs: ["get"] --- kind: RoleBinding diff --git a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-resizer.yaml.tmpl b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-resizer.yaml similarity index 97% rename from deploy/addons/csi-hostpath-driver/rbac/rbac-external-resizer.yaml.tmpl rename to deploy/addons/csi-hostpath-driver/rbac/rbac-external-resizer.yaml index bf0e1ebfd63e..44cc536ebaf0 100644 --- a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-resizer.yaml.tmpl +++ b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-resizer.yaml @@ -71,7 +71,7 @@ roleRef: apiGroup: rbac.authorization.k8s.io --- -# Resizer must be able to work with end point in current namespace +# Resizer must be able to work with `leases` in current namespace # if (and only if) leadership election is enabled kind: Role apiVersion: rbac.authorization.k8s.io/v1 diff --git a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-snapshotter.yaml.tmpl b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-snapshotter.yaml similarity index 58% rename from deploy/addons/csi-hostpath-driver/rbac/rbac-external-snapshotter.yaml.tmpl rename to deploy/addons/csi-hostpath-driver/rbac/rbac-external-snapshotter.yaml index 74880728341a..5d9507cef5a3 100644 --- a/deploy/addons/csi-hostpath-driver/rbac/rbac-external-snapshotter.yaml.tmpl +++ b/deploy/addons/csi-hostpath-driver/rbac/rbac-external-snapshotter.yaml @@ -12,12 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -# RBAC file for the snapshot controller. + +# Together with the RBAC file for external-provisioner, this YAML file +# contains all RBAC objects that are necessary to run external CSI +# snapshotter. # -# The snapshot controller implements the control loop for CSI snapshot functionality. -# It should be installed as part of the base Kubernetes distribution in an appropriate -# namespace for components implementing base system functionality. For installing with -# Vanilla Kubernetes, kube-system makes sense for the namespace. +# In production, each CSI driver deployment has to be customized: +# - to avoid conflicts, use non-default namespace and different names +# for non-namespaced entities like the ClusterRole +# - optionally rename the non-namespaced ClusterRole if there +# are conflicts with other deployments apiVersion: v1 kind: ServiceAccount @@ -30,35 +34,27 @@ kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: # rename if there are conflicts - name: csi-snapshotter-runner + name: external-snapshotter-runner rules: - - apiGroups: [""] - resources: ["persistentvolumes"] - verbs: ["get", "list", "watch"] - - apiGroups: [""] - resources: ["persistentvolumeclaims"] - verbs: ["get", "list", "watch", "update"] - - apiGroups: ["storage.k8s.io"] - resources: ["storageclasses"] - verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] + # Secret permission is optional. + # Enable it if your driver needs secret. + # For example, `csi.storage.k8s.io/snapshotter-secret-name` is set in VolumeSnapshotClass. + # See https://kubernetes-csi.github.io/docs/secrets-and-credentials.html for more details. + # - apiGroups: [""] + # resources: ["secrets"] + # verbs: ["get", "list"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshotclasses"] verbs: ["get", "list", "watch"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshotcontents"] - verbs: ["create", "get", "list", "watch", "update", "delete"] + verbs: ["get", "list", "watch", "update", "patch"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshotcontents/status"] - verbs: ["update"] - - apiGroups: ["snapshot.storage.k8s.io"] - resources: ["volumesnapshots"] - verbs: ["get", "list", "watch", "update"] - - apiGroups: ["snapshot.storage.k8s.io"] - resources: ["volumesnapshots/status"] - verbs: ["update"] + verbs: ["update", "patch"] --- kind: ClusterRoleBinding @@ -68,11 +64,12 @@ metadata: subjects: - kind: ServiceAccount name: csi-snapshotter + # replace with non-default namespace name namespace: kube-system roleRef: kind: ClusterRole # change the name also here if the ClusterRole gets renamed - name: csi-snapshotter-runner + name: external-snapshotter-runner apiGroup: rbac.authorization.k8s.io --- @@ -80,17 +77,17 @@ kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: kube-system - name: csi-snapshotter-leaderelection + name: external-snapshotter-leaderelection rules: - - apiGroups: ["coordination.k8s.io"] - resources: ["leases"] - verbs: ["get", "watch", "list", "delete", "update", "create"] +- apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "watch", "list", "delete", "update", "create"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: - name: csi-snapshotter-leaderelection + name: external-snapshotter-leaderelection namespace: kube-system subjects: - kind: ServiceAccount @@ -98,5 +95,5 @@ subjects: namespace: kube-system roleRef: kind: Role - name: csi-snapshotter-leaderelection - apiGroup: rbac.authorization.k8s.io \ No newline at end of file + name: external-snapshotter-leaderelection + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/addons/csi-hostpath-driver/rbac/rbac-hostpath.yaml b/deploy/addons/csi-hostpath-driver/rbac/rbac-hostpath.yaml new file mode 100644 index 000000000000..7c93d9bfa5b0 --- /dev/null +++ b/deploy/addons/csi-hostpath-driver/rbac/rbac-hostpath.yaml @@ -0,0 +1,137 @@ +# Copyright 2023 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# All of the individual sidecar RBAC roles get bound +# to this account. +kind: ServiceAccount +apiVersion: v1 +metadata: + name: csi-hostpathplugin-sa + namespace: kube-system + labels: + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: serviceaccount +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: provisioner-cluster-role + name: csi-hostpathplugin-provisioner-cluster-role +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: external-provisioner-runner +subjects: +- kind: ServiceAccount + name: csi-hostpathplugin-sa + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: snapshotter-cluster-role + name: csi-hostpathplugin-snapshotter-cluster-role +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: external-snapshotter-runner +subjects: +- kind: ServiceAccount + name: csi-hostpathplugin-sa + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: health-monitor-cluster-role + name: csi-hostpathplugin-health-monitor-cluster-role +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: external-health-monitor-controller-runner +subjects: +- kind: ServiceAccount + name: csi-hostpathplugin-sa + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: provisioner-role + name: csi-hostpathplugin-provisioner-role + namespace: kube-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: external-provisioner-cfg +subjects: +- kind: ServiceAccount + name: csi-hostpathplugin-sa + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: snapshotter-role + name: csi-hostpathplugin-snapshotter-role + namespace: kube-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: external-snapshotter-leaderelection +subjects: +- kind: ServiceAccount + name: csi-hostpathplugin-sa + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/instance: hostpath.csi.k8s.io + app.kubernetes.io/part-of: csi-driver-host-path + app.kubernetes.io/name: csi-hostpathplugin + app.kubernetes.io/component: snapshotter-role + name: csi-hostpathplugin-health-monitor-role + namespace: kube-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: external-health-monitor-controller-cfg +subjects: +- kind: ServiceAccount + name: csi-hostpathplugin-sa + namespace: kube-system diff --git a/deploy/addons/dashboard/dashboard-dp.yaml.tmpl b/deploy/addons/dashboard/dashboard-dp.yaml.tmpl index ef76cdd6ad04..eb4da1ec181b 100644 --- a/deploy/addons/dashboard/dashboard-dp.yaml.tmpl +++ b/deploy/addons/dashboard/dashboard-dp.yaml.tmpl @@ -57,7 +57,7 @@ spec: runAsGroup: 2001 serviceAccountName: kubernetes-dashboard nodeSelector: - "beta.kubernetes.io/os": linux + "kubernetes.io/os": linux # Comment the following tolerations if Dashboard must not be deployed on master tolerations: - key: node-role.kubernetes.io/master @@ -123,7 +123,7 @@ spec: emptyDir: {} serviceAccountName: kubernetes-dashboard nodeSelector: - "beta.kubernetes.io/os": linux + "kubernetes.io/os": linux # Comment the following tolerations if Dashboard must not be deployed on master tolerations: - key: node-role.kubernetes.io/master diff --git a/deploy/addons/efk/elasticsearch-rc.yaml.tmpl b/deploy/addons/efk/elasticsearch-rc.yaml.tmpl index 466891219f87..ca5a49f283a5 100644 --- a/deploy/addons/efk/elasticsearch-rc.yaml.tmpl +++ b/deploy/addons/efk/elasticsearch-rc.yaml.tmpl @@ -12,8 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -apiVersion: v1 -kind: ReplicationController +apiVersion: apps/v1 +kind: Deployment metadata: name: elasticsearch-logging namespace: kube-system @@ -24,12 +24,15 @@ metadata: spec: replicas: 1 selector: - k8s-app: elasticsearch-logging - addonmanager.kubernetes.io/mode: Reconcile + matchLabels: + k8s-app: elasticsearch-logging + kubernetes.io/minikube-addons: efk + addonmanager.kubernetes.io/mode: Reconcile template: metadata: labels: k8s-app: elasticsearch-logging + kubernetes.io/minikube-addons: efk addonmanager.kubernetes.io/mode: Reconcile spec: containers: diff --git a/deploy/addons/efk/elasticsearch-svc.yaml.tmpl b/deploy/addons/efk/elasticsearch-svc.yaml similarity index 100% rename from deploy/addons/efk/elasticsearch-svc.yaml.tmpl rename to deploy/addons/efk/elasticsearch-svc.yaml diff --git a/deploy/addons/efk/fluentd-es-configmap.yaml.tmpl b/deploy/addons/efk/fluentd-es-configmap.yaml similarity index 100% rename from deploy/addons/efk/fluentd-es-configmap.yaml.tmpl rename to deploy/addons/efk/fluentd-es-configmap.yaml diff --git a/deploy/addons/efk/fluentd-es-rc.yaml.tmpl b/deploy/addons/efk/fluentd-es-rc.yaml.tmpl index d43282982c5e..8cc1c8fb8eeb 100644 --- a/deploy/addons/efk/fluentd-es-rc.yaml.tmpl +++ b/deploy/addons/efk/fluentd-es-rc.yaml.tmpl @@ -12,8 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -apiVersion: v1 -kind: ReplicationController +apiVersion: apps/v1 +kind: Deployment metadata: name: fluentd-es namespace: kube-system @@ -23,10 +23,16 @@ metadata: addonmanager.kubernetes.io/mode: Reconcile spec: replicas: 1 + selector: + matchLabels: + k8s-app: fluentd-es + kubernetes.io/minikube-addons: efk + addonmanager.kubernetes.io/mode: Reconcile template: metadata: labels: k8s-app: fluentd-es + kubernetes.io/minikube-addons: efk addonmanager.kubernetes.io/mode: Reconcile spec: containers: diff --git a/deploy/addons/efk/kibana-rc.yaml.tmpl b/deploy/addons/efk/kibana-rc.yaml.tmpl index ed541e49b08f..a9d289e641b4 100644 --- a/deploy/addons/efk/kibana-rc.yaml.tmpl +++ b/deploy/addons/efk/kibana-rc.yaml.tmpl @@ -12,8 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -apiVersion: v1 -kind: ReplicationController +apiVersion: apps/v1 +kind: Deployment metadata: name: kibana-logging namespace: kube-system @@ -24,12 +24,15 @@ metadata: spec: replicas: 1 selector: + matchLabels: k8s-app: kibana-logging + kubernetes.io/minikube-addons: efk addonmanager.kubernetes.io/mode: Reconcile template: metadata: labels: k8s-app: kibana-logging + kubernetes.io/minikube-addons: efk addonmanager.kubernetes.io/mode: Reconcile spec: containers: diff --git a/deploy/addons/efk/kibana-svc.yaml.tmpl b/deploy/addons/efk/kibana-svc.yaml similarity index 100% rename from deploy/addons/efk/kibana-svc.yaml.tmpl rename to deploy/addons/efk/kibana-svc.yaml diff --git a/deploy/addons/freshpod/freshpod-rc.yaml.tmpl b/deploy/addons/freshpod/freshpod-rc.yaml.tmpl index 70e380794017..30c413776564 100644 --- a/deploy/addons/freshpod/freshpod-rc.yaml.tmpl +++ b/deploy/addons/freshpod/freshpod-rc.yaml.tmpl @@ -12,8 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -apiVersion: v1 -kind: ReplicationController +apiVersion: apps/v1 +kind: Deployment metadata: name: freshpod namespace: kube-system @@ -24,12 +24,15 @@ metadata: spec: replicas: 1 selector: - k8s-app: freshpod - addonmanager.kubernetes.io/mode: Reconcile + matchLabels: + k8s-app: freshpod + kubernetes.io/minikube-addons: freshpod + addonmanager.kubernetes.io/mode: Reconcile template: metadata: labels: k8s-app: freshpod + kubernetes.io/minikube-addons: freshpod addonmanager.kubernetes.io/mode: Reconcile spec: containers: diff --git a/deploy/addons/gcp-auth/gcp-auth-ns.yaml.tmpl b/deploy/addons/gcp-auth/gcp-auth-ns.yaml similarity index 100% rename from deploy/addons/gcp-auth/gcp-auth-ns.yaml.tmpl rename to deploy/addons/gcp-auth/gcp-auth-ns.yaml diff --git a/deploy/addons/gcp-auth/gcp-auth-service.yaml.tmpl b/deploy/addons/gcp-auth/gcp-auth-service.yaml similarity index 95% rename from deploy/addons/gcp-auth/gcp-auth-service.yaml.tmpl rename to deploy/addons/gcp-auth/gcp-auth-service.yaml index 4a8b5144f6f7..fa79bafe3331 100644 --- a/deploy/addons/gcp-auth/gcp-auth-service.yaml.tmpl +++ b/deploy/addons/gcp-auth/gcp-auth-service.yaml @@ -19,7 +19,8 @@ metadata: namespace: gcp-auth spec: ports: - - port: 443 + - name: https + port: 443 targetPort: 8443 protocol: TCP selector: diff --git a/deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl.tmpl b/deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl similarity index 78% rename from deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl.tmpl rename to deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl index 3923a5ed75c2..86b0615757f0 100644 --- a/deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl.tmpl +++ b/deploy/addons/gcp-auth/gcp-auth-webhook.yaml.tmpl @@ -1,4 +1,4 @@ -# Copyright 2017 The Kubernetes Authors. +# Copyright 2021 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -32,6 +31,7 @@ rules: - list - get - create + - delete - apiGroups: - admissionregistration.k8s.io resources: @@ -39,6 +39,13 @@ rules: verbs: - get - update + - apiGroups: + - '' + resources: + - namespaces + verbs: + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 @@ -61,6 +68,7 @@ metadata: name: gcp-auth-certs-create namespace: gcp-auth spec: + ttlSecondsAfterFinished: 30 template: metadata: name: gcp-auth-certs-create @@ -68,7 +76,7 @@ spec: serviceAccountName: minikube-gcp-auth-certs containers: - name: create - image: {{.CustomRegistries.KubeWebhookCertgen | default .ImageRepository | default .Registries.KubeWebhookCertgen }}{{.Images.KubeWebhookCertgen}} + image: {{.CustomRegistries.KubeWebhookCertgen | default .ImageRepository | default .Registries.KubeWebhookCertgen}}{{.Images.KubeWebhookCertgen}} imagePullPolicy: IfNotPresent args: - create @@ -92,10 +100,16 @@ spec: app: gcp-auth kubernetes.io/minikube-addons: gcp-auth spec: + serviceAccountName: minikube-gcp-auth-certs containers: - name: gcp-auth - image: {{.CustomRegistries.GCPAuthWebhook | default .ImageRepository | default .Registries.GCPAuthWebhook }}{{.Images.GCPAuthWebhook}} + image: {{.CustomRegistries.GCPAuthWebhook | default .ImageRepository | default .Registries.GCPAuthWebhook}}{{.Images.GCPAuthWebhook}} imagePullPolicy: IfNotPresent + env: + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /google-app-creds.json + - name: MOCK_GOOGLE_TOKEN + value: "{{.Environment.MockGoogleToken}}" ports: - containerPort: 8443 volumeMounts: @@ -105,6 +119,9 @@ spec: - name: gcp-project mountPath: /var/lib/minikube/google_cloud_project readOnly: true + - name: gcp-creds + mountPath: /google-app-creds.json + readOnly: true volumes: - name: webhook-certs secret: @@ -113,6 +130,10 @@ spec: hostPath: path: /var/lib/minikube/google_cloud_project type: File + - name: gcp-creds + hostPath: + path: /var/lib/minikube/google_application_credentials.json + type: File --- apiVersion: batch/v1 kind: Job @@ -120,6 +141,7 @@ metadata: name: gcp-auth-certs-patch namespace: gcp-auth spec: + ttlSecondsAfterFinished: 30 template: metadata: name: gcp-auth-certs-patch @@ -127,7 +149,7 @@ spec: serviceAccountName: minikube-gcp-auth-certs containers: - name: patch - image: {{.CustomRegistries.KubeWebhookCertgen | default .ImageRepository | default .Registries.KubeWebhookCertgen }}{{.Images.KubeWebhookCertgen}} + image: {{.CustomRegistries.KubeWebhookCertgen | default .ImageRepository | default .Registries.KubeWebhookCertgen}}{{.Images.KubeWebhookCertgen}} imagePullPolicy: IfNotPresent args: - patch @@ -183,4 +205,4 @@ webhooks: apiGroups: ["*"] apiVersions: ["*"] resources: ["serviceaccounts"] - scope: "*" \ No newline at end of file + scope: "*" diff --git a/deploy/addons/gpu/amd-gpu-device-plugin.yaml.tmpl b/deploy/addons/gpu/amd-gpu-device-plugin.yaml.tmpl new file mode 100644 index 000000000000..12bffa56a350 --- /dev/null +++ b/deploy/addons/gpu/amd-gpu-device-plugin.yaml.tmpl @@ -0,0 +1,60 @@ +# Copyright 2024 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: amd-gpu-device-plugin + namespace: kube-system + labels: + k8s-app: amd-gpu-device-plugin + kubernetes.io/minikube-addons: amd-gpu-device-plugin + addonmanager.kubernetes.io/mode: Reconcile +spec: + selector: + matchLabels: + k8s-app: amd-gpu-device-plugin + template: + metadata: + labels: + name: amd-gpu-device-plugin + k8s-app: amd-gpu-device-plugin + spec: + nodeSelector: + kubernetes.io/arch: amd64 + priorityClassName: system-node-critical + tolerations: + - key: CriticalAddonsOnly + operator: Exists + volumes: + - name: dp + hostPath: + path: /var/lib/kubelet/device-plugins + - name: sys + hostPath: + path: /sys + containers: + - image: {{.CustomRegistries.AmdDevicePlugin | default .ImageRepository | default .Registries.AmdDevicePlugin }}{{.Images.AmdDevicePlugin}} + name: amd-gpu-device-plugin + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: ["ALL"] + volumeMounts: + - name: dp + mountPath: /var/lib/kubelet/device-plugins + - name: sys + mountPath: /sys + updateStrategy: + type: RollingUpdate diff --git a/deploy/addons/gpu/nvidia-driver-installer.yaml.tmpl b/deploy/addons/gpu/nvidia-driver-installer.yaml.tmpl index 0c4978a82685..83dc631750c7 100644 --- a/deploy/addons/gpu/nvidia-driver-installer.yaml.tmpl +++ b/deploy/addons/gpu/nvidia-driver-installer.yaml.tmpl @@ -64,6 +64,11 @@ spec: value: /usr/local/nvidia - name: ROOT_MOUNT_DIR value: /root + - name: NVIDIA_DRIVER_VERSION + value: "510.60.02" + # hack to not have to change https://github.com/GoogleCloudPlatform/container-engine-accelerators/blob/master/nvidia-driver-installer/minikube/entrypoint.sh + command: ["/bin/sh"] + args: ["-c", "sed -i 's|make modules_prepare|&;ln -s /root/lib/modules/${KERNEL_VERSION}/Module.symvers|' /entrypoint.sh;exec /entrypoint.sh"] volumeMounts: - name: nvidia-install-dir-host mountPath: /usr/local/nvidia @@ -72,5 +77,5 @@ spec: - name: root-mount mountPath: /root containers: - - image: "{{default "k8s.gcr.io" .ImageRepository}}/{{.Images.Pause}}" + - image: "{{default "registry.k8s.io" .ImageRepository}}/{{.Images.Pause}}" name: pause diff --git a/deploy/addons/gpu/nvidia-gpu-device-plugin.yaml.tmpl b/deploy/addons/gpu/nvidia-gpu-device-plugin.yaml.tmpl index e1e695866e11..0ec4cd4fff99 100644 --- a/deploy/addons/gpu/nvidia-gpu-device-plugin.yaml.tmpl +++ b/deploy/addons/gpu/nvidia-gpu-device-plugin.yaml.tmpl @@ -29,8 +29,6 @@ spec: metadata: labels: k8s-app: nvidia-gpu-device-plugin - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' spec: priorityClassName: system-node-critical tolerations: @@ -42,9 +40,12 @@ spec: - name: device-plugin hostPath: path: /var/lib/kubelet/device-plugins + - name: dev + hostPath: + path: /dev containers: - image: {{.CustomRegistries.NvidiaDevicePlugin | default .ImageRepository | default .Registries.NvidiaDevicePlugin }}{{.Images.NvidiaDevicePlugin}} - command: ["/usr/bin/nvidia-device-plugin", "-logtostderr"] + command: ["/usr/bin/nvidia-gpu-device-plugin", "-logtostderr"] name: nvidia-gpu-device-plugin resources: requests: @@ -56,6 +57,8 @@ spec: drop: ["ALL"] volumeMounts: - name: device-plugin - mountPath: /var/lib/kubelet/device-plugins + mountPath: /device-plugin + - name: dev + mountPath: /dev updateStrategy: type: RollingUpdate diff --git a/deploy/addons/gvisor/README.md b/deploy/addons/gvisor/README.md index d6414715b6f4..66e39e60b9f0 100644 --- a/deploy/addons/gvisor/README.md +++ b/deploy/addons/gvisor/README.md @@ -1,8 +1,8 @@ ## gVisor Addon -[gVisor](https://gvisor.dev/), a sandboxed container runtime, allows users to securely run pods with untrusted workloads within Minikube. +[gVisor](https://gvisor.dev/), a sandboxed container runtime, allows users to securely run pods with untrusted workloads within minikube. -### Starting Minikube -gVisor depends on the containerd runtime to run in Minikube. +### Starting minikube +gVisor depends on the containerd runtime to run in minikube. When starting minikube, specify the following flags, along with any additional desired flags: ```shell @@ -29,7 +29,7 @@ NAME CREATED AT runtimeclass.node.k8s.io/gvisor 2019-06-15T04:35:09Z ``` -Once the pod has status `Running`, gVisor is enabled in Minikube. +Once the pod has status `Running`, gVisor is enabled in minikube. ### Running pods in gVisor @@ -71,4 +71,4 @@ NAME READY STATUS RESTARTS AGE gvisor 1/1 Terminating 0 5m ``` -_Note: Once gVisor is disabled, any pod with the `gvisor` Runtime Class or `io.kubernetes.cri.untrusted-workload` annotation will fail with a FailedCreatePodSandBox error._ +_Note: Once gVisor is disabled, any pod with the `gvisor` Runtime Class will fail with a FailedCreatePodSandBox error._ diff --git a/deploy/addons/gvisor/gvisor-config.toml b/deploy/addons/gvisor/gvisor-config.toml deleted file mode 100644 index bcf12b25b4f3..000000000000 --- a/deploy/addons/gvisor/gvisor-config.toml +++ /dev/null @@ -1,68 +0,0 @@ -root = "/var/lib/containerd" -state = "/run/containerd" -oom_score = 0 - -[grpc] - address = "/run/containerd/containerd.sock" - uid = 0 - gid = 0 - max_recv_message_size = 16777216 - max_send_message_size = 16777216 - -[debug] - address = "" - uid = 0 - gid = 0 - level = "" - -[metrics] - address = "" - grpc_histogram = false - -[cgroup] - path = "" - -[plugins] - [plugins.cgroups] - no_prometheus = false - [plugins.cri] - stream_server_address = "" - stream_server_port = "10010" - enable_selinux = false - sandbox_image = "{{default "k8s.gcr.io" .ImageRepository}}/pause:3.1" - stats_collect_period = 10 - systemd_cgroup = false - enable_tls_streaming = false - max_container_log_line_size = 16384 - [plugins.cri.containerd] - snapshotter = "overlayfs" - no_pivot = false - [plugins.cri.containerd.default_runtime] - runtime_type = "io.containerd.runtime.v1.linux" - runtime_engine = "" - runtime_root = "" - [plugins.cri.containerd.runtimes.untrusted] - runtime_type = "io.containerd.runsc.v1" - [plugins.cri.containerd.runtimes.runsc] - runtime_type = "io.containerd.runsc.v1" - [plugins.cri.cni] - bin_dir = "/opt/cni/bin" - conf_dir = "/etc/cni/net.d" - conf_template = "" - [plugins.cri.registry] - [plugins.cri.registry.mirrors] - [plugins.cri.registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] - [plugins.diff-service] - default = ["walking"] - [plugins.linux] - runtime = "runc" - runtime_root = "" - no_shim = false - shim_debug = true - [plugins.scheduler] - pause_threshold = 0.02 - deletion_threshold = 0 - mutation_threshold = 100 - schedule_delay = "0s" - startup_delay = "100ms" diff --git a/deploy/addons/gvisor/gvisor-runtimeclass.yaml.tmpl b/deploy/addons/gvisor/gvisor-runtimeclass.yaml.tmpl index f37fa4a9ba64..6229c2a2d2fc 100644 --- a/deploy/addons/gvisor/gvisor-runtimeclass.yaml.tmpl +++ b/deploy/addons/gvisor/gvisor-runtimeclass.yaml.tmpl @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -apiVersion: node.k8s.io/v1beta1 +apiVersion: node.k8s.io/v1{{if .LegacyRuntimeClass}}beta1{{end}} kind: RuntimeClass metadata: name: gvisor diff --git a/deploy/addons/headlamp/headlamp-clusterrolebinding.yaml b/deploy/addons/headlamp/headlamp-clusterrolebinding.yaml new file mode 100644 index 000000000000..1f516989ed97 --- /dev/null +++ b/deploy/addons/headlamp/headlamp-clusterrolebinding.yaml @@ -0,0 +1,18 @@ +--- +# ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: headlamp-admin + namespace: headlamp + labels: + app.kubernetes.io/name: headlamp + app.kubernetes.io/instance: headlamp +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- kind: ServiceAccount + name: headlamp + namespace: headlamp diff --git a/deploy/addons/headlamp/headlamp-deployment.yaml.tmpl b/deploy/addons/headlamp/headlamp-deployment.yaml.tmpl new file mode 100644 index 000000000000..63da3b343303 --- /dev/null +++ b/deploy/addons/headlamp/headlamp-deployment.yaml.tmpl @@ -0,0 +1,42 @@ +--- +# Deployment +apiVersion: apps/v1 +kind: Deployment +metadata: + name: headlamp + namespace: headlamp + labels: + app.kubernetes.io/name: headlamp + app.kubernetes.io/instance: headlamp +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: headlamp + app.kubernetes.io/instance: headlamp + template: + metadata: + labels: + app.kubernetes.io/name: headlamp + app.kubernetes.io/instance: headlamp + spec: + serviceAccountName: headlamp + containers: + - name: headlamp + image: {{.CustomRegistries.Headlamp | default .ImageRepository | default .Registries.Headlamp }}{{.Images.Headlamp}} + imagePullPolicy: IfNotPresent + args: + - "-in-cluster" + - "-plugins-dir=/headlamp/plugins" + ports: + - name: http + containerPort: 4466 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http diff --git a/deploy/addons/headlamp/headlamp-namespace.yaml b/deploy/addons/headlamp/headlamp-namespace.yaml new file mode 100644 index 000000000000..85d4ae0a2eb0 --- /dev/null +++ b/deploy/addons/headlamp/headlamp-namespace.yaml @@ -0,0 +1,6 @@ +--- +# Namespace +apiVersion: v1 +kind: Namespace +metadata: + name: headlamp diff --git a/deploy/addons/headlamp/headlamp-service.yaml b/deploy/addons/headlamp/headlamp-service.yaml new file mode 100644 index 000000000000..1eca749b8293 --- /dev/null +++ b/deploy/addons/headlamp/headlamp-service.yaml @@ -0,0 +1,21 @@ +--- +# Service +apiVersion: v1 +kind: Service +metadata: + name: headlamp + namespace: headlamp + labels: + app.kubernetes.io/name: headlamp + app.kubernetes.io/instance: headlamp + kubernetes.io/minikube-addons-endpoint: headlamp +spec: + type: NodePort + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: headlamp + app.kubernetes.io/instance: headlamp diff --git a/deploy/addons/headlamp/headlamp-serviceaccount.yaml b/deploy/addons/headlamp/headlamp-serviceaccount.yaml new file mode 100644 index 000000000000..2dfba7fc61b9 --- /dev/null +++ b/deploy/addons/headlamp/headlamp-serviceaccount.yaml @@ -0,0 +1,10 @@ +--- +# ServiceAccount +apiVersion: v1 +kind: ServiceAccount +metadata: + name: headlamp + namespace: headlamp + labels: + app.kubernetes.io/name: headlamp + app.kubernetes.io/instance: headlamp diff --git a/deploy/addons/helm-tiller/README.md b/deploy/addons/helm-tiller/README.md deleted file mode 100644 index b5dd8234a28a..000000000000 --- a/deploy/addons/helm-tiller/README.md +++ /dev/null @@ -1,23 +0,0 @@ -## helm-tiller Addon -[Kubernetes Helm](https://helm.sh) - The Kubernetes Package Manager - -### Enabling helm-tiller -To enable this addon, simply run: - -```shell script -minikube addons enable helm-tiller -``` - -In a minute or so tiller will be installed into your cluster. You could run `helm init` each time you create a new minikube instance or you could just enable this addon. -Each time you start a new minikube instance, tiller will be automatically installed. - -### Testing installation - -```shell script -helm ls -``` - -If everything went well you shouldn't get any errors about tiller being installed in your cluster. If you haven't deployed any releases `helm ls` won't return anything. - -### Deprecation of Tiller -When tiller is finally deprecated this addon won't be necessary anymore. If your version of helm doesn't use tiller, you don't need this addon. diff --git a/deploy/addons/helm-tiller/helm-tiller-dp.tmpl b/deploy/addons/helm-tiller/helm-tiller-dp.tmpl deleted file mode 100644 index ed44d410cf04..000000000000 --- a/deploy/addons/helm-tiller/helm-tiller-dp.tmpl +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright 2019 The Kubernetes Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app: helm - name: tiller - addonmanager.kubernetes.io/mode: Reconcile - kubernetes.io/minikube-addons: helm - name: tiller-deploy - namespace: kube-system -spec: - replicas: 1 - selector: - matchLabels: - app: helm - name: tiller - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 1 - type: RollingUpdate - template: - metadata: - labels: - app: helm - name: tiller - spec: - automountServiceAccountToken: true - containers: - - env: - - name: TILLER_NAMESPACE - value: kube-system - - name: TILLER_HISTORY_MAX - value: "0" - image: {{.CustomRegistries.Tiller | default .ImageRepository | default .Registries.Tiller }}{{.Images.Tiller}} - imagePullPolicy: IfNotPresent - livenessProbe: - failureThreshold: 3 - httpGet: - path: /liveness - port: 44135 - scheme: HTTP - initialDelaySeconds: 1 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - name: tiller - ports: - - containerPort: 44134 - name: tiller - protocol: TCP - - containerPort: 44135 - name: http - protocol: TCP - readinessProbe: - failureThreshold: 3 - httpGet: - path: /readiness - port: 44135 - scheme: HTTP - initialDelaySeconds: 1 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - serviceAccount: tiller - serviceAccountName: tiller \ No newline at end of file diff --git a/deploy/addons/helm-tiller/helm-tiller-rbac.tmpl b/deploy/addons/helm-tiller/helm-tiller-rbac.tmpl deleted file mode 100644 index 2cde8c492e69..000000000000 --- a/deploy/addons/helm-tiller/helm-tiller-rbac.tmpl +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright 2019 The Kubernetes Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -apiVersion: v1 -kind: ServiceAccount -metadata: - name: tiller - namespace: kube-system - labels: - app: helm - name: tiller - addonmanager.kubernetes.io/mode: Reconcile - kubernetes.io/minikube-addons: helm ---- -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: tiller-clusterrolebinding - labels: - app: helm - name: tiller - addonmanager.kubernetes.io/mode: Reconcile - kubernetes.io/minikube-addons: helm -subjects: - - kind: ServiceAccount - name: tiller - namespace: kube-system -roleRef: - kind: ClusterRole - name: cluster-admin - apiGroup: "" \ No newline at end of file diff --git a/deploy/addons/inaccel/README.md b/deploy/addons/inaccel/README.md new file mode 100644 index 000000000000..a8e24b3f9ec8 --- /dev/null +++ b/deploy/addons/inaccel/README.md @@ -0,0 +1,7 @@ +### Documentation + +For detailed usage instructions visit: [docs.inaccel.com](https://docs.inaccel.com) + +### Support + +For more product information contact: info@inaccel.com diff --git a/deploy/addons/inaccel/fpga-operator.yaml.tmpl b/deploy/addons/inaccel/fpga-operator.yaml.tmpl new file mode 100644 index 000000000000..a20bbc7747f7 --- /dev/null +++ b/deploy/addons/inaccel/fpga-operator.yaml.tmpl @@ -0,0 +1,56 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + addonmanager.kubernetes.io/mode: Reconcile + kubernetes.io/minikube-addons: inaccel + name: inaccel-addon + namespace: kube-system +data: + disable.sh: | + #!/bin/sh -e + exec >/proc/1/fd/1 + echo "Disabling InAccel FPGA Operator" + helm uninstall inaccel --namespace kube-system + echo "InAccel is disabled" + enable.sh: | + #!/bin/sh -e + exec >/proc/1/fd/1 + echo "Enabling InAccel FPGA Operator" + helm install inaccel fpga-operator --namespace kube-system --repo https://setup.inaccel.com/helm + echo "InAccel is enabled" +--- +apiVersion: v1 +kind: Pod +metadata: + labels: + addonmanager.kubernetes.io/mode: Reconcile + kubernetes.io/minikube-addons: inaccel + name: inaccel-addon + namespace: kube-system +spec: + containers: + - command: + - sleep + - infinity + image: {{ .CustomRegistries.Helm3 | default .ImageRepository | default .Registries.Helm3 }}{{ .Images.Helm3 }} + lifecycle: + postStart: + exec: + command: + - /inaccel/enable.sh + preStop: + exec: + command: + - /inaccel/disable.sh + name: helm3 + volumeMounts: + - mountPath: /inaccel + name: inaccel-addon + readOnly: true + volumes: + - configMap: + defaultMode: 0777 + name: inaccel-addon + name: inaccel-addon diff --git a/deploy/addons/ingress-dns/example/example.yaml b/deploy/addons/ingress-dns/example/example.yaml index e1906c21498e..b8e321785e07 100644 --- a/deploy/addons/ingress-dns/example/example.yaml +++ b/deploy/addons/ingress-dns/example/example.yaml @@ -29,7 +29,7 @@ spec: spec: containers: - name: hello-world-app - image: gcr.io/google-samples/hello-app:1.0 + image: docker.io/kicbase/echo-server:1.0 ports: - containerPort: 8080 --- @@ -39,6 +39,7 @@ metadata: name: example-ingress namespace: kube-system spec: + ingressClassName: nginx rules: - host: hello-john.test http: diff --git a/deploy/addons/ingress-dns/ingress-dns-pod.yaml.tmpl b/deploy/addons/ingress-dns/ingress-dns-pod.yaml.tmpl index bb0e7c1b3fab..b6f46aaeb923 100644 --- a/deploy/addons/ingress-dns/ingress-dns-pod.yaml.tmpl +++ b/deploy/addons/ingress-dns/ingress-dns-pod.yaml.tmpl @@ -22,9 +22,8 @@ metadata: app: minikube-ingress-dns kubernetes.io/bootstrapping: rbac-defaults app.kubernetes.io/part-of: kube-system - addonmanager.kubernetes.io/mode: Reconcile --- -apiVersion: rbac.authorization.k8s.io/v1beta1 +apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: minikube-ingress-dns @@ -33,7 +32,6 @@ metadata: app: minikube-ingress-dns kubernetes.io/bootstrapping: rbac-defaults app.kubernetes.io/part-of: kube-system - addonmanager.kubernetes.io/mode: Reconcile gcp-auth-skip-secret: "true" rules: - apiGroups: @@ -47,7 +45,7 @@ rules: - list - watch --- -apiVersion: rbac.authorization.k8s.io/v1beta1 +apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: minikube-ingress-dns @@ -56,7 +54,6 @@ metadata: app: minikube-ingress-dns kubernetes.io/bootstrapping: rbac-defaults app.kubernetes.io/part-of: kube-system - addonmanager.kubernetes.io/mode: Reconcile roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole @@ -74,16 +71,16 @@ metadata: labels: app: minikube-ingress-dns app.kubernetes.io/part-of: kube-system - addonmanager.kubernetes.io/mode: Reconcile spec: serviceAccountName: minikube-ingress-dns hostNetwork: true containers: - name: minikube-ingress-dns - image: {{.CustomRegistries.IngressDNS | default .ImageRepository | default .Registries.IngressDNS }}{{.Images.IngressDNS}} + image: {{.CustomRegistries.IngressDNS | default .ImageRepository | default .Registries.IngressDNS }}{{.Images.IngressDNS}} imagePullPolicy: IfNotPresent ports: - containerPort: 53 + hostPort: 53 protocol: UDP env: - name: DNS_PORT @@ -91,4 +88,22 @@ spec: - name: POD_IP valueFrom: fieldRef: - fieldPath: status.podIP \ No newline at end of file + fieldPath: status.podIP + volumeMounts: + - mountPath: /config + name: minikube-ingress-dns-config-volume + volumes: + - name: minikube-ingress-dns-config-volume + configMap: + name: minikube-ingress-dns +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: minikube-ingress-dns + namespace: kube-system + labels: + app: minikube-ingress-dns + app.kubernetes.io/part-of: kube-system +data: + dns-nodata-delay-ms: "20" diff --git a/deploy/addons/ingress/ingress-configmap.yaml.tmpl b/deploy/addons/ingress/ingress-configmap.yaml.tmpl deleted file mode 100644 index 37817eaae39e..000000000000 --- a/deploy/addons/ingress/ingress-configmap.yaml.tmpl +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright 2016 The Kubernetes Authors All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -apiVersion: v1 -kind: Namespace -metadata: - name: ingress-nginx - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - addonmanager.kubernetes.io/mode: Reconcile ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: EnsureExists - name: ingress-nginx-controller - namespace: ingress-nginx -data: - # see https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/configmap.md for all possible options and their description - hsts: "false" ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: tcp-services - namespace: ingress-nginx - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: EnsureExists ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: udp-services - namespace: ingress-nginx - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: EnsureExists diff --git a/deploy/addons/ingress/ingress-deploy.yaml.tmpl b/deploy/addons/ingress/ingress-deploy.yaml.tmpl new file mode 100644 index 000000000000..ce5f9027e9d1 --- /dev/null +++ b/deploy/addons/ingress/ingress-deploy.yaml.tmpl @@ -0,0 +1,704 @@ +# Copyright 2021 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ref: https://github.com/kubernetes/ingress-nginx/blob/main/deploy/static/provider/kind/deploy.yaml + +apiVersion: v1 +kind: Namespace +metadata: + labels: + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx +--- +apiVersion: v1 +automountServiceAccountToken: true +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx + namespace: ingress-nginx +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission + namespace: ingress-nginx +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx + namespace: ingress-nginx +rules: +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get +- apiGroups: + - "" + resources: + - configmaps + - pods + - secrets + - endpoints + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch +- apiGroups: + {{- if eq .IngressAPIVersion "v1beta1"}} + - extensions + {{- end}} + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - watch +- apiGroups: + {{- if eq .IngressAPIVersion "v1beta1"}} + - extensions + {{- end}} + - networking.k8s.io + resources: + - ingresses/status + verbs: + - update +- apiGroups: + - networking.k8s.io + resources: + - ingressclasses + verbs: + - get + - list + - watch +- apiGroups: + - "" + resourceNames: + - ingress-nginx-leader + resources: + - configmaps + verbs: + - get + - update +- apiGroups: + - "" + resources: + - configmaps + verbs: + - create +- apiGroups: + - coordination.k8s.io + resourceNames: + - ingress-nginx-leader + resources: + - leases + verbs: + - get + - update +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission + namespace: ingress-nginx +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx +rules: +- apiGroups: + - "" + resources: + - configmaps + - endpoints + - nodes + - pods + - secrets + - namespaces + verbs: + - list + - watch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - list + - watch +- apiGroups: + - "" + resources: + - nodes + verbs: + - get +- apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch +- apiGroups: + {{- if eq .IngressAPIVersion "v1beta1"}} + - extensions + {{- end}} + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + {{- if eq .IngressAPIVersion "v1beta1"}} + - extensions + {{- end}} + - networking.k8s.io + resources: + - ingresses/status + verbs: + - update +- apiGroups: + - networking.k8s.io + resources: + - ingressclasses + verbs: + - get + - list + - watch +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission +rules: +- apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + verbs: + - get + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx + namespace: ingress-nginx +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ingress-nginx +subjects: +- kind: ServiceAccount + name: ingress-nginx + namespace: ingress-nginx +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission + namespace: ingress-nginx +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ingress-nginx-admission +subjects: +- kind: ServiceAccount + name: ingress-nginx-admission + namespace: ingress-nginx +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ingress-nginx +subjects: +- kind: ServiceAccount + name: ingress-nginx + namespace: ingress-nginx +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ingress-nginx-admission +subjects: +- kind: ServiceAccount + name: ingress-nginx-admission + namespace: ingress-nginx +--- +apiVersion: v1 +data: + # see https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/configmap.md for all possible options and their description + hsts: "false" + # see https://github.com/kubernetes/minikube/pull/12702#discussion_r727519180: 'allow-snippet-annotations' should be used only if strictly required by another part of the deployment +# allow-snippet-annotations: "true" +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-controller + namespace: ingress-nginx +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: tcp-services + namespace: ingress-nginx + labels: + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/component: controller +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: udp-services + namespace: ingress-nginx + labels: + app.kubernetes.io/name: ingress-nginx + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/component: controller +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-controller + namespace: ingress-nginx +spec: + {{- if and (eq .IngressAPIVersion "v1") (not .PreOneTwentyKubernetes)}} + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack + {{- end}} + ports: + - name: http + port: 80 + protocol: TCP + targetPort: http + {{- if eq .IngressAPIVersion "v1"}} + appProtocol: http + {{- end}} + - name: https + port: 443 + protocol: TCP + targetPort: https + {{- if eq .IngressAPIVersion "v1"}} + appProtocol: https + {{- end}} + selector: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + type: NodePort +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-controller-admission + namespace: ingress-nginx +spec: + ports: + - name: https-webhook + port: 443 + targetPort: webhook + {{- if eq .IngressAPIVersion "v1"}} + appProtocol: https + {{- end}} + selector: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-controller + namespace: ingress-nginx +spec: + minReadySeconds: 0 + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + strategy: + rollingUpdate: + maxUnavailable: 1 + type: RollingUpdate + template: + metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + gcp-auth-skip-secret: "true" + spec: + containers: + - args: + - /nginx-ingress-controller + - --election-id=ingress-nginx-leader + {{- if eq .IngressAPIVersion "v1"}} + - --controller-class=k8s.io/ingress-nginx + - --watch-ingress-without-class=true + {{- end}} + {{- if eq .IngressAPIVersion "v1beta1"}} + - --ingress-class=nginx + {{- end}} + - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller + - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services + - --udp-services-configmap=$(POD_NAMESPACE)/udp-services + - --validating-webhook=:8443 + - --validating-webhook-certificate=/usr/local/certificates/cert + - --validating-webhook-key=/usr/local/certificates/key + {{- if .CustomIngressCert}} + - --default-ssl-certificate={{ .CustomIngressCert }} + {{- end}} + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: LD_PRELOAD + value: /usr/local/lib/libmimalloc.so + image: {{.CustomRegistries.IngressController | default .ImageRepository | default .Registries.IngressController}}{{.Images.IngressController}} + imagePullPolicy: IfNotPresent + lifecycle: + preStop: + exec: + command: + - /wait-shutdown + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthz + port: 10254 + scheme: HTTP + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: controller + ports: + - containerPort: 80 + hostPort: 80 + name: http + protocol: TCP + - containerPort: 443 + hostPort: 443 + name: https + protocol: TCP + - containerPort: 8443 + name: webhook + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: 10254 + scheme: HTTP + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + resources: + requests: + cpu: 100m + memory: 90Mi + securityContext: + allowPrivilegeEscalation: true + capabilities: + add: + - NET_BIND_SERVICE + drop: + - ALL + runAsUser: 101 + volumeMounts: + - mountPath: /usr/local/certificates/ + name: webhook-cert + readOnly: true + dnsPolicy: ClusterFirst + nodeSelector: + minikube.k8s.io/primary: "true" + kubernetes.io/os: linux + serviceAccountName: ingress-nginx + terminationGracePeriodSeconds: 0 + tolerations: + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Equal + volumes: + - name: webhook-cert + secret: + secretName: ingress-nginx-admission +--- +apiVersion: batch/v1 +kind: Job +metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission-create + namespace: ingress-nginx +spec: + template: + metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission-create + spec: + containers: + - args: + - create + - --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc + - --namespace=$(POD_NAMESPACE) + - --secret-name=ingress-nginx-admission + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: {{.CustomRegistries.KubeWebhookCertgenCreate | default .ImageRepository | default .Registries.KubeWebhookCertgenCreate }}{{.Images.KubeWebhookCertgenCreate}} + imagePullPolicy: IfNotPresent + name: create + securityContext: + allowPrivilegeEscalation: false + nodeSelector: + minikube.k8s.io/primary: "true" + kubernetes.io/os: linux + restartPolicy: OnFailure + securityContext: + runAsNonRoot: true + runAsUser: 2000 + serviceAccountName: ingress-nginx-admission +--- +apiVersion: batch/v1 +kind: Job +metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission-patch + namespace: ingress-nginx +spec: + template: + metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission-patch + spec: + containers: + - args: + - patch + - --webhook-name=ingress-nginx-admission + - --namespace=$(POD_NAMESPACE) + - --patch-mutating=false + - --secret-name=ingress-nginx-admission + - --patch-failure-policy=Fail + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: {{.CustomRegistries.KubeWebhookCertgenPatch | default .ImageRepository | default .Registries.KubeWebhookCertgenPatch }}{{.Images.KubeWebhookCertgenPatch}} + imagePullPolicy: IfNotPresent + name: patch + securityContext: + allowPrivilegeEscalation: false + nodeSelector: + minikube.k8s.io/primary: "true" + kubernetes.io/os: linux + restartPolicy: OnFailure + securityContext: + runAsNonRoot: true + runAsUser: 2000 + serviceAccountName: ingress-nginx-admission +--- +{{- if eq .IngressAPIVersion "v1"}} +apiVersion: networking.k8s.io/v1 +kind: IngressClass +metadata: + annotations: + ingressclass.kubernetes.io/is-default-class: "true" + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: nginx +spec: + controller: k8s.io/ingress-nginx +--- +{{- end}} +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: admission-webhook + app.kubernetes.io/instance: ingress-nginx + app.kubernetes.io/name: ingress-nginx + name: ingress-nginx-admission +webhooks: +- admissionReviewVersions: + - v1 + {{- if eq .IngressAPIVersion "v1beta1"}} + - v1beta1 + {{- end}} + clientConfig: + service: + name: ingress-nginx-controller-admission + namespace: ingress-nginx + path: /networking/{{.IngressAPIVersion}}/ingresses + failurePolicy: Fail + matchPolicy: Equivalent + name: validate.nginx.ingress.kubernetes.io + rules: + - apiGroups: + - networking.k8s.io + apiVersions: + - {{.IngressAPIVersion}} + operations: + - CREATE + - UPDATE + resources: + - ingresses + sideEffects: None diff --git a/deploy/addons/ingress/ingress-dp.yaml.tmpl b/deploy/addons/ingress/ingress-dp.yaml.tmpl deleted file mode 100644 index 694534c9361e..000000000000 --- a/deploy/addons/ingress/ingress-dp.yaml.tmpl +++ /dev/null @@ -1,299 +0,0 @@ -# Copyright 2016 The Kubernetes Authors All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: Reconcile - name: ingress-nginx-controller-admission - namespace: ingress-nginx -spec: - type: ClusterIP - ports: - - name: https-webhook - port: 443 - targetPort: webhook - selector: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: Reconcile - name: ingress-nginx-controller - namespace: ingress-nginx -spec: - type: NodePort - ports: - - name: http - port: 80 - protocol: TCP - targetPort: http - - name: https - port: 443 - protocol: TCP - targetPort: https - selector: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: ingress-nginx-controller - namespace: ingress-nginx - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: Reconcile -spec: - selector: - matchLabels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: Reconcile - revisionHistoryLimit: 10 - strategy: - rollingUpdate: - maxUnavailable: 1 - type: RollingUpdate - minReadySeconds: 0 - template: - metadata: - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: Reconcile - gcp-auth-skip-secret: "true" - spec: - dnsPolicy: ClusterFirst - containers: - - name: controller - image: {{.CustomRegistries.IngressController | default .ImageRepository | default .Registries.IngressController }}{{.Images.IngressController}} - imagePullPolicy: IfNotPresent - lifecycle: - preStop: - exec: - command: - - /wait-shutdown - args: - - /nginx-ingress-controller - - --ingress-class=nginx - - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller - - --report-node-internal-ip-address - - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services - - --udp-services-configmap=$(POD_NAMESPACE)/udp-services - - --validating-webhook=:8443 - - --validating-webhook-certificate=/usr/local/certificates/cert - - --validating-webhook-key=/usr/local/certificates/key - {{if .CustomIngressCert}} - - --default-ssl-certificate={{ .CustomIngressCert }} - {{end}} - securityContext: - capabilities: - drop: - - ALL - add: - - NET_BIND_SERVICE - runAsUser: 101 - allowPrivilegeEscalation: true - env: - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: LD_PRELOAD - value: /usr/local/lib/libmimalloc.so - livenessProbe: - httpGet: - path: /healthz - port: 10254 - scheme: HTTP - initialDelaySeconds: 10 - periodSeconds: 10 - timeoutSeconds: 1 - successThreshold: 1 - failureThreshold: 5 - readinessProbe: - httpGet: - path: /healthz - port: 10254 - scheme: HTTP - initialDelaySeconds: 10 - periodSeconds: 10 - timeoutSeconds: 1 - successThreshold: 1 - failureThreshold: 3 - ports: - - name: http - containerPort: 80 - protocol: TCP - hostPort: 80 - - name: https - containerPort: 443 - protocol: TCP - hostPort: 443 - - name: webhook - containerPort: 8443 - protocol: TCP - volumeMounts: - - name: webhook-cert - mountPath: /usr/local/certificates/ - readOnly: true - resources: - requests: - cpu: 100m - memory: 90Mi - serviceAccountName: ingress-nginx - volumes: - - name: webhook-cert - secret: - secretName: ingress-nginx-admission ---- -# Currently(v0.44.0), ValidatingWebhookConfiguration of this validates v1beta1 request -# TODO(govargo): check this after upstream ingress-nginx can validate v1 version -# https://github.com/kubernetes/ingress-nginx/blob/controller-v0.44.0/internal/admission/controller/main.go#L46-L52 -apiVersion: admissionregistration.k8s.io/v1 -kind: ValidatingWebhookConfiguration -metadata: - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - name: ingress-nginx-admission -webhooks: - - name: validate.nginx.ingress.kubernetes.io - matchPolicy: Equivalent - rules: - - apiGroups: - - networking.k8s.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - ingresses - failurePolicy: Fail - sideEffects: None - admissionReviewVersions: - - v1 - - v1beta1 - clientConfig: - service: - namespace: ingress-nginx - name: ingress-nginx-controller-admission - path: /networking/v1beta1/ingresses ---- -apiVersion: batch/v1 -kind: Job -metadata: - name: ingress-nginx-admission-create - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - namespace: ingress-nginx -spec: - template: - metadata: - name: ingress-nginx-admission-create - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - spec: - containers: - - name: create - image: {{.CustomRegistries.KubeWebhookCertgenCreate | default .ImageRepository | default .Registries.KubeWebhookCertgenCreate }}{{.Images.KubeWebhookCertgenCreate}} - imagePullPolicy: IfNotPresent - args: - - create - - --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc - - --namespace=$(POD_NAMESPACE) - - --secret-name=ingress-nginx-admission - env: - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - restartPolicy: OnFailure - serviceAccountName: ingress-nginx-admission - securityContext: - runAsNonRoot: true - runAsUser: 2000 ---- -apiVersion: batch/v1 -kind: Job -metadata: - name: ingress-nginx-admission-patch - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - namespace: ingress-nginx -spec: - template: - metadata: - name: ingress-nginx-admission-patch - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - spec: - containers: - - name: patch - image: {{.CustomRegistries.KubeWebhookCertgenPatch | default .ImageRepository | default .Registries.KubeWebhookCertgenPatch }}{{.Images.KubeWebhookCertgenPatch}} - imagePullPolicy: IfNotPresent - args: - - patch - - --webhook-name=ingress-nginx-admission - - --namespace=$(POD_NAMESPACE) - - --patch-mutating=false - - --secret-name=ingress-nginx-admission - - --patch-failure-policy=Fail - env: - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - restartPolicy: OnFailure - serviceAccountName: ingress-nginx-admission - securityContext: - runAsNonRoot: true - runAsUser: 2000 diff --git a/deploy/addons/ingress/ingress-rbac.yaml.tmpl b/deploy/addons/ingress/ingress-rbac.yaml.tmpl deleted file mode 100644 index 5a2cf139b706..000000000000 --- a/deploy/addons/ingress/ingress-rbac.yaml.tmpl +++ /dev/null @@ -1,283 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: Reconcile - name: ingress-nginx - namespace: ingress-nginx ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - addonmanager.kubernetes.io/mode: Reconcile - name: ingress-nginx -rules: - - apiGroups: - - '' - resources: - - configmaps - - endpoints - - nodes - - pods - - secrets - verbs: - - list - - watch - - apiGroups: - - '' - resources: - - nodes - verbs: - - get - - apiGroups: - - '' - resources: - - services - verbs: - - get - - list - - watch - - apiGroups: - - extensions - - networking.k8s.io # k8s 1.14+ - resources: - - ingresses - verbs: - - get - - list - - watch - - apiGroups: - - '' - resources: - - events - verbs: - - create - - patch - - apiGroups: - - extensions - - networking.k8s.io # k8s 1.14+ - resources: - - ingresses/status - verbs: - - update - - apiGroups: - - networking.k8s.io # k8s 1.18+ - resources: - - ingressclasses - verbs: - - get - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ingress-nginx - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - addonmanager.kubernetes.io/mode: Reconcile -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ingress-nginx -subjects: -- kind: ServiceAccount - name: ingress-nginx - namespace: ingress-nginx ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: Reconcile - name: ingress-nginx - namespace: ingress-nginx -rules: - - apiGroups: - - '' - resources: - - namespaces - verbs: - - get - - apiGroups: - - '' - resources: - - configmaps - - pods - - secrets - - endpoints - verbs: - - get - - list - - watch - - apiGroups: - - '' - resources: - - services - verbs: - - get - - list - - watch - - apiGroups: - - extensions - - networking.k8s.io # k8s 1.14+ - resources: - - ingresses - verbs: - - get - - list - - watch - - apiGroups: - - extensions - - networking.k8s.io # k8s 1.14+ - resources: - - ingresses/status - verbs: - - update - - apiGroups: - - networking.k8s.io # k8s 1.18+ - resources: - - ingressclasses - verbs: - - get - - list - - watch - - apiGroups: - - '' - resources: - - configmaps - resourceNames: - - ingress-controller-leader-nginx - verbs: - - get - - update - - apiGroups: - - '' - resources: - - configmaps - verbs: - - create - - apiGroups: - - '' - resources: - - events - verbs: - - create - - patch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: controller - addonmanager.kubernetes.io/mode: Reconcile - name: ingress-nginx - namespace: ingress-nginx -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: ingress-nginx -subjects: -- kind: ServiceAccount - name: ingress-nginx - namespace: ingress-nginx ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: ingress-nginx-admission - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - namespace: ingress-nginx ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: ingress-nginx-admission - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - namespace: ingress-nginx -rules: - - apiGroups: - - admissionregistration.k8s.io - resources: - - validatingwebhookconfigurations - verbs: - - get - - update ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: ingress-nginx-admission - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - namespace: ingress-nginx -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: ingress-nginx-admission -subjects: - - kind: ServiceAccount - name: ingress-nginx-admission - namespace: ingress-nginx ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: ingress-nginx-admission - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - namespace: ingress-nginx -rules: - - apiGroups: - - '' - resources: - - secrets - verbs: - - get - - create ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: ingress-nginx-admission - labels: - app.kubernetes.io/name: ingress-nginx - app.kubernetes.io/instance: ingress-nginx - app.kubernetes.io/component: admission-webhook - addonmanager.kubernetes.io/mode: Reconcile - namespace: ingress-nginx -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: ingress-nginx-admission -subjects: - - kind: ServiceAccount - name: ingress-nginx-admission - namespace: ingress-nginx diff --git a/deploy/addons/inspektor-gadget/ig-deployment.yaml.tmpl b/deploy/addons/inspektor-gadget/ig-deployment.yaml.tmpl new file mode 100644 index 000000000000..ddf085bac1c5 --- /dev/null +++ b/deploy/addons/inspektor-gadget/ig-deployment.yaml.tmpl @@ -0,0 +1,400 @@ +--- +# This file is generated by 'make generate-manifests'; DO NOT EDIT. +apiVersion: v1 +kind: Namespace +metadata: + name: gadget +--- +# Source: gadget/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + k8s-app: gadget + name: gadget + namespace: gadget +--- +# Source: gadget/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + k8s-app: gadget + name: gadget + namespace: gadget +data: + config.yaml: |- + events-buffer-length: 16384 + containerd-socketpath: /run/containerd/containerd.sock + crio-socketpath: /run/crio/crio.sock + docker-socketpath: /run/docker.sock + podman-socketpath: /run/podman/podman.sock + gadget-namespace: gadget + daemon-log-level: info + operator: + kubemanager: + fallback-podinformer: true + hook-mode: auto + oci: + allowed-gadgets: [] + disallow-pulling: false + insecure-registries: [] + public-keys: + - | + -----BEGIN PUBLIC KEY----- + MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoDOC0gYSxZTopenGmX3ZFvQ1DSfh + Ir4EKRt5jC+mXaJ7c7J+oREskYMn/SfZdRHNSOjLTZUMDm60zpXGhkFecg== + -----END PUBLIC KEY----- + verify-image: true + otel-metrics: + otel-metrics-listen: false + otel-metrics-listen-address: 0.0.0.0:2224 +--- +# Source: gadget/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: gadget-cluster-role + labels: + k8s-app: gadget +rules: + - apiGroups: [""] + resources: ["nodes/proxy"] + verbs: ["get"] + - apiGroups: [""] + resources: ["namespaces", "nodes", "pods"] + verbs: ["get", "watch", "list"] + - apiGroups: [""] + resources: ["services"] + # list is needed by network-policy gadget + # watch is needed by operators enriching with service informations + verbs: ["list", "watch"] + - apiGroups: ["gadget.kinvolk.io"] + resources: ["traces", "traces/status"] + # For traces, we need all rights on them as we define this resource. + verbs: ["delete", "deletecollection", "get", "list", "patch", "create", "update", "watch"] + - apiGroups: ["*"] + resources: ["deployments", "replicasets", "statefulsets", "daemonsets", "jobs", "cronjobs", "replicationcontrollers"] + # Required to retrieve the owner references used by the seccomp gadget. + verbs: ["get"] + - apiGroups: ["security-profiles-operator.x-k8s.io"] + resources: ["seccompprofiles"] + # Required for integration with the Kubernetes Security Profiles Operator + verbs: ["list", "watch", "create"] + - apiGroups: ["security.openshift.io"] + # It is necessary to use the 'privileged' security context constraints to be + # able mount host directories as volumes, use the host networking, among others. + # This will be used only when running on OpenShift: + # https://docs.openshift.com/container-platform/4.9/authentication/managing-security-context-constraints.html#default-sccs_configuring-internal-oauth + resources: ["securitycontextconstraints"] + resourceNames: ["privileged"] + verbs: ["use"] +--- +# Source: gadget/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: gadget-cluster-role-binding + labels: + k8s-app: gadget +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: gadget-cluster-role +subjects: + - kind: ServiceAccount + name: gadget + namespace: gadget +--- +# Source: gadget/templates/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + k8s-app: gadget + name: gadget-role + namespace: gadget +rules: + - apiGroups: [ "" ] + resources: [ "secrets" ] + # get secrets is needed for retrieving pull secret. + verbs: [ "get" ] + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "watch", "list", "create", "delete", "patch", "update"] +--- +# Source: gadget/templates/rolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + k8s-app: gadget + name: gadget-role-binding + namespace: gadget +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: gadget-role +subjects: + - kind: ServiceAccount + name: gadget +--- +# Source: gadget/templates/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + labels: + k8s-app: gadget + name: gadget + namespace: gadget +spec: + selector: + matchLabels: + k8s-app: gadget + template: + metadata: + labels: + k8s-app: gadget + annotations: + # We need to set gadget container as unconfined so it is able to write + # /sys/fs/bpf as well as /sys/kernel/debug/tracing. + # Otherwise, we can have error like: + # "failed to create server failed to create folder for pinning bpf maps: mkdir /sys/fs/bpf/gadget: permission denied" + # (For reference, see: https://github.com/inspektor-gadget/inspektor-gadget/runs/3966318270?check_suite_focus=true#step:20:221) + container.apparmor.security.beta.kubernetes.io/gadget: "unconfined" + # keep aligned with values in pkg/operators/prometheus/prometheus.go + prometheus.io/scrape: "true" + prometheus.io/port: "2223" + prometheus.io/path: "/metrics" + spec: + serviceAccount: gadget + hostPID: false + hostNetwork: false + containers: + - name: gadget + terminationMessagePolicy: FallbackToLogsOnError + image: {{.CustomRegistries.InspektorGadget | default .ImageRepository | default .Registries.InspektorGadget }}{{.Images.InspektorGadget}} + imagePullPolicy: Always + command: [ "/bin/gadgettracermanager", "-serve" ] + lifecycle: + preStop: + exec: + command: + - "/cleanup" + livenessProbe: + exec: + command: + - /bin/gadgettracermanager + - -liveness + periodSeconds: 5 + timeoutSeconds: 2 + readinessProbe: + exec: + command: + - /bin/gadgettracermanager + - -liveness + periodSeconds: 5 + timeoutSeconds: 2 + startupProbe: + exec: + command: + - /bin/gadgettracermanager + - -liveness + failureThreshold: 12 + periodSeconds: 5 + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: GADGET_POD_UID + valueFrom: + fieldRef: + fieldPath: metadata.uid + - name: GADGET_IMAGE + value: "ghcr.io/inspektor-gadget/inspektor-gadget" + - name: HOST_ROOT + value: "/host" + - name: IG_EXPERIMENTAL + value: "false" + securityContext: + readOnlyRootFilesystem: true + # With hostPID/hostNetwork/privileged [1] set to false, we need to set appropriate + # SELinux context [2] to be able to mount host directories with correct permissions. + # This option is ignored if hostPID/hostNetwork/privileged is set to true or SELinux isn't enabled. + # See: + # 1 - https://github.com/cri-o/cri-o/blob/v1.27.0/server/sandbox_run_linux.go#L537 + # 2 - https://github.com/cri-o/cri-o/blob/v1.27.0/server/container_create_linux.go#L310 + seLinuxOptions: + type: "spc_t" + capabilities: + drop: + - ALL + add: + # We need CAP_SYS_ADMIN for gadgettracermanager due to several + # syscalls: + # - bpf(): It often checks if SYS_ADMIN is set, among others + # there: + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/kernel/bpf/syscall.c#L2602 + # - perf_event_open(): The kernel checks if CAP_PERFMON or + # CAP_SYS_ADMIN is set: + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/kernel/events/core.c#L12406-L12409 + # - fanotify_init(): CAP_SYS_ADMIN is required to use all the + # functionalities offered by fanotify: + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/fs/notify/fanotify/fanotify_user.c#L1404 + # - fanotify_mark(): This capability is required to setup mount + # or filesystem marks: + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/fs/notify/fanotify/fanotify_user.c#L1745-L1754 + # - mount(): We need this capability to modify the caller + # namespace: + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/fs/namespace.c#L1844-L1846 + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/fs/namespace.c#L3609 + # - setns(): SYS_ADMIN is needed to install various namespace: + # https://github.com/torvalds/linux/blob/c42d9eeef8e5ba9292eda36fd8e3c11f35ee065c/kernel/nsproxy.c#L574 + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/kernel/cgroup/namespace.c#L103-L105 + - SYS_ADMIN + + # We need this capability to get addresses from /proc/kallsyms. + # Without it, addresses displayed when reading this file will be + # 0. + # Indeed, the socket-enricher needs to get the socket_file_ops + # to work correctly: + # https://github.com/inspektor-gadget/inspektor-gadget/blob/69692d54d951/pkg/gadgets/internal/socketenricher/tracer.go#L75 + - SYSLOG + + # Accessing some procfs files such as /proc/$pid/ns/mnt + # requires ptrace capability: + # https://github.com/inspektor-gadget/inspektor-gadget/blob/3c51ff5e9f5b/pkg/utils/host/namespaces.go#L65 + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/fs/proc/namespaces.c#L58 + - SYS_PTRACE + + # Needed by RemoveMemlock in gadgettracermanager: + # https://github.com/inspektor-gadget/inspektor-gadget/blob/f2b9826fc4ae046415cdee30ee4a25322fd3f0c0/pkg/gadgettracermanager/gadgettracermanager.go#L258 + - SYS_RESOURCE + + # Needed by mmap() called by gadgettracermanager: + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/mm/mmap.c#L1281 + # https://github.com/torvalds/linux/blob/c42d9eeef8e5/mm/mmap.c#L1161-L1162 + - IPC_LOCK + + # Needed by gadgets that open a raw sock like dns and snisnoop: + # https://github.com/inspektor-gadget/inspektor-gadget/blob/3c51ff5e9f5b/gadgets/trace_dns/program.bpf.c#L365-L366 + - NET_RAW + + # Needed to attach qdiscs and filters to network interfaces. See createClsActQdisc() + # and addTCFilter() in pkg/gadgets/internal/tcnetworktracer/tc.go + - NET_ADMIN + volumeMounts: + - mountPath: /host/bin + name: bin + readOnly: true + # We need to have read/write as we write NRI and OCI config files + # here. + - mountPath: /host/etc + name: etc + readOnly: false + # We need to have read/write as we write NRI and OCI binaries here. + - mountPath: /host/opt + name: opt + readOnly: false + - mountPath: /host/usr + name: usr + readOnly: true + - mountPath: /host/run + name: run + readOnly: true + - mountPath: /host/var + name: var + readOnly: true + # WARNING Despite mounting host proc as readonly, it is possible to + # write host file system using symlinks under /host/proc. The + # following command, ran from gadget pod, will result in writing to + # the host filesystem: + # touch /host/proc/1/root/foobar + # This limitation comes from Inspektor Gadget needing to be run as + # unconfined with regard to AppArmor and having the SYS_PTRACE + # capability. + - mountPath: /host/proc + name: proc + readOnly: true + - mountPath: /run + name: run + - mountPath: /sys/kernel/debug + name: debugfs + - mountPath: /sys/fs/cgroup + name: cgroup + readOnly: true + - mountPath: /sys/fs/bpf + name: bpffs + # We need to add a dedicated volume to store OCI image otherwise it + # will fail as the container root filesystem is read only. + # For this, we use an emptyDir without size limit. + - mountPath: /var/lib/ig + name: oci + - mountPath: /etc/ig + name: config + readOnly: true + # We need a dedicated volume to store the wasm cache + # otherwise it will fail as the container root filesystem is read only. + - mountPath: /var/run/ig/wasm-cache + name: wasm-cache + readOnly: false + nodeSelector: + kubernetes.io/os: linux + affinity: + {} + tolerations: + - effect: NoSchedule + operator: Exists + - effect: NoExecute + operator: Exists + volumes: + # /bin is needed to find runc. + - name: bin + hostPath: + path: /bin + # /etc is needed for several reasons: + # 1. entrypoint needs /etc/os-release to print information. + # 2. entrypoint needs /etc/nri to handle NRI hooks + # 3. entrypoint needs /etc/containers/oci to handle OCI hooks. + - name: etc + hostPath: + path: /etc + # /opt is needed for several reasons: + # 1. entrypoint needs /opt/nri to handle NRI hooks. + # 2. entrypoint needs /opt/hooks/oci to handle OCI hooks. + - name: opt + hostPath: + path: /opt + # /usr is needed to find runc. + - name: usr + hostPath: + path: /usr + - name: proc + hostPath: + path: /proc + - name: run + hostPath: + path: /run + # /var is needed by container-hook to fanoitfy mark certain directories + # e.g. needed in case of docker runtime on minikube (driver=kvm2) + - name: var + hostPath: + path: /var + - name: cgroup + hostPath: + path: /sys/fs/cgroup + - name: bpffs + hostPath: + path: /sys/fs/bpf + - name: debugfs + hostPath: + path: /sys/kernel/debug + - name: oci + emptyDir: + - name: config + configMap: + name: gadget + defaultMode: 0o400 + - name: wasm-cache + emptyDir: {} diff --git a/deploy/addons/istio-provisioner/istio-operator.yaml.tmpl b/deploy/addons/istio-provisioner/istio-operator.yaml.tmpl index 6c5f23118b79..5ba677d3698e 100644 --- a/deploy/addons/istio-provisioner/istio-operator.yaml.tmpl +++ b/deploy/addons/istio-provisioner/istio-operator.yaml.tmpl @@ -8,7 +8,7 @@ metadata: addonmanager.kubernetes.io/mode: EnsureExists ... --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: istiooperators.install.istio.io @@ -16,6 +16,8 @@ metadata: kubernetes.io/minikube-addons: istio addonmanager.kubernetes.io/mode: EnsureExists spec: + conversion: + strategy: None group: install.istio.io names: kind: IstioOperator @@ -24,13 +26,24 @@ spec: singular: istiooperator shortNames: - iop + - io scope: Namespaced - subresources: - status: {} versions: - name: v1alpha1 + subresources: + status: {} + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true served: true storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true ... --- apiVersion: v1 @@ -77,12 +90,6 @@ rules: - '*' verbs: - '*' -- apiGroups: - - rbac.istio.io - resources: - - '*' - verbs: - - '*' - apiGroups: - security.istio.io resources: @@ -111,9 +118,7 @@ rules: - daemonsets - deployments - deployments/finalizers - - ingresses - replicasets - - statefulsets verbs: - '*' - apiGroups: @@ -129,6 +134,7 @@ rules: verbs: - get - create + - update - apiGroups: - policy resources: @@ -144,18 +150,28 @@ rules: - rolebindings verbs: - '*' +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - create + - update - apiGroups: - "" resources: - - configmaps + - configmaps - endpoints - events - namespaces - pods + - pods/proxy + - pods/portforward - persistentvolumeclaims - secrets - services - - serviceaccounts + - serviceaccounts verbs: - '*' ... @@ -191,6 +207,7 @@ spec: - name: http-metrics port: 8383 targetPort: 8383 + protocol: TCP selector: name: istio-operator ... @@ -202,7 +219,7 @@ metadata: name: istio-operator labels: kubernetes.io/minikube-addons: istio - addonmanager.kubernetes.io/mode: Reconcile + addonmanager.kubernetes.io/mode: Reconcile spec: replicas: 1 selector: @@ -222,6 +239,16 @@ spec: command: - operator - server + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + privileged: false + readOnlyRootFilesystem: true + runAsGroup: 1337 + runAsUser: 1337 + runAsNonRoot: true imagePullPolicy: IfNotPresent resources: limits: @@ -243,4 +270,6 @@ spec: fieldPath: metadata.name - name: OPERATOR_NAME value: "istio-operator" + - name: WAIT_FOR_RESOURCES_TIMEOUT + value: "300s" ... diff --git a/deploy/addons/istio/istio-default-profile.yaml.tmpl b/deploy/addons/istio/istio-default-profile.yaml similarity index 100% rename from deploy/addons/istio/istio-default-profile.yaml.tmpl rename to deploy/addons/istio/istio-default-profile.yaml diff --git a/deploy/addons/kong/kong-ingress-controller.yaml.tmpl b/deploy/addons/kong/kong-ingress-controller.yaml.tmpl new file mode 100644 index 000000000000..499880b5c4cb --- /dev/null +++ b/deploy/addons/kong/kong-ingress-controller.yaml.tmpl @@ -0,0 +1,1855 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: kong +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.3 + creationTimestamp: null + name: ingressclassparameterses.configuration.konghq.com +spec: + group: configuration.konghq.com + names: + kind: IngressClassParameters + listKind: IngressClassParametersList + plural: ingressclassparameterses + singular: ingressclassparameters + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: IngressClassParameters is the Schema for the IngressClassParameters + API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec is the IngressClassParameters specification. + properties: + enableLegacyRegexDetection: + default: false + description: EnableLegacyRegexDetection automatically detects if ImplementationSpecific + Ingress paths are regular expression paths using the legacy 2.x + heuristic. The controller adds the "~" prefix to those paths if + the Kong version is 3.0 or higher. + type: boolean + serviceUpstream: + default: false + description: Offload load-balancing to kube-proxy or sidecar. + type: boolean + type: object + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.3 + creationTimestamp: null + name: kongclusterplugins.configuration.konghq.com +spec: + group: configuration.konghq.com + names: + categories: + - kong-ingress-controller + kind: KongClusterPlugin + listKind: KongClusterPluginList + plural: kongclusterplugins + shortNames: + - kcp + singular: kongclusterplugin + scope: Cluster + versions: + - additionalPrinterColumns: + - description: Name of the plugin + jsonPath: .plugin + name: Plugin-Type + type: string + - description: Age + jsonPath: .metadata.creationTimestamp + name: Age + type: date + - description: Indicates if the plugin is disabled + jsonPath: .disabled + name: Disabled + priority: 1 + type: boolean + - description: Configuration of the plugin + jsonPath: .config + name: Config + priority: 1 + type: string + name: v1 + schema: + openAPIV3Schema: + description: KongClusterPlugin is the Schema for the kongclusterplugins API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + config: + description: Config contains the plugin configuration. It's a list of + keys and values required to configure the plugin. Please read the documentation + of the plugin being configured to set values in here. For any plugin + in Kong, anything that goes in the `config` JSON key in the Admin API + request, goes into this property. Only one of `config` or `configFrom` + may be used in a KongClusterPlugin, not both at once. + type: object + x-kubernetes-preserve-unknown-fields: true + configFrom: + description: ConfigFrom references a secret containing the plugin configuration. + This should be used when the plugin configuration contains sensitive + information, such as AWS credentials in the Lambda plugin or the client + secret in the OIDC plugin. Only one of `config` or `configFrom` may + be used in a KongClusterPlugin, not both at once. + properties: + secretKeyRef: + description: Specifies a name, a namespace, and a key of a secret + to refer to. + properties: + key: + description: The key containing the value. + type: string + name: + description: The secret containing the key. + type: string + namespace: + description: The namespace containing the secret. + type: string + required: + - key + - name + - namespace + type: object + type: object + consumerRef: + description: ConsumerRef is a reference to a particular consumer. + type: string + disabled: + description: Disabled set if the plugin is disabled or not. + type: boolean + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + ordering: + description: 'Ordering overrides the normal plugin execution order. It''s + only available on Kong Enterprise. `` is a request processing + phase (for example, `access` or `body_filter`) and `` is the + name of the plugin that will run before or after the KongPlugin. For + example, a KongPlugin with `plugin: rate-limiting` and `before.access: + ["key-auth"]` will create a rate limiting plugin that limits requests + _before_ they are authenticated.' + properties: + after: + additionalProperties: + items: + type: string + type: array + description: PluginOrderingPhase indicates which plugins in a phase + should affect the target plugin's order + type: object + before: + additionalProperties: + items: + type: string + type: array + description: PluginOrderingPhase indicates which plugins in a phase + should affect the target plugin's order + type: object + type: object + plugin: + description: PluginName is the name of the plugin to which to apply the + config. + type: string + protocols: + description: Protocols configures plugin to run on requests received on + specific protocols. + items: + description: KongProtocol is a valid Kong protocol. This alias is necessary + to deal with https://github.com/kubernetes-sigs/controller-tools/issues/342 + enum: + - http + - https + - grpc + - grpcs + - tcp + - tls + - udp + type: string + type: array + run_on: + description: RunOn configures the plugin to run on the first or the second + or both nodes in case of a service mesh deployment. + enum: + - first + - second + - all + type: string + required: + - plugin + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.3 + creationTimestamp: null + name: kongconsumers.configuration.konghq.com +spec: + group: configuration.konghq.com + names: + categories: + - kong-ingress-controller + kind: KongConsumer + listKind: KongConsumerList + plural: kongconsumers + shortNames: + - kc + singular: kongconsumer + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Username of a Kong Consumer + jsonPath: .username + name: Username + type: string + - description: Age + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: KongConsumer is the Schema for the kongconsumers API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + credentials: + description: Credentials are references to secrets containing a credential + to be provisioned in Kong. + items: + type: string + type: array + custom_id: + description: CustomID is a Kong cluster-unique existing ID for the consumer + - useful for mapping Kong with users in your existing database. + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + username: + description: Username is a Kong cluster-unique username of the consumer. + type: string + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.3 + creationTimestamp: null + name: kongingresses.configuration.konghq.com +spec: + group: configuration.konghq.com + names: + categories: + - kong-ingress-controller + kind: KongIngress + listKind: KongIngressList + plural: kongingresses + shortNames: + - ki + singular: kongingress + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: KongIngress is the Schema for the kongingresses API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + proxy: + description: Proxy defines additional connection options for the routes + to be configured in the Kong Gateway, e.g. `connection_timeout`, `retries`, + etc. + properties: + connect_timeout: + description: "The timeout in milliseconds for\testablishing a connection + to the upstream server. Deprecated: use Service's \"konghq.com/connect-timeout\" + annotation instead." + minimum: 0 + type: integer + path: + description: '(optional) The path to be used in requests to the upstream + server. Deprecated: use Service''s "konghq.com/path" annotation + instead.' + pattern: ^/.*$ + type: string + protocol: + description: 'The protocol used to communicate with the upstream. + Deprecated: use Service''s "konghq.com/protocol" annotation instead.' + enum: + - http + - https + - grpc + - grpcs + - tcp + - tls + - udp + type: string + read_timeout: + description: 'The timeout in milliseconds between two successive read + operations for transmitting a request to the upstream server. Deprecated: + use Service''s "konghq.com/read-timeout" annotation instead.' + minimum: 0 + type: integer + retries: + description: 'The number of retries to execute upon failure to proxy. + Deprecated: use Service''s "konghq.com/retries" annotation instead.' + minimum: 0 + type: integer + write_timeout: + description: 'The timeout in milliseconds between two successive write + operations for transmitting a request to the upstream server. Deprecated: + use Service''s "konghq.com/write-timeout" annotation instead.' + minimum: 0 + type: integer + type: object + route: + description: Route define rules to match client requests. Each Route is + associated with a Service, and a Service may have multiple Routes associated + to it. + properties: + headers: + additionalProperties: + items: + type: string + type: array + description: 'Headers contains one or more lists of values indexed + by header name that will cause this Route to match if present in + the request. The Host header cannot be used with this attribute. + Deprecated: use Ingress'' "konghq.com/headers" annotation instead.' + type: object + https_redirect_status_code: + description: 'HTTPSRedirectStatusCode is the status code Kong responds + with when all properties of a Route match except the protocol. Deprecated: + use Ingress'' "ingress.kubernetes.io/force-ssl-redirect" or "konghq.com/https-redirect-status-code" + annotations instead.' + type: integer + methods: + description: 'Methods is a list of HTTP methods that match this Route. + Deprecated: use Ingress'' "konghq.com/methods" annotation instead.' + items: + type: string + type: array + path_handling: + description: 'PathHandling controls how the Service path, Route path + and requested path are combined when sending a request to the upstream. + Deprecated: use Ingress'' "konghq.com/path-handling" annotation + instead.' + enum: + - v0 + - v1 + type: string + preserve_host: + description: 'PreserveHost sets When matching a Route via one of the + hosts domain names, use the request Host header in the upstream + request headers. If set to false, the upstream Host header will + be that of the Service’s host. Deprecated: use Ingress'' "konghq.com/preserve-host" + annotation instead.' + type: boolean + protocols: + description: 'Protocols is an array of the protocols this Route should + allow. Deprecated: use Ingress'' "konghq.com/protocols" annotation + instead.' + items: + description: KongProtocol is a valid Kong protocol. This alias is + necessary to deal with https://github.com/kubernetes-sigs/controller-tools/issues/342 + enum: + - http + - https + - grpc + - grpcs + - tcp + - tls + - udp + type: string + type: array + regex_priority: + description: 'RegexPriority is a number used to choose which route + resolves a given request when several routes match it using regexes + simultaneously. Deprecated: use Ingress'' "konghq.com/regex-priority" + annotation instead.' + type: integer + request_buffering: + description: 'RequestBuffering sets whether to enable request body + buffering or not. Deprecated: use Ingress'' "konghq.com/request-buffering" + annotation instead.' + type: boolean + response_buffering: + description: 'ResponseBuffering sets whether to enable response body + buffering or not. Deprecated: use Ingress'' "konghq.com/response-buffering" + annotation instead.' + type: boolean + snis: + description: 'SNIs is a list of SNIs that match this Route when using + stream routing. Deprecated: use Ingress'' "konghq.com/snis" annotation + instead.' + items: + type: string + type: array + strip_path: + description: 'StripPath sets When matching a Route via one of the + paths strip the matching prefix from the upstream request URL. Deprecated: + use Ingress'' "konghq.com/strip-path" annotation instead.' + type: boolean + type: object + upstream: + description: Upstream represents a virtual hostname and can be used to + loadbalance incoming requests over multiple targets (e.g. Kubernetes + `Services` can be a target, OR `Endpoints` can be targets). + properties: + algorithm: + description: Algorithm is the load balancing algorithm to use. + enum: + - round-robin + - consistent-hashing + - least-connections + type: string + hash_fallback: + description: 'HashFallback defines What to use as hashing input if + the primary hash_on does not return a hash. Accepted values are: + "none", "consumer", "ip", "header", "cookie".' + type: string + hash_fallback_header: + description: HashFallbackHeader is the header name to take the value + from as hash input. Only required when "hash_fallback" is set to + "header". + type: string + hash_fallback_query_arg: + description: HashFallbackQueryArg is the "hash_fallback" version of + HashOnQueryArg. + type: string + hash_fallback_uri_capture: + description: HashFallbackURICapture is the "hash_fallback" version + of HashOnURICapture. + type: string + hash_on: + description: 'HashOn defines what to use as hashing input. Accepted + values are: "none", "consumer", "ip", "header", "cookie", "path", + "query_arg", "uri_capture".' + type: string + hash_on_cookie: + description: The cookie name to take the value from as hash input. + Only required when "hash_on" or "hash_fallback" is set to "cookie". + type: string + hash_on_cookie_path: + description: The cookie path to set in the response headers. Only + required when "hash_on" or "hash_fallback" is set to "cookie". + type: string + hash_on_header: + description: HashOnHeader defines the header name to take the value + from as hash input. Only required when "hash_on" is set to "header". + type: string + hash_on_query_arg: + description: HashOnQueryArg is the query string parameter whose value + is the hash input when "hash_on" is set to "query_arg". + type: string + hash_on_uri_capture: + description: HashOnURICapture is the name of the capture group whose + value is the hash input when "hash_on" is set to "uri_capture". + type: string + healthchecks: + description: Healthchecks defines the health check configurations + in Kong. + properties: + active: + description: ActiveHealthcheck configures active health check + probing. + properties: + concurrency: + minimum: 1 + type: integer + healthy: + description: Healthy configures thresholds and HTTP status + codes to mark targets healthy for an upstream. + properties: + http_statuses: + items: + type: integer + type: array + interval: + minimum: 0 + type: integer + successes: + minimum: 0 + type: integer + type: object + http_path: + pattern: ^/.*$ + type: string + https_sni: + type: string + https_verify_certificate: + type: boolean + timeout: + minimum: 0 + type: integer + type: + type: string + unhealthy: + description: Unhealthy configures thresholds and HTTP status + codes to mark targets unhealthy. + properties: + http_failures: + minimum: 0 + type: integer + http_statuses: + items: + type: integer + type: array + interval: + minimum: 0 + type: integer + tcp_failures: + minimum: 0 + type: integer + timeouts: + minimum: 0 + type: integer + type: object + type: object + passive: + description: PassiveHealthcheck configures passive checks around + passive health checks. + properties: + healthy: + description: Healthy configures thresholds and HTTP status + codes to mark targets healthy for an upstream. + properties: + http_statuses: + items: + type: integer + type: array + interval: + minimum: 0 + type: integer + successes: + minimum: 0 + type: integer + type: object + type: + type: string + unhealthy: + description: Unhealthy configures thresholds and HTTP status + codes to mark targets unhealthy. + properties: + http_failures: + minimum: 0 + type: integer + http_statuses: + items: + type: integer + type: array + interval: + minimum: 0 + type: integer + tcp_failures: + minimum: 0 + type: integer + timeouts: + minimum: 0 + type: integer + type: object + type: object + threshold: + type: number + type: object + host_header: + description: HostHeader is The hostname to be used as Host header + when proxying requests through Kong. + type: string + slots: + description: Slots is the number of slots in the load balancer algorithm. + minimum: 10 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.3 + creationTimestamp: null + name: kongplugins.configuration.konghq.com +spec: + group: configuration.konghq.com + names: + categories: + - kong-ingress-controller + kind: KongPlugin + listKind: KongPluginList + plural: kongplugins + shortNames: + - kp + singular: kongplugin + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Name of the plugin + jsonPath: .plugin + name: Plugin-Type + type: string + - description: Age + jsonPath: .metadata.creationTimestamp + name: Age + type: date + - description: Indicates if the plugin is disabled + jsonPath: .disabled + name: Disabled + priority: 1 + type: boolean + - description: Configuration of the plugin + jsonPath: .config + name: Config + priority: 1 + type: string + name: v1 + schema: + openAPIV3Schema: + description: KongPlugin is the Schema for the kongplugins API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + config: + description: Config contains the plugin configuration. It's a list of + keys and values required to configure the plugin. Please read the documentation + of the plugin being configured to set values in here. For any plugin + in Kong, anything that goes in the `config` JSON key in the Admin API + request, goes into this property. Only one of `config` or `configFrom` + may be used in a KongPlugin, not both at once. + type: object + x-kubernetes-preserve-unknown-fields: true + configFrom: + description: ConfigFrom references a secret containing the plugin configuration. + This should be used when the plugin configuration contains sensitive + information, such as AWS credentials in the Lambda plugin or the client + secret in the OIDC plugin. Only one of `config` or `configFrom` may + be used in a KongPlugin, not both at once. + properties: + secretKeyRef: + description: Specifies a name and a key of a secret to refer to. The + namespace is implicitly set to the one of referring object. + properties: + key: + description: The key containing the value. + type: string + name: + description: The secret containing the key. + type: string + required: + - key + - name + type: object + type: object + consumerRef: + description: ConsumerRef is a reference to a particular consumer. + type: string + disabled: + description: Disabled set if the plugin is disabled or not. + type: boolean + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + ordering: + description: 'Ordering overrides the normal plugin execution order. It''s + only available on Kong Enterprise. `` is a request processing + phase (for example, `access` or `body_filter`) and `` is the + name of the plugin that will run before or after the KongPlugin. For + example, a KongPlugin with `plugin: rate-limiting` and `before.access: + ["key-auth"]` will create a rate limiting plugin that limits requests + _before_ they are authenticated.' + properties: + after: + additionalProperties: + items: + type: string + type: array + description: PluginOrderingPhase indicates which plugins in a phase + should affect the target plugin's order + type: object + before: + additionalProperties: + items: + type: string + type: array + description: PluginOrderingPhase indicates which plugins in a phase + should affect the target plugin's order + type: object + type: object + plugin: + description: PluginName is the name of the plugin to which to apply the + config. + type: string + protocols: + description: Protocols configures plugin to run on requests received on + specific protocols. + items: + description: KongProtocol is a valid Kong protocol. This alias is necessary + to deal with https://github.com/kubernetes-sigs/controller-tools/issues/342 + enum: + - http + - https + - grpc + - grpcs + - tcp + - tls + - udp + type: string + type: array + run_on: + description: RunOn configures the plugin to run on the first or the second + or both nodes in case of a service mesh deployment. + enum: + - first + - second + - all + type: string + required: + - plugin + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.3 + creationTimestamp: null + name: tcpingresses.configuration.konghq.com +spec: + group: configuration.konghq.com + names: + categories: + - kong-ingress-controller + kind: TCPIngress + listKind: TCPIngressList + plural: tcpingresses + singular: tcpingress + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Address of the load balancer + jsonPath: .status.loadBalancer.ingress[*].ip + name: Address + type: string + - description: Age + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: TCPIngress is the Schema for the tcpingresses API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec is the TCPIngress specification. + properties: + rules: + description: A list of rules used to configure the Ingress. + items: + description: IngressRule represents a rule to apply against incoming + requests. Matching is performed based on an (optional) SNI and + port. + properties: + backend: + description: Backend defines the referenced service endpoint + to which the traffic will be forwarded to. + properties: + serviceName: + description: Specifies the name of the referenced service. + minLength: 1 + type: string + servicePort: + description: Specifies the port of the referenced service. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + required: + - serviceName + - servicePort + type: object + host: + description: Host is the fully qualified domain name of a network + host, as defined by RFC 3986. If a Host is not specified, + then port-based TCP routing is performed. Kong doesn't care + about the content of the TCP stream in this case. If a Host + is specified, the protocol must be TLS over TCP. A plain-text + TCP request cannot be routed based on Host. It can only be + routed based on Port. + type: string + port: + description: Port is the port on which to accept TCP or TLS + over TCP sessions and route. It is a required field. If a + Host is not specified, the requested are routed based only + on Port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + required: + - backend + - port + type: object + type: array + tls: + description: TLS configuration. This is similar to the `tls` section + in the Ingress resource in networking.v1beta1 group. The mapping + of SNIs to TLS cert-key pair defined here will be used for HTTP + Ingress rules as well. Once can define the mapping in this resource + or the original Ingress resource, both have the same effect. + items: + description: IngressTLS describes the transport layer security. + properties: + hosts: + description: Hosts are a list of hosts included in the TLS certificate. + The values in this list must match the name/s used in the + tlsSecret. Defaults to the wildcard host setting for the loadbalancer + controller fulfilling this Ingress, if left unspecified. + items: + type: string + type: array + secretName: + description: SecretName is the name of the secret used to terminate + SSL traffic. + type: string + type: object + type: array + type: object + status: + description: TCPIngressStatus defines the observed state of TCPIngress. + properties: + loadBalancer: + description: LoadBalancer contains the current status of the load-balancer. + properties: + ingress: + description: Ingress is a list containing ingress points for the + load-balancer. Traffic intended for the service should be sent + to these ingress points. + items: + description: 'LoadBalancerIngress represents the status of a + load-balancer ingress point: traffic intended for the service + should be sent to an ingress point.' + properties: + hostname: + description: Hostname is set for load-balancer ingress points + that are DNS based (typically AWS load-balancers) + type: string + ip: + description: IP is set for load-balancer ingress points + that are IP based (typically GCE or OpenStack load-balancers) + type: string + ports: + description: Ports is a list of records of service ports + If used, every port defined in the service should have + an entry in it + items: + properties: + error: + description: 'Error is to record the problem with + the service port The format of the error shall comply + with the following rules: - built-in error values + shall be specified in this file and those shall + use CamelCase names - cloud provider specific error + values must have names that comply with the format + foo.example.com/CamelCase. --- The regex it matches + is (dns1123SubdomainFmt/)?(qualifiedNameFmt)' + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + description: Port is the port number of the service + port of which status is recorded here + format: int32 + type: integer + protocol: + default: TCP + description: 'Protocol is the protocol of the service + port of which status is recorded here The supported + values are: "TCP", "UDP", "SCTP"' + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.3 + creationTimestamp: null + name: udpingresses.configuration.konghq.com +spec: + group: configuration.konghq.com + names: + categories: + - kong-ingress-controller + kind: UDPIngress + listKind: UDPIngressList + plural: udpingresses + singular: udpingress + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Address of the load balancer + jsonPath: .status.loadBalancer.ingress[*].ip + name: Address + type: string + - description: Age + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: UDPIngress is the Schema for the udpingresses API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec is the UDPIngress specification. + properties: + rules: + description: A list of rules used to configure the Ingress. + items: + description: UDPIngressRule represents a rule to apply against incoming + requests wherein no Host matching is available for request routing, + only the port is used to match requests. + properties: + backend: + description: Backend defines the Kubernetes service which accepts + traffic from the listening Port defined above. + properties: + serviceName: + description: Specifies the name of the referenced service. + minLength: 1 + type: string + servicePort: + description: Specifies the port of the referenced service. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + required: + - serviceName + - servicePort + type: object + port: + description: Port indicates the port for the Kong proxy to accept + incoming traffic on, which will then be routed to the service + Backend. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + required: + - backend + - port + type: object + type: array + type: object + status: + description: UDPIngressStatus defines the observed state of UDPIngress. + properties: + loadBalancer: + description: LoadBalancer contains the current status of the load-balancer. + properties: + ingress: + description: Ingress is a list containing ingress points for the + load-balancer. Traffic intended for the service should be sent + to these ingress points. + items: + description: 'LoadBalancerIngress represents the status of a + load-balancer ingress point: traffic intended for the service + should be sent to an ingress point.' + properties: + hostname: + description: Hostname is set for load-balancer ingress points + that are DNS based (typically AWS load-balancers) + type: string + ip: + description: IP is set for load-balancer ingress points + that are IP based (typically GCE or OpenStack load-balancers) + type: string + ports: + description: Ports is a list of records of service ports + If used, every port defined in the service should have + an entry in it + items: + properties: + error: + description: 'Error is to record the problem with + the service port The format of the error shall comply + with the following rules: - built-in error values + shall be specified in this file and those shall + use CamelCase names - cloud provider specific error + values must have names that comply with the format + foo.example.com/CamelCase. --- The regex it matches + is (dns1123SubdomainFmt/)?(qualifiedNameFmt)' + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + description: Port is the port number of the service + port of which status is recorded here + format: int32 + type: integer + protocol: + default: TCP + description: 'Protocol is the protocol of the service + port of which status is recorded here The supported + values are: "TCP", "UDP", "SCTP"' + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: kong-serviceaccount + namespace: kong +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: kong-leader-election + namespace: kong +rules: +- apiGroups: + - "" + - coordination.k8s.io + resources: + - configmaps + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: kong-ingress +rules: +- apiGroups: + - "" + resources: + - endpoints + verbs: + - list + - watch +- apiGroups: + - "" + resources: + - endpoints/status + verbs: + - get + - patch + - update +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - "" + resources: + - nodes + verbs: + - list + - watch +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - list + - watch +- apiGroups: + - "" + resources: + - secrets/status + verbs: + - get + - patch + - update +- apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - services/status + verbs: + - get + - patch + - update +- apiGroups: + - configuration.konghq.com + resources: + - ingressclassparameterses + verbs: + - get + - list + - watch +- apiGroups: + - configuration.konghq.com + resources: + - kongclusterplugins + verbs: + - get + - list + - watch +- apiGroups: + - configuration.konghq.com + resources: + - kongclusterplugins/status + verbs: + - get + - patch + - update +- apiGroups: + - configuration.konghq.com + resources: + - kongconsumers + verbs: + - get + - list + - watch +- apiGroups: + - configuration.konghq.com + resources: + - kongconsumers/status + verbs: + - get + - patch + - update +- apiGroups: + - configuration.konghq.com + resources: + - kongingresses + verbs: + - get + - list + - watch +- apiGroups: + - configuration.konghq.com + resources: + - kongingresses/status + verbs: + - get + - patch + - update +- apiGroups: + - configuration.konghq.com + resources: + - kongplugins + verbs: + - get + - list + - watch +- apiGroups: + - configuration.konghq.com + resources: + - kongplugins/status + verbs: + - get + - patch + - update +- apiGroups: + - configuration.konghq.com + resources: + - tcpingresses + verbs: + - get + - list + - watch +- apiGroups: + - configuration.konghq.com + resources: + - tcpingresses/status + verbs: + - get + - patch + - update +- apiGroups: + - configuration.konghq.com + resources: + - udpingresses + verbs: + - get + - list + - watch +- apiGroups: + - configuration.konghq.com + resources: + - udpingresses/status + verbs: + - get + - patch + - update +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - get + - list + - watch +- apiGroups: + - extensions + resources: + - ingresses + verbs: + - get + - list + - watch +- apiGroups: + - extensions + resources: + - ingresses/status + verbs: + - get + - patch + - update +- apiGroups: + - networking.k8s.io + resources: + - ingressclasses + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses/status + verbs: + - get + - patch + - update +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: kong-ingress-gateway +rules: +- apiGroups: + - gateway.networking.k8s.io + resources: + - gatewayclasses + verbs: + - get + - list + - watch +- apiGroups: + - gateway.networking.k8s.io + resources: + - gatewayclasses/status + verbs: + - get + - update +- apiGroups: + - gateway.networking.k8s.io + resources: + - gateways + verbs: + - get + - list + - update + - watch +- apiGroups: + - gateway.networking.k8s.io + resources: + - gateways/status + verbs: + - get + - update +- apiGroups: + - gateway.networking.k8s.io + resources: + - grpcroutes + verbs: + - get + - list + - watch +- apiGroups: + - gateway.networking.k8s.io + resources: + - grpcroutes/status + verbs: + - get + - patch + - update +- apiGroups: + - gateway.networking.k8s.io + resources: + - httproutes + verbs: + - get + - list + - watch +- apiGroups: + - gateway.networking.k8s.io + resources: + - httproutes/status + verbs: + - get + - update +- apiGroups: + - gateway.networking.k8s.io + resources: + - referencegrants + verbs: + - get + - list + - watch +- apiGroups: + - gateway.networking.k8s.io + resources: + - referencegrants/status + verbs: + - get +- apiGroups: + - gateway.networking.k8s.io + resources: + - tcproutes + verbs: + - get + - list + - watch +- apiGroups: + - gateway.networking.k8s.io + resources: + - tcproutes/status + verbs: + - get + - update +- apiGroups: + - gateway.networking.k8s.io + resources: + - tlsroutes + verbs: + - get + - list + - watch +- apiGroups: + - gateway.networking.k8s.io + resources: + - tlsroutes/status + verbs: + - get + - update +- apiGroups: + - gateway.networking.k8s.io + resources: + - udproutes + verbs: + - get + - list + - watch +- apiGroups: + - gateway.networking.k8s.io + resources: + - udproutes/status + verbs: + - get + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: kong-ingress-knative +rules: +- apiGroups: + - networking.internal.knative.dev + resources: + - ingresses + verbs: + - get + - list + - watch +- apiGroups: + - networking.internal.knative.dev + resources: + - ingresses/status + verbs: + - get + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kong-leader-election + namespace: kong +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kong-leader-election +subjects: +- kind: ServiceAccount + name: kong-serviceaccount + namespace: kong +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: kong-ingress +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kong-ingress +subjects: +- kind: ServiceAccount + name: kong-serviceaccount + namespace: kong +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: kong-ingress-gateway +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kong-ingress-gateway +subjects: +- kind: ServiceAccount + name: kong-serviceaccount + namespace: kong +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: kong-ingress-knative +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kong-ingress-knative +subjects: +- kind: ServiceAccount + name: kong-serviceaccount + namespace: kong +--- +apiVersion: v1 +kind: Service +metadata: + name: kong-admin + namespace: kong +spec: + clusterIP: None + ports: + - name: admin + port: 8444 + protocol: TCP + targetPort: 8444 + selector: + app: proxy-kong +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp + service.beta.kubernetes.io/aws-load-balancer-type: nlb + name: kong-proxy + namespace: kong +spec: + ports: + - name: proxy + port: 80 + protocol: TCP + targetPort: 8000 + - name: proxy-ssl + port: 443 + protocol: TCP + targetPort: 8443 + selector: + app: proxy-kong + type: LoadBalancer +--- +apiVersion: v1 +kind: Service +metadata: + name: kong-validation-webhook + namespace: kong +spec: + ports: + - name: webhook + port: 443 + protocol: TCP + targetPort: 8080 + selector: + app: ingress-kong +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ingress-kong + name: ingress-kong + namespace: kong +spec: + replicas: 1 + selector: + matchLabels: + app: ingress-kong + template: + metadata: + annotations: + kuma.io/gateway: enabled + kuma.io/service-account-token-volume: kong-serviceaccount-token + traffic.sidecar.istio.io/includeInboundPorts: "" + labels: + app: ingress-kong + spec: + automountServiceAccountToken: false + containers: + - env: + - name: CONTROLLER_KONG_ADMIN_SVC + value: kong/kong-admin + - name: CONTROLLER_KONG_ADMIN_TLS_SKIP_VERIFY + value: "true" + - name: CONTROLLER_PUBLISH_SERVICE + value: kong/kong-proxy + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + image: {{.CustomRegistries.KongIngress | default .ImageRepository | default .Registries.KongIngress}}{{.Images.KongIngress}} + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: 10254 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: ingress-controller + ports: + - containerPort: 8080 + name: webhook + protocol: TCP + - containerPort: 10255 + name: cmetrics + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readyz + port: 10254 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kong-serviceaccount-token + readOnly: true + serviceAccountName: kong-serviceaccount + volumes: + - name: kong-serviceaccount-token + projected: + sources: + - serviceAccountToken: + expirationSeconds: 3607 + path: token + - configMap: + items: + - key: ca.crt + path: ca.crt + name: kube-root-ca.crt + - downwardAPI: + items: + - fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + path: namespace +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: proxy-kong + name: proxy-kong + namespace: kong +spec: + replicas: 1 + selector: + matchLabels: + app: proxy-kong + template: + metadata: + annotations: + kuma.io/gateway: enabled + kuma.io/service-account-token-volume: kong-serviceaccount-token + traffic.sidecar.istio.io/includeInboundPorts: "" + labels: + app: proxy-kong + spec: + automountServiceAccountToken: false + containers: + - env: + - name: KONG_PROXY_LISTEN + value: 0.0.0.0:8000 reuseport backlog=16384, 0.0.0.0:8443 http2 ssl reuseport + backlog=16384 + - name: KONG_PORT_MAPS + value: 80:8000, 443:8443 + - name: KONG_ADMIN_LISTEN + value: 0.0.0.0:8444 http2 ssl reuseport backlog=16384 + - name: KONG_STATUS_LISTEN + value: 0.0.0.0:8100 + - name: KONG_DATABASE + value: "off" + - name: KONG_NGINX_WORKER_PROCESSES + value: "2" + - name: KONG_KIC + value: "on" + - name: KONG_ADMIN_ACCESS_LOG + value: /dev/stdout + - name: KONG_ADMIN_ERROR_LOG + value: /dev/stderr + - name: KONG_PROXY_ERROR_LOG + value: /dev/stderr + - name: KONG_ROUTER_FLAVOR + value: traditional + image: {{.CustomRegistries.Kong | default .ImageRepository | default .Registries.Kong}}{{.Images.Kong}} + lifecycle: + preStop: + exec: + command: + - /bin/bash + - -c + - kong quit + livenessProbe: + failureThreshold: 3 + httpGet: + path: /status + port: 8100 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: proxy + ports: + - containerPort: 8000 + name: proxy + protocol: TCP + - containerPort: 8443 + name: proxy-ssl + protocol: TCP + - containerPort: 8100 + name: metrics + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /status + port: 8100 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + serviceAccountName: kong-serviceaccount + volumes: + - name: kong-serviceaccount-token + projected: + sources: + - serviceAccountToken: + expirationSeconds: 3607 + path: token + - configMap: + items: + - key: ca.crt + path: ca.crt + name: kube-root-ca.crt + - downwardAPI: + items: + - fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + path: namespace +--- +apiVersion: networking.k8s.io/v1 +kind: IngressClass +metadata: + name: kong +spec: + controller: ingress-controllers.konghq.com/kong diff --git a/deploy/addons/kubeflow/kubeflow.yaml b/deploy/addons/kubeflow/kubeflow.yaml new file mode 100644 index 000000000000..6735fa8d21c4 --- /dev/null +++ b/deploy/addons/kubeflow/kubeflow.yaml @@ -0,0 +1,126526 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: auth +--- +apiVersion: v1 +kind: Namespace +metadata: + name: cert-manager +--- +apiVersion: v1 +kind: Namespace +metadata: + labels: + istio-injection: disabled + istio-operator-managed: Reconcile + name: istio-system +--- +apiVersion: v1 +kind: Namespace +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: knative-eventing +--- +apiVersion: v1 +kind: Namespace +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + istio-injection: enabled + name: knative-serving +--- +apiVersion: v1 +kind: Namespace +metadata: + labels: + control-plane: kubeflow + istio-injection: enabled + name: kubeflow +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + registry.knative.dev/eventTypes: | + [ + { "type": "dev.knative.apiserver.resource.add" }, + { "type": "dev.knative.apiserver.resource.delete" }, + { "type": "dev.knative.apiserver.resource.update" }, + { "type": "dev.knative.apiserver.ref.add" }, + { "type": "dev.knative.apiserver.ref.delete" }, + { "type": "dev.knative.apiserver.ref.update" } + ] + creationTimestamp: null + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/source: "true" + eventing.knative.dev/source: "true" + knative.dev/crd-install: "true" + kustomize.component: knative + name: apiserversources.sources.knative.dev +spec: + group: sources.knative.dev + names: + categories: + - all + - knative + - sources + kind: ApiServerSource + plural: apiserversources + singular: apiserversource + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.sinkUri + name: Sink + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: ApiServerSource is an event source that brings Kubernetes API + server events into Knative. + properties: + spec: + properties: + ceOverrides: + description: CloudEventOverrides defines overrides to control the + output format and modifications of the event sent to the sink. + properties: + extensions: + description: Extensions specify what attribute are added or overridden + on the outbound event. Each `Extensions` key-value pair are + set on the event as an attribute extension independently. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + mode: + description: EventMode controls the format of the event. `Reference` + sends a dataref event type for the resource under watch. `Resource` + send the full resource lifecycle event. Defaults to `Reference` + type: string + namespaceSelector: + description: NamespaceSelector is a label selector to capture the + namespaces that should be watched by the source. + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + properties: + key: + description: key is the label key that the selector applies + to. + type: string + operator: + description: operator represents a key's relationship to + a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + type: object + type: array + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single + {key,value} in the matchLabels map is equivalent to an element + of matchExpressions, whose key field is "key", the operator + is "In", and the values array contains only "value". The requirements + are ANDed. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + owner: + description: ResourceOwner is an additional filter to only track resources + that are owned by a specific resource type. If ResourceOwner matches + Resources[n] then Resources[n] is allowed to pass the ResourceOwner + filter. + properties: + apiVersion: + description: APIVersion - the API version of the resource to watch. + type: string + kind: + description: 'Kind of the resource to watch. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + type: object + resources: + description: Resource are the resources this source will track and + send related lifecycle events from the Kubernetes ApiServer, with + an optional label selector to help filter. + items: + properties: + apiVersion: + description: APIVersion - the API version of the resource to + watch. + type: string + kind: + description: 'Kind of the resource to watch. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + selector: + description: 'LabelSelector filters this source to objects to + those resources pass the label selector. More info: http://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors' + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + type: object + type: array + matchLabels: + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + type: array + serviceAccountName: + description: ServiceAccountName is the name of the ServiceAccount + to use to run this source. Defaults to default if not set. + type: string + sink: + description: Sink is a reference to an object that will resolve to + a uri to use as the sink. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + required: + - resources + type: object + status: + properties: + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + ceAttributes: + description: CloudEventAttributes are the specific attributes that + the Source uses as part of its CloudEvents. + items: + properties: + source: + description: Source is the CloudEvents source attribute. + type: string + type: + description: Type refers to the CloudEvent type attribute. + type: string + type: object + type: array + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + namespaces: + description: Namespaces show the namespaces currently watched by the + ApiServerSource + items: + type: string + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + sinkUri: + description: SinkURI is the current active sink URI that has been + configured for the Source. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: authcodes.dex.coreos.com +spec: + group: dex.coreos.com + names: + kind: AuthCode + listKind: AuthCodeList + plural: authcodes + singular: authcode + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + istio: security + release: istio + name: authorizationpolicies.security.istio.io +spec: + group: security.istio.io + names: + categories: + - istio-io + - security-istio-io + kind: AuthorizationPolicy + listKind: AuthorizationPolicyList + plural: authorizationpolicies + singular: authorizationpolicy + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration for access control on workloads. See more + details at: https://istio.io/docs/reference/config/security/authorization-policy.html' + oneOf: + - not: + anyOf: + - required: + - provider + - required: + - provider + properties: + action: + description: Optional. + enum: + - ALLOW + - DENY + - AUDIT + - CUSTOM + type: string + provider: + description: Specifies detailed configuration of the CUSTOM action. + properties: + name: + description: Specifies the name of the extension provider. + type: string + type: object + rules: + description: Optional. + items: + properties: + from: + description: Optional. + items: + properties: + source: + description: Source specifies the source of a request. + properties: + ipBlocks: + description: Optional. + items: + type: string + type: array + namespaces: + description: Optional. + items: + type: string + type: array + notIpBlocks: + description: Optional. + items: + type: string + type: array + notNamespaces: + description: Optional. + items: + type: string + type: array + notPrincipals: + description: Optional. + items: + type: string + type: array + notRemoteIpBlocks: + description: Optional. + items: + type: string + type: array + notRequestPrincipals: + description: Optional. + items: + type: string + type: array + principals: + description: Optional. + items: + type: string + type: array + remoteIpBlocks: + description: Optional. + items: + type: string + type: array + requestPrincipals: + description: Optional. + items: + type: string + type: array + type: object + type: object + type: array + to: + description: Optional. + items: + properties: + operation: + description: Operation specifies the operation of a request. + properties: + hosts: + description: Optional. + items: + type: string + type: array + methods: + description: Optional. + items: + type: string + type: array + notHosts: + description: Optional. + items: + type: string + type: array + notMethods: + description: Optional. + items: + type: string + type: array + notPaths: + description: Optional. + items: + type: string + type: array + notPorts: + description: Optional. + items: + type: string + type: array + paths: + description: Optional. + items: + type: string + type: array + ports: + description: Optional. + items: + type: string + type: array + type: object + type: object + type: array + when: + description: Optional. + items: + properties: + key: + description: The name of an Istio attribute. + type: string + notValues: + description: Optional. + items: + type: string + type: array + values: + description: Optional. + items: + type: string + type: array + type: object + type: array + type: object + type: array + selector: + description: Optional. + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: false + subresources: + status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration for access control on workloads. See more + details at: https://istio.io/docs/reference/config/security/authorization-policy.html' + oneOf: + - not: + anyOf: + - required: + - provider + - required: + - provider + properties: + action: + description: Optional. + enum: + - ALLOW + - DENY + - AUDIT + - CUSTOM + type: string + provider: + description: Specifies detailed configuration of the CUSTOM action. + properties: + name: + description: Specifies the name of the extension provider. + type: string + type: object + rules: + description: Optional. + items: + properties: + from: + description: Optional. + items: + properties: + source: + description: Source specifies the source of a request. + properties: + ipBlocks: + description: Optional. + items: + type: string + type: array + namespaces: + description: Optional. + items: + type: string + type: array + notIpBlocks: + description: Optional. + items: + type: string + type: array + notNamespaces: + description: Optional. + items: + type: string + type: array + notPrincipals: + description: Optional. + items: + type: string + type: array + notRemoteIpBlocks: + description: Optional. + items: + type: string + type: array + notRequestPrincipals: + description: Optional. + items: + type: string + type: array + principals: + description: Optional. + items: + type: string + type: array + remoteIpBlocks: + description: Optional. + items: + type: string + type: array + requestPrincipals: + description: Optional. + items: + type: string + type: array + type: object + type: object + type: array + to: + description: Optional. + items: + properties: + operation: + description: Operation specifies the operation of a request. + properties: + hosts: + description: Optional. + items: + type: string + type: array + methods: + description: Optional. + items: + type: string + type: array + notHosts: + description: Optional. + items: + type: string + type: array + notMethods: + description: Optional. + items: + type: string + type: array + notPaths: + description: Optional. + items: + type: string + type: array + notPorts: + description: Optional. + items: + type: string + type: array + paths: + description: Optional. + items: + type: string + type: array + ports: + description: Optional. + items: + type: string + type: array + type: object + type: object + type: array + when: + description: Optional. + items: + properties: + key: + description: The name of an Istio attribute. + type: string + notValues: + description: Optional. + items: + type: string + type: array + values: + description: Optional. + items: + type: string + type: array + type: object + type: array + type: object + type: array + selector: + description: Optional. + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/addressable: "true" + knative.dev/crd-install: "true" + kustomize.component: knative + name: brokers.eventing.knative.dev +spec: + group: eventing.knative.dev + names: + categories: + - all + - knative + - eventing + kind: Broker + plural: brokers + singular: broker + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.address.url + name: URL + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].reason + name: Reason + type: string + - jsonPath: .metadata.annotations.eventing\.knative\.dev/broker\.class + name: Class + priority: 1 + type: string + name: v1 + schema: + openAPIV3Schema: + description: Broker collects a pool of events that are consumable using Triggers. + Brokers provide a well-known endpoint for event delivery that senders can + use with minimal knowledge of the event routing strategy. Subscribers use + Triggers to request delivery of events from a Broker's pool to a specific + URL or Addressable endpoint. + properties: + spec: + description: Spec defines the desired state of the Broker. + properties: + config: + description: Config is a KReference to the configuration that specifies + configuration options for this Broker. For example, this could be + a pointer to a ConfigMap. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object holding + it if left out.' + type: string + type: object + delivery: + description: Delivery contains the delivery spec for each trigger + to this Broker. Each trigger delivery spec, if any, overrides this + global delivery spec. + properties: + backoffDelay: + description: 'BackoffDelay is the delay before retrying. More + information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html + - https://en.wikipedia.org/wiki/ISO_8601 For linear policy, + backoff delay is backoffDelay*. For exponential + policy, backoff delay is backoffDelay*2^.' + type: string + backoffPolicy: + description: BackoffPolicy is the retry backoff policy (linear, + exponential). + type: string + deadLetterSink: + description: DeadLetterSink is the sink receiving event that could + not be sent to a destination. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and + non-empty host) pointing to the target or a relative URI. + Relative URIs will be resolved using the base URI retrieved + from Ref. + type: string + type: object + retry: + description: Retry is the minimum number of retries the sender + should attempt when sending an event before moving it to the + dead letter sink. + format: int32 + type: integer + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + status: + description: Status represents the current state of the Broker. This data + may be out of date. + properties: + address: + description: Broker is Addressable. It exposes the endpoint as an + URI to get events delivered into the Broker mesh. + properties: + url: + type: string + type: object + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + deadLetterSinkUri: + description: DeadLetterSinkURI is the resolved URI of the dead letter + sink that will be used as a fallback when not specified by Triggers. + type: string + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: certificaterequests.cert-manager.io +spec: + group: cert-manager.io + names: + categories: + - cert-manager + kind: CertificateRequest + listKind: CertificateRequestList + plural: certificaterequests + shortNames: + - cr + - crs + singular: certificaterequest + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Approved")].status + name: Approved + type: string + - jsonPath: .status.conditions[?(@.type=="Denied")].status + name: Denied + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .spec.issuerRef.name + name: Issuer + type: string + - jsonPath: .spec.username + name: Requestor + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + priority: 1 + type: string + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: "A CertificateRequest is used to request a signed certificate + from one of the configured issuers. \n All fields within the CertificateRequest's + `spec` are immutable after creation. A CertificateRequest will either succeed + or fail, as denoted by its `status.state` field. \n A CertificateRequest + is a one-shot resource, meaning it represents a single point in time request + for a certificate and cannot be re-used." + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Desired state of the CertificateRequest resource. + properties: + duration: + description: The requested 'duration' (i.e. lifetime) of the Certificate. + This option may be ignored/overridden by some issuer types. + type: string + extra: + additionalProperties: + items: + type: string + type: array + description: Extra contains extra attributes of the user that created + the CertificateRequest. Populated by the cert-manager webhook on + creation and immutable. + type: object + groups: + description: Groups contains group membership of the user that created + the CertificateRequest. Populated by the cert-manager webhook on + creation and immutable. + items: + type: string + type: array + x-kubernetes-list-type: atomic + isCA: + description: IsCA will request to mark the certificate as valid for + certificate signing when submitting to the issuer. This will automatically + add the `cert sign` usage to the list of `usages`. + type: boolean + issuerRef: + description: IssuerRef is a reference to the issuer for this CertificateRequest. If + the `kind` field is not set, or set to `Issuer`, an Issuer resource + with the given name in the same namespace as the CertificateRequest + will be used. If the `kind` field is set to `ClusterIssuer`, a + ClusterIssuer with the provided name will be used. The `name` field + in this stanza is required at all times. The group field refers + to the API group of the issuer which defaults to `cert-manager.io` + if empty. + properties: + group: + description: Group of the resource being referred to. + type: string + kind: + description: Kind of the resource being referred to. + type: string + name: + description: Name of the resource being referred to. + type: string + required: + - name + type: object + request: + description: The PEM-encoded x509 certificate signing request to be + submitted to the CA for signing. + format: byte + type: string + uid: + description: UID contains the uid of the user that created the CertificateRequest. + Populated by the cert-manager webhook on creation and immutable. + type: string + usages: + description: Usages is the set of x509 usages that are requested for + the certificate. If usages are set they SHOULD be encoded inside + the CSR spec Defaults to `digital signature` and `key encipherment` + if not specified. + items: + description: "KeyUsage specifies valid usage contexts for keys. + See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 https://tools.ietf.org/html/rfc5280#section-4.2.1.12 + \n Valid KeyUsage values are as follows: \"signing\", \"digital + signature\", \"content commitment\", \"key encipherment\", \"key + agreement\", \"data encipherment\", \"cert sign\", \"crl sign\", + \"encipher only\", \"decipher only\", \"any\", \"server auth\", + \"client auth\", \"code signing\", \"email protection\", \"s/mime\", + \"ipsec end system\", \"ipsec tunnel\", \"ipsec user\", \"timestamping\", + \"ocsp signing\", \"microsoft sgc\", \"netscape sgc\"" + enum: + - signing + - digital signature + - content commitment + - key encipherment + - key agreement + - data encipherment + - cert sign + - crl sign + - encipher only + - decipher only + - any + - server auth + - client auth + - code signing + - email protection + - s/mime + - ipsec end system + - ipsec tunnel + - ipsec user + - timestamping + - ocsp signing + - microsoft sgc + - netscape sgc + type: string + type: array + username: + description: Username contains the name of the user that created the + CertificateRequest. Populated by the cert-manager webhook on creation + and immutable. + type: string + required: + - issuerRef + - request + type: object + status: + description: Status of the CertificateRequest. This is set and managed + automatically. + properties: + ca: + description: The PEM encoded x509 certificate of the signer, also + known as the CA (Certificate Authority). This is set on a best-effort + basis by different issuers. If not set, the CA is assumed to be + unknown/not available. + format: byte + type: string + certificate: + description: The PEM encoded x509 certificate resulting from the certificate + signing request. If not set, the CertificateRequest has either not + been completed or has failed. More information on failure can be + found by checking the `conditions` field. + format: byte + type: string + conditions: + description: List of status conditions to indicate the status of a + CertificateRequest. Known condition types are `Ready` and `InvalidRequest`. + items: + description: CertificateRequestCondition contains condition information + for a CertificateRequest. + properties: + lastTransitionTime: + description: LastTransitionTime is the timestamp corresponding + to the last status change of this condition. + format: date-time + type: string + message: + description: Message is a human readable description of the + details of the last transition, complementing reason. + type: string + reason: + description: Reason is a brief machine readable explanation + for the condition's last transition. + type: string + status: + description: Status of the condition, one of (`True`, `False`, + `Unknown`). + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: Type of the condition, known values are (`Ready`, + `InvalidRequest`, `Approved`, `Denied`). + type: string + required: + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + failureTime: + description: FailureTime stores the time that this CertificateRequest + failed. This is used to influence garbage collection and back-off. + format: date-time + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: certificates.cert-manager.io +spec: + group: cert-manager.io + names: + categories: + - cert-manager + kind: Certificate + listKind: CertificateList + plural: certificates + shortNames: + - cert + - certs + singular: certificate + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .spec.secretName + name: Secret + type: string + - jsonPath: .spec.issuerRef.name + name: Issuer + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + priority: 1 + type: string + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: "A Certificate resource should be created to ensure an up to + date and signed x509 certificate is stored in the Kubernetes Secret resource + named in `spec.secretName`. \n The stored certificate will be renewed before + it expires (as configured by `spec.renewBefore`)." + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Desired state of the Certificate resource. + properties: + additionalOutputFormats: + description: AdditionalOutputFormats defines extra output formats + of the private key and signed certificate chain to be written to + this Certificate's target Secret. This is an Alpha Feature and is + only enabled with the `--feature-gates=AdditionalCertificateOutputFormats=true` + option on both the controller and webhook components. + items: + description: CertificateAdditionalOutputFormat defines an additional + output format of a Certificate resource. These contain supplementary + data formats of the signed certificate chain and paired private + key. + properties: + type: + description: Type is the name of the format type that should + be written to the Certificate's target Secret. + enum: + - DER + - CombinedPEM + type: string + required: + - type + type: object + type: array + commonName: + description: 'CommonName is a common name to be used on the Certificate. + The CommonName should have a length of 64 characters or fewer to + avoid generating invalid CSRs. This value is ignored by TLS clients + when any subject alt name is set. This is x509 behaviour: https://tools.ietf.org/html/rfc6125#section-6.4.4' + type: string + dnsNames: + description: DNSNames is a list of DNS subjectAltNames to be set on + the Certificate. + items: + type: string + type: array + duration: + description: The requested 'duration' (i.e. lifetime) of the Certificate. + This option may be ignored/overridden by some issuer types. If unset + this defaults to 90 days. Certificate will be renewed either 2/3 + through its duration or `renewBefore` period before its expiry, + whichever is later. Minimum accepted duration is 1 hour. Value must + be in units accepted by Go time.ParseDuration https://golang.org/pkg/time/#ParseDuration + type: string + emailAddresses: + description: EmailAddresses is a list of email subjectAltNames to + be set on the Certificate. + items: + type: string + type: array + encodeUsagesInRequest: + description: EncodeUsagesInRequest controls whether key usages should + be present in the CertificateRequest + type: boolean + ipAddresses: + description: IPAddresses is a list of IP address subjectAltNames to + be set on the Certificate. + items: + type: string + type: array + isCA: + description: IsCA will mark this Certificate as valid for certificate + signing. This will automatically add the `cert sign` usage to the + list of `usages`. + type: boolean + issuerRef: + description: IssuerRef is a reference to the issuer for this certificate. + If the `kind` field is not set, or set to `Issuer`, an Issuer resource + with the given name in the same namespace as the Certificate will + be used. If the `kind` field is set to `ClusterIssuer`, a ClusterIssuer + with the provided name will be used. The `name` field in this stanza + is required at all times. + properties: + group: + description: Group of the resource being referred to. + type: string + kind: + description: Kind of the resource being referred to. + type: string + name: + description: Name of the resource being referred to. + type: string + required: + - name + type: object + keystores: + description: Keystores configures additional keystore output formats + stored in the `secretName` Secret resource. + properties: + jks: + description: JKS configures options for storing a JKS keystore + in the `spec.secretName` Secret resource. + properties: + create: + description: Create enables JKS keystore creation for the + Certificate. If true, a file named `keystore.jks` will be + created in the target Secret resource, encrypted using the + password stored in `passwordSecretRef`. The keystore file + will be updated immediately. If the issuer provided a CA + certificate, a file named `truststore.jks` will also be + created in the target Secret resource, encrypted using the + password stored in `passwordSecretRef` containing the issuing + Certificate Authority + type: boolean + passwordSecretRef: + description: PasswordSecretRef is a reference to a key in + a Secret resource containing the password used to encrypt + the JKS keystore. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field + may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - create + - passwordSecretRef + type: object + pkcs12: + description: PKCS12 configures options for storing a PKCS12 keystore + in the `spec.secretName` Secret resource. + properties: + create: + description: Create enables PKCS12 keystore creation for the + Certificate. If true, a file named `keystore.p12` will be + created in the target Secret resource, encrypted using the + password stored in `passwordSecretRef`. The keystore file + will be updated immediately. If the issuer provided a CA + certificate, a file named `truststore.p12` will also be + created in the target Secret resource, encrypted using the + password stored in `passwordSecretRef` containing the issuing + Certificate Authority + type: boolean + passwordSecretRef: + description: PasswordSecretRef is a reference to a key in + a Secret resource containing the password used to encrypt + the PKCS12 keystore. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field + may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - create + - passwordSecretRef + type: object + type: object + literalSubject: + description: LiteralSubject is an LDAP formatted string that represents + the [X.509 Subject field](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6). + Use this *instead* of the Subject field if you need to ensure the + correct ordering of the RDN sequence, such as when issuing certs + for LDAP authentication. See https://github.com/cert-manager/cert-manager/issues/3203, + https://github.com/cert-manager/cert-manager/issues/4424. This field + is alpha level and is only supported by cert-manager installations + where LiteralCertificateSubject feature gate is enabled on both + cert-manager controller and webhook. + type: string + privateKey: + description: Options to control private keys used for the Certificate. + properties: + algorithm: + description: Algorithm is the private key algorithm of the corresponding + private key for this certificate. If provided, allowed values + are either `RSA`,`Ed25519` or `ECDSA` If `algorithm` is specified + and `size` is not provided, key size of 256 will be used for + `ECDSA` key algorithm and key size of 2048 will be used for + `RSA` key algorithm. key size is ignored when using the `Ed25519` + key algorithm. + enum: + - RSA + - ECDSA + - Ed25519 + type: string + encoding: + description: The private key cryptography standards (PKCS) encoding + for this certificate's private key to be encoded in. If provided, + allowed values are `PKCS1` and `PKCS8` standing for PKCS#1 and + PKCS#8, respectively. Defaults to `PKCS1` if not specified. + enum: + - PKCS1 + - PKCS8 + type: string + rotationPolicy: + description: RotationPolicy controls how private keys should be + regenerated when a re-issuance is being processed. If set to + Never, a private key will only be generated if one does not + already exist in the target `spec.secretName`. If one does exists + but it does not have the correct algorithm or size, a warning + will be raised to await user intervention. If set to Always, + a private key matching the specified requirements will be generated + whenever a re-issuance occurs. Default is 'Never' for backward + compatibility. + enum: + - Never + - Always + type: string + size: + description: Size is the key bit size of the corresponding private + key for this certificate. If `algorithm` is set to `RSA`, valid + values are `2048`, `4096` or `8192`, and will default to `2048` + if not specified. If `algorithm` is set to `ECDSA`, valid values + are `256`, `384` or `521`, and will default to `256` if not + specified. If `algorithm` is set to `Ed25519`, Size is ignored. + No other values are allowed. + type: integer + type: object + renewBefore: + description: How long before the currently issued certificate's expiry + cert-manager should renew the certificate. The default is 2/3 of + the issued certificate's duration. Minimum accepted value is 5 minutes. + Value must be in units accepted by Go time.ParseDuration https://golang.org/pkg/time/#ParseDuration + type: string + revisionHistoryLimit: + description: revisionHistoryLimit is the maximum number of CertificateRequest + revisions that are maintained in the Certificate's history. Each + revision represents a single `CertificateRequest` created by this + Certificate, either when it was created, renewed, or Spec was changed. + Revisions will be removed by oldest first if the number of revisions + exceeds this number. If set, revisionHistoryLimit must be a value + of `1` or greater. If unset (`nil`), revisions will not be garbage + collected. Default value is `nil`. + format: int32 + type: integer + secretName: + description: SecretName is the name of the secret resource that will + be automatically created and managed by this Certificate resource. + It will be populated with a private key and certificate, signed + by the denoted issuer. + type: string + secretTemplate: + description: SecretTemplate defines annotations and labels to be copied + to the Certificate's Secret. Labels and annotations on the Secret + will be changed as they appear on the SecretTemplate when added + or removed. SecretTemplate annotations are added in conjunction + with, and cannot overwrite, the base set of annotations cert-manager + sets on the Certificate's Secret. + properties: + annotations: + additionalProperties: + type: string + description: Annotations is a key value map to be copied to the + target Kubernetes Secret. + type: object + labels: + additionalProperties: + type: string + description: Labels is a key value map to be copied to the target + Kubernetes Secret. + type: object + type: object + subject: + description: Full X509 name specification (https://golang.org/pkg/crypto/x509/pkix/#Name). + properties: + countries: + description: Countries to be used on the Certificate. + items: + type: string + type: array + localities: + description: Cities to be used on the Certificate. + items: + type: string + type: array + organizationalUnits: + description: Organizational Units to be used on the Certificate. + items: + type: string + type: array + organizations: + description: Organizations to be used on the Certificate. + items: + type: string + type: array + postalCodes: + description: Postal codes to be used on the Certificate. + items: + type: string + type: array + provinces: + description: State/Provinces to be used on the Certificate. + items: + type: string + type: array + serialNumber: + description: Serial number to be used on the Certificate. + type: string + streetAddresses: + description: Street addresses to be used on the Certificate. + items: + type: string + type: array + type: object + uris: + description: URIs is a list of URI subjectAltNames to be set on the + Certificate. + items: + type: string + type: array + usages: + description: Usages is the set of x509 usages that are requested for + the certificate. Defaults to `digital signature` and `key encipherment` + if not specified. + items: + description: "KeyUsage specifies valid usage contexts for keys. + See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3 https://tools.ietf.org/html/rfc5280#section-4.2.1.12 + \n Valid KeyUsage values are as follows: \"signing\", \"digital + signature\", \"content commitment\", \"key encipherment\", \"key + agreement\", \"data encipherment\", \"cert sign\", \"crl sign\", + \"encipher only\", \"decipher only\", \"any\", \"server auth\", + \"client auth\", \"code signing\", \"email protection\", \"s/mime\", + \"ipsec end system\", \"ipsec tunnel\", \"ipsec user\", \"timestamping\", + \"ocsp signing\", \"microsoft sgc\", \"netscape sgc\"" + enum: + - signing + - digital signature + - content commitment + - key encipherment + - key agreement + - data encipherment + - cert sign + - crl sign + - encipher only + - decipher only + - any + - server auth + - client auth + - code signing + - email protection + - s/mime + - ipsec end system + - ipsec tunnel + - ipsec user + - timestamping + - ocsp signing + - microsoft sgc + - netscape sgc + type: string + type: array + required: + - issuerRef + - secretName + type: object + status: + description: Status of the Certificate. This is set and managed automatically. + properties: + conditions: + description: List of status conditions to indicate the status of certificates. + Known condition types are `Ready` and `Issuing`. + items: + description: CertificateCondition contains condition information + for an Certificate. + properties: + lastTransitionTime: + description: LastTransitionTime is the timestamp corresponding + to the last status change of this condition. + format: date-time + type: string + message: + description: Message is a human readable description of the + details of the last transition, complementing reason. + type: string + observedGeneration: + description: If set, this represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.condition[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the Certificate. + format: int64 + type: integer + reason: + description: Reason is a brief machine readable explanation + for the condition's last transition. + type: string + status: + description: Status of the condition, one of (`True`, `False`, + `Unknown`). + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: Type of the condition, known values are (`Ready`, + `Issuing`). + type: string + required: + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + failedIssuanceAttempts: + description: The number of continuous failed issuance attempts up + till now. This field gets removed (if set) on a successful issuance + and gets set to 1 if unset and an issuance has failed. If an issuance + has failed, the delay till the next issuance will be calculated + using formula time.Hour * 2 ^ (failedIssuanceAttempts - 1). + type: integer + lastFailureTime: + description: LastFailureTime is set only if the lastest issuance for + this Certificate failed and contains the time of the failure. If + an issuance has failed, the delay till the next issuance will be + calculated using formula time.Hour * 2 ^ (failedIssuanceAttempts + - 1). If the latest issuance has succeeded this field will be unset. + format: date-time + type: string + nextPrivateKeySecretName: + description: The name of the Secret resource containing the private + key to be used for the next certificate iteration. The keymanager + controller will automatically set this field if the `Issuing` condition + is set to `True`. It will automatically unset this field when the + Issuing condition is not set or False. + type: string + notAfter: + description: The expiration time of the certificate stored in the + secret named by this resource in `spec.secretName`. + format: date-time + type: string + notBefore: + description: The time after which the certificate stored in the secret + named by this resource in spec.secretName is valid. + format: date-time + type: string + renewalTime: + description: RenewalTime is the time at which the certificate will + be next renewed. If not set, no upcoming renewal is scheduled. + format: date-time + type: string + revision: + description: "The current 'revision' of the certificate as issued. + \n When a CertificateRequest resource is created, it will have the + `cert-manager.io/certificate-revision` set to one greater than the + current value of this field. \n Upon issuance, this field will be + set to the value of the annotation on the CertificateRequest resource + used to issue the certificate. \n Persisting the value on the CertificateRequest + resource allows the certificates controller to know whether a request + is part of an old issuance or if it is part of the ongoing revision's + issuance by checking if the revision value in the annotation is + greater than this field." + type: integer + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: networking + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + knative.dev/crd-install: "true" + name: certificates.networking.internal.knative.dev +spec: + group: networking.internal.knative.dev + names: + categories: + - knative-internal + - networking + kind: Certificate + plural: certificates + shortNames: + - kcert + singular: certificate + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].reason + name: Reason + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: Certificate is responsible for provisioning a SSL certificate + for the given hosts. It is a Knative abstraction for various SSL certificate + provisioning solutions (such as cert-manager or self-signed SSL certificate). + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: 'Spec is the desired state of the Certificate. More info: + https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + dnsNames: + description: DNSNames is a list of DNS names the Certificate could + support. The wildcard format of DNSNames (e.g. *.default.example.com) + is supported. + items: + type: string + type: array + domain: + description: Domain is the top level domain of the values for DNSNames. + type: string + secretName: + description: SecretName is the name of the secret resource to store + the SSL certificate in. + type: string + required: + - dnsNames + - secretName + type: object + status: + description: 'Status is the current state of the Certificate. More info: + https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + http01Challenges: + description: HTTP01Challenges is a list of HTTP01 challenges that + need to be fulfilled in order to get the TLS certificate.. + items: + description: HTTP01Challenge defines the status of a HTTP01 challenge + that a certificate needs to fulfill. + properties: + serviceName: + description: ServiceName is the name of the service to serve + HTTP01 challenge requests. + type: string + serviceNamespace: + description: ServiceNamespace is the namespace of the service + to serve HTTP01 challenge requests. + type: string + servicePort: + anyOf: + - type: integer + - type: string + description: ServicePort is the port of the service to serve + HTTP01 challenge requests. + x-kubernetes-int-or-string: true + url: + description: URL is the URL that the HTTP01 challenge is expected + to serve on. + type: string + type: object + type: array + notAfter: + description: The expiration time of the TLS certificate stored in + the secret named by this resource in spec.secretName. + format: date-time + type: string + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: challenges.acme.cert-manager.io +spec: + group: acme.cert-manager.io + names: + categories: + - cert-manager + - cert-manager-acme + kind: Challenge + listKind: ChallengeList + plural: challenges + singular: challenge + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.state + name: State + type: string + - jsonPath: .spec.dnsName + name: Domain + type: string + - jsonPath: .status.reason + name: Reason + priority: 1 + type: string + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: Challenge is a type to represent a Challenge request with an + ACME server + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + authorizationURL: + description: The URL to the ACME Authorization resource that this + challenge is a part of. + type: string + dnsName: + description: dnsName is the identifier that this challenge is for, + e.g. example.com. If the requested DNSName is a 'wildcard', this + field MUST be set to the non-wildcard domain, e.g. for `*.example.com`, + it must be `example.com`. + type: string + issuerRef: + description: References a properly configured ACME-type Issuer which + should be used to create this Challenge. If the Issuer does not + exist, processing will be retried. If the Issuer is not an 'ACME' + Issuer, an error will be returned and the Challenge will be marked + as failed. + properties: + group: + description: Group of the resource being referred to. + type: string + kind: + description: Kind of the resource being referred to. + type: string + name: + description: Name of the resource being referred to. + type: string + required: + - name + type: object + key: + description: 'The ACME challenge key for this challenge For HTTP01 + challenges, this is the value that must be responded with to complete + the HTTP01 challenge in the format: `.`. For DNS01 challenges, this is + the base64 encoded SHA256 sum of the `.` text that must be set as the TXT + record content.' + type: string + solver: + description: Contains the domain solving configuration that should + be used to solve this challenge resource. + properties: + dns01: + description: Configures cert-manager to attempt to complete authorizations + by performing the DNS01 challenge flow. + properties: + acmeDNS: + description: Use the 'ACME DNS' (https://github.com/joohoi/acme-dns) + API to manage DNS01 challenge records. + properties: + accountSecretRef: + description: A reference to a specific 'key' within a + Secret resource. In some instances, `key` is a required + field. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + host: + type: string + required: + - accountSecretRef + - host + type: object + akamai: + description: Use the Akamai DNS zone management API to manage + DNS01 challenge records. + properties: + accessTokenSecretRef: + description: A reference to a specific 'key' within a + Secret resource. In some instances, `key` is a required + field. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + clientSecretSecretRef: + description: A reference to a specific 'key' within a + Secret resource. In some instances, `key` is a required + field. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + clientTokenSecretRef: + description: A reference to a specific 'key' within a + Secret resource. In some instances, `key` is a required + field. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + serviceConsumerDomain: + type: string + required: + - accessTokenSecretRef + - clientSecretSecretRef + - clientTokenSecretRef + - serviceConsumerDomain + type: object + azureDNS: + description: Use the Microsoft Azure DNS API to manage DNS01 + challenge records. + properties: + clientID: + description: if both this and ClientSecret are left unset + MSI will be used + type: string + clientSecretSecretRef: + description: if both this and ClientID are left unset + MSI will be used + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + environment: + description: name of the Azure environment (default AzurePublicCloud) + enum: + - AzurePublicCloud + - AzureChinaCloud + - AzureGermanCloud + - AzureUSGovernmentCloud + type: string + hostedZoneName: + description: name of the DNS zone that should be used + type: string + managedIdentity: + description: managed identity configuration, can not be + used at the same time as clientID, clientSecretSecretRef + or tenantID + properties: + clientID: + description: client ID of the managed identity, can + not be used at the same time as resourceID + type: string + resourceID: + description: resource ID of the managed identity, + can not be used at the same time as clientID + type: string + type: object + resourceGroupName: + description: resource group the DNS zone is located in + type: string + subscriptionID: + description: ID of the Azure subscription + type: string + tenantID: + description: when specifying ClientID and ClientSecret + then this field is also needed + type: string + required: + - resourceGroupName + - subscriptionID + type: object + cloudDNS: + description: Use the Google Cloud DNS API to manage DNS01 + challenge records. + properties: + hostedZoneName: + description: HostedZoneName is an optional field that + tells cert-manager in which Cloud DNS zone the challenge + record has to be created. If left empty cert-manager + will automatically choose a zone. + type: string + project: + type: string + serviceAccountSecretRef: + description: A reference to a specific 'key' within a + Secret resource. In some instances, `key` is a required + field. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - project + type: object + cloudflare: + description: Use the Cloudflare API to manage DNS01 challenge + records. + properties: + apiKeySecretRef: + description: 'API key to use to authenticate with Cloudflare. + Note: using an API token to authenticate is now the + recommended method as it allows greater control of permissions.' + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + apiTokenSecretRef: + description: API token used to authenticate with Cloudflare. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + email: + description: Email of the account, only required when + using API key based authentication. + type: string + type: object + cnameStrategy: + description: CNAMEStrategy configures how the DNS01 provider + should handle CNAME records when found in DNS zones. + enum: + - None + - Follow + type: string + digitalocean: + description: Use the DigitalOcean DNS API to manage DNS01 + challenge records. + properties: + tokenSecretRef: + description: A reference to a specific 'key' within a + Secret resource. In some instances, `key` is a required + field. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - tokenSecretRef + type: object + rfc2136: + description: Use RFC2136 ("Dynamic Updates in the Domain Name + System") (https://datatracker.ietf.org/doc/rfc2136/) to + manage DNS01 challenge records. + properties: + nameserver: + description: The IP address or hostname of an authoritative + DNS server supporting RFC2136 in the form host:port. + If the host is an IPv6 address it must be enclosed in + square brackets (e.g [2001:db8::1]) ; port is optional. + This field is required. + type: string + tsigAlgorithm: + description: 'The TSIG Algorithm configured in the DNS + supporting RFC2136. Used only when ``tsigSecretSecretRef`` + and ``tsigKeyName`` are defined. Supported values are + (case-insensitive): ``HMACMD5`` (default), ``HMACSHA1``, + ``HMACSHA256`` or ``HMACSHA512``.' + type: string + tsigKeyName: + description: The TSIG Key name configured in the DNS. + If ``tsigSecretSecretRef`` is defined, this field is + required. + type: string + tsigSecretSecretRef: + description: The name of the secret containing the TSIG + value. If ``tsigKeyName`` is defined, this field is + required. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - nameserver + type: object + route53: + description: Use the AWS Route53 API to manage DNS01 challenge + records. + properties: + accessKeyID: + description: 'The AccessKeyID is used for authentication. + Cannot be set when SecretAccessKeyID is set. If neither + the Access Key nor Key ID are set, we fall-back to using + env vars, shared credentials file or AWS Instance metadata, + see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials' + type: string + accessKeyIDSecretRef: + description: 'The SecretAccessKey is used for authentication. + If set, pull the AWS access key ID from a key within + a Kubernetes Secret. Cannot be set when AccessKeyID + is set. If neither the Access Key nor Key ID are set, + we fall-back to using env vars, shared credentials file + or AWS Instance metadata, see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials' + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + hostedZoneID: + description: If set, the provider will manage only this + zone in Route53 and will not do an lookup using the + route53:ListHostedZonesByName api call. + type: string + region: + description: Always set the region when using AccessKeyID + and SecretAccessKey + type: string + role: + description: Role is a Role ARN which the Route53 provider + will assume using either the explicit credentials AccessKeyID/SecretAccessKey + or the inferred credentials from environment variables, + shared credentials file or AWS Instance metadata + type: string + secretAccessKeySecretRef: + description: 'The SecretAccessKey is used for authentication. + If neither the Access Key nor Key ID are set, we fall-back + to using env vars, shared credentials file or AWS Instance + metadata, see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials' + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - region + type: object + webhook: + description: Configure an external webhook based DNS01 challenge + solver to manage DNS01 challenge records. + properties: + config: + description: Additional configuration that should be passed + to the webhook apiserver when challenges are processed. + This can contain arbitrary JSON data. Secret values + should not be specified in this stanza. If secret values + are needed (e.g. credentials for a DNS service), you + should use a SecretKeySelector to reference a Secret + resource. For details on the schema of this field, consult + the webhook provider implementation's documentation. + x-kubernetes-preserve-unknown-fields: true + groupName: + description: The API group name that should be used when + POSTing ChallengePayload resources to the webhook apiserver. + This should be the same as the GroupName specified in + the webhook provider implementation. + type: string + solverName: + description: The name of the solver to use, as defined + in the webhook provider implementation. This will typically + be the name of the provider, e.g. 'cloudflare'. + type: string + required: + - groupName + - solverName + type: object + type: object + http01: + description: Configures cert-manager to attempt to complete authorizations + by performing the HTTP01 challenge flow. It is not possible + to obtain certificates for wildcard domain names (e.g. `*.example.com`) + using the HTTP01 challenge mechanism. + properties: + gatewayHTTPRoute: + description: The Gateway API is a sig-network community API + that models service networking in Kubernetes (https://gateway-api.sigs.k8s.io/). + The Gateway solver will create HTTPRoutes with the specified + labels in the same namespace as the challenge. This solver + is experimental, and fields / behaviour may change in the + future. + properties: + labels: + additionalProperties: + type: string + description: Custom labels that will be applied to HTTPRoutes + created by cert-manager while solving HTTP-01 challenges. + type: object + parentRefs: + description: 'When solving an HTTP-01 challenge, cert-manager + creates an HTTPRoute. cert-manager needs to know which + parentRefs should be used when creating the HTTPRoute. + Usually, the parentRef references a Gateway. See: https://gateway-api.sigs.k8s.io/api-types/httproute/#attaching-to-gateways' + items: + description: "ParentReference identifies an API object + (usually a Gateway) that can be considered a parent + of this resource (usually a route). The only kind + of parent resource with \"Core\" support is Gateway. + This API may be extended in the future to support + additional kinds of parent resources, such as HTTPRoute. + \n The API object must be valid in the cluster; the + Group and Kind must be registered in the cluster for + this reference to be valid." + properties: + group: + default: gateway.networking.k8s.io + description: "Group is the group of the referent. + When unspecified, \"gateway.networking.k8s.io\" + is inferred. To set the core API group (such as + for a \"Service\" kind referent), Group must be + explicitly set to \"\" (empty string). \n Support: + Core" + maxLength: 253 + pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + kind: + default: Gateway + description: "Kind is kind of the referent. \n Support: + Core (Gateway) \n Support: Implementation-specific + (Other Resources)" + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ + type: string + name: + description: "Name is the name of the referent. + \n Support: Core" + maxLength: 253 + minLength: 1 + type: string + namespace: + description: "Namespace is the namespace of the + referent. When unspecified, this refers to the + local namespace of the Route. \n Note that there + are specific rules for ParentRefs which cross + namespace boundaries. Cross-namespace references + are only valid if they are explicitly allowed + by something in the namespace they are referring + to. For example: Gateway has the AllowedRoutes + field, and ReferenceGrant provides a generic way + to enable any other kind of cross-namespace reference. + \n Support: Core" + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + port: + description: "Port is the network port this Route + targets. It can be interpreted differently based + on the type of parent resource. \n When the parent + resource is a Gateway, this targets all listeners + listening on the specified port that also support + this kind of Route(and select this Route). It's + not recommended to set `Port` unless the networking + behaviors specified in a Route must apply to a + specific port as opposed to a listener(s) whose + port(s) may be changed. When both Port and SectionName + are specified, the name and port of the selected + listener must match both specified values. \n + Implementations MAY choose to support other parent + resources. Implementations supporting other types + of parent resources MUST clearly document how/if + Port is interpreted. \n For the purpose of status, + an attachment is considered successful as long + as the parent resource accepts it partially. For + example, Gateway listeners can restrict which + Routes can attach to them by Route kind, namespace, + or hostname. If 1 of 2 Gateway listeners accept + attachment from the referencing Route, the Route + MUST be considered successfully attached. If no + Gateway listeners accept attachment from this + Route, the Route MUST be considered detached from + the Gateway. \n Support: Extended \n " + format: int32 + maximum: 65535 + minimum: 1 + type: integer + sectionName: + description: "SectionName is the name of a section + within the target resource. In the following resources, + SectionName is interpreted as the following: \n + * Gateway: Listener Name. When both Port (experimental) + and SectionName are specified, the name and port + of the selected listener must match both specified + values. \n Implementations MAY choose to support + attaching Routes to other resources. If that is + the case, they MUST clearly document how SectionName + is interpreted. \n When unspecified (empty string), + this will reference the entire resource. For the + purpose of status, an attachment is considered + successful if at least one section in the parent + resource accepts it. For example, Gateway listeners + can restrict which Routes can attach to them by + Route kind, namespace, or hostname. If 1 of 2 + Gateway listeners accept attachment from the referencing + Route, the Route MUST be considered successfully + attached. If no Gateway listeners accept attachment + from this Route, the Route MUST be considered + detached from the Gateway. \n Support: Core" + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - name + type: object + type: array + serviceType: + description: Optional service type for Kubernetes solver + service. Supported values are NodePort or ClusterIP. + If unset, defaults to NodePort. + type: string + type: object + ingress: + description: The ingress based HTTP01 challenge solver will + solve challenges by creating or modifying Ingress resources + in order to route requests for '/.well-known/acme-challenge/XYZ' + to 'challenge solver' pods that are provisioned by cert-manager + for each Challenge to be completed. + properties: + class: + description: This field configures the annotation `kubernetes.io/ingress.class` + when creating Ingress resources to solve ACME challenges + that use this challenge solver. Only one of `class`, + `name` or `ingressClassName` may be specified. + type: string + ingressClassName: + description: This field configures the field `ingressClassName` + on the created Ingress resources used to solve ACME + challenges that use this challenge solver. This is the + recommended way of configuring the ingress class. Only + one of `class`, `name` or `ingressClassName` may be + specified. + type: string + ingressTemplate: + description: Optional ingress template used to configure + the ACME challenge solver ingress used for HTTP01 challenges. + properties: + metadata: + description: ObjectMeta overrides for the ingress + used to solve HTTP01 challenges. Only the 'labels' + and 'annotations' fields may be set. If labels or + annotations overlap with in-built values, the values + here will override the in-built values. + properties: + annotations: + additionalProperties: + type: string + description: Annotations that should be added + to the created ACME HTTP01 solver ingress. + type: object + labels: + additionalProperties: + type: string + description: Labels that should be added to the + created ACME HTTP01 solver ingress. + type: object + type: object + type: object + name: + description: The name of the ingress resource that should + have ACME challenge solving routes inserted into it + in order to solve HTTP01 challenges. This is typically + used in conjunction with ingress controllers like ingress-gce, + which maintains a 1:1 mapping between external IPs and + ingress resources. Only one of `class`, `name` or `ingressClassName` + may be specified. + type: string + podTemplate: + description: Optional pod template used to configure the + ACME challenge solver pods used for HTTP01 challenges. + properties: + metadata: + description: ObjectMeta overrides for the pod used + to solve HTTP01 challenges. Only the 'labels' and + 'annotations' fields may be set. If labels or annotations + overlap with in-built values, the values here will + override the in-built values. + properties: + annotations: + additionalProperties: + type: string + description: Annotations that should be added + to the create ACME HTTP01 solver pods. + type: object + labels: + additionalProperties: + type: string + description: Labels that should be added to the + created ACME HTTP01 solver pods. + type: object + type: object + spec: + description: PodSpec defines overrides for the HTTP01 + challenge solver pod. Check ACMEChallengeSolverHTTP01IngressPodSpec + to find out currently supported fields. All other + fields will be ignored. + properties: + affinity: + description: If specified, the pod's scheduling + constraints + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer + to schedule pods to nodes that satisfy + the affinity expressions specified by + this field, but it may choose a node + that violates one or more of the expressions. + The node that is most preferred is the + one with the greatest sum of weights, + i.e. for each node that meets all of + the scheduling requirements (resource + request, requiredDuringScheduling affinity + expressions, etc.), compute a sum by + iterating through the elements of this + field and adding "weight" to the sum + if the node matches the corresponding + matchExpressions; the node(s) with the + highest sum are the most preferred. + items: + description: An empty preferred scheduling + term matches all objects with implicit + weight 0 (i.e. it's a no-op). A null + preferred scheduling term matches + no objects (i.e. is also a no-op). + properties: + preference: + description: A node selector term, + associated with the corresponding + weight. + properties: + matchExpressions: + description: A list of node + selector requirements by node's + labels. + items: + description: A node selector + requirement is a selector + that contains values, a + key, and an operator that + relates the key and values. + properties: + key: + description: The label + key that the selector + applies to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators are + In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array + of string values. If + the operator is In or + NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the + values array must be + empty. If the operator + is Gt or Lt, the values + array must have a single + element, which will + be interpreted as an + integer. This array + is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node + selector requirements by node's + fields. + items: + description: A node selector + requirement is a selector + that contains values, a + key, and an operator that + relates the key and values. + properties: + key: + description: The label + key that the selector + applies to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators are + In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array + of string values. If + the operator is In or + NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the + values array must be + empty. If the operator + is Gt or Lt, the values + array must have a single + element, which will + be interpreted as an + integer. This array + is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with + matching the corresponding nodeSelectorTerm, + in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements + specified by this field are not met + at scheduling time, the pod will not + be scheduled onto the node. If the affinity + requirements specified by this field + cease to be met at some point during + pod execution (e.g. due to an update), + the system may or may not try to eventually + evict the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node + selector terms. The terms are ORed. + items: + description: A null or empty node + selector term matches no objects. + The requirements of them are ANDed. + The TopologySelectorTerm type + implements a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node + selector requirements by node's + labels. + items: + description: A node selector + requirement is a selector + that contains values, a + key, and an operator that + relates the key and values. + properties: + key: + description: The label + key that the selector + applies to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators are + In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array + of string values. If + the operator is In or + NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the + values array must be + empty. If the operator + is Gt or Lt, the values + array must have a single + element, which will + be interpreted as an + integer. This array + is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node + selector requirements by node's + fields. + items: + description: A node selector + requirement is a selector + that contains values, a + key, and an operator that + relates the key and values. + properties: + key: + description: The label + key that the selector + applies to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators are + In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array + of string values. If + the operator is In or + NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the + values array must be + empty. If the operator + is Gt or Lt, the values + array must have a single + element, which will + be interpreted as an + integer. This array + is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling + rules (e.g. co-locate this pod in the same + node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer + to schedule pods to nodes that satisfy + the affinity expressions specified by + this field, but it may choose a node + that violates one or more of the expressions. + The node that is most preferred is the + one with the greatest sum of weights, + i.e. for each node that meets all of + the scheduling requirements (resource + request, requiredDuringScheduling affinity + expressions, etc.), compute a sum by + iterating through the elements of this + field and adding "weight" to the sum + if the node has pods which matches the + corresponding podAffinityTerm; the node(s) + with the highest sum are the most preferred. + items: + description: The weights of all of the + matched WeightedPodAffinityTerm fields + are added per-node to find the most + preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over + a set of resources, in this + case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, + a key, and an operator + that relates the key + and values. + properties: + key: + description: key is + the label key that + the selector applies + to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values + is an array of string + values. If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. This + array is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an element + of matchExpressions, whose + key field is "key", the + operator is "In", and + the values array contains + only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over + the set of namespaces that + the term applies to. The term + is applied to the union of + the namespaces selected by + this field and the ones listed + in the namespaces field. null + selector and null or empty + namespaces list means "this + pod's namespace". An empty + selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, + a key, and an operator + that relates the key + and values. + properties: + key: + description: key is + the label key that + the selector applies + to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values + is an array of string + values. If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. This + array is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an element + of matchExpressions, whose + key field is "key", the + operator is "In", and + the values array contains + only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace + names that the term applies + to. The term is applied to + the union of the namespaces + listed in this field and the + ones selected by namespaceSelector. + null or empty namespaces list + and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should + be co-located (affinity) or + not co-located (anti-affinity) + with the pods matching the + labelSelector in the specified + namespaces, where co-located + is defined as running on a + node whose value of the label + with key topologyKey matches + that of any node on which + any of the selected pods is + running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with + matching the corresponding podAffinityTerm, + in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements + specified by this field are not met + at scheduling time, the pod will not + be scheduled onto the node. If the affinity + requirements specified by this field + cease to be met at some point during + pod execution (e.g. due to a pod label + update), the system may or may not try + to eventually evict the pod from its + node. When there are multiple elements, + the lists of nodes corresponding to + each podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this + pod should be co-located (affinity) + or not co-located (anti-affinity) + with, where co-located is defined + as running on a node whose value of + the label with key matches + that of any node on which a pod of + the set of pods is running + properties: + labelSelector: + description: A label query over + a set of resources, in this case + pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a + key, and an operator that + relates the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator + represents a key's relationship + to a set of values. + Valid operators are + In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is + an array of string values. + If the operator is In + or NotIn, the values + array must be non-empty. + If the operator is Exists + or DoesNotExist, the + values array must be + empty. This array is + replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is + a map of {key,value} pairs. + A single {key,value} in the + matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", + the operator is "In", and + the values array contains + only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over + the set of namespaces that the + term applies to. The term is applied + to the union of the namespaces + selected by this field and the + ones listed in the namespaces + field. null selector and null + or empty namespaces list means + "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a + key, and an operator that + relates the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator + represents a key's relationship + to a set of values. + Valid operators are + In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is + an array of string values. + If the operator is In + or NotIn, the values + array must be non-empty. + If the operator is Exists + or DoesNotExist, the + values array must be + empty. This array is + replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is + a map of {key,value} pairs. + A single {key,value} in the + matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", + the operator is "In", and + the values array contains + only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The + term is applied to the union of + the namespaces listed in this + field and the ones selected by + namespaceSelector. null or empty + namespaces list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be + co-located (affinity) or not co-located + (anti-affinity) with the pods + matching the labelSelector in + the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. avoid putting this pod in the + same node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer + to schedule pods to nodes that satisfy + the anti-affinity expressions specified + by this field, but it may choose a node + that violates one or more of the expressions. + The node that is most preferred is the + one with the greatest sum of weights, + i.e. for each node that meets all of + the scheduling requirements (resource + request, requiredDuringScheduling anti-affinity + expressions, etc.), compute a sum by + iterating through the elements of this + field and adding "weight" to the sum + if the node has pods which matches the + corresponding podAffinityTerm; the node(s) + with the highest sum are the most preferred. + items: + description: The weights of all of the + matched WeightedPodAffinityTerm fields + are added per-node to find the most + preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over + a set of resources, in this + case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, + a key, and an operator + that relates the key + and values. + properties: + key: + description: key is + the label key that + the selector applies + to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values + is an array of string + values. If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. This + array is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an element + of matchExpressions, whose + key field is "key", the + operator is "In", and + the values array contains + only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over + the set of namespaces that + the term applies to. The term + is applied to the union of + the namespaces selected by + this field and the ones listed + in the namespaces field. null + selector and null or empty + namespaces list means "this + pod's namespace". An empty + selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, + a key, and an operator + that relates the key + and values. + properties: + key: + description: key is + the label key that + the selector applies + to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values + is an array of string + values. If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. This + array is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an element + of matchExpressions, whose + key field is "key", the + operator is "In", and + the values array contains + only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace + names that the term applies + to. The term is applied to + the union of the namespaces + listed in this field and the + ones selected by namespaceSelector. + null or empty namespaces list + and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should + be co-located (affinity) or + not co-located (anti-affinity) + with the pods matching the + labelSelector in the specified + namespaces, where co-located + is defined as running on a + node whose value of the label + with key topologyKey matches + that of any node on which + any of the selected pods is + running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with + matching the corresponding podAffinityTerm, + in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements + specified by this field are not met + at scheduling time, the pod will not + be scheduled onto the node. If the anti-affinity + requirements specified by this field + cease to be met at some point during + pod execution (e.g. due to a pod label + update), the system may or may not try + to eventually evict the pod from its + node. When there are multiple elements, + the lists of nodes corresponding to + each podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this + pod should be co-located (affinity) + or not co-located (anti-affinity) + with, where co-located is defined + as running on a node whose value of + the label with key matches + that of any node on which a pod of + the set of pods is running + properties: + labelSelector: + description: A label query over + a set of resources, in this case + pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a + key, and an operator that + relates the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator + represents a key's relationship + to a set of values. + Valid operators are + In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is + an array of string values. + If the operator is In + or NotIn, the values + array must be non-empty. + If the operator is Exists + or DoesNotExist, the + values array must be + empty. This array is + replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is + a map of {key,value} pairs. + A single {key,value} in the + matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", + the operator is "In", and + the values array contains + only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over + the set of namespaces that the + term applies to. The term is applied + to the union of the namespaces + selected by this field and the + ones listed in the namespaces + field. null selector and null + or empty namespaces list means + "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a + key, and an operator that + relates the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator + represents a key's relationship + to a set of values. + Valid operators are + In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is + an array of string values. + If the operator is In + or NotIn, the values + array must be non-empty. + If the operator is Exists + or DoesNotExist, the + values array must be + empty. This array is + replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is + a map of {key,value} pairs. + A single {key,value} in the + matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", + the operator is "In", and + the values array contains + only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The + term is applied to the union of + the namespaces listed in this + field and the ones selected by + namespaceSelector. null or empty + namespaces list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be + co-located (affinity) or not co-located + (anti-affinity) with the pods + matching the labelSelector in + the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + imagePullSecrets: + description: If specified, the pod's imagePullSecrets + items: + description: LocalObjectReference contains enough + information to let you locate the referenced + object inside the same namespace. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector which + must be true for the pod to fit on a node. Selector + which must match a node''s labels for the pod + to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + priorityClassName: + description: If specified, the pod's priorityClassName. + type: string + serviceAccountName: + description: If specified, the pod's service account + type: string + tolerations: + description: If specified, the pod's tolerations. + items: + description: The pod this Toleration is attached + to tolerates any taint that matches the triple + using the matching operator + . + properties: + effect: + description: Effect indicates the taint + effect to match. Empty means match all + taint effects. When specified, allowed + values are NoSchedule, PreferNoSchedule + and NoExecute. + type: string + key: + description: Key is the taint key that the + toleration applies to. Empty means match + all taint keys. If the key is empty, operator + must be Exists; this combination means + to match all values and all keys. + type: string + operator: + description: Operator represents a key's + relationship to the value. Valid operators + are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, + so that a pod can tolerate all taints + of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents + the period of time the toleration (which + must be of effect NoExecute, otherwise + this field is ignored) tolerates the taint. + By default, it is not set, which means + tolerate the taint forever (do not evict). + Zero and negative values will be treated + as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the + toleration matches to. If the operator + is Exists, the value should be empty, + otherwise just a regular string. + type: string + type: object + type: array + type: object + type: object + serviceType: + description: Optional service type for Kubernetes solver + service. Supported values are NodePort or ClusterIP. + If unset, defaults to NodePort. + type: string + type: object + type: object + selector: + description: Selector selects a set of DNSNames on the Certificate + resource that should be solved using this challenge solver. + If not specified, the solver will be treated as the 'default' + solver with the lowest priority, i.e. if any other solver has + a more specific match, it will be used instead. + properties: + dnsNames: + description: List of DNSNames that this solver will be used + to solve. If specified and a match is found, a dnsNames + selector will take precedence over a dnsZones selector. + If multiple solvers match with the same dnsNames value, + the solver with the most matching labels in matchLabels + will be selected. If neither has more matches, the solver + defined earlier in the list will be selected. + items: + type: string + type: array + dnsZones: + description: List of DNSZones that this solver will be used + to solve. The most specific DNS zone match specified here + will take precedence over other DNS zone matches, so a solver + specifying sys.example.com will be selected over one specifying + example.com for the domain www.sys.example.com. If multiple + solvers match with the same dnsZones value, the solver with + the most matching labels in matchLabels will be selected. + If neither has more matches, the solver defined earlier + in the list will be selected. + items: + type: string + type: array + matchLabels: + additionalProperties: + type: string + description: A label selector that is used to refine the set + of certificate's that this challenge solver will apply to. + type: object + type: object + type: object + token: + description: The ACME challenge token for this challenge. This is + the raw value returned from the ACME server. + type: string + type: + description: The type of ACME challenge this resource represents. + One of "HTTP-01" or "DNS-01". + enum: + - HTTP-01 + - DNS-01 + type: string + url: + description: The URL of the ACME Challenge resource for this challenge. + This can be used to lookup details about the status of this challenge. + type: string + wildcard: + description: wildcard will be true if this challenge is for a wildcard + identifier, for example '*.example.com'. + type: boolean + required: + - authorizationURL + - dnsName + - issuerRef + - key + - solver + - token + - type + - url + type: object + status: + properties: + presented: + description: presented will be set to true if the challenge values + for this challenge are currently 'presented'. This *does not* imply + the self check is passing. Only that the values have been 'submitted' + for the appropriate challenge mechanism (i.e. the DNS01 TXT record + has been presented, or the HTTP01 configuration has been configured). + type: boolean + processing: + description: Used to denote whether this challenge should be processed + or not. This field will only be set to true by the 'scheduling' + component. It will only be set to false by the 'challenges' controller, + after the challenge has reached a final state or timed out. If this + field is set to false, the challenge controller will not take any + more action. + type: boolean + reason: + description: Contains human readable information on why the Challenge + is in the current state. + type: string + state: + description: Contains the current 'state' of the challenge. If not + set, the state of the challenge is unknown. + enum: + - valid + - ready + - pending + - processing + - invalid + - expired + - errored + type: string + type: object + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/addressable: "true" + knative.dev/crd-install: "true" + kustomize.component: knative + messaging.knative.dev/subscribable: "true" + name: channels.messaging.knative.dev +spec: + group: messaging.knative.dev + names: + categories: + - all + - knative + - messaging + - channel + kind: Channel + plural: channels + shortNames: + - ch + singular: channel + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.address.url + name: URL + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: Channel represents a generic Channel. It is normally used when + we want a Channel, but do not need a specific Channel implementation. + properties: + spec: + description: Spec defines the desired state of the Channel. + properties: + channelTemplate: + description: ChannelTemplate specifies which Channel CRD to use to + create the CRD Channel backing this Channel. This is immutable after + creation. Normally this is set by the Channel defaulter, not directly + by the user. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this + representation of an object. Servers should convert recognized + schemas to the latest internal value, and may reject unrecognized + values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: Spec defines the Spec to use for each channel created. + Passed in verbatim to the Channel CRD as Spec section. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + delivery: + description: DeliverySpec contains the default delivery spec for each + subscription to this Channelable. Each subscription delivery spec, + if any, overrides this global delivery spec. + properties: + backoffDelay: + description: 'BackoffDelay is the delay before retrying. More + information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html + - https://en.wikipedia.org/wiki/ISO_8601 For linear policy, + backoff delay is backoffDelay*. For exponential + policy, backoff delay is backoffDelay*2^.' + type: string + backoffPolicy: + description: BackoffPolicy is the retry backoff policy (linear, + exponential). + type: string + deadLetterSink: + description: DeadLetterSink is the sink receiving event that could + not be sent to a destination. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and + non-empty host) pointing to the target or a relative URI. + Relative URIs will be resolved using the base URI retrieved + from Ref. + type: string + type: object + retry: + description: Retry is the minimum number of retries the sender + should attempt when sending an event before moving it to the + dead letter sink. + format: int32 + type: integer + type: object + x-kubernetes-preserve-unknown-fields: true + subscribers: + description: This is the list of subscriptions for this subscribable. + items: + properties: + delivery: + description: DeliverySpec contains options controlling the event + delivery + properties: + backoffDelay: + description: 'BackoffDelay is the delay before retrying. + More information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html + - https://en.wikipedia.org/wiki/ISO_8601 For linear policy, + backoff delay is backoffDelay*. For exponential + policy, backoff delay is backoffDelay*2^.' + type: string + backoffPolicy: + description: BackoffPolicy is the retry backoff policy (linear, + exponential). + type: string + deadLetterSink: + description: DeadLetterSink is the sink receiving event + that could not be sent to a destination. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the + object holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme + and non-empty host) pointing to the target or a relative + URI. Relative URIs will be resolved using the base + URI retrieved from Ref. + type: string + type: object + retry: + description: Retry is the minimum number of retries the + sender should attempt when sending an event before moving + it to the dead letter sink. + format: int32 + type: integer + type: object + x-kubernetes-preserve-unknown-fields: true + generation: + description: Generation of the origin of the subscriber with + uid:UID. + format: int64 + type: integer + replyUri: + description: ReplyURI is the endpoint for the reply + type: string + subscriberUri: + description: SubscriberURI is the endpoint for the subscriber + type: string + uid: + description: UID is used to understand the origin of the subscriber. + type: string + type: object + type: array + type: object + status: + description: Status represents the current state of the Channel. This + data may be out of date. + properties: + address: + properties: + url: + type: string + type: object + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + channel: + description: Channel is an KReference to the Channel CRD backing this + Channel. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object holding + it if left out.' + type: string + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + deadLetterChannel: + description: DeadLetterChannel is a KReference and is set by the channel + when it supports native error handling via a channel Failed messages + are delivered here. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object holding + it if left out.' + type: string + type: object + deadLetterSinkUri: + description: DeadLetterSinkURI is the resolved URI of the dead letter + sink that will be used as a fallback when not specified by Triggers. + type: string + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + subscribers: + description: This is the list of subscription's statuses for this + channel. + items: + properties: + message: + description: A human readable message indicating details of + Ready status. + type: string + observedGeneration: + description: Generation of the origin of the subscriber with + uid:UID. + format: int64 + type: integer + ready: + description: Status of the subscriber. + type: string + uid: + description: UID is used to understand the origin of the subscriber. + type: string + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: networking + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + knative.dev/crd-install: "true" + name: clusterdomainclaims.networking.internal.knative.dev +spec: + group: networking.internal.knative.dev + names: + categories: + - knative-internal + - networking + kind: ClusterDomainClaim + plural: clusterdomainclaims + shortNames: + - cdc + singular: clusterdomainclaim + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: ClusterDomainClaim is a cluster-wide reservation for a particular + domain name. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: 'Spec is the desired state of the ClusterDomainClaim. More + info: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + namespace: + description: Namespace is the namespace which is allowed to create + a DomainMapping using this ClusterDomainClaim's name. + type: string + required: + - namespace + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: clusterissuers.cert-manager.io +spec: + group: cert-manager.io + names: + categories: + - cert-manager + kind: ClusterIssuer + listKind: ClusterIssuerList + plural: clusterissuers + singular: clusterissuer + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + priority: 1 + type: string + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: A ClusterIssuer represents a certificate issuing authority which + can be referenced as part of `issuerRef` fields. It is similar to an Issuer, + however it is cluster-scoped and therefore can be referenced by resources + that exist in *any* namespace, not just the same namespace as the referent. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Desired state of the ClusterIssuer resource. + properties: + acme: + description: ACME configures this issuer to communicate with a RFC8555 + (ACME) server to obtain signed x509 certificates. + properties: + caBundle: + description: Base64-encoded bundle of PEM CAs which can be used + to validate the certificate chain presented by the ACME server. + Mutually exclusive with SkipTLSVerify; prefer using CABundle + to prevent various kinds of security vulnerabilities. If CABundle + and SkipTLSVerify are unset, the system certificate bundle inside + the container is used to validate the TLS connection. + format: byte + type: string + disableAccountKeyGeneration: + description: Enables or disables generating a new ACME account + key. If true, the Issuer resource will *not* request a new account + but will expect the account key to be supplied via an existing + secret. If false, the cert-manager system will generate a new + ACME account key for the Issuer. Defaults to false. + type: boolean + email: + description: Email is the email address to be associated with + the ACME account. This field is optional, but it is strongly + recommended to be set. It will be used to contact you in case + of issues with your account or certificates, including expiry + notification emails. This field may be updated after the account + is initially registered. + type: string + enableDurationFeature: + description: Enables requesting a Not After date on certificates + that matches the duration of the certificate. This is not supported + by all ACME servers like Let's Encrypt. If set to true when + the ACME server does not support it it will create an error + on the Order. Defaults to false. + type: boolean + externalAccountBinding: + description: ExternalAccountBinding is a reference to a CA external + account of the ACME server. If set, upon registration cert-manager + will attempt to associate the given external account credentials + with the registered ACME account. + properties: + keyAlgorithm: + description: 'Deprecated: keyAlgorithm field exists for historical + compatibility reasons and should not be used. The algorithm + is now hardcoded to HS256 in golang/x/crypto/acme.' + enum: + - HS256 + - HS384 + - HS512 + type: string + keyID: + description: keyID is the ID of the CA key that the External + Account is bound to. + type: string + keySecretRef: + description: keySecretRef is a Secret Key Selector referencing + a data item in a Kubernetes Secret which holds the symmetric + MAC key of the External Account Binding. The `key` is the + index string that is paired with the key data in the Secret + and should not be confused with the key data itself, or + indeed with the External Account Binding keyID above. The + secret key stored in the Secret **must** be un-padded, base64 + URL encoded data. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field + may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - keyID + - keySecretRef + type: object + preferredChain: + description: 'PreferredChain is the chain to use if the ACME server + outputs multiple. PreferredChain is no guarantee that this one + gets delivered by the ACME endpoint. For example, for Let''s + Encrypt''s DST crosssign you would use: "DST Root CA X3" or + "ISRG Root X1" for the newer Let''s Encrypt root CA. This value + picks the first certificate bundle in the ACME alternative chains + that has a certificate with this value as its issuer''s CN' + maxLength: 64 + type: string + privateKeySecretRef: + description: PrivateKey is the name of a Kubernetes Secret resource + that will be used to store the automatically generated ACME + account private key. Optionally, a `key` may be specified to + select a specific entry within the named Secret resource. If + `key` is not specified, a default of `tls.key` will be used. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field may + be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + server: + description: 'Server is the URL used to access the ACME server''s + ''directory'' endpoint. For example, for Let''s Encrypt''s staging + endpoint, you would use: "https://acme-staging-v02.api.letsencrypt.org/directory". + Only ACME v2 endpoints (i.e. RFC 8555) are supported.' + type: string + skipTLSVerify: + description: 'INSECURE: Enables or disables validation of the + ACME server TLS certificate. If true, requests to the ACME server + will not have the TLS certificate chain validated. Mutually + exclusive with CABundle; prefer using CABundle to prevent various + kinds of security vulnerabilities. Only enable this option in + development environments. If CABundle and SkipTLSVerify are + unset, the system certificate bundle inside the container is + used to validate the TLS connection. Defaults to false.' + type: boolean + solvers: + description: 'Solvers is a list of challenge solvers that will + be used to solve ACME challenges for the matching domains. Solver + configurations must be provided in order to obtain certificates + from an ACME server. For more information, see: https://cert-manager.io/docs/configuration/acme/' + items: + description: An ACMEChallengeSolver describes how to solve ACME + challenges for the issuer it is part of. A selector may be + provided to use different solving strategies for different + DNS names. Only one of HTTP01 or DNS01 must be provided. + properties: + dns01: + description: Configures cert-manager to attempt to complete + authorizations by performing the DNS01 challenge flow. + properties: + acmeDNS: + description: Use the 'ACME DNS' (https://github.com/joohoi/acme-dns) + API to manage DNS01 challenge records. + properties: + accountSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + host: + type: string + required: + - accountSecretRef + - host + type: object + akamai: + description: Use the Akamai DNS zone management API + to manage DNS01 challenge records. + properties: + accessTokenSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + clientSecretSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + clientTokenSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + serviceConsumerDomain: + type: string + required: + - accessTokenSecretRef + - clientSecretSecretRef + - clientTokenSecretRef + - serviceConsumerDomain + type: object + azureDNS: + description: Use the Microsoft Azure DNS API to manage + DNS01 challenge records. + properties: + clientID: + description: if both this and ClientSecret are left + unset MSI will be used + type: string + clientSecretSecretRef: + description: if both this and ClientID are left + unset MSI will be used + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + environment: + description: name of the Azure environment (default + AzurePublicCloud) + enum: + - AzurePublicCloud + - AzureChinaCloud + - AzureGermanCloud + - AzureUSGovernmentCloud + type: string + hostedZoneName: + description: name of the DNS zone that should be + used + type: string + managedIdentity: + description: managed identity configuration, can + not be used at the same time as clientID, clientSecretSecretRef + or tenantID + properties: + clientID: + description: client ID of the managed identity, + can not be used at the same time as resourceID + type: string + resourceID: + description: resource ID of the managed identity, + can not be used at the same time as clientID + type: string + type: object + resourceGroupName: + description: resource group the DNS zone is located + in + type: string + subscriptionID: + description: ID of the Azure subscription + type: string + tenantID: + description: when specifying ClientID and ClientSecret + then this field is also needed + type: string + required: + - resourceGroupName + - subscriptionID + type: object + cloudDNS: + description: Use the Google Cloud DNS API to manage + DNS01 challenge records. + properties: + hostedZoneName: + description: HostedZoneName is an optional field + that tells cert-manager in which Cloud DNS zone + the challenge record has to be created. If left + empty cert-manager will automatically choose a + zone. + type: string + project: + type: string + serviceAccountSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - project + type: object + cloudflare: + description: Use the Cloudflare API to manage DNS01 + challenge records. + properties: + apiKeySecretRef: + description: 'API key to use to authenticate with + Cloudflare. Note: using an API token to authenticate + is now the recommended method as it allows greater + control of permissions.' + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + apiTokenSecretRef: + description: API token used to authenticate with + Cloudflare. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + email: + description: Email of the account, only required + when using API key based authentication. + type: string + type: object + cnameStrategy: + description: CNAMEStrategy configures how the DNS01 + provider should handle CNAME records when found in + DNS zones. + enum: + - None + - Follow + type: string + digitalocean: + description: Use the DigitalOcean DNS API to manage + DNS01 challenge records. + properties: + tokenSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - tokenSecretRef + type: object + rfc2136: + description: Use RFC2136 ("Dynamic Updates in the Domain + Name System") (https://datatracker.ietf.org/doc/rfc2136/) + to manage DNS01 challenge records. + properties: + nameserver: + description: The IP address or hostname of an authoritative + DNS server supporting RFC2136 in the form host:port. + If the host is an IPv6 address it must be enclosed + in square brackets (e.g [2001:db8::1]) ; port + is optional. This field is required. + type: string + tsigAlgorithm: + description: 'The TSIG Algorithm configured in the + DNS supporting RFC2136. Used only when ``tsigSecretSecretRef`` + and ``tsigKeyName`` are defined. Supported values + are (case-insensitive): ``HMACMD5`` (default), + ``HMACSHA1``, ``HMACSHA256`` or ``HMACSHA512``.' + type: string + tsigKeyName: + description: The TSIG Key name configured in the + DNS. If ``tsigSecretSecretRef`` is defined, this + field is required. + type: string + tsigSecretSecretRef: + description: The name of the secret containing the + TSIG value. If ``tsigKeyName`` is defined, this + field is required. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - nameserver + type: object + route53: + description: Use the AWS Route53 API to manage DNS01 + challenge records. + properties: + accessKeyID: + description: 'The AccessKeyID is used for authentication. + Cannot be set when SecretAccessKeyID is set. If + neither the Access Key nor Key ID are set, we + fall-back to using env vars, shared credentials + file or AWS Instance metadata, see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials' + type: string + accessKeyIDSecretRef: + description: 'The SecretAccessKey is used for authentication. + If set, pull the AWS access key ID from a key + within a Kubernetes Secret. Cannot be set when + AccessKeyID is set. If neither the Access Key + nor Key ID are set, we fall-back to using env + vars, shared credentials file or AWS Instance + metadata, see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials' + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + hostedZoneID: + description: If set, the provider will manage only + this zone in Route53 and will not do an lookup + using the route53:ListHostedZonesByName api call. + type: string + region: + description: Always set the region when using AccessKeyID + and SecretAccessKey + type: string + role: + description: Role is a Role ARN which the Route53 + provider will assume using either the explicit + credentials AccessKeyID/SecretAccessKey or the + inferred credentials from environment variables, + shared credentials file or AWS Instance metadata + type: string + secretAccessKeySecretRef: + description: 'The SecretAccessKey is used for authentication. + If neither the Access Key nor Key ID are set, + we fall-back to using env vars, shared credentials + file or AWS Instance metadata, see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials' + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - region + type: object + webhook: + description: Configure an external webhook based DNS01 + challenge solver to manage DNS01 challenge records. + properties: + config: + description: Additional configuration that should + be passed to the webhook apiserver when challenges + are processed. This can contain arbitrary JSON + data. Secret values should not be specified in + this stanza. If secret values are needed (e.g. + credentials for a DNS service), you should use + a SecretKeySelector to reference a Secret resource. + For details on the schema of this field, consult + the webhook provider implementation's documentation. + x-kubernetes-preserve-unknown-fields: true + groupName: + description: The API group name that should be used + when POSTing ChallengePayload resources to the + webhook apiserver. This should be the same as + the GroupName specified in the webhook provider + implementation. + type: string + solverName: + description: The name of the solver to use, as defined + in the webhook provider implementation. This will + typically be the name of the provider, e.g. 'cloudflare'. + type: string + required: + - groupName + - solverName + type: object + type: object + http01: + description: Configures cert-manager to attempt to complete + authorizations by performing the HTTP01 challenge flow. + It is not possible to obtain certificates for wildcard + domain names (e.g. `*.example.com`) using the HTTP01 challenge + mechanism. + properties: + gatewayHTTPRoute: + description: The Gateway API is a sig-network community + API that models service networking in Kubernetes (https://gateway-api.sigs.k8s.io/). + The Gateway solver will create HTTPRoutes with the + specified labels in the same namespace as the challenge. + This solver is experimental, and fields / behaviour + may change in the future. + properties: + labels: + additionalProperties: + type: string + description: Custom labels that will be applied + to HTTPRoutes created by cert-manager while solving + HTTP-01 challenges. + type: object + parentRefs: + description: 'When solving an HTTP-01 challenge, + cert-manager creates an HTTPRoute. cert-manager + needs to know which parentRefs should be used + when creating the HTTPRoute. Usually, the parentRef + references a Gateway. See: https://gateway-api.sigs.k8s.io/api-types/httproute/#attaching-to-gateways' + items: + description: "ParentReference identifies an API + object (usually a Gateway) that can be considered + a parent of this resource (usually a route). + The only kind of parent resource with \"Core\" + support is Gateway. This API may be extended + in the future to support additional kinds of + parent resources, such as HTTPRoute. \n The + API object must be valid in the cluster; the + Group and Kind must be registered in the cluster + for this reference to be valid." + properties: + group: + default: gateway.networking.k8s.io + description: "Group is the group of the referent. + When unspecified, \"gateway.networking.k8s.io\" + is inferred. To set the core API group (such + as for a \"Service\" kind referent), Group + must be explicitly set to \"\" (empty string). + \n Support: Core" + maxLength: 253 + pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + kind: + default: Gateway + description: "Kind is kind of the referent. + \n Support: Core (Gateway) \n Support: Implementation-specific + (Other Resources)" + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ + type: string + name: + description: "Name is the name of the referent. + \n Support: Core" + maxLength: 253 + minLength: 1 + type: string + namespace: + description: "Namespace is the namespace of + the referent. When unspecified, this refers + to the local namespace of the Route. \n + Note that there are specific rules for ParentRefs + which cross namespace boundaries. Cross-namespace + references are only valid if they are explicitly + allowed by something in the namespace they + are referring to. For example: Gateway has + the AllowedRoutes field, and ReferenceGrant + provides a generic way to enable any other + kind of cross-namespace reference. \n Support: + Core" + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + port: + description: "Port is the network port this + Route targets. It can be interpreted differently + based on the type of parent resource. \n + When the parent resource is a Gateway, this + targets all listeners listening on the specified + port that also support this kind of Route(and + select this Route). It's not recommended + to set `Port` unless the networking behaviors + specified in a Route must apply to a specific + port as opposed to a listener(s) whose port(s) + may be changed. When both Port and SectionName + are specified, the name and port of the + selected listener must match both specified + values. \n Implementations MAY choose to + support other parent resources. Implementations + supporting other types of parent resources + MUST clearly document how/if Port is interpreted. + \n For the purpose of status, an attachment + is considered successful as long as the + parent resource accepts it partially. For + example, Gateway listeners can restrict + which Routes can attach to them by Route + kind, namespace, or hostname. If 1 of 2 + Gateway listeners accept attachment from + the referencing Route, the Route MUST be + considered successfully attached. If no + Gateway listeners accept attachment from + this Route, the Route MUST be considered + detached from the Gateway. \n Support: Extended + \n " + format: int32 + maximum: 65535 + minimum: 1 + type: integer + sectionName: + description: "SectionName is the name of a + section within the target resource. In the + following resources, SectionName is interpreted + as the following: \n * Gateway: Listener + Name. When both Port (experimental) and + SectionName are specified, the name and + port of the selected listener must match + both specified values. \n Implementations + MAY choose to support attaching Routes to + other resources. If that is the case, they + MUST clearly document how SectionName is + interpreted. \n When unspecified (empty + string), this will reference the entire + resource. For the purpose of status, an + attachment is considered successful if at + least one section in the parent resource + accepts it. For example, Gateway listeners + can restrict which Routes can attach to + them by Route kind, namespace, or hostname. + If 1 of 2 Gateway listeners accept attachment + from the referencing Route, the Route MUST + be considered successfully attached. If + no Gateway listeners accept attachment from + this Route, the Route MUST be considered + detached from the Gateway. \n Support: Core" + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - name + type: object + type: array + serviceType: + description: Optional service type for Kubernetes + solver service. Supported values are NodePort + or ClusterIP. If unset, defaults to NodePort. + type: string + type: object + ingress: + description: The ingress based HTTP01 challenge solver + will solve challenges by creating or modifying Ingress + resources in order to route requests for '/.well-known/acme-challenge/XYZ' + to 'challenge solver' pods that are provisioned by + cert-manager for each Challenge to be completed. + properties: + class: + description: This field configures the annotation + `kubernetes.io/ingress.class` when creating Ingress + resources to solve ACME challenges that use this + challenge solver. Only one of `class`, `name` + or `ingressClassName` may be specified. + type: string + ingressClassName: + description: This field configures the field `ingressClassName` + on the created Ingress resources used to solve + ACME challenges that use this challenge solver. + This is the recommended way of configuring the + ingress class. Only one of `class`, `name` or + `ingressClassName` may be specified. + type: string + ingressTemplate: + description: Optional ingress template used to configure + the ACME challenge solver ingress used for HTTP01 + challenges. + properties: + metadata: + description: ObjectMeta overrides for the ingress + used to solve HTTP01 challenges. Only the + 'labels' and 'annotations' fields may be set. + If labels or annotations overlap with in-built + values, the values here will override the + in-built values. + properties: + annotations: + additionalProperties: + type: string + description: Annotations that should be + added to the created ACME HTTP01 solver + ingress. + type: object + labels: + additionalProperties: + type: string + description: Labels that should be added + to the created ACME HTTP01 solver ingress. + type: object + type: object + type: object + name: + description: The name of the ingress resource that + should have ACME challenge solving routes inserted + into it in order to solve HTTP01 challenges. This + is typically used in conjunction with ingress + controllers like ingress-gce, which maintains + a 1:1 mapping between external IPs and ingress + resources. Only one of `class`, `name` or `ingressClassName` + may be specified. + type: string + podTemplate: + description: Optional pod template used to configure + the ACME challenge solver pods used for HTTP01 + challenges. + properties: + metadata: + description: ObjectMeta overrides for the pod + used to solve HTTP01 challenges. Only the + 'labels' and 'annotations' fields may be set. + If labels or annotations overlap with in-built + values, the values here will override the + in-built values. + properties: + annotations: + additionalProperties: + type: string + description: Annotations that should be + added to the create ACME HTTP01 solver + pods. + type: object + labels: + additionalProperties: + type: string + description: Labels that should be added + to the created ACME HTTP01 solver pods. + type: object + type: object + spec: + description: PodSpec defines overrides for the + HTTP01 challenge solver pod. Check ACMEChallengeSolverHTTP01IngressPodSpec + to find out currently supported fields. All + other fields will be ignored. + properties: + affinity: + description: If specified, the pod's scheduling + constraints + properties: + nodeAffinity: + description: Describes node affinity + scheduling rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will + prefer to schedule pods to nodes + that satisfy the affinity expressions + specified by this field, but it + may choose a node that violates + one or more of the expressions. + The node that is most preferred + is the one with the greatest sum + of weights, i.e. for each node + that meets all of the scheduling + requirements (resource request, + requiredDuringScheduling affinity + expressions, etc.), compute a + sum by iterating through the elements + of this field and adding "weight" + to the sum if the node matches + the corresponding matchExpressions; + the node(s) with the highest sum + are the most preferred. + items: + description: An empty preferred + scheduling term matches all + objects with implicit weight + 0 (i.e. it's a no-op). A null + preferred scheduling term matches + no objects (i.e. is also a no-op). + properties: + preference: + description: A node selector + term, associated with the + corresponding weight. + properties: + matchExpressions: + description: A list of + node selector requirements + by node's labels. + items: + description: A node + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: The + label key that + the selector applies + to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators + are In, NotIn, + Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An + array of string + values. If the + operator is In + or NotIn, the + values array must + be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + If the operator + is Gt or Lt, the + values array must + have a single + element, which + will be interpreted + as an integer. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of + node selector requirements + by node's fields. + items: + description: A node + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: The + label key that + the selector applies + to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators + are In, NotIn, + Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An + array of string + values. If the + operator is In + or NotIn, the + values array must + be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + If the operator + is Gt or Lt, the + values array must + have a single + element, which + will be interpreted + as an integer. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated + with matching the corresponding + nodeSelectorTerm, in the + range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements + specified by this field are not + met at scheduling time, the pod + will not be scheduled onto the + node. If the affinity requirements + specified by this field cease + to be met at some point during + pod execution (e.g. due to an + update), the system may or may + not try to eventually evict the + pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list + of node selector terms. The + terms are ORed. + items: + description: A null or empty + node selector term matches + no objects. The requirements + of them are ANDed. The TopologySelectorTerm + type implements a subset + of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of + node selector requirements + by node's labels. + items: + description: A node + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: The + label key that + the selector applies + to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators + are In, NotIn, + Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An + array of string + values. If the + operator is In + or NotIn, the + values array must + be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + If the operator + is Gt or Lt, the + values array must + have a single + element, which + will be interpreted + as an integer. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of + node selector requirements + by node's fields. + items: + description: A node + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: The + label key that + the selector applies + to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators + are In, NotIn, + Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An + array of string + values. If the + operator is In + or NotIn, the + values array must + be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + If the operator + is Gt or Lt, the + values array must + have a single + element, which + will be interpreted + as an integer. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity + scheduling rules (e.g. co-locate this + pod in the same node, zone, etc. as + some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will + prefer to schedule pods to nodes + that satisfy the affinity expressions + specified by this field, but it + may choose a node that violates + one or more of the expressions. + The node that is most preferred + is the one with the greatest sum + of weights, i.e. for each node + that meets all of the scheduling + requirements (resource request, + requiredDuringScheduling affinity + expressions, etc.), compute a + sum by iterating through the elements + of this field and adding "weight" + to the sum if the node has pods + which matches the corresponding + podAffinityTerm; the node(s) with + the highest sum are the most preferred. + items: + description: The weights of all + of the matched WeightedPodAffinityTerm + fields are added per-node to + find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod + affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query + over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label + selector requirements. + The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector + that contains + values, a key, + and an operator + that relates the + key and values. + properties: + key: + description: key + is the label + key that the + selector applies + to. + type: string + operator: + description: operator + represents + a key's relationship + to a set of + values. Valid + operators + are In, NotIn, + Exists and + DoesNotExist. + type: string + values: + description: values + is an array + of string + values. If + the operator + is In or NotIn, + the values + array must + be non-empty. + If the operator + is Exists + or DoesNotExist, + the values + array must + be empty. + This array + is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single + {key,value} in the + matchLabels map + is equivalent to + an element of matchExpressions, + whose key field + is "key", the operator + is "In", and the + values array contains + only "value". The + requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query + over the set of namespaces + that the term applies + to. The term is applied + to the union of the + namespaces selected + by this field and the + ones listed in the namespaces + field. null selector + and null or empty namespaces + list means "this pod's + namespace". An empty + selector ({}) matches + all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label + selector requirements. + The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector + that contains + values, a key, + and an operator + that relates the + key and values. + properties: + key: + description: key + is the label + key that the + selector applies + to. + type: string + operator: + description: operator + represents + a key's relationship + to a set of + values. Valid + operators + are In, NotIn, + Exists and + DoesNotExist. + type: string + values: + description: values + is an array + of string + values. If + the operator + is In or NotIn, + the values + array must + be non-empty. + If the operator + is Exists + or DoesNotExist, + the values + array must + be empty. + This array + is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single + {key,value} in the + matchLabels map + is equivalent to + an element of matchExpressions, + whose key field + is "key", the operator + is "In", and the + values array contains + only "value". The + requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces + specifies a static list + of namespace names that + the term applies to. + The term is applied + to the union of the + namespaces listed in + this field and the ones + selected by namespaceSelector. + null or empty namespaces + list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod + should be co-located + (affinity) or not co-located + (anti-affinity) with + the pods matching the + labelSelector in the + specified namespaces, + where co-located is + defined as running on + a node whose value of + the label with key topologyKey + matches that of any + node on which any of + the selected pods is + running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated + with matching the corresponding + podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements + specified by this field are not + met at scheduling time, the pod + will not be scheduled onto the + node. If the affinity requirements + specified by this field cease + to be met at some point during + pod execution (e.g. due to a pod + label update), the system may + or may not try to eventually evict + the pod from its node. When there + are multiple elements, the lists + of nodes corresponding to each + podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of + pods (namely those matching + the labelSelector relative to + the given namespace(s)) that + this pod should be co-located + (affinity) or not co-located + (anti-affinity) with, where + co-located is defined as running + on a node whose value of the + label with key + matches that of any node on + which a pod of the set of pods + is running + properties: + labelSelector: + description: A label query + over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: key + is the label key + that the selector + applies to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values + is an array of + string values. + If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an + element of matchExpressions, + whose key field is "key", + the operator is "In", + and the values array + contains only "value". + The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query + over the set of namespaces + that the term applies to. + The term is applied to the + union of the namespaces + selected by this field and + the ones listed in the namespaces + field. null selector and + null or empty namespaces + list means "this pod's namespace". + An empty selector ({}) matches + all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: key + is the label key + that the selector + applies to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values + is an array of + string values. + If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an + element of matchExpressions, + whose key field is "key", + the operator is "In", + and the values array + contains only "value". + The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace + names that the term applies + to. The term is applied + to the union of the namespaces + listed in this field and + the ones selected by namespaceSelector. + null or empty namespaces + list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should + be co-located (affinity) + or not co-located (anti-affinity) + with the pods matching the + labelSelector in the specified + namespaces, where co-located + is defined as running on + a node whose value of the + label with key topologyKey + matches that of any node + on which any of the selected + pods is running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity + scheduling rules (e.g. avoid putting + this pod in the same node, zone, etc. + as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will + prefer to schedule pods to nodes + that satisfy the anti-affinity + expressions specified by this + field, but it may choose a node + that violates one or more of the + expressions. The node that is + most preferred is the one with + the greatest sum of weights, i.e. + for each node that meets all of + the scheduling requirements (resource + request, requiredDuringScheduling + anti-affinity expressions, etc.), + compute a sum by iterating through + the elements of this field and + adding "weight" to the sum if + the node has pods which matches + the corresponding podAffinityTerm; + the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all + of the matched WeightedPodAffinityTerm + fields are added per-node to + find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod + affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query + over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label + selector requirements. + The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector + that contains + values, a key, + and an operator + that relates the + key and values. + properties: + key: + description: key + is the label + key that the + selector applies + to. + type: string + operator: + description: operator + represents + a key's relationship + to a set of + values. Valid + operators + are In, NotIn, + Exists and + DoesNotExist. + type: string + values: + description: values + is an array + of string + values. If + the operator + is In or NotIn, + the values + array must + be non-empty. + If the operator + is Exists + or DoesNotExist, + the values + array must + be empty. + This array + is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single + {key,value} in the + matchLabels map + is equivalent to + an element of matchExpressions, + whose key field + is "key", the operator + is "In", and the + values array contains + only "value". The + requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query + over the set of namespaces + that the term applies + to. The term is applied + to the union of the + namespaces selected + by this field and the + ones listed in the namespaces + field. null selector + and null or empty namespaces + list means "this pod's + namespace". An empty + selector ({}) matches + all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label + selector requirements. + The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector + that contains + values, a key, + and an operator + that relates the + key and values. + properties: + key: + description: key + is the label + key that the + selector applies + to. + type: string + operator: + description: operator + represents + a key's relationship + to a set of + values. Valid + operators + are In, NotIn, + Exists and + DoesNotExist. + type: string + values: + description: values + is an array + of string + values. If + the operator + is In or NotIn, + the values + array must + be non-empty. + If the operator + is Exists + or DoesNotExist, + the values + array must + be empty. + This array + is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single + {key,value} in the + matchLabels map + is equivalent to + an element of matchExpressions, + whose key field + is "key", the operator + is "In", and the + values array contains + only "value". The + requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces + specifies a static list + of namespace names that + the term applies to. + The term is applied + to the union of the + namespaces listed in + this field and the ones + selected by namespaceSelector. + null or empty namespaces + list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod + should be co-located + (affinity) or not co-located + (anti-affinity) with + the pods matching the + labelSelector in the + specified namespaces, + where co-located is + defined as running on + a node whose value of + the label with key topologyKey + matches that of any + node on which any of + the selected pods is + running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated + with matching the corresponding + podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity + requirements specified by this + field are not met at scheduling + time, the pod will not be scheduled + onto the node. If the anti-affinity + requirements specified by this + field cease to be met at some + point during pod execution (e.g. + due to a pod label update), the + system may or may not try to eventually + evict the pod from its node. When + there are multiple elements, the + lists of nodes corresponding to + each podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of + pods (namely those matching + the labelSelector relative to + the given namespace(s)) that + this pod should be co-located + (affinity) or not co-located + (anti-affinity) with, where + co-located is defined as running + on a node whose value of the + label with key + matches that of any node on + which a pod of the set of pods + is running + properties: + labelSelector: + description: A label query + over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: key + is the label key + that the selector + applies to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values + is an array of + string values. + If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an + element of matchExpressions, + whose key field is "key", + the operator is "In", + and the values array + contains only "value". + The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query + over the set of namespaces + that the term applies to. + The term is applied to the + union of the namespaces + selected by this field and + the ones listed in the namespaces + field. null selector and + null or empty namespaces + list means "this pod's namespace". + An empty selector ({}) matches + all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: key + is the label key + that the selector + applies to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values + is an array of + string values. + If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an + element of matchExpressions, + whose key field is "key", + the operator is "In", + and the values array + contains only "value". + The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace + names that the term applies + to. The term is applied + to the union of the namespaces + listed in this field and + the ones selected by namespaceSelector. + null or empty namespaces + list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should + be co-located (affinity) + or not co-located (anti-affinity) + with the pods matching the + labelSelector in the specified + namespaces, where co-located + is defined as running on + a node whose value of the + label with key topologyKey + matches that of any node + on which any of the selected + pods is running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + imagePullSecrets: + description: If specified, the pod's imagePullSecrets + items: + description: LocalObjectReference contains + enough information to let you locate + the referenced object inside the same + namespace. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector + which must be true for the pod to fit + on a node. Selector which must match a + node''s labels for the pod to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + priorityClassName: + description: If specified, the pod's priorityClassName. + type: string + serviceAccountName: + description: If specified, the pod's service + account + type: string + tolerations: + description: If specified, the pod's tolerations. + items: + description: The pod this Toleration is + attached to tolerates any taint that + matches the triple + using the matching operator . + properties: + effect: + description: Effect indicates the + taint effect to match. Empty means + match all taint effects. When specified, + allowed values are NoSchedule, PreferNoSchedule + and NoExecute. + type: string + key: + description: Key is the taint key + that the toleration applies to. + Empty means match all taint keys. + If the key is empty, operator must + be Exists; this combination means + to match all values and all keys. + type: string + operator: + description: Operator represents a + key's relationship to the value. + Valid operators are Exists and Equal. + Defaults to Equal. Exists is equivalent + to wildcard for value, so that a + pod can tolerate all taints of a + particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents + the period of time the toleration + (which must be of effect NoExecute, + otherwise this field is ignored) + tolerates the taint. By default, + it is not set, which means tolerate + the taint forever (do not evict). + Zero and negative values will be + treated as 0 (evict immediately) + by the system. + format: int64 + type: integer + value: + description: Value is the taint value + the toleration matches to. If the + operator is Exists, the value should + be empty, otherwise just a regular + string. + type: string + type: object + type: array + type: object + type: object + serviceType: + description: Optional service type for Kubernetes + solver service. Supported values are NodePort + or ClusterIP. If unset, defaults to NodePort. + type: string + type: object + type: object + selector: + description: Selector selects a set of DNSNames on the Certificate + resource that should be solved using this challenge solver. + If not specified, the solver will be treated as the 'default' + solver with the lowest priority, i.e. if any other solver + has a more specific match, it will be used instead. + properties: + dnsNames: + description: List of DNSNames that this solver will + be used to solve. If specified and a match is found, + a dnsNames selector will take precedence over a dnsZones + selector. If multiple solvers match with the same + dnsNames value, the solver with the most matching + labels in matchLabels will be selected. If neither + has more matches, the solver defined earlier in the + list will be selected. + items: + type: string + type: array + dnsZones: + description: List of DNSZones that this solver will + be used to solve. The most specific DNS zone match + specified here will take precedence over other DNS + zone matches, so a solver specifying sys.example.com + will be selected over one specifying example.com for + the domain www.sys.example.com. If multiple solvers + match with the same dnsZones value, the solver with + the most matching labels in matchLabels will be selected. + If neither has more matches, the solver defined earlier + in the list will be selected. + items: + type: string + type: array + matchLabels: + additionalProperties: + type: string + description: A label selector that is used to refine + the set of certificate's that this challenge solver + will apply to. + type: object + type: object + type: object + type: array + required: + - privateKeySecretRef + - server + type: object + ca: + description: CA configures this issuer to sign certificates using + a signing CA keypair stored in a Secret resource. This is used to + build internal PKIs that are managed by cert-manager. + properties: + crlDistributionPoints: + description: The CRL distribution points is an X.509 v3 certificate + extension which identifies the location of the CRL from which + the revocation of this certificate can be checked. If not set, + certificates will be issued without distribution points set. + items: + type: string + type: array + ocspServers: + description: The OCSP server list is an X.509 v3 extension that + defines a list of URLs of OCSP responders. The OCSP responders + can be queried for the revocation status of an issued certificate. + If not set, the certificate will be issued with no OCSP servers + set. For example, an OCSP server URL could be "http://ocsp.int-x3.letsencrypt.org". + items: + type: string + type: array + secretName: + description: SecretName is the name of the secret used to sign + Certificates issued by this Issuer. + type: string + required: + - secretName + type: object + selfSigned: + description: SelfSigned configures this issuer to 'self sign' certificates + using the private key used to create the CertificateRequest object. + properties: + crlDistributionPoints: + description: The CRL distribution points is an X.509 v3 certificate + extension which identifies the location of the CRL from which + the revocation of this certificate can be checked. If not set + certificate will be issued without CDP. Values are strings. + items: + type: string + type: array + type: object + vault: + description: Vault configures this issuer to sign certificates using + a HashiCorp Vault PKI backend. + properties: + auth: + description: Auth configures how cert-manager authenticates with + the Vault server. + properties: + appRole: + description: AppRole authenticates with Vault using the App + Role auth mechanism, with the role and secret stored in + a Kubernetes Secret resource. + properties: + path: + description: 'Path where the App Role authentication backend + is mounted in Vault, e.g: "approle"' + type: string + roleId: + description: RoleID configured in the App Role authentication + backend when setting up the authentication backend in + Vault. + type: string + secretRef: + description: Reference to a key in a Secret that contains + the App Role secret used to authenticate with Vault. + The `key` field must be specified and denotes which + entry within the Secret resource is used as the app + role secret. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - path + - roleId + - secretRef + type: object + kubernetes: + description: Kubernetes authenticates with Vault by passing + the ServiceAccount token stored in the named Secret resource + to the Vault server. + properties: + mountPath: + description: The Vault mountPath here is the mount path + to use when authenticating with Vault. For example, + setting a value to `/v1/auth/foo`, will use the path + `/v1/auth/foo/login` to authenticate with Vault. If + unspecified, the default value "/v1/auth/kubernetes" + will be used. + type: string + role: + description: A required field containing the Vault Role + to assume. A Role binds a Kubernetes ServiceAccount + with a set of Vault policies. + type: string + secretRef: + description: The required Secret field containing a Kubernetes + ServiceAccount JWT used for authenticating with Vault. + Use of 'ambient credentials' is not supported. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + serviceAccountRef: + description: A reference to a service account that will + be used to request a bound token (also known as "projected + token"). Compared to using "secretRef", using this field + means that you don't rely on statically bound tokens. + To use this field, you must configure an RBAC rule to + let cert-manager request a token. + properties: + name: + description: Name of the ServiceAccount used to request + a token. + type: string + required: + - name + type: object + required: + - role + type: object + tokenSecretRef: + description: TokenSecretRef authenticates with Vault by presenting + a token. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field + may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + type: object + caBundle: + description: Base64-encoded bundle of PEM CAs which will be used + to validate the certificate chain presented by Vault. Only used + if using HTTPS to connect to Vault and ignored for HTTP connections. + Mutually exclusive with CABundleSecretRef. If neither CABundle + nor CABundleSecretRef are defined, the certificate bundle in + the cert-manager controller container is used to validate the + TLS connection. + format: byte + type: string + caBundleSecretRef: + description: Reference to a Secret containing a bundle of PEM-encoded + CAs to use when verifying the certificate chain presented by + Vault when using HTTPS. Mutually exclusive with CABundle. If + neither CABundle nor CABundleSecretRef are defined, the certificate + bundle in the cert-manager controller container is used to validate + the TLS connection. If no key for the Secret is specified, cert-manager + will default to 'ca.crt'. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field may + be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + namespace: + description: 'Name of the vault namespace. Namespaces is a set + of features within Vault Enterprise that allows Vault environments + to support Secure Multi-tenancy. e.g: "ns1" More about namespaces + can be found here https://www.vaultproject.io/docs/enterprise/namespaces' + type: string + path: + description: 'Path is the mount path of the Vault PKI backend''s + `sign` endpoint, e.g: "my_pki_mount/sign/my-role-name".' + type: string + server: + description: 'Server is the connection address for the Vault server, + e.g: "https://vault.example.com:8200".' + type: string + required: + - auth + - path + - server + type: object + venafi: + description: Venafi configures this issuer to sign certificates using + a Venafi TPP or Venafi Cloud policy zone. + properties: + cloud: + description: Cloud specifies the Venafi cloud configuration settings. + Only one of TPP or Cloud may be specified. + properties: + apiTokenSecretRef: + description: APITokenSecretRef is a secret key selector for + the Venafi Cloud API token. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field + may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + url: + description: URL is the base URL for Venafi Cloud. Defaults + to "https://api.venafi.cloud/v1". + type: string + required: + - apiTokenSecretRef + type: object + tpp: + description: TPP specifies Trust Protection Platform configuration + settings. Only one of TPP or Cloud may be specified. + properties: + caBundle: + description: Base64-encoded bundle of PEM CAs which will be + used to validate the certificate chain presented by the + TPP server. Only used if using HTTPS; ignored for HTTP. + If undefined, the certificate bundle in the cert-manager + controller container is used to validate the chain. + format: byte + type: string + credentialsRef: + description: CredentialsRef is a reference to a Secret containing + the username and password for the TPP server. The secret + must contain two keys, 'username' and 'password'. + properties: + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + url: + description: 'URL is the base URL for the vedsdk endpoint + of the Venafi TPP instance, for example: "https://tpp.example.com/vedsdk".' + type: string + required: + - credentialsRef + - url + type: object + zone: + description: Zone is the Venafi Policy Zone to use for this issuer. + All requests made to the Venafi platform will be restricted + by the named zone policy. This field is required. + type: string + required: + - zone + type: object + type: object + status: + description: Status of the ClusterIssuer. This is set and managed automatically. + properties: + acme: + description: ACME specific status options. This field should only + be set if the Issuer is configured to use an ACME server to issue + certificates. + properties: + lastPrivateKeyHash: + description: LastPrivateKeyHash is a hash of the private key associated + with the latest registered ACME account, in order to track changes + made to registered account associated with the Issuer + type: string + lastRegisteredEmail: + description: LastRegisteredEmail is the email associated with + the latest registered ACME account, in order to track changes + made to registered account associated with the Issuer + type: string + uri: + description: URI is the unique account identifier, which can also + be used to retrieve account details from the CA + type: string + type: object + conditions: + description: List of status conditions to indicate the status of a + CertificateRequest. Known condition types are `Ready`. + items: + description: IssuerCondition contains condition information for + an Issuer. + properties: + lastTransitionTime: + description: LastTransitionTime is the timestamp corresponding + to the last status change of this condition. + format: date-time + type: string + message: + description: Message is a human readable description of the + details of the last transition, complementing reason. + type: string + observedGeneration: + description: If set, this represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.condition[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the Issuer. + format: int64 + type: integer + reason: + description: Reason is a brief machine readable explanation + for the condition's last transition. + type: string + status: + description: Status of the condition, one of (`True`, `False`, + `Unknown`). + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: Type of the condition, known values are (`Ready`). + type: string + required: + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + creationTimestamp: null + labels: + app: kserve + app.kubernetes.io/name: kserve + name: clusterservingruntimes.serving.kserve.io +spec: + group: serving.kserve.io + names: + kind: ClusterServingRuntime + listKind: ClusterServingRuntimeList + plural: clusterservingruntimes + singular: clusterservingruntime + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .spec.disabled + name: Disabled + type: boolean + - jsonPath: .spec.supportedModelFormats[*].name + name: ModelType + type: string + - jsonPath: .spec.containers[*].name + name: Containers + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + builtInAdapter: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + memBufferBytes: + type: integer + modelLoadingTimeoutMillis: + type: integer + runtimeManagementPort: + type: integer + serverType: + type: string + type: object + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + disabled: + type: boolean + grpcDataEndpoint: + type: string + grpcEndpoint: + type: string + httpDataEndpoint: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + labels: + additionalProperties: + type: string + type: object + multiModel: + type: boolean + nodeSelector: + additionalProperties: + type: string + type: object + protocolVersions: + items: + type: string + type: array + replicas: + type: integer + storageHelper: + properties: + disabled: + type: boolean + type: object + supportedModelFormats: + items: + properties: + autoSelect: + type: boolean + name: + type: string + version: + type: string + required: + - name + type: object + type: array + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + status: + type: object + type: object + served: true + storage: true + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: clusterworkflowtemplates.argoproj.io +spec: + group: argoproj.io + names: + kind: ClusterWorkflowTemplate + listKind: ClusterWorkflowTemplateList + plural: clusterworkflowtemplates + shortNames: + - clusterwftmpl + - cwft + singular: clusterworkflowtemplate + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: unapproved, request not yet submitted + labels: + application-crd-id: kubeflow-pipelines + kustomize.component: metacontroller + name: compositecontrollers.metacontroller.k8s.io +spec: + group: metacontroller.k8s.io + names: + kind: CompositeController + listKind: CompositeControllerList + plural: compositecontrollers + shortNames: + - cc + - cctl + singular: compositecontroller + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + childResources: + items: + properties: + apiVersion: + type: string + resource: + type: string + updateStrategy: + properties: + method: + type: string + statusChecks: + properties: + conditions: + items: + properties: + reason: + type: string + status: + type: string + type: + type: string + required: + - type + type: object + type: array + type: object + type: object + required: + - apiVersion + - resource + type: object + type: array + generateSelector: + type: boolean + hooks: + properties: + customize: + properties: + webhook: + properties: + path: + type: string + service: + properties: + name: + type: string + namespace: + type: string + port: + format: int32 + type: integer + protocol: + type: string + required: + - name + - namespace + type: object + timeout: + type: string + url: + type: string + type: object + type: object + finalize: + properties: + webhook: + properties: + path: + type: string + service: + properties: + name: + type: string + namespace: + type: string + port: + format: int32 + type: integer + protocol: + type: string + required: + - name + - namespace + type: object + timeout: + type: string + url: + type: string + type: object + type: object + postUpdateChild: + properties: + webhook: + properties: + path: + type: string + service: + properties: + name: + type: string + namespace: + type: string + port: + format: int32 + type: integer + protocol: + type: string + required: + - name + - namespace + type: object + timeout: + type: string + url: + type: string + type: object + type: object + preUpdateChild: + properties: + webhook: + properties: + path: + type: string + service: + properties: + name: + type: string + namespace: + type: string + port: + format: int32 + type: integer + protocol: + type: string + required: + - name + - namespace + type: object + timeout: + type: string + url: + type: string + type: object + type: object + sync: + properties: + webhook: + properties: + path: + type: string + service: + properties: + name: + type: string + namespace: + type: string + port: + format: int32 + type: integer + protocol: + type: string + required: + - name + - namespace + type: object + timeout: + type: string + url: + type: string + type: object + type: object + type: object + parentResource: + properties: + apiVersion: + type: string + resource: + type: string + revisionHistory: + properties: + fieldPaths: + items: + type: string + type: array + type: object + required: + - apiVersion + - resource + type: object + resyncPeriodSeconds: + format: int32 + type: integer + required: + - parentResource + type: object + status: + type: object + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + duck.knative.dev/podspecable: "true" + knative.dev/crd-install: "true" + name: configurations.serving.knative.dev +spec: + group: serving.knative.dev + names: + categories: + - all + - knative + - serving + kind: Configuration + plural: configurations + shortNames: + - config + - cfg + singular: configuration + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.latestCreatedRevisionName + name: LatestCreated + type: string + - jsonPath: .status.latestReadyRevisionName + name: LatestReady + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: 'Configuration represents the "floating HEAD" of a linear history + of Revisions. Users create new Revisions by updating the Configuration''s + spec. The "latest created" revision''s name is available under status, as + is the "latest ready" revision''s name. See also: https://github.com/knative/serving/blob/main/docs/spec/overview.md#configuration' + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ConfigurationSpec holds the desired state of the Configuration + (from the client). + properties: + template: + description: Template holds the latest specification for the Revision + to be stamped out. + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + x-kubernetes-preserve-unknown-fields: true + spec: + description: RevisionSpec holds the desired state of the Revision + (from the client). + properties: + affinity: + description: This is accessible behind a feature flag - kubernetes.podspec-affinity + type: object + x-kubernetes-preserve-unknown-fields: true + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates whether + a service account token should be automatically mounted. + type: boolean + containerConcurrency: + description: ContainerConcurrency specifies the maximum allowed + in-flight (concurrent) requests per container of the Revision. Defaults + to `0` which means concurrency to the application is not + limited, and the system decides the target concurrency for + the autoscaler. + format: int64 + type: integer + containers: + description: List of containers belonging to the pod. Containers + cannot currently be added or removed. There must be at least + one container in a Pod. Cannot be updated. + items: + description: A single application container that you want + to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The container + image''s CMD is used if this is not provided. Variable + references $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, the + reference in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for escaping + the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce + the string literal "$(VAR_NAME)". Escaped references + will never be expanded, regardless of whether the + variable exists or not. Cannot be updated. More info: + https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is used + if this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. If + a variable cannot be resolved, the reference in the + input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) + syntax: i.e. "$$(VAR_NAME)" will produce the string + literal "$(VAR_NAME)". Escaped references will never + be expanded, regardless of whether the variable exists + or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + env: + description: List of environment variables to set in + the container. Cannot be updated. + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)". + Escaped references will never be expanded, regardless + of whether the variable exists or not. Defaults + to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: This is accessible behind a feature + flag - kubernetes.podspec-fieldref + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + resourceFieldRef: + description: This is accessible behind a feature + flag - kubernetes.podspec-fieldref + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + secretKeyRef: + description: Selects a key of a secret in + the pod's namespace + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined within + a source must be a C_IDENTIFIER. All invalid keys + will be reported as an event when the container is + starting. When a key exists in multiple sources, the + value associated with the last source will take precedence. + Values defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source of + a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret must + be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level config + management to default or override container images + in workload controllers like Deployments and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, Never, + IfNotPresent. Defaults to Always if :latest tag is + specified, or IfNotPresent otherwise. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. Cannot + be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to + execute inside the container, the working + directory for the command is root ('/') in + the container's filesystem. The command is + simply exec'd, it is not run inside a shell, + so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is + treated as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the + probe to be considered failed after having succeeded. + Defaults to 3. Minimum value is 1. + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. You probably want to set "Host" + in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + type: object + initialDelaySeconds: + description: 'Number of seconds after the container + has started before liveness probes are initiated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the + probe. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the + probe to be considered successful after having + failed. Defaults to 1. Must be 1 for liveness + and startup. Minimum value is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + type: object + timeoutSeconds: + description: 'Number of seconds after which the + probe times out. Defaults to 1 second. Minimum + value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as a DNS_LABEL. + Each container in a pod must have a unique name (DNS_LABEL). + Cannot be updated. + type: string + ports: + description: List of ports to expose from the container. + Not specifying a port here DOES NOT prevent that port + from being exposed. Any port which is listening on + the default "0.0.0.0" address inside a container will + be accessible from the network. Modifying this array + with strategic merge patch may corrupt the data. For + more information See https://github.com/kubernetes/kubernetes/issues/108255. + Cannot be updated. + items: + description: ContainerPort represents a network port + in a single container. + properties: + containerPort: + description: Number of port to expose on the pod's + IP address. This must be a valid port number, + 0 < x < 65536. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME + and unique within the pod. Each named port in + a pod must have a unique name. Name for the + port that can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, + or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service readiness. + Container will be removed from service endpoints if + the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to + execute inside the container, the working + directory for the command is root ('/') in + the container's filesystem. The command is + simply exec'd, it is not run inside a shell, + so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is + treated as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the + probe to be considered failed after having succeeded. + Defaults to 3. Minimum value is 1. + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. You probably want to set "Host" + in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + type: object + initialDelaySeconds: + description: 'Number of seconds after the container + has started before liveness probes are initiated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the + probe. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the + probe to be considered successful after having + failed. Defaults to 1. Must be 1 for liveness + and startup. Minimum value is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + type: object + timeoutSeconds: + description: 'Number of seconds after which the + probe times out. Defaults to 1 second. Minimum + value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resources: + description: 'Compute Resources required by this container. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount + of compute resources required. If Requests is + omitted for a container, it defaults to Limits + if that is explicitly specified, otherwise to + an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security options + the container should be run with. If set, the fields + of SecurityContext override the equivalent fields + of PodSecurityContext. More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges than + its parent process. This bool directly controls + if the no_new_privs flag will be set on the container + process. AllowPrivilegeEscalation is true always + when the container is: 1) run as Privileged 2) + has CAP_SYS_ADMIN Note that this field cannot + be set when spec.os.name is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. Defaults to the default set of capabilities + granted by the container runtime. Note that this + field cannot be set when spec.os.name is windows. + properties: + add: + description: This is accessible behind a feature + flag - kubernetes.containerspec-addcapabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + readOnlyRootFilesystem: + description: Whether this container has a read-only + root filesystem. Default is false. Note that this + field cannot be set when spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the + container process. Uses runtime default if unset. + May also be set in PodSecurityContext. If set + in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name + is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run + as a non-root user. If true, the Kubelet will + validate the image at runtime to ensure that it + does not run as UID 0 (root) and fail to start + the container if it does. If unset or false, no + such validation will be performed. May also be + set in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the + container process. Defaults to user specified + in image metadata if unspecified. May also be + set in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence. Note that this + field cannot be set when spec.os.name is windows. + format: int64 + type: integer + seccompProfile: + description: The seccomp options to use by this + container. If seccomp options are provided at + both the pod & container level, the container + options override the pod options. Note that this + field cannot be set when spec.os.name is windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node should be used. + The profile must be preconfigured on the node + to work. Must be a descending path, relative + to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp + profile will be applied. Valid options are: + \n Localhost - a profile defined in a file + on the node should be used. RuntimeDefault + - the container runtime default profile should + be used. Unconfined - no profile should be + applied." + type: string + required: + - type + type: object + type: object + terminationMessagePath: + description: 'Optional: Path at which the file to which + the container''s termination message will be written + is mounted into the container''s filesystem. Message + written is intended to be brief final status, such + as an assertion failure message. Will be truncated + by the node if greater than 4096 bytes. The total + message length across all containers will be limited + to 12kb. Defaults to /dev/termination-log. Cannot + be updated.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should + be populated. File will use the contents of terminationMessagePath + to populate the container status message on both success + and failure. FallbackToLogsOnError will use the last + chunk of container log output if the termination message + file is empty and the container exited with an error. + The log output is limited to 2048 bytes or 80 lines, + whichever is smaller. Defaults to File. Cannot be + updated. + type: string + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting of a + Volume within a container. + properties: + mountPath: + description: Path within the container at which + the volume should be mounted. Must not contain + ':'. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified). Defaults to + false. + type: boolean + subPath: + description: Path within the volume from which + the container's volume should be mounted. Defaults + to "" (volume's root). + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If not specified, + the container runtime's default will be used, which + might be configured in the container image. Cannot + be updated. + type: string + type: object + type: array + dnsConfig: + description: This is accessible behind a feature flag - kubernetes.podspec-dnsconfig + type: object + x-kubernetes-preserve-unknown-fields: true + dnsPolicy: + description: This is accessible behind a feature flag - kubernetes.podspec-dnspolicy + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information + about services should be injected into pod''s environment + variables, matching the syntax of Docker links. Optional: + Knative defaults this to false.' + type: boolean + hostAliases: + description: This is accessible behind a feature flag - kubernetes.podspec-hostaliases + items: + description: This is accessible behind a feature flag - + kubernetes.podspec-hostaliases + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + idleTimeoutSeconds: + description: IdleTimeoutSeconds is the maximum duration in + seconds a request will be allowed to stay open while not + receiving any bytes from the user's application. If unspecified, + a system default will be provided. + format: int64 + type: integer + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of references + to secrets in the same namespace to use for pulling any + of the images used by this PodSpec. If specified, these + secrets will be passed to individual puller implementations + for them to use. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + items: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same + namespace. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + initContainers: + description: 'List of initialization containers belonging + to the pod. Init containers are executed in order prior + to containers being started. If any init container fails, + the pod is considered to have failed and is handled according + to its restartPolicy. The name for an init container or + normal container must be unique among all containers. Init + containers may not have Lifecycle actions, Readiness probes, + Liveness probes, or Startup probes. The resourceRequirements + of an init container are taken into account during scheduling + by finding the highest request/limit for each resource type, + and then using the max of of that value or the sum of the + normal containers. Limits are applied to init containers + in a similar fashion. Init containers cannot currently be + added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/' + items: + description: This is accessible behind a feature flag - + kubernetes.podspec-init-containers + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + nodeSelector: + description: This is accessible behind a feature flag - kubernetes.podspec-nodeselector + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + priorityClassName: + description: This is accessible behind a feature flag - kubernetes.podspec-priorityclassname + type: string + x-kubernetes-preserve-unknown-fields: true + responseStartTimeoutSeconds: + description: ResponseStartTimeoutSeconds is the maximum duration + in seconds that the request routing layer will wait for + a request delivered to a container to begin sending any + network traffic. + format: int64 + type: integer + runtimeClassName: + description: This is accessible behind a feature flag - kubernetes.podspec-runtimeclassname + type: string + x-kubernetes-preserve-unknown-fields: true + schedulerName: + description: This is accessible behind a feature flag - kubernetes.podspec-schedulername + type: string + x-kubernetes-preserve-unknown-fields: true + securityContext: + description: This is accessible behind a feature flag - kubernetes.podspec-securitycontext + type: object + x-kubernetes-preserve-unknown-fields: true + serviceAccountName: + description: 'ServiceAccountName is the name of the ServiceAccount + to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + timeoutSeconds: + description: TimeoutSeconds is the maximum duration in seconds + that the request instance is allowed to respond to a request. + If unspecified, a system default will be provided. + format: int64 + type: integer + tolerations: + description: This is accessible behind a feature flag - kubernetes.podspec-tolerations + items: + description: This is accessible behind a feature flag - + kubernetes.podspec-tolerations + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + topologySpreadConstraints: + description: This is accessible behind a feature flag - kubernetes.podspec-topologyspreadconstraints + items: + description: This is accessible behind a feature flag - + kubernetes.podspec-topologyspreadconstraints + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + volumes: + description: 'List of volumes that can be mounted by containers + belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + items: + description: Volume represents a named volume in a pod that + may be accessed by any container in the pod. + properties: + configMap: + description: configMap represents a configMap that should + populate this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode bits + used to set permissions on created files by default. + Must be an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML accepts + both octal and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. Directories + within the path are not affected by this setting. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced ConfigMap + will be projected into the volume as a file whose + name is the key and content is the value. If specified, + the listed keys will be projected into the specified + paths, and unlisted keys will not be present. + If a key is specified which is not present in + the ConfigMap, the volume setup will error unless + it is marked optional. Paths must be relative + and may not contain the '..' path or start with + '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. Must + be an octal value between 0000 and 0777 + or a decimal value between 0 and 511. YAML + accepts both octal and decimal values, JSON + requires decimal values for mode bits. If + not specified, the volume defaultMode will + be used. This might be in conflict with + other options that affect the file mode, + like fsGroup, and the result can be other + mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be an + absolute path. May not contain the path + element '..'. May not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: optional specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + emptyDir: + description: This is accessible behind a feature flag + - kubernetes.podspec-emptydir + type: object + x-kubernetes-preserve-unknown-fields: true + name: + description: 'name of the volume. Must be a DNS_LABEL + and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + persistentVolumeClaim: + description: This is accessible behind a feature flag + - kubernetes.podspec-persistent-volume-claim + type: object + x-kubernetes-preserve-unknown-fields: true + projected: + description: projected items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits used + to set permissions on created files by default. + Must be an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML accepts + both octal and decimal values, JSON requires decimal + values for mode bits. Directories within the path + are not affected by this setting. This might be + in conflict with other options that affect the + file mode, like fsGroup, and the result can be + other mode bits set. + format: int32 + type: integer + sources: + description: sources is the list of volume projections + items: + description: Projection that may be projected + along with other supported volume types + properties: + configMap: + description: configMap information about the + configMap data to project + properties: + items: + description: items if unspecified, each + key-value pair in the Data field of + the referenced ConfigMap will be projected + into the volume as a file whose name + is the key and content is the value. + If specified, the listed keys will be + projected into the specified paths, + and unlisted keys will not be present. + If a key is specified which is not present + in the ConfigMap, the volume setup will + error unless it is marked optional. + Paths must be relative and may not contain + the '..' path or start with '..'. + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an octal + value between 0000 and 0777 or + a decimal value between 0 and + 511. YAML accepts both octal and + decimal values, JSON requires + decimal values for mode bits. + If not specified, the volume defaultMode + will be used. This might be in + conflict with other options that + affect the file mode, like fsGroup, + and the result can be other mode + bits set.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map the key + to. May not be an absolute path. + May not contain the path element + '..'. May not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional specify whether + the ConfigMap or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information about + the downwardAPI data to project + properties: + items: + description: Items is a list of DownwardAPIVolume + file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only annotations, + labels, name and namespace are + supported.' + properties: + apiVersion: + description: Version of the + schema the FieldPath is written + in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field + to select in the specified + API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits + used to set permissions on this + file, must be an octal value between + 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts + both octal and decimal values, + JSON requires decimal values for + mode bits. If not specified, the + volume defaultMode will be used. + This might be in conflict with + other options that affect the + file mode, like fsGroup, and the + result can be other mode bits + set.' + format: int32 + type: integer + path: + description: 'Required: Path is the + relative path name of the file + to be created. Must not be absolute + or contain the ''..'' path. Must + be utf-8 encoded. The first item + of the relative path must not + start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu and + requests.memory) are currently + supported.' + properties: + containerName: + description: 'Container name: + required for volumes, optional + for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about the + secret data to project + properties: + items: + description: items if unspecified, each + key-value pair in the Data field of + the referenced Secret will be projected + into the volume as a file whose name + is the key and content is the value. + If specified, the listed keys will be + projected into the specified paths, + and unlisted keys will not be present. + If a key is specified which is not present + in the Secret, the volume setup will + error unless it is marked optional. + Paths must be relative and may not contain + the '..' path or start with '..'. + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an octal + value between 0000 and 0777 or + a decimal value between 0 and + 511. YAML accepts both octal and + decimal values, JSON requires + decimal values for mode bits. + If not specified, the volume defaultMode + will be used. This might be in + conflict with other options that + affect the file mode, like fsGroup, + and the result can be other mode + bits set.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map the key + to. May not be an absolute path. + May not contain the path element + '..'. May not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional field specify whether + the Secret or its key must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is information + about the serviceAccountToken data to project + properties: + audience: + description: audience is the intended + audience of the token. A recipient of + a token must identify itself with an + identifier specified in the audience + of the token, and otherwise should reject + the token. The audience defaults to + the identifier of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is the + requested duration of validity of the + service account token. As the token + approaches expiration, the kubelet volume + plugin will proactively rotate the service + account token. The kubelet will start + trying to rotate the token if the token + is older than 80 percent of its time + to live or if the token is older than + 24 hours.Defaults to 1 hour and must + be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative + to the mount point of the file to project + the token into. + type: string + required: + - path + type: object + type: object + type: array + type: object + secret: + description: 'secret represents a secret that should + populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode bits + used to set permissions on created files by default. + Must be an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML accepts + both octal and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. Directories + within the path are not affected by this setting. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value + pair in the Data field of the referenced Secret + will be projected into the volume as a file whose + name is the key and content is the value. If specified, + the listed keys will be projected into the specified + paths, and unlisted keys will not be present. + If a key is specified which is not present in + the Secret, the volume setup will error unless + it is marked optional. Paths must be relative + and may not contain the '..' path or start with + '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. Must + be an octal value between 0000 and 0777 + or a decimal value between 0 and 511. YAML + accepts both octal and decimal values, JSON + requires decimal values for mode bits. If + not specified, the volume defaultMode will + be used. This might be in conflict with + other options that affect the file mode, + like fsGroup, and the result can be other + mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be an + absolute path. May not contain the path + element '..'. May not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether the + Secret or its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the secret + in the pod''s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + status: + description: ConfigurationStatus communicates the observed state of the + Configuration (from the controller). + properties: + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + latestCreatedRevisionName: + description: LatestCreatedRevisionName is the last revision that was + created from this Configuration. It might not be ready yet, for + that use LatestReadyRevisionName. + type: string + latestReadyRevisionName: + description: LatestReadyRevisionName holds the name of the latest + Revision stamped out from this Configuration that has had its "Ready" + condition become "True". + type: string + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/source: "true" + eventing.knative.dev/source: "true" + knative.dev/crd-install: "true" + kustomize.component: knative + name: containersources.sources.knative.dev +spec: + group: sources.knative.dev + names: + categories: + - all + - knative + - sources + kind: ContainerSource + plural: containersources + singular: containersource + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.sinkUri + name: Sink + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: ContainerSource is an event source that starts a container image + which generates events under certain situations and sends messages to a + sink URI + properties: + spec: + properties: + ceOverrides: + description: CloudEventOverrides defines overrides to control the + output format and modifications of the event sent to the sink. + properties: + extensions: + description: Extensions specify what attribute are added or overridden + on the outbound event. Each `Extensions` key-value pair are + set on the event as an attribute extension independently. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + sink: + description: Sink is a reference to an object that will resolve to + a uri to use as the sink. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + template: + description: 'A template in the shape of `Deployment.spec.template` + to be used for this ContainerSource. More info: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/' + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + status: + properties: + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + ceAttributes: + description: CloudEventAttributes are the specific attributes that + the Source uses as part of its CloudEvents. + items: + properties: + source: + description: Source is the CloudEvents source attribute. + type: string + type: + description: Type refers to the CloudEvent type attribute. + type: string + type: object + type: array + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + sinkUri: + description: SinkURI is the current active sink URI that has been + configured for the Source. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: unapproved, request not yet submitted + labels: + application-crd-id: kubeflow-pipelines + kustomize.component: metacontroller + name: controllerrevisions.metacontroller.k8s.io +spec: + group: metacontroller.k8s.io + names: + kind: ControllerRevision + listKind: ControllerRevisionList + plural: controllerrevisions + singular: controllerrevision + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + children: + items: + properties: + apiGroup: + type: string + kind: + type: string + names: + items: + type: string + type: array + required: + - apiGroup + - kind + - names + type: object + type: array + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + parentPatch: + type: object + required: + - metadata + - parentPatch + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: cronworkflows.argoproj.io +spec: + group: argoproj.io + names: + kind: CronWorkflow + listKind: CronWorkflowList + plural: cronworkflows + shortNames: + - cwf + - cronwf + singular: cronworkflow + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: unapproved, request not yet submitted + labels: + application-crd-id: kubeflow-pipelines + kustomize.component: metacontroller + name: decoratorcontrollers.metacontroller.k8s.io +spec: + group: metacontroller.k8s.io + names: + kind: DecoratorController + listKind: DecoratorControllerList + plural: decoratorcontrollers + shortNames: + - dec + - decorators + singular: decoratorcontroller + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + attachments: + items: + properties: + apiVersion: + type: string + resource: + type: string + updateStrategy: + properties: + method: + type: string + type: object + required: + - apiVersion + - resource + type: object + type: array + hooks: + properties: + customize: + properties: + webhook: + properties: + path: + type: string + service: + properties: + name: + type: string + namespace: + type: string + port: + format: int32 + type: integer + protocol: + type: string + required: + - name + - namespace + type: object + timeout: + type: string + url: + type: string + type: object + type: object + finalize: + properties: + webhook: + properties: + path: + type: string + service: + properties: + name: + type: string + namespace: + type: string + port: + format: int32 + type: integer + protocol: + type: string + required: + - name + - namespace + type: object + timeout: + type: string + url: + type: string + type: object + type: object + sync: + properties: + webhook: + properties: + path: + type: string + service: + properties: + name: + type: string + namespace: + type: string + port: + format: int32 + type: integer + protocol: + type: string + required: + - name + - namespace + type: object + timeout: + type: string + url: + type: string + type: object + type: object + type: object + resources: + items: + properties: + annotationSelector: + properties: + matchAnnotations: + additionalProperties: + type: string + type: object + matchExpressions: + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + apiVersion: + type: string + labelSelector: + description: A label selector is a label query over a set of + resources. The result of matchLabels and matchExpressions + are ANDed. An empty label selector matches all objects. A + null label selector matches no objects. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + resource: + type: string + required: + - apiVersion + - resource + type: object + type: array + resyncPeriodSeconds: + format: int32 + type: integer + required: + - resources + type: object + status: + type: object + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: destinationrules.networking.istio.io +spec: + group: networking.istio.io + names: + categories: + - istio-io + - networking-istio-io + kind: DestinationRule + listKind: DestinationRuleList + plural: destinationrules + shortNames: + - dr + singular: destinationrule + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The name of a service from the service registry + jsonPath: .spec.host + name: Host + type: string + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha3 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting load balancing, outlier detection, + etc. See more details at: https://istio.io/docs/reference/config/networking/destination-rule.html' + properties: + exportTo: + description: A list of namespaces to which this destination rule is + exported. + items: + type: string + type: array + host: + description: The name of a service from the service registry. + type: string + subsets: + items: + properties: + labels: + additionalProperties: + type: string + type: object + name: + description: Name of the subset. + type: string + trafficPolicy: + description: Traffic policies that apply to this subset. + properties: + connectionPool: + properties: + http: + description: HTTP connection pool settings. + properties: + h2UpgradePolicy: + description: Specify if http1.1 connection should + be upgraded to http2 for the associated destination. + enum: + - DEFAULT + - DO_NOT_UPGRADE + - UPGRADE + type: string + http1MaxPendingRequests: + format: int32 + type: integer + http2MaxRequests: + description: Maximum number of active requests to + a destination. + format: int32 + type: integer + idleTimeout: + description: The idle timeout for upstream connection + pool connections. + type: string + maxRequestsPerConnection: + description: Maximum number of requests per connection + to a backend. + format: int32 + type: integer + maxRetries: + format: int32 + type: integer + useClientProtocol: + description: If set to true, client protocol will + be preserved while initiating connection to backend. + type: boolean + type: object + tcp: + description: Settings common to both HTTP and TCP upstream + connections. + properties: + connectTimeout: + description: TCP connection timeout. + type: string + maxConnectionDuration: + description: The maximum duration of a connection. + type: string + maxConnections: + description: Maximum number of HTTP1 /TCP connections + to a destination host. + format: int32 + type: integer + tcpKeepalive: + description: If set then set SO_KEEPALIVE on the + socket to enable TCP Keepalives. + properties: + interval: + description: The time duration between keep-alive + probes. + type: string + probes: + type: integer + time: + type: string + type: object + type: object + type: object + loadBalancer: + description: Settings controlling the load balancer algorithms. + oneOf: + - not: + anyOf: + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + properties: + consistentHash: + properties: + httpCookie: + description: Hash based on HTTP cookie. + properties: + name: + description: Name of the cookie. + type: string + path: + description: Path to set for the cookie. + type: string + ttl: + description: Lifetime of the cookie. + type: string + type: object + httpHeaderName: + description: Hash based on a specific HTTP header. + type: string + httpQueryParameterName: + description: Hash based on a specific HTTP query + parameter. + type: string + maglev: + description: The Maglev load balancer implements + consistent hashing to backend hosts. + properties: + tableSize: + description: The table size for Maglev hashing. + type: integer + type: object + minimumRingSize: + description: Deprecated. + type: integer + ringHash: + description: The ring/modulo hash load balancer + implements consistent hashing to backend hosts. + properties: + minimumRingSize: + type: integer + type: object + useSourceIp: + description: Hash based on the source IP address. + type: boolean + type: object + localityLbSetting: + properties: + distribute: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating locality, '/' separated, + e.g. + type: string + to: + additionalProperties: + type: integer + description: Map of upstream localities to + traffic distribution weights. + type: object + type: object + type: array + enabled: + description: enable locality load balancing, this + is DestinationRule-level and will override mesh + wide settings in entirety. + nullable: true + type: boolean + failover: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating region. + type: string + to: + type: string + type: object + type: array + failoverPriority: + description: failoverPriority is an ordered list + of labels used to sort endpoints to do priority + based load balancing. + items: + type: string + type: array + type: object + simple: + enum: + - UNSPECIFIED + - LEAST_CONN + - RANDOM + - PASSTHROUGH + - ROUND_ROBIN + - LEAST_REQUEST + type: string + warmupDurationSecs: + description: Represents the warmup duration of Service. + type: string + type: object + outlierDetection: + properties: + baseEjectionTime: + description: Minimum ejection duration. + type: string + consecutive5xxErrors: + description: Number of 5xx errors before a host is ejected + from the connection pool. + nullable: true + type: integer + consecutiveErrors: + format: int32 + type: integer + consecutiveGatewayErrors: + description: Number of gateway errors before a host + is ejected from the connection pool. + nullable: true + type: integer + consecutiveLocalOriginFailures: + nullable: true + type: integer + interval: + description: Time interval between ejection sweep analysis. + type: string + maxEjectionPercent: + format: int32 + type: integer + minHealthPercent: + format: int32 + type: integer + splitExternalLocalOriginErrors: + description: Determines whether to distinguish local + origin failures from external errors. + type: boolean + type: object + portLevelSettings: + description: Traffic policies specific to individual ports. + items: + properties: + connectionPool: + properties: + http: + description: HTTP connection pool settings. + properties: + h2UpgradePolicy: + description: Specify if http1.1 connection + should be upgraded to http2 for the associated + destination. + enum: + - DEFAULT + - DO_NOT_UPGRADE + - UPGRADE + type: string + http1MaxPendingRequests: + format: int32 + type: integer + http2MaxRequests: + description: Maximum number of active requests + to a destination. + format: int32 + type: integer + idleTimeout: + description: The idle timeout for upstream + connection pool connections. + type: string + maxRequestsPerConnection: + description: Maximum number of requests per + connection to a backend. + format: int32 + type: integer + maxRetries: + format: int32 + type: integer + useClientProtocol: + description: If set to true, client protocol + will be preserved while initiating connection + to backend. + type: boolean + type: object + tcp: + description: Settings common to both HTTP and + TCP upstream connections. + properties: + connectTimeout: + description: TCP connection timeout. + type: string + maxConnectionDuration: + description: The maximum duration of a connection. + type: string + maxConnections: + description: Maximum number of HTTP1 /TCP + connections to a destination host. + format: int32 + type: integer + tcpKeepalive: + description: If set then set SO_KEEPALIVE + on the socket to enable TCP Keepalives. + properties: + interval: + description: The time duration between + keep-alive probes. + type: string + probes: + type: integer + time: + type: string + type: object + type: object + type: object + loadBalancer: + description: Settings controlling the load balancer + algorithms. + oneOf: + - not: + anyOf: + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + properties: + consistentHash: + properties: + httpCookie: + description: Hash based on HTTP cookie. + properties: + name: + description: Name of the cookie. + type: string + path: + description: Path to set for the cookie. + type: string + ttl: + description: Lifetime of the cookie. + type: string + type: object + httpHeaderName: + description: Hash based on a specific HTTP + header. + type: string + httpQueryParameterName: + description: Hash based on a specific HTTP + query parameter. + type: string + maglev: + description: The Maglev load balancer implements + consistent hashing to backend hosts. + properties: + tableSize: + description: The table size for Maglev + hashing. + type: integer + type: object + minimumRingSize: + description: Deprecated. + type: integer + ringHash: + description: The ring/modulo hash load balancer + implements consistent hashing to backend + hosts. + properties: + minimumRingSize: + type: integer + type: object + useSourceIp: + description: Hash based on the source IP address. + type: boolean + type: object + localityLbSetting: + properties: + distribute: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating locality, '/' + separated, e.g. + type: string + to: + additionalProperties: + type: integer + description: Map of upstream localities + to traffic distribution weights. + type: object + type: object + type: array + enabled: + description: enable locality load balancing, + this is DestinationRule-level and will override + mesh wide settings in entirety. + nullable: true + type: boolean + failover: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating region. + type: string + to: + type: string + type: object + type: array + failoverPriority: + description: failoverPriority is an ordered + list of labels used to sort endpoints to + do priority based load balancing. + items: + type: string + type: array + type: object + simple: + enum: + - UNSPECIFIED + - LEAST_CONN + - RANDOM + - PASSTHROUGH + - ROUND_ROBIN + - LEAST_REQUEST + type: string + warmupDurationSecs: + description: Represents the warmup duration of + Service. + type: string + type: object + outlierDetection: + properties: + baseEjectionTime: + description: Minimum ejection duration. + type: string + consecutive5xxErrors: + description: Number of 5xx errors before a host + is ejected from the connection pool. + nullable: true + type: integer + consecutiveErrors: + format: int32 + type: integer + consecutiveGatewayErrors: + description: Number of gateway errors before a + host is ejected from the connection pool. + nullable: true + type: integer + consecutiveLocalOriginFailures: + nullable: true + type: integer + interval: + description: Time interval between ejection sweep + analysis. + type: string + maxEjectionPercent: + format: int32 + type: integer + minHealthPercent: + format: int32 + type: integer + splitExternalLocalOriginErrors: + description: Determines whether to distinguish + local origin failures from external errors. + type: boolean + type: object + port: + properties: + number: + type: integer + type: object + tls: + description: TLS related settings for connections + to the upstream service. + properties: + caCertificates: + type: string + clientCertificate: + description: REQUIRED if mode is `MUTUAL`. + type: string + credentialName: + type: string + insecureSkipVerify: + nullable: true + type: boolean + mode: + enum: + - DISABLE + - SIMPLE + - MUTUAL + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `MUTUAL`. + type: string + sni: + description: SNI string to present to the server + during TLS handshake. + type: string + subjectAltNames: + items: + type: string + type: array + type: object + type: object + type: array + tls: + description: TLS related settings for connections to the + upstream service. + properties: + caCertificates: + type: string + clientCertificate: + description: REQUIRED if mode is `MUTUAL`. + type: string + credentialName: + type: string + insecureSkipVerify: + nullable: true + type: boolean + mode: + enum: + - DISABLE + - SIMPLE + - MUTUAL + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `MUTUAL`. + type: string + sni: + description: SNI string to present to the server during + TLS handshake. + type: string + subjectAltNames: + items: + type: string + type: array + type: object + tunnel: + properties: + protocol: + description: Specifies which protocol to use for tunneling + the downstream connection. + type: string + targetHost: + description: Specifies a host to which the downstream + connection is tunneled. + type: string + targetPort: + description: Specifies a port to which the downstream + connection is tunneled. + type: integer + type: object + type: object + type: object + type: array + trafficPolicy: + properties: + connectionPool: + properties: + http: + description: HTTP connection pool settings. + properties: + h2UpgradePolicy: + description: Specify if http1.1 connection should be upgraded + to http2 for the associated destination. + enum: + - DEFAULT + - DO_NOT_UPGRADE + - UPGRADE + type: string + http1MaxPendingRequests: + format: int32 + type: integer + http2MaxRequests: + description: Maximum number of active requests to a destination. + format: int32 + type: integer + idleTimeout: + description: The idle timeout for upstream connection + pool connections. + type: string + maxRequestsPerConnection: + description: Maximum number of requests per connection + to a backend. + format: int32 + type: integer + maxRetries: + format: int32 + type: integer + useClientProtocol: + description: If set to true, client protocol will be preserved + while initiating connection to backend. + type: boolean + type: object + tcp: + description: Settings common to both HTTP and TCP upstream + connections. + properties: + connectTimeout: + description: TCP connection timeout. + type: string + maxConnectionDuration: + description: The maximum duration of a connection. + type: string + maxConnections: + description: Maximum number of HTTP1 /TCP connections + to a destination host. + format: int32 + type: integer + tcpKeepalive: + description: If set then set SO_KEEPALIVE on the socket + to enable TCP Keepalives. + properties: + interval: + description: The time duration between keep-alive + probes. + type: string + probes: + type: integer + time: + type: string + type: object + type: object + type: object + loadBalancer: + description: Settings controlling the load balancer algorithms. + oneOf: + - not: + anyOf: + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + properties: + consistentHash: + properties: + httpCookie: + description: Hash based on HTTP cookie. + properties: + name: + description: Name of the cookie. + type: string + path: + description: Path to set for the cookie. + type: string + ttl: + description: Lifetime of the cookie. + type: string + type: object + httpHeaderName: + description: Hash based on a specific HTTP header. + type: string + httpQueryParameterName: + description: Hash based on a specific HTTP query parameter. + type: string + maglev: + description: The Maglev load balancer implements consistent + hashing to backend hosts. + properties: + tableSize: + description: The table size for Maglev hashing. + type: integer + type: object + minimumRingSize: + description: Deprecated. + type: integer + ringHash: + description: The ring/modulo hash load balancer implements + consistent hashing to backend hosts. + properties: + minimumRingSize: + type: integer + type: object + useSourceIp: + description: Hash based on the source IP address. + type: boolean + type: object + localityLbSetting: + properties: + distribute: + description: 'Optional: only one of distribute, failover + or failoverPriority can be set.' + items: + properties: + from: + description: Originating locality, '/' separated, + e.g. + type: string + to: + additionalProperties: + type: integer + description: Map of upstream localities to traffic + distribution weights. + type: object + type: object + type: array + enabled: + description: enable locality load balancing, this is DestinationRule-level + and will override mesh wide settings in entirety. + nullable: true + type: boolean + failover: + description: 'Optional: only one of distribute, failover + or failoverPriority can be set.' + items: + properties: + from: + description: Originating region. + type: string + to: + type: string + type: object + type: array + failoverPriority: + description: failoverPriority is an ordered list of labels + used to sort endpoints to do priority based load balancing. + items: + type: string + type: array + type: object + simple: + enum: + - UNSPECIFIED + - LEAST_CONN + - RANDOM + - PASSTHROUGH + - ROUND_ROBIN + - LEAST_REQUEST + type: string + warmupDurationSecs: + description: Represents the warmup duration of Service. + type: string + type: object + outlierDetection: + properties: + baseEjectionTime: + description: Minimum ejection duration. + type: string + consecutive5xxErrors: + description: Number of 5xx errors before a host is ejected + from the connection pool. + nullable: true + type: integer + consecutiveErrors: + format: int32 + type: integer + consecutiveGatewayErrors: + description: Number of gateway errors before a host is ejected + from the connection pool. + nullable: true + type: integer + consecutiveLocalOriginFailures: + nullable: true + type: integer + interval: + description: Time interval between ejection sweep analysis. + type: string + maxEjectionPercent: + format: int32 + type: integer + minHealthPercent: + format: int32 + type: integer + splitExternalLocalOriginErrors: + description: Determines whether to distinguish local origin + failures from external errors. + type: boolean + type: object + portLevelSettings: + description: Traffic policies specific to individual ports. + items: + properties: + connectionPool: + properties: + http: + description: HTTP connection pool settings. + properties: + h2UpgradePolicy: + description: Specify if http1.1 connection should + be upgraded to http2 for the associated destination. + enum: + - DEFAULT + - DO_NOT_UPGRADE + - UPGRADE + type: string + http1MaxPendingRequests: + format: int32 + type: integer + http2MaxRequests: + description: Maximum number of active requests to + a destination. + format: int32 + type: integer + idleTimeout: + description: The idle timeout for upstream connection + pool connections. + type: string + maxRequestsPerConnection: + description: Maximum number of requests per connection + to a backend. + format: int32 + type: integer + maxRetries: + format: int32 + type: integer + useClientProtocol: + description: If set to true, client protocol will + be preserved while initiating connection to backend. + type: boolean + type: object + tcp: + description: Settings common to both HTTP and TCP upstream + connections. + properties: + connectTimeout: + description: TCP connection timeout. + type: string + maxConnectionDuration: + description: The maximum duration of a connection. + type: string + maxConnections: + description: Maximum number of HTTP1 /TCP connections + to a destination host. + format: int32 + type: integer + tcpKeepalive: + description: If set then set SO_KEEPALIVE on the + socket to enable TCP Keepalives. + properties: + interval: + description: The time duration between keep-alive + probes. + type: string + probes: + type: integer + time: + type: string + type: object + type: object + type: object + loadBalancer: + description: Settings controlling the load balancer algorithms. + oneOf: + - not: + anyOf: + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + properties: + consistentHash: + properties: + httpCookie: + description: Hash based on HTTP cookie. + properties: + name: + description: Name of the cookie. + type: string + path: + description: Path to set for the cookie. + type: string + ttl: + description: Lifetime of the cookie. + type: string + type: object + httpHeaderName: + description: Hash based on a specific HTTP header. + type: string + httpQueryParameterName: + description: Hash based on a specific HTTP query + parameter. + type: string + maglev: + description: The Maglev load balancer implements + consistent hashing to backend hosts. + properties: + tableSize: + description: The table size for Maglev hashing. + type: integer + type: object + minimumRingSize: + description: Deprecated. + type: integer + ringHash: + description: The ring/modulo hash load balancer + implements consistent hashing to backend hosts. + properties: + minimumRingSize: + type: integer + type: object + useSourceIp: + description: Hash based on the source IP address. + type: boolean + type: object + localityLbSetting: + properties: + distribute: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating locality, '/' separated, + e.g. + type: string + to: + additionalProperties: + type: integer + description: Map of upstream localities to + traffic distribution weights. + type: object + type: object + type: array + enabled: + description: enable locality load balancing, this + is DestinationRule-level and will override mesh + wide settings in entirety. + nullable: true + type: boolean + failover: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating region. + type: string + to: + type: string + type: object + type: array + failoverPriority: + description: failoverPriority is an ordered list + of labels used to sort endpoints to do priority + based load balancing. + items: + type: string + type: array + type: object + simple: + enum: + - UNSPECIFIED + - LEAST_CONN + - RANDOM + - PASSTHROUGH + - ROUND_ROBIN + - LEAST_REQUEST + type: string + warmupDurationSecs: + description: Represents the warmup duration of Service. + type: string + type: object + outlierDetection: + properties: + baseEjectionTime: + description: Minimum ejection duration. + type: string + consecutive5xxErrors: + description: Number of 5xx errors before a host is ejected + from the connection pool. + nullable: true + type: integer + consecutiveErrors: + format: int32 + type: integer + consecutiveGatewayErrors: + description: Number of gateway errors before a host + is ejected from the connection pool. + nullable: true + type: integer + consecutiveLocalOriginFailures: + nullable: true + type: integer + interval: + description: Time interval between ejection sweep analysis. + type: string + maxEjectionPercent: + format: int32 + type: integer + minHealthPercent: + format: int32 + type: integer + splitExternalLocalOriginErrors: + description: Determines whether to distinguish local + origin failures from external errors. + type: boolean + type: object + port: + properties: + number: + type: integer + type: object + tls: + description: TLS related settings for connections to the + upstream service. + properties: + caCertificates: + type: string + clientCertificate: + description: REQUIRED if mode is `MUTUAL`. + type: string + credentialName: + type: string + insecureSkipVerify: + nullable: true + type: boolean + mode: + enum: + - DISABLE + - SIMPLE + - MUTUAL + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `MUTUAL`. + type: string + sni: + description: SNI string to present to the server during + TLS handshake. + type: string + subjectAltNames: + items: + type: string + type: array + type: object + type: object + type: array + tls: + description: TLS related settings for connections to the upstream + service. + properties: + caCertificates: + type: string + clientCertificate: + description: REQUIRED if mode is `MUTUAL`. + type: string + credentialName: + type: string + insecureSkipVerify: + nullable: true + type: boolean + mode: + enum: + - DISABLE + - SIMPLE + - MUTUAL + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `MUTUAL`. + type: string + sni: + description: SNI string to present to the server during TLS + handshake. + type: string + subjectAltNames: + items: + type: string + type: array + type: object + tunnel: + properties: + protocol: + description: Specifies which protocol to use for tunneling + the downstream connection. + type: string + targetHost: + description: Specifies a host to which the downstream connection + is tunneled. + type: string + targetPort: + description: Specifies a port to which the downstream connection + is tunneled. + type: integer + type: object + type: object + workloadSelector: + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: The name of a service from the service registry + jsonPath: .spec.host + name: Host + type: string + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting load balancing, outlier detection, + etc. See more details at: https://istio.io/docs/reference/config/networking/destination-rule.html' + properties: + exportTo: + description: A list of namespaces to which this destination rule is + exported. + items: + type: string + type: array + host: + description: The name of a service from the service registry. + type: string + subsets: + items: + properties: + labels: + additionalProperties: + type: string + type: object + name: + description: Name of the subset. + type: string + trafficPolicy: + description: Traffic policies that apply to this subset. + properties: + connectionPool: + properties: + http: + description: HTTP connection pool settings. + properties: + h2UpgradePolicy: + description: Specify if http1.1 connection should + be upgraded to http2 for the associated destination. + enum: + - DEFAULT + - DO_NOT_UPGRADE + - UPGRADE + type: string + http1MaxPendingRequests: + format: int32 + type: integer + http2MaxRequests: + description: Maximum number of active requests to + a destination. + format: int32 + type: integer + idleTimeout: + description: The idle timeout for upstream connection + pool connections. + type: string + maxRequestsPerConnection: + description: Maximum number of requests per connection + to a backend. + format: int32 + type: integer + maxRetries: + format: int32 + type: integer + useClientProtocol: + description: If set to true, client protocol will + be preserved while initiating connection to backend. + type: boolean + type: object + tcp: + description: Settings common to both HTTP and TCP upstream + connections. + properties: + connectTimeout: + description: TCP connection timeout. + type: string + maxConnectionDuration: + description: The maximum duration of a connection. + type: string + maxConnections: + description: Maximum number of HTTP1 /TCP connections + to a destination host. + format: int32 + type: integer + tcpKeepalive: + description: If set then set SO_KEEPALIVE on the + socket to enable TCP Keepalives. + properties: + interval: + description: The time duration between keep-alive + probes. + type: string + probes: + type: integer + time: + type: string + type: object + type: object + type: object + loadBalancer: + description: Settings controlling the load balancer algorithms. + oneOf: + - not: + anyOf: + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + properties: + consistentHash: + properties: + httpCookie: + description: Hash based on HTTP cookie. + properties: + name: + description: Name of the cookie. + type: string + path: + description: Path to set for the cookie. + type: string + ttl: + description: Lifetime of the cookie. + type: string + type: object + httpHeaderName: + description: Hash based on a specific HTTP header. + type: string + httpQueryParameterName: + description: Hash based on a specific HTTP query + parameter. + type: string + maglev: + description: The Maglev load balancer implements + consistent hashing to backend hosts. + properties: + tableSize: + description: The table size for Maglev hashing. + type: integer + type: object + minimumRingSize: + description: Deprecated. + type: integer + ringHash: + description: The ring/modulo hash load balancer + implements consistent hashing to backend hosts. + properties: + minimumRingSize: + type: integer + type: object + useSourceIp: + description: Hash based on the source IP address. + type: boolean + type: object + localityLbSetting: + properties: + distribute: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating locality, '/' separated, + e.g. + type: string + to: + additionalProperties: + type: integer + description: Map of upstream localities to + traffic distribution weights. + type: object + type: object + type: array + enabled: + description: enable locality load balancing, this + is DestinationRule-level and will override mesh + wide settings in entirety. + nullable: true + type: boolean + failover: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating region. + type: string + to: + type: string + type: object + type: array + failoverPriority: + description: failoverPriority is an ordered list + of labels used to sort endpoints to do priority + based load balancing. + items: + type: string + type: array + type: object + simple: + enum: + - UNSPECIFIED + - LEAST_CONN + - RANDOM + - PASSTHROUGH + - ROUND_ROBIN + - LEAST_REQUEST + type: string + warmupDurationSecs: + description: Represents the warmup duration of Service. + type: string + type: object + outlierDetection: + properties: + baseEjectionTime: + description: Minimum ejection duration. + type: string + consecutive5xxErrors: + description: Number of 5xx errors before a host is ejected + from the connection pool. + nullable: true + type: integer + consecutiveErrors: + format: int32 + type: integer + consecutiveGatewayErrors: + description: Number of gateway errors before a host + is ejected from the connection pool. + nullable: true + type: integer + consecutiveLocalOriginFailures: + nullable: true + type: integer + interval: + description: Time interval between ejection sweep analysis. + type: string + maxEjectionPercent: + format: int32 + type: integer + minHealthPercent: + format: int32 + type: integer + splitExternalLocalOriginErrors: + description: Determines whether to distinguish local + origin failures from external errors. + type: boolean + type: object + portLevelSettings: + description: Traffic policies specific to individual ports. + items: + properties: + connectionPool: + properties: + http: + description: HTTP connection pool settings. + properties: + h2UpgradePolicy: + description: Specify if http1.1 connection + should be upgraded to http2 for the associated + destination. + enum: + - DEFAULT + - DO_NOT_UPGRADE + - UPGRADE + type: string + http1MaxPendingRequests: + format: int32 + type: integer + http2MaxRequests: + description: Maximum number of active requests + to a destination. + format: int32 + type: integer + idleTimeout: + description: The idle timeout for upstream + connection pool connections. + type: string + maxRequestsPerConnection: + description: Maximum number of requests per + connection to a backend. + format: int32 + type: integer + maxRetries: + format: int32 + type: integer + useClientProtocol: + description: If set to true, client protocol + will be preserved while initiating connection + to backend. + type: boolean + type: object + tcp: + description: Settings common to both HTTP and + TCP upstream connections. + properties: + connectTimeout: + description: TCP connection timeout. + type: string + maxConnectionDuration: + description: The maximum duration of a connection. + type: string + maxConnections: + description: Maximum number of HTTP1 /TCP + connections to a destination host. + format: int32 + type: integer + tcpKeepalive: + description: If set then set SO_KEEPALIVE + on the socket to enable TCP Keepalives. + properties: + interval: + description: The time duration between + keep-alive probes. + type: string + probes: + type: integer + time: + type: string + type: object + type: object + type: object + loadBalancer: + description: Settings controlling the load balancer + algorithms. + oneOf: + - not: + anyOf: + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + properties: + consistentHash: + properties: + httpCookie: + description: Hash based on HTTP cookie. + properties: + name: + description: Name of the cookie. + type: string + path: + description: Path to set for the cookie. + type: string + ttl: + description: Lifetime of the cookie. + type: string + type: object + httpHeaderName: + description: Hash based on a specific HTTP + header. + type: string + httpQueryParameterName: + description: Hash based on a specific HTTP + query parameter. + type: string + maglev: + description: The Maglev load balancer implements + consistent hashing to backend hosts. + properties: + tableSize: + description: The table size for Maglev + hashing. + type: integer + type: object + minimumRingSize: + description: Deprecated. + type: integer + ringHash: + description: The ring/modulo hash load balancer + implements consistent hashing to backend + hosts. + properties: + minimumRingSize: + type: integer + type: object + useSourceIp: + description: Hash based on the source IP address. + type: boolean + type: object + localityLbSetting: + properties: + distribute: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating locality, '/' + separated, e.g. + type: string + to: + additionalProperties: + type: integer + description: Map of upstream localities + to traffic distribution weights. + type: object + type: object + type: array + enabled: + description: enable locality load balancing, + this is DestinationRule-level and will override + mesh wide settings in entirety. + nullable: true + type: boolean + failover: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating region. + type: string + to: + type: string + type: object + type: array + failoverPriority: + description: failoverPriority is an ordered + list of labels used to sort endpoints to + do priority based load balancing. + items: + type: string + type: array + type: object + simple: + enum: + - UNSPECIFIED + - LEAST_CONN + - RANDOM + - PASSTHROUGH + - ROUND_ROBIN + - LEAST_REQUEST + type: string + warmupDurationSecs: + description: Represents the warmup duration of + Service. + type: string + type: object + outlierDetection: + properties: + baseEjectionTime: + description: Minimum ejection duration. + type: string + consecutive5xxErrors: + description: Number of 5xx errors before a host + is ejected from the connection pool. + nullable: true + type: integer + consecutiveErrors: + format: int32 + type: integer + consecutiveGatewayErrors: + description: Number of gateway errors before a + host is ejected from the connection pool. + nullable: true + type: integer + consecutiveLocalOriginFailures: + nullable: true + type: integer + interval: + description: Time interval between ejection sweep + analysis. + type: string + maxEjectionPercent: + format: int32 + type: integer + minHealthPercent: + format: int32 + type: integer + splitExternalLocalOriginErrors: + description: Determines whether to distinguish + local origin failures from external errors. + type: boolean + type: object + port: + properties: + number: + type: integer + type: object + tls: + description: TLS related settings for connections + to the upstream service. + properties: + caCertificates: + type: string + clientCertificate: + description: REQUIRED if mode is `MUTUAL`. + type: string + credentialName: + type: string + insecureSkipVerify: + nullable: true + type: boolean + mode: + enum: + - DISABLE + - SIMPLE + - MUTUAL + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `MUTUAL`. + type: string + sni: + description: SNI string to present to the server + during TLS handshake. + type: string + subjectAltNames: + items: + type: string + type: array + type: object + type: object + type: array + tls: + description: TLS related settings for connections to the + upstream service. + properties: + caCertificates: + type: string + clientCertificate: + description: REQUIRED if mode is `MUTUAL`. + type: string + credentialName: + type: string + insecureSkipVerify: + nullable: true + type: boolean + mode: + enum: + - DISABLE + - SIMPLE + - MUTUAL + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `MUTUAL`. + type: string + sni: + description: SNI string to present to the server during + TLS handshake. + type: string + subjectAltNames: + items: + type: string + type: array + type: object + tunnel: + properties: + protocol: + description: Specifies which protocol to use for tunneling + the downstream connection. + type: string + targetHost: + description: Specifies a host to which the downstream + connection is tunneled. + type: string + targetPort: + description: Specifies a port to which the downstream + connection is tunneled. + type: integer + type: object + type: object + type: object + type: array + trafficPolicy: + properties: + connectionPool: + properties: + http: + description: HTTP connection pool settings. + properties: + h2UpgradePolicy: + description: Specify if http1.1 connection should be upgraded + to http2 for the associated destination. + enum: + - DEFAULT + - DO_NOT_UPGRADE + - UPGRADE + type: string + http1MaxPendingRequests: + format: int32 + type: integer + http2MaxRequests: + description: Maximum number of active requests to a destination. + format: int32 + type: integer + idleTimeout: + description: The idle timeout for upstream connection + pool connections. + type: string + maxRequestsPerConnection: + description: Maximum number of requests per connection + to a backend. + format: int32 + type: integer + maxRetries: + format: int32 + type: integer + useClientProtocol: + description: If set to true, client protocol will be preserved + while initiating connection to backend. + type: boolean + type: object + tcp: + description: Settings common to both HTTP and TCP upstream + connections. + properties: + connectTimeout: + description: TCP connection timeout. + type: string + maxConnectionDuration: + description: The maximum duration of a connection. + type: string + maxConnections: + description: Maximum number of HTTP1 /TCP connections + to a destination host. + format: int32 + type: integer + tcpKeepalive: + description: If set then set SO_KEEPALIVE on the socket + to enable TCP Keepalives. + properties: + interval: + description: The time duration between keep-alive + probes. + type: string + probes: + type: integer + time: + type: string + type: object + type: object + type: object + loadBalancer: + description: Settings controlling the load balancer algorithms. + oneOf: + - not: + anyOf: + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + properties: + consistentHash: + properties: + httpCookie: + description: Hash based on HTTP cookie. + properties: + name: + description: Name of the cookie. + type: string + path: + description: Path to set for the cookie. + type: string + ttl: + description: Lifetime of the cookie. + type: string + type: object + httpHeaderName: + description: Hash based on a specific HTTP header. + type: string + httpQueryParameterName: + description: Hash based on a specific HTTP query parameter. + type: string + maglev: + description: The Maglev load balancer implements consistent + hashing to backend hosts. + properties: + tableSize: + description: The table size for Maglev hashing. + type: integer + type: object + minimumRingSize: + description: Deprecated. + type: integer + ringHash: + description: The ring/modulo hash load balancer implements + consistent hashing to backend hosts. + properties: + minimumRingSize: + type: integer + type: object + useSourceIp: + description: Hash based on the source IP address. + type: boolean + type: object + localityLbSetting: + properties: + distribute: + description: 'Optional: only one of distribute, failover + or failoverPriority can be set.' + items: + properties: + from: + description: Originating locality, '/' separated, + e.g. + type: string + to: + additionalProperties: + type: integer + description: Map of upstream localities to traffic + distribution weights. + type: object + type: object + type: array + enabled: + description: enable locality load balancing, this is DestinationRule-level + and will override mesh wide settings in entirety. + nullable: true + type: boolean + failover: + description: 'Optional: only one of distribute, failover + or failoverPriority can be set.' + items: + properties: + from: + description: Originating region. + type: string + to: + type: string + type: object + type: array + failoverPriority: + description: failoverPriority is an ordered list of labels + used to sort endpoints to do priority based load balancing. + items: + type: string + type: array + type: object + simple: + enum: + - UNSPECIFIED + - LEAST_CONN + - RANDOM + - PASSTHROUGH + - ROUND_ROBIN + - LEAST_REQUEST + type: string + warmupDurationSecs: + description: Represents the warmup duration of Service. + type: string + type: object + outlierDetection: + properties: + baseEjectionTime: + description: Minimum ejection duration. + type: string + consecutive5xxErrors: + description: Number of 5xx errors before a host is ejected + from the connection pool. + nullable: true + type: integer + consecutiveErrors: + format: int32 + type: integer + consecutiveGatewayErrors: + description: Number of gateway errors before a host is ejected + from the connection pool. + nullable: true + type: integer + consecutiveLocalOriginFailures: + nullable: true + type: integer + interval: + description: Time interval between ejection sweep analysis. + type: string + maxEjectionPercent: + format: int32 + type: integer + minHealthPercent: + format: int32 + type: integer + splitExternalLocalOriginErrors: + description: Determines whether to distinguish local origin + failures from external errors. + type: boolean + type: object + portLevelSettings: + description: Traffic policies specific to individual ports. + items: + properties: + connectionPool: + properties: + http: + description: HTTP connection pool settings. + properties: + h2UpgradePolicy: + description: Specify if http1.1 connection should + be upgraded to http2 for the associated destination. + enum: + - DEFAULT + - DO_NOT_UPGRADE + - UPGRADE + type: string + http1MaxPendingRequests: + format: int32 + type: integer + http2MaxRequests: + description: Maximum number of active requests to + a destination. + format: int32 + type: integer + idleTimeout: + description: The idle timeout for upstream connection + pool connections. + type: string + maxRequestsPerConnection: + description: Maximum number of requests per connection + to a backend. + format: int32 + type: integer + maxRetries: + format: int32 + type: integer + useClientProtocol: + description: If set to true, client protocol will + be preserved while initiating connection to backend. + type: boolean + type: object + tcp: + description: Settings common to both HTTP and TCP upstream + connections. + properties: + connectTimeout: + description: TCP connection timeout. + type: string + maxConnectionDuration: + description: The maximum duration of a connection. + type: string + maxConnections: + description: Maximum number of HTTP1 /TCP connections + to a destination host. + format: int32 + type: integer + tcpKeepalive: + description: If set then set SO_KEEPALIVE on the + socket to enable TCP Keepalives. + properties: + interval: + description: The time duration between keep-alive + probes. + type: string + probes: + type: integer + time: + type: string + type: object + type: object + type: object + loadBalancer: + description: Settings controlling the load balancer algorithms. + oneOf: + - not: + anyOf: + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + - required: + - simple + - properties: + consistentHash: + allOf: + - oneOf: + - not: + anyOf: + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - required: + - httpHeaderName + - required: + - httpCookie + - required: + - useSourceIp + - required: + - httpQueryParameterName + - oneOf: + - not: + anyOf: + - required: + - ringHash + - required: + - maglev + - required: + - ringHash + - required: + - maglev + properties: + minimumRingSize: {} + required: + - consistentHash + properties: + consistentHash: + properties: + httpCookie: + description: Hash based on HTTP cookie. + properties: + name: + description: Name of the cookie. + type: string + path: + description: Path to set for the cookie. + type: string + ttl: + description: Lifetime of the cookie. + type: string + type: object + httpHeaderName: + description: Hash based on a specific HTTP header. + type: string + httpQueryParameterName: + description: Hash based on a specific HTTP query + parameter. + type: string + maglev: + description: The Maglev load balancer implements + consistent hashing to backend hosts. + properties: + tableSize: + description: The table size for Maglev hashing. + type: integer + type: object + minimumRingSize: + description: Deprecated. + type: integer + ringHash: + description: The ring/modulo hash load balancer + implements consistent hashing to backend hosts. + properties: + minimumRingSize: + type: integer + type: object + useSourceIp: + description: Hash based on the source IP address. + type: boolean + type: object + localityLbSetting: + properties: + distribute: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating locality, '/' separated, + e.g. + type: string + to: + additionalProperties: + type: integer + description: Map of upstream localities to + traffic distribution weights. + type: object + type: object + type: array + enabled: + description: enable locality load balancing, this + is DestinationRule-level and will override mesh + wide settings in entirety. + nullable: true + type: boolean + failover: + description: 'Optional: only one of distribute, + failover or failoverPriority can be set.' + items: + properties: + from: + description: Originating region. + type: string + to: + type: string + type: object + type: array + failoverPriority: + description: failoverPriority is an ordered list + of labels used to sort endpoints to do priority + based load balancing. + items: + type: string + type: array + type: object + simple: + enum: + - UNSPECIFIED + - LEAST_CONN + - RANDOM + - PASSTHROUGH + - ROUND_ROBIN + - LEAST_REQUEST + type: string + warmupDurationSecs: + description: Represents the warmup duration of Service. + type: string + type: object + outlierDetection: + properties: + baseEjectionTime: + description: Minimum ejection duration. + type: string + consecutive5xxErrors: + description: Number of 5xx errors before a host is ejected + from the connection pool. + nullable: true + type: integer + consecutiveErrors: + format: int32 + type: integer + consecutiveGatewayErrors: + description: Number of gateway errors before a host + is ejected from the connection pool. + nullable: true + type: integer + consecutiveLocalOriginFailures: + nullable: true + type: integer + interval: + description: Time interval between ejection sweep analysis. + type: string + maxEjectionPercent: + format: int32 + type: integer + minHealthPercent: + format: int32 + type: integer + splitExternalLocalOriginErrors: + description: Determines whether to distinguish local + origin failures from external errors. + type: boolean + type: object + port: + properties: + number: + type: integer + type: object + tls: + description: TLS related settings for connections to the + upstream service. + properties: + caCertificates: + type: string + clientCertificate: + description: REQUIRED if mode is `MUTUAL`. + type: string + credentialName: + type: string + insecureSkipVerify: + nullable: true + type: boolean + mode: + enum: + - DISABLE + - SIMPLE + - MUTUAL + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `MUTUAL`. + type: string + sni: + description: SNI string to present to the server during + TLS handshake. + type: string + subjectAltNames: + items: + type: string + type: array + type: object + type: object + type: array + tls: + description: TLS related settings for connections to the upstream + service. + properties: + caCertificates: + type: string + clientCertificate: + description: REQUIRED if mode is `MUTUAL`. + type: string + credentialName: + type: string + insecureSkipVerify: + nullable: true + type: boolean + mode: + enum: + - DISABLE + - SIMPLE + - MUTUAL + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `MUTUAL`. + type: string + sni: + description: SNI string to present to the server during TLS + handshake. + type: string + subjectAltNames: + items: + type: string + type: array + type: object + tunnel: + properties: + protocol: + description: Specifies which protocol to use for tunneling + the downstream connection. + type: string + targetHost: + description: Specifies a host to which the downstream connection + is tunneled. + type: string + targetPort: + description: Specifies a port to which the downstream connection + is tunneled. + type: integer + type: object + type: object + workloadSelector: + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: false + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + knative.dev/crd-install: "true" + name: domainmappings.serving.knative.dev +spec: + group: serving.knative.dev + names: + categories: + - all + - knative + - serving + kind: DomainMapping + plural: domainmappings + shortNames: + - dm + singular: domainmapping + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.url + name: URL + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: DomainMapping is a mapping from a custom hostname to an Addressable. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: 'Spec is the desired state of the DomainMapping. More info: + https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + ref: + description: "Ref specifies the target of the Domain Mapping. \n The + object identified by the Ref must be an Addressable with a URL of + the form `{name}.{namespace}.{domain}` where `{domain}` is the cluster + domain, and `{name}` and `{namespace}` are the name and namespace + of a Kubernetes Service. \n This contract is satisfied by Knative + types such as Knative Services and Knative Routes, and by Kubernetes + Services." + properties: + address: + description: Address points to a specific Address Name. + type: string + apiVersion: + description: API version of the referent. + type: string + group: + description: 'Group of the API, without the version of the group. + This can be used as an alternative to the APIVersion, and then + resolved using ResolveGroup. Note: This API is EXPERIMENTAL + and might break anytime. For more details: https://github.com/knative/eventing/issues/5086' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object holding + it if left out.' + type: string + required: + - kind + - name + type: object + tls: + description: TLS allows the DomainMapping to terminate TLS traffic + with an existing secret. + properties: + secretName: + description: SecretName is the name of the existing secret used + to terminate TLS traffic. + type: string + required: + - secretName + type: object + required: + - ref + type: object + status: + description: 'Status is the current state of the DomainMapping. More info: + https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + address: + description: Address holds the information needed for a DomainMapping + to be the target of an event. + properties: + CACerts: + description: CACerts is the Certification Authority (CA) certificates + in PEM format according to https://www.rfc-editor.org/rfc/rfc7468. + type: string + name: + description: Name is the name of the address. + type: string + url: + type: string + type: object + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + url: + description: URL is the URL of this DomainMapping. + type: string + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .status.url + name: URL + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: DomainMapping is a mapping from a custom hostname to an Addressable. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: 'Spec is the desired state of the DomainMapping. More info: + https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + ref: + description: "Ref specifies the target of the Domain Mapping. \n The + object identified by the Ref must be an Addressable with a URL of + the form `{name}.{namespace}.{domain}` where `{domain}` is the cluster + domain, and `{name}` and `{namespace}` are the name and namespace + of a Kubernetes Service. \n This contract is satisfied by Knative + types such as Knative Services and Knative Routes, and by Kubernetes + Services." + properties: + address: + description: Address points to a specific Address Name. + type: string + apiVersion: + description: API version of the referent. + type: string + group: + description: 'Group of the API, without the version of the group. + This can be used as an alternative to the APIVersion, and then + resolved using ResolveGroup. Note: This API is EXPERIMENTAL + and might break anytime. For more details: https://github.com/knative/eventing/issues/5086' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object holding + it if left out.' + type: string + required: + - kind + - name + type: object + tls: + description: TLS allows the DomainMapping to terminate TLS traffic + with an existing secret. + properties: + secretName: + description: SecretName is the name of the existing secret used + to terminate TLS traffic. + type: string + required: + - secretName + type: object + required: + - ref + type: object + status: + description: 'Status is the current state of the DomainMapping. More info: + https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + address: + description: Address holds the information needed for a DomainMapping + to be the target of an event. + properties: + CACerts: + description: CACerts is the Certification Authority (CA) certificates + in PEM format according to https://www.rfc-editor.org/rfc/rfc7468. + type: string + name: + description: Name is the name of the address. + type: string + url: + type: string + type: object + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + url: + description: URL is the URL of this DomainMapping. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: envoyfilters.networking.istio.io +spec: + group: networking.istio.io + names: + categories: + - istio-io + - networking-istio-io + kind: EnvoyFilter + listKind: EnvoyFilterList + plural: envoyfilters + singular: envoyfilter + scope: Namespaced + versions: + - name: v1alpha3 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Customizing Envoy configuration generated by Istio. See + more details at: https://istio.io/docs/reference/config/networking/envoy-filter.html' + properties: + configPatches: + description: One or more patches with match conditions. + items: + properties: + applyTo: + enum: + - INVALID + - LISTENER + - FILTER_CHAIN + - NETWORK_FILTER + - HTTP_FILTER + - ROUTE_CONFIGURATION + - VIRTUAL_HOST + - HTTP_ROUTE + - CLUSTER + - EXTENSION_CONFIG + - BOOTSTRAP + - LISTENER_FILTER + type: string + match: + description: Match on listener/route configuration/cluster. + oneOf: + - not: + anyOf: + - required: + - listener + - required: + - routeConfiguration + - required: + - cluster + - required: + - listener + - required: + - routeConfiguration + - required: + - cluster + properties: + cluster: + description: Match on envoy cluster attributes. + properties: + name: + description: The exact name of the cluster to match. + type: string + portNumber: + description: The service port for which this cluster + was generated. + type: integer + service: + description: The fully qualified service name for this + cluster. + type: string + subset: + description: The subset associated with the service. + type: string + type: object + context: + description: The specific config generation context to match + on. + enum: + - ANY + - SIDECAR_INBOUND + - SIDECAR_OUTBOUND + - GATEWAY + type: string + listener: + description: Match on envoy listener attributes. + properties: + filterChain: + description: Match a specific filter chain in a listener. + properties: + applicationProtocols: + description: Applies only to sidecars. + type: string + destinationPort: + description: The destination_port value used by + a filter chain's match condition. + type: integer + filter: + description: The name of a specific filter to apply + the patch to. + properties: + name: + description: The filter name to match on. + type: string + subFilter: + properties: + name: + description: The filter name to match on. + type: string + type: object + type: object + name: + description: The name assigned to the filter chain. + type: string + sni: + description: The SNI value used by a filter chain's + match condition. + type: string + transportProtocol: + description: Applies only to `SIDECAR_INBOUND` context. + type: string + type: object + listenerFilter: + description: Match a specific listener filter. + type: string + name: + description: Match a specific listener by its name. + type: string + portName: + type: string + portNumber: + type: integer + type: object + proxy: + description: Match on properties associated with a proxy. + properties: + metadata: + additionalProperties: + type: string + type: object + proxyVersion: + type: string + type: object + routeConfiguration: + description: Match on envoy HTTP route configuration attributes. + properties: + gateway: + type: string + name: + description: Route configuration name to match on. + type: string + portName: + description: Applicable only for GATEWAY context. + type: string + portNumber: + type: integer + vhost: + properties: + name: + type: string + route: + description: Match a specific route within the virtual + host. + properties: + action: + description: Match a route with specific action + type. + enum: + - ANY + - ROUTE + - REDIRECT + - DIRECT_RESPONSE + type: string + name: + type: string + type: object + type: object + type: object + type: object + patch: + description: The patch to apply along with the operation. + properties: + filterClass: + description: Determines the filter insertion order. + enum: + - UNSPECIFIED + - AUTHN + - AUTHZ + - STATS + type: string + operation: + description: Determines how the patch should be applied. + enum: + - INVALID + - MERGE + - ADD + - REMOVE + - INSERT_BEFORE + - INSERT_AFTER + - INSERT_FIRST + - REPLACE + type: string + value: + description: The JSON config of the object being patched. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + type: array + priority: + description: Priority defines the order in which patch sets are applied + within a context. + format: int32 + type: integer + workloadSelector: + properties: + labels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + knative.dev/crd-install: "true" + kustomize.component: knative + name: eventtypes.eventing.knative.dev +spec: + group: eventing.knative.dev + names: + categories: + - all + - knative + - eventing + kind: EventType + plural: eventtypes + singular: eventtype + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.type + name: Type + type: string + - jsonPath: .spec.source + name: Source + type: string + - jsonPath: .spec.schema + name: Schema + type: string + - jsonPath: .spec.broker + name: Broker + type: string + - jsonPath: .spec.description + name: Description + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].reason + name: Reason + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: EventType represents a type of event that can be consumed from + a Broker. + properties: + spec: + description: Spec defines the desired state of the EventType. + properties: + broker: + type: string + description: + description: Description is an optional field used to describe the + EventType, in any meaningful way. + type: string + schema: + description: Schema is a URI, it represents the CloudEvents schemaurl + extension attribute. It may be a JSON schema, a protobuf schema, + etc. It is optional. + type: string + schemaData: + description: SchemaData allows the CloudEvents schema to be stored + directly in the EventType. Content is dependent on the encoding. + Optional attribute. The contents are not validated or manipulated + by the system. + type: string + source: + description: Source is a URI, it represents the CloudEvents source. + type: string + type: + description: Type represents the CloudEvents type. It is authoritative. + type: string + type: object + status: + description: Status represents the current state of the EventType. This + data may be out of date. + properties: + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: experiments.kubeflow.org +spec: + group: kubeflow.org + names: + categories: + - all + - kubeflow + - katib + kind: Experiment + plural: experiments + singular: experiment + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[-1:].type + name: Type + type: string + - jsonPath: .status.conditions[-1:].status + name: Status + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: gateways.networking.istio.io +spec: + group: networking.istio.io + names: + categories: + - istio-io + - networking-istio-io + kind: Gateway + listKind: GatewayList + plural: gateways + shortNames: + - gw + singular: gateway + scope: Namespaced + versions: + - name: v1alpha3 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting edge load balancer. See more details + at: https://istio.io/docs/reference/config/networking/gateway.html' + properties: + selector: + additionalProperties: + type: string + type: object + servers: + description: A list of server specifications. + items: + properties: + bind: + type: string + defaultEndpoint: + type: string + hosts: + description: One or more hosts exposed by this gateway. + items: + type: string + type: array + name: + description: An optional name of the server, when set must be + unique across all servers. + type: string + port: + properties: + name: + description: Label assigned to the port. + type: string + number: + description: A valid non-negative integer port number. + type: integer + protocol: + description: The protocol exposed on the port. + type: string + targetPort: + type: integer + type: object + tls: + description: Set of TLS related options that govern the server's + behavior. + properties: + caCertificates: + description: REQUIRED if mode is `MUTUAL`. + type: string + cipherSuites: + description: 'Optional: If specified, only support the specified + cipher list.' + items: + type: string + type: array + credentialName: + type: string + httpsRedirect: + type: boolean + maxProtocolVersion: + description: 'Optional: Maximum TLS protocol version.' + enum: + - TLS_AUTO + - TLSV1_0 + - TLSV1_1 + - TLSV1_2 + - TLSV1_3 + type: string + minProtocolVersion: + description: 'Optional: Minimum TLS protocol version.' + enum: + - TLS_AUTO + - TLSV1_0 + - TLSV1_1 + - TLSV1_2 + - TLSV1_3 + type: string + mode: + enum: + - PASSTHROUGH + - SIMPLE + - MUTUAL + - AUTO_PASSTHROUGH + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `SIMPLE` or `MUTUAL`. + type: string + serverCertificate: + description: REQUIRED if mode is `SIMPLE` or `MUTUAL`. + type: string + subjectAltNames: + items: + type: string + type: array + verifyCertificateHash: + items: + type: string + type: array + verifyCertificateSpki: + items: + type: string + type: array + type: object + type: object + type: array + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting edge load balancer. See more details + at: https://istio.io/docs/reference/config/networking/gateway.html' + properties: + selector: + additionalProperties: + type: string + type: object + servers: + description: A list of server specifications. + items: + properties: + bind: + type: string + defaultEndpoint: + type: string + hosts: + description: One or more hosts exposed by this gateway. + items: + type: string + type: array + name: + description: An optional name of the server, when set must be + unique across all servers. + type: string + port: + properties: + name: + description: Label assigned to the port. + type: string + number: + description: A valid non-negative integer port number. + type: integer + protocol: + description: The protocol exposed on the port. + type: string + targetPort: + type: integer + type: object + tls: + description: Set of TLS related options that govern the server's + behavior. + properties: + caCertificates: + description: REQUIRED if mode is `MUTUAL`. + type: string + cipherSuites: + description: 'Optional: If specified, only support the specified + cipher list.' + items: + type: string + type: array + credentialName: + type: string + httpsRedirect: + type: boolean + maxProtocolVersion: + description: 'Optional: Maximum TLS protocol version.' + enum: + - TLS_AUTO + - TLSV1_0 + - TLSV1_1 + - TLSV1_2 + - TLSV1_3 + type: string + minProtocolVersion: + description: 'Optional: Minimum TLS protocol version.' + enum: + - TLS_AUTO + - TLSV1_0 + - TLSV1_1 + - TLSV1_2 + - TLSV1_3 + type: string + mode: + enum: + - PASSTHROUGH + - SIMPLE + - MUTUAL + - AUTO_PASSTHROUGH + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `SIMPLE` or `MUTUAL`. + type: string + serverCertificate: + description: REQUIRED if mode is `SIMPLE` or `MUTUAL`. + type: string + subjectAltNames: + items: + type: string + type: array + verifyCertificateHash: + items: + type: string + type: array + verifyCertificateSpki: + items: + type: string + type: array + type: object + type: object + type: array + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: false + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + knative.dev/crd-install: "true" + name: images.caching.internal.knative.dev +spec: + group: caching.internal.knative.dev + names: + categories: + - knative-internal + - caching + kind: Image + plural: images + singular: image + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.image + name: Image + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: Image is a Knative abstraction that encapsulates the interface + by which Knative components express a desire to have a particular image + cached. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec holds the desired state of the Image (from the client). + properties: + image: + description: Image is the name of the container image url to cache + across the cluster. + type: string + imagePullSecrets: + description: ImagePullSecrets contains the names of the Kubernetes + Secrets containing login information used by the Pods which will + run this container. + items: + description: LocalObjectReference contains enough information to + let you locate the referenced object inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + serviceAccountName: + description: 'ServiceAccountName is the name of the Kubernetes ServiceAccount + as which the Pods will run this container. This is potentially + used to authenticate the image pull if the service account has attached + pull secrets. For more information: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account' + type: string + required: + - image + type: object + status: + description: Status communicates the observed state of the Image (from + the controller). + properties: + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + creationTimestamp: null + labels: + app: kserve + app.kubernetes.io/name: kserve + name: inferencegraphs.serving.kserve.io +spec: + group: serving.kserve.io + names: + kind: InferenceGraph + listKind: InferenceGraphList + plural: inferencegraphs + shortNames: + - ig + singular: inferencegraph + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.url + name: URL + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + nodes: + additionalProperties: + properties: + routerType: + enum: + - Sequence + - Splitter + - Ensemble + - Switch + type: string + steps: + items: + properties: + condition: + type: string + data: + type: string + name: + type: string + nodeName: + type: string + serviceName: + type: string + serviceUrl: + type: string + weight: + format: int64 + type: integer + type: object + type: array + required: + - routerType + type: object + type: object + required: + - nodes + type: object + status: + properties: + annotations: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastTransitionTime: + type: string + message: + type: string + reason: + type: string + severity: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + url: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: kubeflow/serving-cert + controller-gen.kubebuilder.io/version: v0.4.0 + labels: + app: kserve + app.kubernetes.io/name: kserve + name: inferenceservices.serving.kserve.io +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: kserve-webhook-server-service + namespace: kubeflow + path: /convert + conversionReviewVersions: + - v1beta1 + group: serving.kserve.io + names: + kind: InferenceService + listKind: InferenceServiceList + plural: inferenceservices + shortNames: + - isvc + singular: inferenceservice + preserveUnknownFields: false + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.url + name: URL + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.components.predictor.traffic[?(@.tag=='prev')].percent + name: Prev + type: integer + - jsonPath: .status.components.predictor.traffic[?(@.latestRevision==true)].percent + name: Latest + type: integer + - jsonPath: .status.components.predictor.traffic[?(@.tag=='prev')].revisionName + name: PrevRolledoutRevision + type: string + - jsonPath: .status.components.predictor.traffic[?(@.latestRevision==true)].revisionName + name: LatestReadyRevision + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + explainer: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + aix: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + config: + additionalProperties: + type: string + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + type: + type: string + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + alibi: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + config: + additionalProperties: + type: string + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + type: + type: string + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + art: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + config: + additionalProperties: + type: string + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + type: + type: string + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + automountServiceAccountToken: + type: boolean + batcher: + properties: + maxBatchSize: + type: integer + maxLatency: + type: integer + timeout: + type: integer + type: object + canaryTrafficPercent: + format: int64 + type: integer + containerConcurrency: + format: int64 + type: integer + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + logger: + properties: + mode: + enum: + - all + - request + - response + type: string + url: + type: string + type: object + maxReplicas: + type: integer + minReplicas: + type: integer + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + restartPolicy: + type: string + runtimeClassName: + type: string + scaleMetric: + enum: + - cpu + - memory + - concurrency + - rps + type: string + scaleTarget: + type: integer + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + timeout: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + maxSkew: + format: int32 + type: integer + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + predictor: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + type: boolean + batcher: + properties: + maxBatchSize: + type: integer + maxLatency: + type: integer + timeout: + type: integer + type: object + canaryTrafficPercent: + format: int64 + type: integer + containerConcurrency: + format: int64 + type: integer + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + lightgbm: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + logger: + properties: + mode: + enum: + - all + - request + - response + type: string + url: + type: string + type: object + maxReplicas: + type: integer + minReplicas: + type: integer + model: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + modelFormat: + properties: + name: + type: string + version: + type: string + required: + - name + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtime: + type: string + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + onnx: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + os: + properties: + name: + type: string + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + paddle: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + pmml: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + pytorch: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + restartPolicy: + type: string + runtimeClassName: + type: string + scaleMetric: + enum: + - cpu + - memory + - concurrency + - rps + type: string + scaleTarget: + type: integer + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + sklearn: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + subdomain: + type: string + tensorflow: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeout: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + maxSkew: + format: int32 + type: integer + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + triton: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + xgboost: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + protocolVersion: + type: string + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runtimeVersion: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + storage: + properties: + key: + type: string + parameters: + additionalProperties: + type: string + type: object + path: + type: string + schemaPath: + type: string + type: object + storageUri: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + type: object + type: object + transformer: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + type: boolean + batcher: + properties: + maxBatchSize: + type: integer + maxLatency: + type: integer + timeout: + type: integer + type: object + canaryTrafficPercent: + format: int64 + type: integer + containerConcurrency: + format: int64 + type: integer + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + logger: + properties: + mode: + enum: + - all + - request + - response + type: string + url: + type: string + type: object + maxReplicas: + type: integer + minReplicas: + type: integer + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + restartPolicy: + type: string + runtimeClassName: + type: string + scaleMetric: + enum: + - cpu + - memory + - concurrency + - rps + type: string + scaleTarget: + type: integer + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + timeout: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + maxSkew: + format: int32 + type: integer + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + required: + - predictor + type: object + status: + properties: + address: + properties: + url: + type: string + type: object + annotations: + additionalProperties: + type: string + type: object + components: + additionalProperties: + properties: + address: + properties: + url: + type: string + type: object + grpcUrl: + type: string + latestCreatedRevision: + type: string + latestReadyRevision: + type: string + latestRolledoutRevision: + type: string + previousRolledoutRevision: + type: string + restUrl: + type: string + traffic: + items: + properties: + configurationName: + type: string + latestRevision: + type: boolean + percent: + format: int64 + type: integer + revisionName: + type: string + tag: + type: string + url: + type: string + type: object + type: array + url: + type: string + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + type: string + message: + type: string + reason: + type: string + severity: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + modelStatus: + properties: + copies: + properties: + failedCopies: + default: 0 + type: integer + totalCopies: + type: integer + required: + - failedCopies + type: object + lastFailureInfo: + properties: + exitCode: + format: int32 + type: integer + location: + type: string + message: + type: string + modelRevisionName: + type: string + reason: + enum: + - ModelLoadFailed + - RuntimeUnhealthy + - RuntimeDisabled + - NoSupportingRuntime + - RuntimeNotRecognized + - InvalidPredictorSpec + type: string + time: + format: date-time + type: string + type: object + states: + properties: + activeModelState: + default: Pending + enum: + - "" + - Pending + - Standby + - Loading + - Loaded + - FailedToLoad + type: string + targetModelState: + default: "" + enum: + - "" + - Pending + - Standby + - Loading + - Loaded + - FailedToLoad + type: string + required: + - activeModelState + type: object + transitionStatus: + default: UpToDate + enum: + - "" + - UpToDate + - InProgress + - BlockedByFailedLoad + - InvalidSpec + type: string + required: + - transitionStatus + type: object + observedGeneration: + format: int64 + type: integer + url: + type: string + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: networking + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + knative.dev/crd-install: "true" + name: ingresses.networking.internal.knative.dev +spec: + group: networking.internal.knative.dev + names: + categories: + - knative-internal + - networking + kind: Ingress + plural: ingresses + shortNames: + - kingress + - king + singular: ingress + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: "Ingress is a collection of rules that allow inbound connections + to reach the endpoints defined by a backend. An Ingress can be configured + to give services externally-reachable URLs, load balance traffic, offer + name based virtual hosting, etc. \n This is heavily based on K8s Ingress + https://godoc.org/k8s.io/api/networking/v1beta1#Ingress which some highlighted + modifications." + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: 'Spec is the desired state of the Ingress. More info: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + httpOption: + description: 'HTTPOption is the option of HTTP. It has the following + two values: `HTTPOptionEnabled`, `HTTPOptionRedirected`' + type: string + rules: + description: A list of host rules used to configure the Ingress. + items: + description: IngressRule represents the rules mapping the paths + under a specified host to the related backend services. Incoming + requests are first evaluated for a host match, then routed to + the backend associated with the matching IngressRuleValue. + properties: + hosts: + description: 'Host is the fully qualified domain name of a network + host, as defined by RFC 3986. Note the following deviations + from the "host" part of the URI as defined in the RFC: 1. + IPs are not allowed. Currently a rule value can only apply + to the IP in the Spec of the parent . 2. The `:` delimiter + is not respected because ports are not allowed. Currently + the port of an Ingress is implicitly :80 for http and :443 + for https. Both these may change in the future. If the host + is unspecified, the Ingress routes all traffic based on the + specified IngressRuleValue. If multiple matching Hosts were + provided, the first rule will take precedent.' + items: + type: string + type: array + http: + description: HTTP represents a rule to apply against incoming + requests. If the rule is satisfied, the request is routed + to the specified backend. + properties: + paths: + description: "A collection of paths that map requests to + backends. \n If they are multiple matching paths, the + first match takes precedence." + items: + description: HTTPIngressPath associates a path regex with + a backend. Incoming URLs matching the path are forwarded + to the backend. + properties: + appendHeaders: + additionalProperties: + type: string + description: "AppendHeaders allow specifying additional + HTTP headers to add before forwarding a request + to the destination service. \n NOTE: This differs + from K8s Ingress which doesn't allow header appending." + type: object + headers: + additionalProperties: + description: HeaderMatch represents a matching value + of Headers in HTTPIngressPath. Currently, only + the exact matching is supported. + properties: + exact: + type: string + required: + - exact + type: object + description: Headers defines header matching rules + which is a map from a header name to HeaderMatch + which specify a matching condition. When a request + matched with all the header matching rules, the + request is routed by the corresponding ingress rule. + If it is empty, the headers are not used for matching + type: object + path: + description: Path represents a literal prefix to which + this rule should apply. Currently it can contain + characters disallowed from the conventional "path" + part of a URL as defined by RFC 3986. Paths must + begin with a '/'. If unspecified, the path defaults + to a catch all sending traffic to the backend. + type: string + rewriteHost: + description: "RewriteHost rewrites the incoming request's + host header. \n This field is currently experimental + and not supported by all Ingress implementations." + type: string + splits: + description: Splits defines the referenced service + endpoints to which the traffic will be forwarded + to. + items: + description: IngressBackendSplit describes all endpoints + for a given service and port. + properties: + appendHeaders: + additionalProperties: + type: string + description: "AppendHeaders allow specifying + additional HTTP headers to add before forwarding + a request to the destination service. \n NOTE: + This differs from K8s Ingress which doesn't + allow header appending." + type: object + percent: + description: "Specifies the split percentage, + a number between 0 and 100. If only one split + is specified, we default to 100. \n NOTE: + This differs from K8s Ingress to allow percentage + split." + type: integer + serviceName: + description: Specifies the name of the referenced + service. + type: string + serviceNamespace: + description: "Specifies the namespace of the + referenced service. \n NOTE: This differs + from K8s Ingress to allow routing to different + namespaces." + type: string + servicePort: + anyOf: + - type: integer + - type: string + description: Specifies the port of the referenced + service. + x-kubernetes-int-or-string: true + required: + - serviceName + - serviceNamespace + - servicePort + type: object + type: array + required: + - splits + type: object + type: array + required: + - paths + type: object + visibility: + description: Visibility signifies whether this rule should `ClusterLocal`. + If it's not specified then it defaults to `ExternalIP`. + type: string + type: object + type: array + tls: + description: 'TLS configuration. Currently Ingress only supports a + single TLS port: 443. If multiple members of this list specify different + hosts, they will be multiplexed on the same port according to the + hostname specified through the SNI TLS extension, if the ingress + controller fulfilling the ingress supports SNI.' + items: + description: IngressTLS describes the transport layer security associated + with an Ingress. + properties: + hosts: + description: Hosts is a list of hosts included in the TLS certificate. + The values in this list must match the name/s used in the + tlsSecret. Defaults to the wildcard host setting for the loadbalancer + controller fulfilling this Ingress, if left unspecified. + items: + type: string + type: array + secretName: + description: SecretName is the name of the secret used to terminate + SSL traffic. + type: string + secretNamespace: + description: SecretNamespace is the namespace of the secret + used to terminate SSL traffic. If not set the namespace should + be assumed to be the same as the Ingress. If set the secret + should have the same namespace as the Ingress otherwise the + behaviour is undefined and not supported. + type: string + type: object + type: array + type: object + status: + description: 'Status is the current state of the Ingress. More info: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + privateLoadBalancer: + description: PrivateLoadBalancer contains the current status of the + load-balancer. + properties: + ingress: + description: Ingress is a list containing ingress points for the + load-balancer. Traffic intended for the service should be sent + to these ingress points. + items: + description: 'LoadBalancerIngressStatus represents the status + of a load-balancer ingress point: traffic intended for the + service should be sent to an ingress point.' + properties: + domain: + description: Domain is set for load-balancer ingress points + that are DNS based (typically AWS load-balancers) + type: string + domainInternal: + description: "DomainInternal is set if there is a cluster-local + DNS name to access the Ingress. \n NOTE: This differs + from K8s Ingress, since we also desire to have a cluster-local + DNS name to allow routing in case of not having a mesh." + type: string + ip: + description: IP is set for load-balancer ingress points + that are IP based (typically GCE or OpenStack load-balancers) + type: string + meshOnly: + description: MeshOnly is set if the Ingress is only load-balanced + through a Service mesh. + type: boolean + type: object + type: array + type: object + publicLoadBalancer: + description: PublicLoadBalancer contains the current status of the + load-balancer. + properties: + ingress: + description: Ingress is a list containing ingress points for the + load-balancer. Traffic intended for the service should be sent + to these ingress points. + items: + description: 'LoadBalancerIngressStatus represents the status + of a load-balancer ingress point: traffic intended for the + service should be sent to an ingress point.' + properties: + domain: + description: Domain is set for load-balancer ingress points + that are DNS based (typically AWS load-balancers) + type: string + domainInternal: + description: "DomainInternal is set if there is a cluster-local + DNS name to access the Ingress. \n NOTE: This differs + from K8s Ingress, since we also desire to have a cluster-local + DNS name to allow routing in case of not having a mesh." + type: string + ip: + description: IP is set for load-balancer ingress points + that are IP based (typically GCE or OpenStack load-balancers) + type: string + meshOnly: + description: MeshOnly is set if the Ingress is only load-balanced + through a Service mesh. + type: boolean + type: object + type: array + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: issuers.cert-manager.io +spec: + group: cert-manager.io + names: + categories: + - cert-manager + kind: Issuer + listKind: IssuerList + plural: issuers + singular: issuer + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + priority: 1 + type: string + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: An Issuer represents a certificate issuing authority which can + be referenced as part of `issuerRef` fields. It is scoped to a single namespace + and can therefore only be referenced by resources within the same namespace. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Desired state of the Issuer resource. + properties: + acme: + description: ACME configures this issuer to communicate with a RFC8555 + (ACME) server to obtain signed x509 certificates. + properties: + caBundle: + description: Base64-encoded bundle of PEM CAs which can be used + to validate the certificate chain presented by the ACME server. + Mutually exclusive with SkipTLSVerify; prefer using CABundle + to prevent various kinds of security vulnerabilities. If CABundle + and SkipTLSVerify are unset, the system certificate bundle inside + the container is used to validate the TLS connection. + format: byte + type: string + disableAccountKeyGeneration: + description: Enables or disables generating a new ACME account + key. If true, the Issuer resource will *not* request a new account + but will expect the account key to be supplied via an existing + secret. If false, the cert-manager system will generate a new + ACME account key for the Issuer. Defaults to false. + type: boolean + email: + description: Email is the email address to be associated with + the ACME account. This field is optional, but it is strongly + recommended to be set. It will be used to contact you in case + of issues with your account or certificates, including expiry + notification emails. This field may be updated after the account + is initially registered. + type: string + enableDurationFeature: + description: Enables requesting a Not After date on certificates + that matches the duration of the certificate. This is not supported + by all ACME servers like Let's Encrypt. If set to true when + the ACME server does not support it it will create an error + on the Order. Defaults to false. + type: boolean + externalAccountBinding: + description: ExternalAccountBinding is a reference to a CA external + account of the ACME server. If set, upon registration cert-manager + will attempt to associate the given external account credentials + with the registered ACME account. + properties: + keyAlgorithm: + description: 'Deprecated: keyAlgorithm field exists for historical + compatibility reasons and should not be used. The algorithm + is now hardcoded to HS256 in golang/x/crypto/acme.' + enum: + - HS256 + - HS384 + - HS512 + type: string + keyID: + description: keyID is the ID of the CA key that the External + Account is bound to. + type: string + keySecretRef: + description: keySecretRef is a Secret Key Selector referencing + a data item in a Kubernetes Secret which holds the symmetric + MAC key of the External Account Binding. The `key` is the + index string that is paired with the key data in the Secret + and should not be confused with the key data itself, or + indeed with the External Account Binding keyID above. The + secret key stored in the Secret **must** be un-padded, base64 + URL encoded data. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field + may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - keyID + - keySecretRef + type: object + preferredChain: + description: 'PreferredChain is the chain to use if the ACME server + outputs multiple. PreferredChain is no guarantee that this one + gets delivered by the ACME endpoint. For example, for Let''s + Encrypt''s DST crosssign you would use: "DST Root CA X3" or + "ISRG Root X1" for the newer Let''s Encrypt root CA. This value + picks the first certificate bundle in the ACME alternative chains + that has a certificate with this value as its issuer''s CN' + maxLength: 64 + type: string + privateKeySecretRef: + description: PrivateKey is the name of a Kubernetes Secret resource + that will be used to store the automatically generated ACME + account private key. Optionally, a `key` may be specified to + select a specific entry within the named Secret resource. If + `key` is not specified, a default of `tls.key` will be used. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field may + be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + server: + description: 'Server is the URL used to access the ACME server''s + ''directory'' endpoint. For example, for Let''s Encrypt''s staging + endpoint, you would use: "https://acme-staging-v02.api.letsencrypt.org/directory". + Only ACME v2 endpoints (i.e. RFC 8555) are supported.' + type: string + skipTLSVerify: + description: 'INSECURE: Enables or disables validation of the + ACME server TLS certificate. If true, requests to the ACME server + will not have the TLS certificate chain validated. Mutually + exclusive with CABundle; prefer using CABundle to prevent various + kinds of security vulnerabilities. Only enable this option in + development environments. If CABundle and SkipTLSVerify are + unset, the system certificate bundle inside the container is + used to validate the TLS connection. Defaults to false.' + type: boolean + solvers: + description: 'Solvers is a list of challenge solvers that will + be used to solve ACME challenges for the matching domains. Solver + configurations must be provided in order to obtain certificates + from an ACME server. For more information, see: https://cert-manager.io/docs/configuration/acme/' + items: + description: An ACMEChallengeSolver describes how to solve ACME + challenges for the issuer it is part of. A selector may be + provided to use different solving strategies for different + DNS names. Only one of HTTP01 or DNS01 must be provided. + properties: + dns01: + description: Configures cert-manager to attempt to complete + authorizations by performing the DNS01 challenge flow. + properties: + acmeDNS: + description: Use the 'ACME DNS' (https://github.com/joohoi/acme-dns) + API to manage DNS01 challenge records. + properties: + accountSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + host: + type: string + required: + - accountSecretRef + - host + type: object + akamai: + description: Use the Akamai DNS zone management API + to manage DNS01 challenge records. + properties: + accessTokenSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + clientSecretSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + clientTokenSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + serviceConsumerDomain: + type: string + required: + - accessTokenSecretRef + - clientSecretSecretRef + - clientTokenSecretRef + - serviceConsumerDomain + type: object + azureDNS: + description: Use the Microsoft Azure DNS API to manage + DNS01 challenge records. + properties: + clientID: + description: if both this and ClientSecret are left + unset MSI will be used + type: string + clientSecretSecretRef: + description: if both this and ClientID are left + unset MSI will be used + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + environment: + description: name of the Azure environment (default + AzurePublicCloud) + enum: + - AzurePublicCloud + - AzureChinaCloud + - AzureGermanCloud + - AzureUSGovernmentCloud + type: string + hostedZoneName: + description: name of the DNS zone that should be + used + type: string + managedIdentity: + description: managed identity configuration, can + not be used at the same time as clientID, clientSecretSecretRef + or tenantID + properties: + clientID: + description: client ID of the managed identity, + can not be used at the same time as resourceID + type: string + resourceID: + description: resource ID of the managed identity, + can not be used at the same time as clientID + type: string + type: object + resourceGroupName: + description: resource group the DNS zone is located + in + type: string + subscriptionID: + description: ID of the Azure subscription + type: string + tenantID: + description: when specifying ClientID and ClientSecret + then this field is also needed + type: string + required: + - resourceGroupName + - subscriptionID + type: object + cloudDNS: + description: Use the Google Cloud DNS API to manage + DNS01 challenge records. + properties: + hostedZoneName: + description: HostedZoneName is an optional field + that tells cert-manager in which Cloud DNS zone + the challenge record has to be created. If left + empty cert-manager will automatically choose a + zone. + type: string + project: + type: string + serviceAccountSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - project + type: object + cloudflare: + description: Use the Cloudflare API to manage DNS01 + challenge records. + properties: + apiKeySecretRef: + description: 'API key to use to authenticate with + Cloudflare. Note: using an API token to authenticate + is now the recommended method as it allows greater + control of permissions.' + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + apiTokenSecretRef: + description: API token used to authenticate with + Cloudflare. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + email: + description: Email of the account, only required + when using API key based authentication. + type: string + type: object + cnameStrategy: + description: CNAMEStrategy configures how the DNS01 + provider should handle CNAME records when found in + DNS zones. + enum: + - None + - Follow + type: string + digitalocean: + description: Use the DigitalOcean DNS API to manage + DNS01 challenge records. + properties: + tokenSecretRef: + description: A reference to a specific 'key' within + a Secret resource. In some instances, `key` is + a required field. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - tokenSecretRef + type: object + rfc2136: + description: Use RFC2136 ("Dynamic Updates in the Domain + Name System") (https://datatracker.ietf.org/doc/rfc2136/) + to manage DNS01 challenge records. + properties: + nameserver: + description: The IP address or hostname of an authoritative + DNS server supporting RFC2136 in the form host:port. + If the host is an IPv6 address it must be enclosed + in square brackets (e.g [2001:db8::1]) ; port + is optional. This field is required. + type: string + tsigAlgorithm: + description: 'The TSIG Algorithm configured in the + DNS supporting RFC2136. Used only when ``tsigSecretSecretRef`` + and ``tsigKeyName`` are defined. Supported values + are (case-insensitive): ``HMACMD5`` (default), + ``HMACSHA1``, ``HMACSHA256`` or ``HMACSHA512``.' + type: string + tsigKeyName: + description: The TSIG Key name configured in the + DNS. If ``tsigSecretSecretRef`` is defined, this + field is required. + type: string + tsigSecretSecretRef: + description: The name of the secret containing the + TSIG value. If ``tsigKeyName`` is defined, this + field is required. + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - nameserver + type: object + route53: + description: Use the AWS Route53 API to manage DNS01 + challenge records. + properties: + accessKeyID: + description: 'The AccessKeyID is used for authentication. + Cannot be set when SecretAccessKeyID is set. If + neither the Access Key nor Key ID are set, we + fall-back to using env vars, shared credentials + file or AWS Instance metadata, see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials' + type: string + accessKeyIDSecretRef: + description: 'The SecretAccessKey is used for authentication. + If set, pull the AWS access key ID from a key + within a Kubernetes Secret. Cannot be set when + AccessKeyID is set. If neither the Access Key + nor Key ID are set, we fall-back to using env + vars, shared credentials file or AWS Instance + metadata, see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials' + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + hostedZoneID: + description: If set, the provider will manage only + this zone in Route53 and will not do an lookup + using the route53:ListHostedZonesByName api call. + type: string + region: + description: Always set the region when using AccessKeyID + and SecretAccessKey + type: string + role: + description: Role is a Role ARN which the Route53 + provider will assume using either the explicit + credentials AccessKeyID/SecretAccessKey or the + inferred credentials from environment variables, + shared credentials file or AWS Instance metadata + type: string + secretAccessKeySecretRef: + description: 'The SecretAccessKey is used for authentication. + If neither the Access Key nor Key ID are set, + we fall-back to using env vars, shared credentials + file or AWS Instance metadata, see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials' + properties: + key: + description: The key of the entry in the Secret + resource's `data` field to be used. Some instances + of this field may be defaulted, in others + it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - region + type: object + webhook: + description: Configure an external webhook based DNS01 + challenge solver to manage DNS01 challenge records. + properties: + config: + description: Additional configuration that should + be passed to the webhook apiserver when challenges + are processed. This can contain arbitrary JSON + data. Secret values should not be specified in + this stanza. If secret values are needed (e.g. + credentials for a DNS service), you should use + a SecretKeySelector to reference a Secret resource. + For details on the schema of this field, consult + the webhook provider implementation's documentation. + x-kubernetes-preserve-unknown-fields: true + groupName: + description: The API group name that should be used + when POSTing ChallengePayload resources to the + webhook apiserver. This should be the same as + the GroupName specified in the webhook provider + implementation. + type: string + solverName: + description: The name of the solver to use, as defined + in the webhook provider implementation. This will + typically be the name of the provider, e.g. 'cloudflare'. + type: string + required: + - groupName + - solverName + type: object + type: object + http01: + description: Configures cert-manager to attempt to complete + authorizations by performing the HTTP01 challenge flow. + It is not possible to obtain certificates for wildcard + domain names (e.g. `*.example.com`) using the HTTP01 challenge + mechanism. + properties: + gatewayHTTPRoute: + description: The Gateway API is a sig-network community + API that models service networking in Kubernetes (https://gateway-api.sigs.k8s.io/). + The Gateway solver will create HTTPRoutes with the + specified labels in the same namespace as the challenge. + This solver is experimental, and fields / behaviour + may change in the future. + properties: + labels: + additionalProperties: + type: string + description: Custom labels that will be applied + to HTTPRoutes created by cert-manager while solving + HTTP-01 challenges. + type: object + parentRefs: + description: 'When solving an HTTP-01 challenge, + cert-manager creates an HTTPRoute. cert-manager + needs to know which parentRefs should be used + when creating the HTTPRoute. Usually, the parentRef + references a Gateway. See: https://gateway-api.sigs.k8s.io/api-types/httproute/#attaching-to-gateways' + items: + description: "ParentReference identifies an API + object (usually a Gateway) that can be considered + a parent of this resource (usually a route). + The only kind of parent resource with \"Core\" + support is Gateway. This API may be extended + in the future to support additional kinds of + parent resources, such as HTTPRoute. \n The + API object must be valid in the cluster; the + Group and Kind must be registered in the cluster + for this reference to be valid." + properties: + group: + default: gateway.networking.k8s.io + description: "Group is the group of the referent. + When unspecified, \"gateway.networking.k8s.io\" + is inferred. To set the core API group (such + as for a \"Service\" kind referent), Group + must be explicitly set to \"\" (empty string). + \n Support: Core" + maxLength: 253 + pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + kind: + default: Gateway + description: "Kind is kind of the referent. + \n Support: Core (Gateway) \n Support: Implementation-specific + (Other Resources)" + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ + type: string + name: + description: "Name is the name of the referent. + \n Support: Core" + maxLength: 253 + minLength: 1 + type: string + namespace: + description: "Namespace is the namespace of + the referent. When unspecified, this refers + to the local namespace of the Route. \n + Note that there are specific rules for ParentRefs + which cross namespace boundaries. Cross-namespace + references are only valid if they are explicitly + allowed by something in the namespace they + are referring to. For example: Gateway has + the AllowedRoutes field, and ReferenceGrant + provides a generic way to enable any other + kind of cross-namespace reference. \n Support: + Core" + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + port: + description: "Port is the network port this + Route targets. It can be interpreted differently + based on the type of parent resource. \n + When the parent resource is a Gateway, this + targets all listeners listening on the specified + port that also support this kind of Route(and + select this Route). It's not recommended + to set `Port` unless the networking behaviors + specified in a Route must apply to a specific + port as opposed to a listener(s) whose port(s) + may be changed. When both Port and SectionName + are specified, the name and port of the + selected listener must match both specified + values. \n Implementations MAY choose to + support other parent resources. Implementations + supporting other types of parent resources + MUST clearly document how/if Port is interpreted. + \n For the purpose of status, an attachment + is considered successful as long as the + parent resource accepts it partially. For + example, Gateway listeners can restrict + which Routes can attach to them by Route + kind, namespace, or hostname. If 1 of 2 + Gateway listeners accept attachment from + the referencing Route, the Route MUST be + considered successfully attached. If no + Gateway listeners accept attachment from + this Route, the Route MUST be considered + detached from the Gateway. \n Support: Extended + \n " + format: int32 + maximum: 65535 + minimum: 1 + type: integer + sectionName: + description: "SectionName is the name of a + section within the target resource. In the + following resources, SectionName is interpreted + as the following: \n * Gateway: Listener + Name. When both Port (experimental) and + SectionName are specified, the name and + port of the selected listener must match + both specified values. \n Implementations + MAY choose to support attaching Routes to + other resources. If that is the case, they + MUST clearly document how SectionName is + interpreted. \n When unspecified (empty + string), this will reference the entire + resource. For the purpose of status, an + attachment is considered successful if at + least one section in the parent resource + accepts it. For example, Gateway listeners + can restrict which Routes can attach to + them by Route kind, namespace, or hostname. + If 1 of 2 Gateway listeners accept attachment + from the referencing Route, the Route MUST + be considered successfully attached. If + no Gateway listeners accept attachment from + this Route, the Route MUST be considered + detached from the Gateway. \n Support: Core" + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - name + type: object + type: array + serviceType: + description: Optional service type for Kubernetes + solver service. Supported values are NodePort + or ClusterIP. If unset, defaults to NodePort. + type: string + type: object + ingress: + description: The ingress based HTTP01 challenge solver + will solve challenges by creating or modifying Ingress + resources in order to route requests for '/.well-known/acme-challenge/XYZ' + to 'challenge solver' pods that are provisioned by + cert-manager for each Challenge to be completed. + properties: + class: + description: This field configures the annotation + `kubernetes.io/ingress.class` when creating Ingress + resources to solve ACME challenges that use this + challenge solver. Only one of `class`, `name` + or `ingressClassName` may be specified. + type: string + ingressClassName: + description: This field configures the field `ingressClassName` + on the created Ingress resources used to solve + ACME challenges that use this challenge solver. + This is the recommended way of configuring the + ingress class. Only one of `class`, `name` or + `ingressClassName` may be specified. + type: string + ingressTemplate: + description: Optional ingress template used to configure + the ACME challenge solver ingress used for HTTP01 + challenges. + properties: + metadata: + description: ObjectMeta overrides for the ingress + used to solve HTTP01 challenges. Only the + 'labels' and 'annotations' fields may be set. + If labels or annotations overlap with in-built + values, the values here will override the + in-built values. + properties: + annotations: + additionalProperties: + type: string + description: Annotations that should be + added to the created ACME HTTP01 solver + ingress. + type: object + labels: + additionalProperties: + type: string + description: Labels that should be added + to the created ACME HTTP01 solver ingress. + type: object + type: object + type: object + name: + description: The name of the ingress resource that + should have ACME challenge solving routes inserted + into it in order to solve HTTP01 challenges. This + is typically used in conjunction with ingress + controllers like ingress-gce, which maintains + a 1:1 mapping between external IPs and ingress + resources. Only one of `class`, `name` or `ingressClassName` + may be specified. + type: string + podTemplate: + description: Optional pod template used to configure + the ACME challenge solver pods used for HTTP01 + challenges. + properties: + metadata: + description: ObjectMeta overrides for the pod + used to solve HTTP01 challenges. Only the + 'labels' and 'annotations' fields may be set. + If labels or annotations overlap with in-built + values, the values here will override the + in-built values. + properties: + annotations: + additionalProperties: + type: string + description: Annotations that should be + added to the create ACME HTTP01 solver + pods. + type: object + labels: + additionalProperties: + type: string + description: Labels that should be added + to the created ACME HTTP01 solver pods. + type: object + type: object + spec: + description: PodSpec defines overrides for the + HTTP01 challenge solver pod. Check ACMEChallengeSolverHTTP01IngressPodSpec + to find out currently supported fields. All + other fields will be ignored. + properties: + affinity: + description: If specified, the pod's scheduling + constraints + properties: + nodeAffinity: + description: Describes node affinity + scheduling rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will + prefer to schedule pods to nodes + that satisfy the affinity expressions + specified by this field, but it + may choose a node that violates + one or more of the expressions. + The node that is most preferred + is the one with the greatest sum + of weights, i.e. for each node + that meets all of the scheduling + requirements (resource request, + requiredDuringScheduling affinity + expressions, etc.), compute a + sum by iterating through the elements + of this field and adding "weight" + to the sum if the node matches + the corresponding matchExpressions; + the node(s) with the highest sum + are the most preferred. + items: + description: An empty preferred + scheduling term matches all + objects with implicit weight + 0 (i.e. it's a no-op). A null + preferred scheduling term matches + no objects (i.e. is also a no-op). + properties: + preference: + description: A node selector + term, associated with the + corresponding weight. + properties: + matchExpressions: + description: A list of + node selector requirements + by node's labels. + items: + description: A node + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: The + label key that + the selector applies + to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators + are In, NotIn, + Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An + array of string + values. If the + operator is In + or NotIn, the + values array must + be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + If the operator + is Gt or Lt, the + values array must + have a single + element, which + will be interpreted + as an integer. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of + node selector requirements + by node's fields. + items: + description: A node + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: The + label key that + the selector applies + to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators + are In, NotIn, + Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An + array of string + values. If the + operator is In + or NotIn, the + values array must + be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + If the operator + is Gt or Lt, the + values array must + have a single + element, which + will be interpreted + as an integer. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated + with matching the corresponding + nodeSelectorTerm, in the + range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements + specified by this field are not + met at scheduling time, the pod + will not be scheduled onto the + node. If the affinity requirements + specified by this field cease + to be met at some point during + pod execution (e.g. due to an + update), the system may or may + not try to eventually evict the + pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list + of node selector terms. The + terms are ORed. + items: + description: A null or empty + node selector term matches + no objects. The requirements + of them are ANDed. The TopologySelectorTerm + type implements a subset + of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of + node selector requirements + by node's labels. + items: + description: A node + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: The + label key that + the selector applies + to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators + are In, NotIn, + Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An + array of string + values. If the + operator is In + or NotIn, the + values array must + be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + If the operator + is Gt or Lt, the + values array must + have a single + element, which + will be interpreted + as an integer. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of + node selector requirements + by node's fields. + items: + description: A node + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: The + label key that + the selector applies + to. + type: string + operator: + description: Represents + a key's relationship + to a set of values. + Valid operators + are In, NotIn, + Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An + array of string + values. If the + operator is In + or NotIn, the + values array must + be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + If the operator + is Gt or Lt, the + values array must + have a single + element, which + will be interpreted + as an integer. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity + scheduling rules (e.g. co-locate this + pod in the same node, zone, etc. as + some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will + prefer to schedule pods to nodes + that satisfy the affinity expressions + specified by this field, but it + may choose a node that violates + one or more of the expressions. + The node that is most preferred + is the one with the greatest sum + of weights, i.e. for each node + that meets all of the scheduling + requirements (resource request, + requiredDuringScheduling affinity + expressions, etc.), compute a + sum by iterating through the elements + of this field and adding "weight" + to the sum if the node has pods + which matches the corresponding + podAffinityTerm; the node(s) with + the highest sum are the most preferred. + items: + description: The weights of all + of the matched WeightedPodAffinityTerm + fields are added per-node to + find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod + affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query + over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label + selector requirements. + The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector + that contains + values, a key, + and an operator + that relates the + key and values. + properties: + key: + description: key + is the label + key that the + selector applies + to. + type: string + operator: + description: operator + represents + a key's relationship + to a set of + values. Valid + operators + are In, NotIn, + Exists and + DoesNotExist. + type: string + values: + description: values + is an array + of string + values. If + the operator + is In or NotIn, + the values + array must + be non-empty. + If the operator + is Exists + or DoesNotExist, + the values + array must + be empty. + This array + is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single + {key,value} in the + matchLabels map + is equivalent to + an element of matchExpressions, + whose key field + is "key", the operator + is "In", and the + values array contains + only "value". The + requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query + over the set of namespaces + that the term applies + to. The term is applied + to the union of the + namespaces selected + by this field and the + ones listed in the namespaces + field. null selector + and null or empty namespaces + list means "this pod's + namespace". An empty + selector ({}) matches + all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label + selector requirements. + The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector + that contains + values, a key, + and an operator + that relates the + key and values. + properties: + key: + description: key + is the label + key that the + selector applies + to. + type: string + operator: + description: operator + represents + a key's relationship + to a set of + values. Valid + operators + are In, NotIn, + Exists and + DoesNotExist. + type: string + values: + description: values + is an array + of string + values. If + the operator + is In or NotIn, + the values + array must + be non-empty. + If the operator + is Exists + or DoesNotExist, + the values + array must + be empty. + This array + is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single + {key,value} in the + matchLabels map + is equivalent to + an element of matchExpressions, + whose key field + is "key", the operator + is "In", and the + values array contains + only "value". The + requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces + specifies a static list + of namespace names that + the term applies to. + The term is applied + to the union of the + namespaces listed in + this field and the ones + selected by namespaceSelector. + null or empty namespaces + list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod + should be co-located + (affinity) or not co-located + (anti-affinity) with + the pods matching the + labelSelector in the + specified namespaces, + where co-located is + defined as running on + a node whose value of + the label with key topologyKey + matches that of any + node on which any of + the selected pods is + running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated + with matching the corresponding + podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements + specified by this field are not + met at scheduling time, the pod + will not be scheduled onto the + node. If the affinity requirements + specified by this field cease + to be met at some point during + pod execution (e.g. due to a pod + label update), the system may + or may not try to eventually evict + the pod from its node. When there + are multiple elements, the lists + of nodes corresponding to each + podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of + pods (namely those matching + the labelSelector relative to + the given namespace(s)) that + this pod should be co-located + (affinity) or not co-located + (anti-affinity) with, where + co-located is defined as running + on a node whose value of the + label with key + matches that of any node on + which a pod of the set of pods + is running + properties: + labelSelector: + description: A label query + over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: key + is the label key + that the selector + applies to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values + is an array of + string values. + If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an + element of matchExpressions, + whose key field is "key", + the operator is "In", + and the values array + contains only "value". + The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query + over the set of namespaces + that the term applies to. + The term is applied to the + union of the namespaces + selected by this field and + the ones listed in the namespaces + field. null selector and + null or empty namespaces + list means "this pod's namespace". + An empty selector ({}) matches + all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: key + is the label key + that the selector + applies to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values + is an array of + string values. + If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an + element of matchExpressions, + whose key field is "key", + the operator is "In", + and the values array + contains only "value". + The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace + names that the term applies + to. The term is applied + to the union of the namespaces + listed in this field and + the ones selected by namespaceSelector. + null or empty namespaces + list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should + be co-located (affinity) + or not co-located (anti-affinity) + with the pods matching the + labelSelector in the specified + namespaces, where co-located + is defined as running on + a node whose value of the + label with key topologyKey + matches that of any node + on which any of the selected + pods is running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity + scheduling rules (e.g. avoid putting + this pod in the same node, zone, etc. + as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will + prefer to schedule pods to nodes + that satisfy the anti-affinity + expressions specified by this + field, but it may choose a node + that violates one or more of the + expressions. The node that is + most preferred is the one with + the greatest sum of weights, i.e. + for each node that meets all of + the scheduling requirements (resource + request, requiredDuringScheduling + anti-affinity expressions, etc.), + compute a sum by iterating through + the elements of this field and + adding "weight" to the sum if + the node has pods which matches + the corresponding podAffinityTerm; + the node(s) with the highest sum + are the most preferred. + items: + description: The weights of all + of the matched WeightedPodAffinityTerm + fields are added per-node to + find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod + affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query + over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label + selector requirements. + The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector + that contains + values, a key, + and an operator + that relates the + key and values. + properties: + key: + description: key + is the label + key that the + selector applies + to. + type: string + operator: + description: operator + represents + a key's relationship + to a set of + values. Valid + operators + are In, NotIn, + Exists and + DoesNotExist. + type: string + values: + description: values + is an array + of string + values. If + the operator + is In or NotIn, + the values + array must + be non-empty. + If the operator + is Exists + or DoesNotExist, + the values + array must + be empty. + This array + is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single + {key,value} in the + matchLabels map + is equivalent to + an element of matchExpressions, + whose key field + is "key", the operator + is "In", and the + values array contains + only "value". The + requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query + over the set of namespaces + that the term applies + to. The term is applied + to the union of the + namespaces selected + by this field and the + ones listed in the namespaces + field. null selector + and null or empty namespaces + list means "this pod's + namespace". An empty + selector ({}) matches + all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label + selector requirements. + The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector + that contains + values, a key, + and an operator + that relates the + key and values. + properties: + key: + description: key + is the label + key that the + selector applies + to. + type: string + operator: + description: operator + represents + a key's relationship + to a set of + values. Valid + operators + are In, NotIn, + Exists and + DoesNotExist. + type: string + values: + description: values + is an array + of string + values. If + the operator + is In or NotIn, + the values + array must + be non-empty. + If the operator + is Exists + or DoesNotExist, + the values + array must + be empty. + This array + is replaced + during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single + {key,value} in the + matchLabels map + is equivalent to + an element of matchExpressions, + whose key field + is "key", the operator + is "In", and the + values array contains + only "value". The + requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces + specifies a static list + of namespace names that + the term applies to. + The term is applied + to the union of the + namespaces listed in + this field and the ones + selected by namespaceSelector. + null or empty namespaces + list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod + should be co-located + (affinity) or not co-located + (anti-affinity) with + the pods matching the + labelSelector in the + specified namespaces, + where co-located is + defined as running on + a node whose value of + the label with key topologyKey + matches that of any + node on which any of + the selected pods is + running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated + with matching the corresponding + podAffinityTerm, in the + range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity + requirements specified by this + field are not met at scheduling + time, the pod will not be scheduled + onto the node. If the anti-affinity + requirements specified by this + field cease to be met at some + point during pod execution (e.g. + due to a pod label update), the + system may or may not try to eventually + evict the pod from its node. When + there are multiple elements, the + lists of nodes corresponding to + each podAffinityTerm are intersected, + i.e. all terms must be satisfied. + items: + description: Defines a set of + pods (namely those matching + the labelSelector relative to + the given namespace(s)) that + this pod should be co-located + (affinity) or not co-located + (anti-affinity) with, where + co-located is defined as running + on a node whose value of the + label with key + matches that of any node on + which a pod of the set of pods + is running + properties: + labelSelector: + description: A label query + over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: key + is the label key + that the selector + applies to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values + is an array of + string values. + If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an + element of matchExpressions, + whose key field is "key", + the operator is "In", + and the values array + contains only "value". + The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query + over the set of namespaces + that the term applies to. + The term is applied to the + union of the namespaces + selected by this field and + the ones listed in the namespaces + field. null selector and + null or empty namespaces + list means "this pod's namespace". + An empty selector ({}) matches + all namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label + selector requirement + is a selector that + contains values, a + key, and an operator + that relates the key + and values. + properties: + key: + description: key + is the label key + that the selector + applies to. + type: string + operator: + description: operator + represents a key's + relationship to + a set of values. + Valid operators + are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values + is an array of + string values. + If the operator + is In or NotIn, + the values array + must be non-empty. + If the operator + is Exists or DoesNotExist, + the values array + must be empty. + This array is + replaced during + a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels + is a map of {key,value} + pairs. A single {key,value} + in the matchLabels map + is equivalent to an + element of matchExpressions, + whose key field is "key", + the operator is "In", + and the values array + contains only "value". + The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace + names that the term applies + to. The term is applied + to the union of the namespaces + listed in this field and + the ones selected by namespaceSelector. + null or empty namespaces + list and null namespaceSelector + means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should + be co-located (affinity) + or not co-located (anti-affinity) + with the pods matching the + labelSelector in the specified + namespaces, where co-located + is defined as running on + a node whose value of the + label with key topologyKey + matches that of any node + on which any of the selected + pods is running. Empty topologyKey + is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + imagePullSecrets: + description: If specified, the pod's imagePullSecrets + items: + description: LocalObjectReference contains + enough information to let you locate + the referenced object inside the same + namespace. + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector + which must be true for the pod to fit + on a node. Selector which must match a + node''s labels for the pod to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + priorityClassName: + description: If specified, the pod's priorityClassName. + type: string + serviceAccountName: + description: If specified, the pod's service + account + type: string + tolerations: + description: If specified, the pod's tolerations. + items: + description: The pod this Toleration is + attached to tolerates any taint that + matches the triple + using the matching operator . + properties: + effect: + description: Effect indicates the + taint effect to match. Empty means + match all taint effects. When specified, + allowed values are NoSchedule, PreferNoSchedule + and NoExecute. + type: string + key: + description: Key is the taint key + that the toleration applies to. + Empty means match all taint keys. + If the key is empty, operator must + be Exists; this combination means + to match all values and all keys. + type: string + operator: + description: Operator represents a + key's relationship to the value. + Valid operators are Exists and Equal. + Defaults to Equal. Exists is equivalent + to wildcard for value, so that a + pod can tolerate all taints of a + particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents + the period of time the toleration + (which must be of effect NoExecute, + otherwise this field is ignored) + tolerates the taint. By default, + it is not set, which means tolerate + the taint forever (do not evict). + Zero and negative values will be + treated as 0 (evict immediately) + by the system. + format: int64 + type: integer + value: + description: Value is the taint value + the toleration matches to. If the + operator is Exists, the value should + be empty, otherwise just a regular + string. + type: string + type: object + type: array + type: object + type: object + serviceType: + description: Optional service type for Kubernetes + solver service. Supported values are NodePort + or ClusterIP. If unset, defaults to NodePort. + type: string + type: object + type: object + selector: + description: Selector selects a set of DNSNames on the Certificate + resource that should be solved using this challenge solver. + If not specified, the solver will be treated as the 'default' + solver with the lowest priority, i.e. if any other solver + has a more specific match, it will be used instead. + properties: + dnsNames: + description: List of DNSNames that this solver will + be used to solve. If specified and a match is found, + a dnsNames selector will take precedence over a dnsZones + selector. If multiple solvers match with the same + dnsNames value, the solver with the most matching + labels in matchLabels will be selected. If neither + has more matches, the solver defined earlier in the + list will be selected. + items: + type: string + type: array + dnsZones: + description: List of DNSZones that this solver will + be used to solve. The most specific DNS zone match + specified here will take precedence over other DNS + zone matches, so a solver specifying sys.example.com + will be selected over one specifying example.com for + the domain www.sys.example.com. If multiple solvers + match with the same dnsZones value, the solver with + the most matching labels in matchLabels will be selected. + If neither has more matches, the solver defined earlier + in the list will be selected. + items: + type: string + type: array + matchLabels: + additionalProperties: + type: string + description: A label selector that is used to refine + the set of certificate's that this challenge solver + will apply to. + type: object + type: object + type: object + type: array + required: + - privateKeySecretRef + - server + type: object + ca: + description: CA configures this issuer to sign certificates using + a signing CA keypair stored in a Secret resource. This is used to + build internal PKIs that are managed by cert-manager. + properties: + crlDistributionPoints: + description: The CRL distribution points is an X.509 v3 certificate + extension which identifies the location of the CRL from which + the revocation of this certificate can be checked. If not set, + certificates will be issued without distribution points set. + items: + type: string + type: array + ocspServers: + description: The OCSP server list is an X.509 v3 extension that + defines a list of URLs of OCSP responders. The OCSP responders + can be queried for the revocation status of an issued certificate. + If not set, the certificate will be issued with no OCSP servers + set. For example, an OCSP server URL could be "http://ocsp.int-x3.letsencrypt.org". + items: + type: string + type: array + secretName: + description: SecretName is the name of the secret used to sign + Certificates issued by this Issuer. + type: string + required: + - secretName + type: object + selfSigned: + description: SelfSigned configures this issuer to 'self sign' certificates + using the private key used to create the CertificateRequest object. + properties: + crlDistributionPoints: + description: The CRL distribution points is an X.509 v3 certificate + extension which identifies the location of the CRL from which + the revocation of this certificate can be checked. If not set + certificate will be issued without CDP. Values are strings. + items: + type: string + type: array + type: object + vault: + description: Vault configures this issuer to sign certificates using + a HashiCorp Vault PKI backend. + properties: + auth: + description: Auth configures how cert-manager authenticates with + the Vault server. + properties: + appRole: + description: AppRole authenticates with Vault using the App + Role auth mechanism, with the role and secret stored in + a Kubernetes Secret resource. + properties: + path: + description: 'Path where the App Role authentication backend + is mounted in Vault, e.g: "approle"' + type: string + roleId: + description: RoleID configured in the App Role authentication + backend when setting up the authentication backend in + Vault. + type: string + secretRef: + description: Reference to a key in a Secret that contains + the App Role secret used to authenticate with Vault. + The `key` field must be specified and denotes which + entry within the Secret resource is used as the app + role secret. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + required: + - path + - roleId + - secretRef + type: object + kubernetes: + description: Kubernetes authenticates with Vault by passing + the ServiceAccount token stored in the named Secret resource + to the Vault server. + properties: + mountPath: + description: The Vault mountPath here is the mount path + to use when authenticating with Vault. For example, + setting a value to `/v1/auth/foo`, will use the path + `/v1/auth/foo/login` to authenticate with Vault. If + unspecified, the default value "/v1/auth/kubernetes" + will be used. + type: string + role: + description: A required field containing the Vault Role + to assume. A Role binds a Kubernetes ServiceAccount + with a set of Vault policies. + type: string + secretRef: + description: The required Secret field containing a Kubernetes + ServiceAccount JWT used for authenticating with Vault. + Use of 'ambient credentials' is not supported. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this + field may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred + to. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + serviceAccountRef: + description: A reference to a service account that will + be used to request a bound token (also known as "projected + token"). Compared to using "secretRef", using this field + means that you don't rely on statically bound tokens. + To use this field, you must configure an RBAC rule to + let cert-manager request a token. + properties: + name: + description: Name of the ServiceAccount used to request + a token. + type: string + required: + - name + type: object + required: + - role + type: object + tokenSecretRef: + description: TokenSecretRef authenticates with Vault by presenting + a token. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field + may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + type: object + caBundle: + description: Base64-encoded bundle of PEM CAs which will be used + to validate the certificate chain presented by Vault. Only used + if using HTTPS to connect to Vault and ignored for HTTP connections. + Mutually exclusive with CABundleSecretRef. If neither CABundle + nor CABundleSecretRef are defined, the certificate bundle in + the cert-manager controller container is used to validate the + TLS connection. + format: byte + type: string + caBundleSecretRef: + description: Reference to a Secret containing a bundle of PEM-encoded + CAs to use when verifying the certificate chain presented by + Vault when using HTTPS. Mutually exclusive with CABundle. If + neither CABundle nor CABundleSecretRef are defined, the certificate + bundle in the cert-manager controller container is used to validate + the TLS connection. If no key for the Secret is specified, cert-manager + will default to 'ca.crt'. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field may + be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + namespace: + description: 'Name of the vault namespace. Namespaces is a set + of features within Vault Enterprise that allows Vault environments + to support Secure Multi-tenancy. e.g: "ns1" More about namespaces + can be found here https://www.vaultproject.io/docs/enterprise/namespaces' + type: string + path: + description: 'Path is the mount path of the Vault PKI backend''s + `sign` endpoint, e.g: "my_pki_mount/sign/my-role-name".' + type: string + server: + description: 'Server is the connection address for the Vault server, + e.g: "https://vault.example.com:8200".' + type: string + required: + - auth + - path + - server + type: object + venafi: + description: Venafi configures this issuer to sign certificates using + a Venafi TPP or Venafi Cloud policy zone. + properties: + cloud: + description: Cloud specifies the Venafi cloud configuration settings. + Only one of TPP or Cloud may be specified. + properties: + apiTokenSecretRef: + description: APITokenSecretRef is a secret key selector for + the Venafi Cloud API token. + properties: + key: + description: The key of the entry in the Secret resource's + `data` field to be used. Some instances of this field + may be defaulted, in others it may be required. + type: string + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + url: + description: URL is the base URL for Venafi Cloud. Defaults + to "https://api.venafi.cloud/v1". + type: string + required: + - apiTokenSecretRef + type: object + tpp: + description: TPP specifies Trust Protection Platform configuration + settings. Only one of TPP or Cloud may be specified. + properties: + caBundle: + description: Base64-encoded bundle of PEM CAs which will be + used to validate the certificate chain presented by the + TPP server. Only used if using HTTPS; ignored for HTTP. + If undefined, the certificate bundle in the cert-manager + controller container is used to validate the chain. + format: byte + type: string + credentialsRef: + description: CredentialsRef is a reference to a Secret containing + the username and password for the TPP server. The secret + must contain two keys, 'username' and 'password'. + properties: + name: + description: 'Name of the resource being referred to. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - name + type: object + url: + description: 'URL is the base URL for the vedsdk endpoint + of the Venafi TPP instance, for example: "https://tpp.example.com/vedsdk".' + type: string + required: + - credentialsRef + - url + type: object + zone: + description: Zone is the Venafi Policy Zone to use for this issuer. + All requests made to the Venafi platform will be restricted + by the named zone policy. This field is required. + type: string + required: + - zone + type: object + type: object + status: + description: Status of the Issuer. This is set and managed automatically. + properties: + acme: + description: ACME specific status options. This field should only + be set if the Issuer is configured to use an ACME server to issue + certificates. + properties: + lastPrivateKeyHash: + description: LastPrivateKeyHash is a hash of the private key associated + with the latest registered ACME account, in order to track changes + made to registered account associated with the Issuer + type: string + lastRegisteredEmail: + description: LastRegisteredEmail is the email associated with + the latest registered ACME account, in order to track changes + made to registered account associated with the Issuer + type: string + uri: + description: URI is the unique account identifier, which can also + be used to retrieve account details from the CA + type: string + type: object + conditions: + description: List of status conditions to indicate the status of a + CertificateRequest. Known condition types are `Ready`. + items: + description: IssuerCondition contains condition information for + an Issuer. + properties: + lastTransitionTime: + description: LastTransitionTime is the timestamp corresponding + to the last status change of this condition. + format: date-time + type: string + message: + description: Message is a human readable description of the + details of the last transition, complementing reason. + type: string + observedGeneration: + description: If set, this represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.condition[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the Issuer. + format: int64 + type: integer + reason: + description: Reason is a brief machine readable explanation + for the condition's last transition. + type: string + status: + description: Status of the condition, one of (`True`, `False`, + `Unknown`). + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: Type of the condition, known values are (`Ready`). + type: string + required: + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + release: istio + name: istiooperators.install.istio.io +spec: + conversion: + strategy: None + group: install.istio.io + names: + kind: IstioOperator + listKind: IstioOperatorList + plural: istiooperators + shortNames: + - iop + - io + singular: istiooperator + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Istio control plane revision + jsonPath: .spec.revision + name: Revision + type: string + - description: IOP current state + jsonPath: .status.status + name: Status + type: string + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + knative.dev/crd-install: "true" + name: metrics.autoscaling.internal.knative.dev +spec: + group: autoscaling.internal.knative.dev + names: + categories: + - knative-internal + - autoscaling + kind: Metric + plural: metrics + singular: metric + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: Metric represents a resource to configure the metric collector + with. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec holds the desired state of the Metric (from the client). + properties: + panicWindow: + description: PanicWindow is the aggregation window for metrics where + quick reactions are needed. + format: int64 + type: integer + scrapeTarget: + description: ScrapeTarget is the K8s service that publishes the metric + endpoint. + type: string + stableWindow: + description: StableWindow is the aggregation window for metrics in + a stable state. + format: int64 + type: integer + required: + - panicWindow + - scrapeTarget + - stableWindow + type: object + status: + description: Status communicates the observed state of the Metric (from + the controller). + properties: + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.0 + name: mpijobs.kubeflow.org +spec: + group: kubeflow.org + names: + kind: MPIJob + listKind: MPIJobList + plural: mpijobs + singular: mpijob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[-1:].type + name: State + type: string + name: v1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + cleanPodPolicy: + description: CleanPodPolicy defines the policy that whether to kill + pods after the job completes. Defaults to None. + type: string + mainContainer: + description: MainContainer specifies name of the main container which + executes the MPI code. + type: string + mpiReplicaSpecs: + additionalProperties: + description: ReplicaSpec is a description of the replica + properties: + replicas: + description: Replicas is the desired number of replicas of the + given template. If unspecified, defaults to 1. + format: int32 + type: integer + restartPolicy: + description: Restart policy for all replicas within the job. + One of Always, OnFailure, Never and ExitCode. Default to Never. + type: string + template: + description: Template is the object that describes the pod that + will be created for this replica. RestartPolicy in PodTemplateSpec + will be overide by RestartPolicy in ReplicaSpec + properties: + metadata: + description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: 'Specification of the desired behavior of the + pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + activeDeadlineSeconds: + description: Optional duration in seconds the pod may + be active on the node relative to StartTime before + the system will actively try to mark it failed and + kill associated containers. Value must be a positive + integer. + format: int64 + type: integer + affinity: + description: If specified, the pod's scheduling constraints + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: An empty preferred scheduling + term matches all objects with implicit weight + 0 (i.e. it's a no-op). A null preferred + scheduling term matches no objects (i.e. + is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to an update), the + system may or may not try to eventually evict + the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. The requirements + of them are ANDed. The TopologySelectorTerm + type implements a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. co-locate this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to a pod label update), + the system may or may not try to eventually + evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. avoid putting this pod in the same + node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity + expressions specified by this field, but it + may choose a node that violates one or more + of the expressions. The node that is most + preferred is the one with the greatest sum + of weights, i.e. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements + specified by this field are not met at scheduling + time, the pod will not be scheduled onto the + node. If the anti-affinity requirements specified + by this field cease to be met at some point + during pod execution (e.g. due to a pod label + update), the system may or may not try to + eventually evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates + whether a service account token should be automatically + mounted. + type: boolean + containers: + description: List of containers belonging to the pod. + Containers cannot currently be added or removed. There + must be at least one container in a Pod. Cannot be + updated. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + dnsConfig: + description: Specifies the DNS parameters of a pod. + Parameters specified here will be merged to the generated + DNS configuration based on DNSPolicy. + properties: + nameservers: + description: A list of DNS name server IP addresses. + This will be appended to the base nameservers + generated from DNSPolicy. Duplicated nameservers + will be removed. + items: + type: string + type: array + options: + description: A list of DNS resolver options. This + will be merged with the base options generated + from DNSPolicy. Duplicated entries will be removed. + Resolution options given in Options will override + those that appear in the base DNSPolicy. + items: + description: PodDNSConfigOption defines DNS resolver + options of a pod. + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + description: A list of DNS search domains for host-name + lookup. This will be appended to the base search + paths generated from DNSPolicy. Duplicated search + paths will be removed. + items: + type: string + type: array + type: object + dnsPolicy: + description: Set DNS policy for the pod. Defaults to + "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', + 'ClusterFirst', 'Default' or 'None'. DNS parameters + given in DNSConfig will be merged with the policy + selected with DNSPolicy. To have DNS options set along + with hostNetwork, you have to specify DNS policy explicitly + to 'ClusterFirstWithHostNet'. + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information + about services should be injected into pod''s environment + variables, matching the syntax of Docker links. Optional: + Defaults to true.' + type: boolean + ephemeralContainers: + description: List of ephemeral containers run in this + pod. Ephemeral containers may be run in an existing + pod to perform user-initiated actions such as debugging. + This list cannot be specified when creating a pod, + and it cannot be modified by updating the pod spec. + In order to add an ephemeral container to an existing + pod, use the pod's ephemeralcontainers subresource. + items: + description: An EphemeralContainer is a temporary + container that you may add to an existing Pod for + user-initiated activities such as debugging. Ephemeral + containers have no resource or scheduling guarantees, + and they will not be restarted when they exit or + when a Pod is removed or restarted. The kubelet + may evict a Pod if an ephemeral container causes + the Pod to exceed its resource allocation. + properties: + args: + description: 'Arguments to the entrypoint. The + image''s CMD is used if this is not provided. + Variable references $(VAR_NAME) are expanded + using the container''s environment. If a variable + cannot be resolved, the reference in the input + string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will + produce the string literal "$(VAR_NAME)".' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The image''s ENTRYPOINT is used if + this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Lifecycle is not allowed for ephemeral + containers. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the ephemeral container specified + as a DNS_LABEL. This name must be unique among + all containers, init containers and ephemeral + containers. + type: string + ports: + description: Ports are not allowed for ephemeral + containers. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: Resources are not allowed for ephemeral + containers. Ephemeral containers use spare resources + already allocated to the pod. + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'Optional: SecurityContext defines + the security options the ephemeral container + should be run with. If set, the fields of SecurityContext + override the equivalent fields of PodSecurityContext.' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + targetContainerName: + description: "If set, the name of the container + from PodSpec that this ephemeral container targets. + The ephemeral container will be run in the namespaces + (IPC, PID, etc) of this container. If not set + then the ephemeral container uses the namespaces + configured in the Pod spec. \n The container + runtime must implement support for this feature." + type: string + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Subpath mounts are not allowed for + ephemeral containers. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + hostAliases: + description: HostAliases is an optional list of hosts + and IPs that will be injected into the pod's hosts + file if specified. This is only valid for non-hostNetwork + pods. + items: + description: HostAlias holds the mapping between IP + and hostnames that will be injected as an entry + in the pod's hosts file. + properties: + hostnames: + description: Hostnames for the above IP address. + items: + type: string + type: array + ip: + description: IP address of the host file entry. + type: string + type: object + type: array + hostIPC: + description: 'Use the host''s ipc namespace. Optional: + Default to false.' + type: boolean + hostNetwork: + description: Host networking requested for this pod. + Use the host's network namespace. If this option is + set, the ports that will be used must be specified. + Default to false. + type: boolean + hostPID: + description: 'Use the host''s pid namespace. Optional: + Default to false.' + type: boolean + hostUsers: + description: 'Use the host''s user namespace. Optional: + Default to true. If set to true or not present, the + pod will be run in the host user namespace, useful + for when the pod needs a feature only available to + the host user namespace, such as loading a kernel + module with CAP_SYS_MODULE. When set to false, a new + userns is created for the pod.' + type: boolean + hostname: + description: Specifies the hostname of the Pod If not + specified, the pod's hostname will be set to a system-defined + value. + type: string + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of + references to secrets in the same namespace to use + for pulling any of the images used by this PodSpec. + If specified, these secrets will be passed to individual + puller implementations for them to use. More info: + https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + items: + description: LocalObjectReference contains enough + information to let you locate the referenced object + inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + initContainers: + description: List of initialization containers belonging + to the pod. Init containers are executed in order + prior to containers being started. If any init container + fails, the pod is considered to have failed and is + handled according to its restartPolicy. The name for + an init container or normal container must be unique + among all containers. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + nodeName: + description: NodeName is a request to schedule this + pod onto a specific node. If it is non-empty, the + scheduler simply schedules this pod onto that node, + assuming that it fits resource requirements. + type: string + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector which must + be true for the pod to fit on a node. Selector which + must match a node''s labels for the pod to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + x-kubernetes-map-type: atomic + os: + description: "Specifies the OS of the containers in + the pod. Some pod and container fields are restricted + if this is set. \n If the OS field is set to linux, + the following fields must be unset: -securityContext.windowsOptions + \n If the OS field is set to windows, following fields + must be unset: - spec.hostPID - spec.hostIPC - spec.hostUsers + - spec.securityContext.seLinuxOptions - spec.securityContext." + properties: + name: + description: 'Name is the name of the operating + system. The currently supported values are linux + and windows. Additional value may be defined in + future and can be one of: https://github.com/opencontainers/runtime-spec/blob/master/config.md#platform-specific-configuration + Clients should expect to handle additional values + and treat unrecognized values in this field as + os: null' + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Overhead represents the resource overhead + associated with running a pod for a given RuntimeClass. + This field will be autopopulated at admission time + by the RuntimeClass admission controller. If the RuntimeClass + admission controller is enabled, overhead must not + be set in Pod create requests. The RuntimeClass admission + controller will reject Pod create requests which have + the overhead already set. + type: object + preemptionPolicy: + description: PreemptionPolicy is the Policy for preempting + pods with lower priority. One of Never, PreemptLowerPriority. + Defaults to PreemptLowerPriority if unset. + type: string + priority: + description: The priority value. Various system components + use this field to find the priority of the pod. When + Priority Admission Controller is enabled, it prevents + users from setting this field. The admission controller + populates this field from PriorityClassName. The higher + the value, the higher the priority. + format: int32 + type: integer + priorityClassName: + description: If specified, indicates the pod's priority. + "system-node-critical" and "system-cluster-critical" + are two special keywords which indicate the highest + priorities with the former being the highest priority. + Any other name must be defined by creating a PriorityClass + object with that name. If not specified, the pod priority + will be default or zero if there is no default. + type: string + readinessGates: + description: 'If specified, all readiness gates will + be evaluated for pod readiness. A pod is ready when + all its containers are ready AND all conditions specified + in the readiness gates have status equal to "True" + More info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates' + items: + description: PodReadinessGate contains the reference + to a pod condition + properties: + conditionType: + description: ConditionType refers to a condition + in the pod's condition list with matching type. + type: string + required: + - conditionType + type: object + type: array + resourceClaims: + description: "ResourceClaims defines which ResourceClaims + must be allocated and reserved before the Pod is allowed + to start. The resources will be made available to + those containers which consume them by name. \n This + is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable." + items: + description: PodResourceClaim references exactly one + ResourceClaim through a ClaimSource. It adds a name + to it that uniquely identifies the ResourceClaim + inside the Pod. Containers that need access to the + ResourceClaim reference it with this name. + properties: + name: + description: Name uniquely identifies this resource + claim inside the pod. This must be a DNS_LABEL. + type: string + source: + description: Source describes where to find the + ResourceClaim. + properties: + resourceClaimName: + description: ResourceClaimName is the name + of a ResourceClaim object in the same namespace + as this pod. + type: string + resourceClaimTemplateName: + description: "ResourceClaimTemplateName is + the name of a ResourceClaimTemplate object + in the same namespace as this pod. \n The + template will be used to create a new ResourceClaim, + which will be bound to this pod. When this + pod is deleted, the ResourceClaim will also + be deleted. The name of the ResourceClaim + will be -, where + is the PodResourceClaim.Name." + type: string + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restartPolicy: + description: 'Restart policy for all containers within + the pod. One of Always, OnFailure, Never. In some + contexts, only a subset of those values may be permitted. + Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' + type: string + runtimeClassName: + description: 'RuntimeClassName refers to a RuntimeClass + object in the node.k8s.io group, which should be used + to run this pod. If no RuntimeClass resource matches + the named class, the pod will not be run. If unset + or empty, the "legacy" RuntimeClass will be used, + which is an implicit class with an empty definition + that uses the default runtime handler. More info: + https://git.k8s.' + type: string + schedulerName: + description: If specified, the pod will be dispatched + by specified scheduler. If not specified, the pod + will be dispatched by default scheduler. + type: string + schedulingGates: + description: "SchedulingGates is an opaque list of values + that if specified will block scheduling the pod. If + schedulingGates is not empty, the pod will stay in + the SchedulingGated state and the scheduler will not + attempt to schedule the pod. \n SchedulingGates can + only be set at pod creation time, and be removed only + afterwards. \n This is a beta feature enabled by the + PodSchedulingReadiness feature gate." + items: + description: PodSchedulingGate is associated to a + Pod to guard its scheduling. + properties: + name: + description: Name of the scheduling gate. Each + scheduling gate must have a unique name field. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + description: 'SecurityContext holds pod-level security + attributes and common container settings. Optional: + Defaults to empty. See type description for default + values of each field.' + properties: + fsGroup: + description: "A special supplemental group that + applies to all containers in a pod. Some volume + types allow the Kubelet to change the ownership + of that volume to be owned by the pod: \n 1. The + owning GID will be the FSGroup 2. The setgid bit + is set (new files created in the volume will be + owned by FSGroup) 3." + format: int64 + type: integer + fsGroupChangePolicy: + description: 'fsGroupChangePolicy defines behavior + of changing ownership and permission of the volume + before being exposed inside Pod. This field will + only apply to volume types which support fsGroup + based ownership(and permissions). It will have + no effect on ephemeral volume types such as: secret, + configmaps and emptydir. Valid values are "OnRootMismatch" + and "Always". If not specified, "Always" is used.' + type: string + runAsGroup: + description: The GID to run the entrypoint of the + container process. Uses runtime default if unset. + May also be set in SecurityContext. If set in + both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run + as a non-root user. If true, the Kubelet will + validate the image at runtime to ensure that it + does not run as UID 0 (root) and fail to start + the container if it does. If unset or false, no + such validation will be performed. May also be + set in SecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the + container process. Defaults to user specified + in image metadata if unspecified. May also be + set in SecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence for that container. + Note that this field cannot be set when spec.os.name + is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to + all containers. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in SecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + properties: + level: + description: Level is SELinux level label that + applies to the container. + type: string + role: + description: Role is a SELinux role label that + applies to the container. + type: string + type: + description: Type is a SELinux type label that + applies to the container. + type: string + user: + description: User is a SELinux user label that + applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. Note that this field cannot be set + when spec.os.name is windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node should be used. + The profile must be preconfigured on the node + to work. Must be a descending path, relative + to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp + profile will be applied. Valid options are: + \n Localhost - a profile defined in a file + on the node should be used. RuntimeDefault + - the container runtime default profile should + be used. Unconfined - no profile should be + applied." + type: string + required: + - type + type: object + supplementalGroups: + description: A list of groups applied to the first + process run in each container, in addition to + the container's primary GID, the fsGroup (if specified), + and group memberships defined in the container + image for the uid of the container process. If + unspecified, no additional groups are added to + any container. + items: + format: int64 + type: integer + type: array + sysctls: + description: Sysctls hold a list of namespaced sysctls + used for the pod. Pods with unsupported sysctls + (by the container runtime) might fail to launch. + Note that this field cannot be set when spec.os.name + is windows. + items: + description: Sysctl defines a kernel parameter + to be set + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + description: The Windows specific settings applied + to all containers. If unspecified, the options + within a container's SecurityContext will be used. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the + GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + hostProcess: + description: HostProcess determines if a container + should be run as a 'Host Process' container. + This field is alpha-level and will only be + honored by components that enable the WindowsHostProcessContainers + feature flag. Setting this field without the + feature flag will result in errors when validating + the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to run + the entrypoint of the container process. Defaults + to the user specified in image metadata if + unspecified. May also be set in PodSecurityContext. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. + type: string + type: object + type: object + serviceAccount: + description: 'DeprecatedServiceAccount is a depreciated + alias for ServiceAccountName. Deprecated: Use serviceAccountName + instead.' + type: string + serviceAccountName: + description: 'ServiceAccountName is the name of the + ServiceAccount to use to run this pod. More info: + https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + setHostnameAsFQDN: + description: If true the pod's hostname will be configured + as the pod's FQDN, rather than the leaf name (the + default). In Linux containers, this means setting + the FQDN in the hostname field of the kernel (the + nodename field of struct utsname). + type: boolean + shareProcessNamespace: + description: 'Share a single process namespace between + all of the containers in a pod. When this is set containers + will be able to view and signal processes from other + containers in the same pod, and the first process + in each container will not be assigned PID 1. HostPID + and ShareProcessNamespace cannot both be set. Optional: + Default to false.' + type: boolean + subdomain: + description: If specified, the fully qualified Pod hostname + will be "...svc.". If not specified, the pod will not have + a domainname at all. + type: string + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully. May be decreased in delete + request. Value must be non-negative integer. The value + zero indicates stop immediately via the kill signal + (no opportunity to shut down). If this value is nil, + the default grace period will be used instead. + format: int64 + type: integer + tolerations: + description: If specified, the pod's tolerations. + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + effect: + description: Effect indicates the taint effect + to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, + PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; + this combination means to match all values and + all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and + Equal. Defaults to Equal. Exists is equivalent + to wildcard for value, so that a pod can tolerate + all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the + period of time the toleration (which must be + of effect NoExecute, otherwise this field is + ignored) tolerates the taint. By default, it + is not set, which means tolerate the taint forever + (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value + should be empty, otherwise just a regular string. + type: string + type: object + type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how + a group of pods ought to spread across topology domains. + Scheduler will schedule pods in a way which abides + by the constraints. All topologySpreadConstraints + are ANDed. + items: + description: TopologySpreadConstraint specifies how + to spread matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are + counted to determine the number of pods in their + corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of + label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, a + key, and an operator that relates the + key and values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + description: MatchLabelKeys is a set of pod label + keys to select the pods over which spreading + will be calculated. The keys are used to lookup + values from the incoming pod labels, those key-value + labels are ANDed with labelSelector to select + the group of existing pods over which spreading + will be calculated for the incoming pod. The + same key is forbidden to exist in both MatchLabelKeys + and LabelSelector. + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + description: MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between + the number of matching pods in the target topology + and the global minimum. The global minimum is + the minimum number of matching pods in an eligible + domain or zero if the number of eligible domains + is less than MinDomains. + format: int32 + type: integer + minDomains: + description: MinDomains indicates a minimum number + of eligible domains. When the number of eligible + domains with matching topology keys is less + than minDomains, Pod Topology Spread treats + "global minimum" as 0, and then the calculation + of Skew is performed. And when the number of + eligible domains with matching topology keys + equals or greater than minDomains, this value + has no effect on scheduling. + format: int32 + type: integer + nodeAffinityPolicy: + description: "NodeAffinityPolicy indicates how + we will treat Pod's nodeAffinity/nodeSelector + when calculating pod topology spread skew. Options + are: - Honor: only nodes matching nodeAffinity/nodeSelector + are included in the calculations. - Ignore: + nodeAffinity/nodeSelector are ignored. All nodes + are included in the calculations. \n If this + value is nil, the behavior is equivalent to + the Honor policy." + type: string + nodeTaintsPolicy: + description: "NodeTaintsPolicy indicates how we + will treat node taints when calculating pod + topology spread skew. Options are: - Honor: + nodes without taints, along with tainted nodes + for which the incoming pod has a toleration, + are included. - Ignore: node taints are ignored. + All nodes are included. \n If this value is + nil, the behavior is equivalent to the Ignore + policy." + type: string + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", + and try to put balanced number of pods into + each bucket. We define a domain as a particular + instance of a topology. + type: string + whenUnsatisfiable: + description: WhenUnsatisfiable indicates how to + deal with a pod if it doesn't satisfy the spread + constraint. - DoNotSchedule (default) tells + the scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to topologies + that would help reduce the skew. + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + description: 'List of volumes that can be mounted by + containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + items: + description: Volume represents a named volume in a + pod that may be accessed by any container in the + pod. + properties: + awsElasticBlockStore: + description: 'awsElasticBlockStore represents + an AWS Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'readOnly value true will force + the readOnly setting in VolumeMounts. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'volumeID is unique ID of the + persistent disk resource in AWS (Amazon + EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: azureDisk represents an Azure Data + Disk mount on the host and bind mount to the + pod. + properties: + cachingMode: + description: 'cachingMode is the Host Caching + mode: None, Read Only, Read Write.' + type: string + diskName: + description: diskName is the Name of the data + disk in the blob storage + type: string + diskURI: + description: diskURI is the URI of data disk + in the blob storage + type: string + fsType: + description: fsType is Filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + kind: + description: 'kind expected values are Shared: + multiple blob disks per storage account Dedicated: + single blob disk per storage account Managed: + azure managed data disk (only in managed + availability set). defaults to shared' + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: azureFile represents an Azure File + Service mount on the host and bind mount to + the pod. + properties: + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretName: + description: secretName is the name of secret + that contains Azure Storage Account Name + and Key + type: string + shareName: + description: shareName is the azure share + Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: cephFS represents a Ceph FS mount + on the host that shares a pod's lifetime + properties: + monitors: + description: 'monitors is Required: Monitors + is a collection of Ceph monitors More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'path is Optional: Used as the + mounted root, rather than the full Ceph + tree, default is /' + type: string + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'secretFile is Optional: SecretFile + is the path to key ring for User, default + is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'secretRef is Optional: SecretRef + is reference to the authentication secret + for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is optional: User is the + rados user name, default is admin More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'cinder represents a cinder volume + attached and mounted on kubelets host machine. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'secretRef is optional: points + to a secret object containing parameters + used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + description: 'volumeID used to identify the + volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: configMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced + ConfigMap will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional specify whether the + ConfigMap or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + description: csi (Container Storage Interface) + represents ephemeral storage that is handled + by certain external CSI drivers (Beta feature). + properties: + driver: + description: driver is the name of the CSI + driver that handles this volume. Consult + with your admin for the correct name as + registered in the cluster. + type: string + fsType: + description: fsType to mount. Ex. "ext4", + "xfs", "ntfs". If not provided, the empty + value is passed to the associated CSI driver + which will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: nodePublishSecretRef is a reference + to the secret object containing sensitive + information to pass to the CSI driver to + complete the CSI NodePublishVolume and NodeUnpublishVolume + calls. This field is optional, and may + be empty if no secret is required. If the + secret object contains more than one secret, + all secret references are passed. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + description: readOnly specifies a read-only + configuration for the volume. Defaults to + false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: volumeAttributes stores driver-specific + properties that are passed to the CSI driver. + Consult your driver's documentation for + supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: downwardAPI represents downward API + about the pod that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits to use on + created files by default. Must be a Optional: + mode bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: Items is a list of downward API + volume file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects a field + of the pod: only annotations, labels, + name and namespace are supported.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits used + to set permissions on this file, must + be an octal value between 0000 and + 0777 or a decimal value between 0 + and 511. YAML accepts both octal and + decimal values, JSON requires decimal + values for mode bits. If not specified, + the volume defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path is the + relative path name of the file to + be created. Must not be absolute or + contain the ''..'' path. Must be utf-8 + encoded. The first item of the relative + path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + requests.cpu and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'emptyDir represents a temporary + directory that shares a pod''s lifetime. More + info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'medium represents what type + of storage medium should back this directory. + The default is "" which means to use the + node''s default medium. Must be an empty + string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount + of local storage required for this EmptyDir + volume. The size limit is also applicable + for memory medium. The maximum usage on + memory medium EmptyDir would be the minimum + value between the SizeLimit specified here + and the sum of memory limits of all containers + in a pod. The default is nil which means + that the limit is undefined. More info: + https://kubernetes.' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + description: ephemeral represents a volume that + is handled by a cluster storage driver. The + volume's lifecycle is tied to the pod that defines + it - it will be created before the pod starts, + and deleted when the pod is removed. + properties: + volumeClaimTemplate: + description: Will be used to create a stand-alone + PVC to provision the volume. The pod in + which this EphemeralVolumeSource is embedded + will be the owner of the PVC, i.e. the PVC + will be deleted together with the pod. The + name of the PVC will be `-` where `` is the name + from the `PodSpec.Volumes` array entry. + properties: + metadata: + description: May contain labels and annotations + that will be copied into the PVC when + creating it. No other fields are allowed + and will be rejected during validation. + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: The specification for the + PersistentVolumeClaim. The entire content + is copied unchanged into the PVC that + gets created from this template. The + same fields as in a PersistentVolumeClaim + are also valid here. + properties: + accessModes: + description: 'accessModes contains + the desired access modes the volume + should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can + be used to specify either: * An + existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) + If the provisioner or an external + controller can support the specified + data source, it will create a new + volume based on the contents of + the specified data source.' + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: dataSourceRef specifies + the object from which to populate + the volume with data, if a non-empty + volume is desired. This may be any + object from a non-empty API group + (non core object) or a PersistentVolumeClaim + object. When this field is specified, + volume binding will only succeed + if the type of the specified object + matches some installed volume populator + or dynamic provisioner. + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + namespace: + description: Namespace is the + namespace of resource being + referenced Note that when a + namespace is specified, a gateway.networking.k8s.io/ReferenceGrant + object is required in the referent + namespace to allow that namespace's + owner to accept the reference. + See the ReferenceGrant documentation + for details. (Alpha) This field + requires the CrossNamespaceVolumeDataSource + feature gate to be enabled. + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents + the minimum resources the volume + should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed + to specify resource requirements + that are lower than previous value + but must still be higher than capacity + recorded in the status field of + the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + claims: + description: "Claims lists the + names of resources, defined + in spec.resourceClaims, that + are used by this container. + \n This is an alpha field and + requires enabling the DynamicResourceAllocation + feature gate. \n This field + is immutable. It can only be + set for containers." + items: + description: ResourceClaim references + one entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match + the name of one entry + in pod.spec.resourceClaims + of the Pod where this + field is used. It makes + that resource available + inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes + the maximum amount of compute + resources allowed. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes + the minimum amount of compute + resources required. If Requests + is omitted for a container, + it defaults to Limits if that + is explicitly specified, otherwise + to an implementation-defined + value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query + over volumes to consider for binding. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + description: 'storageClassName is + the name of the StorageClass required + by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what + type of volume is required by the + claim. Value of Filesystem is implied + when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding + reference to the PersistentVolume + backing this claim. + type: string + type: object + required: + - spec + type: object + type: object + fc: + description: fc represents a Fibre Channel resource + that is attached to a kubelet's host machine + and then exposed to the pod. + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. TODO: how do we prevent + errors in the filesystem from compromising + the machine' + type: string + lun: + description: 'lun is Optional: FC target lun + number' + format: int32 + type: integer + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'targetWWNs is Optional: FC target + worldwide names (WWNs)' + items: + type: string + type: array + wwids: + description: 'wwids Optional: FC volume world + wide identifiers (wwids) Either wwids or + combination of targetWWNs and lun must be + set, but not both simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: flexVolume represents a generic volume + resource that is provisioned/attached using + an exec based plugin. + properties: + driver: + description: driver is the name of the driver + to use for this volume. + type: string + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". The default filesystem depends + on FlexVolume script. + type: string + options: + additionalProperties: + type: string + description: 'options is Optional: this field + holds extra command options if any.' + type: object + readOnly: + description: 'readOnly is Optional: defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'secretRef is Optional: secretRef + is reference to the secret object containing + sensitive information to pass to the plugin + scripts. This may be empty if no secret + object is specified. If the secret object + contains more than one secret, all secrets + are passed to the plugin scripts.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + description: flocker represents a Flocker volume + attached to a kubelet's host machine. This depends + on the Flocker control service being running + properties: + datasetName: + description: datasetName is Name of the dataset + stored as metadata -> name on the dataset + for Flocker should be considered as deprecated + type: string + datasetUUID: + description: datasetUUID is the UUID of the + dataset. This is unique identifier of a + Flocker dataset + type: string + type: object + gcePersistentDisk: + description: 'gcePersistentDisk represents a GCE + Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'fsType is filesystem type of + the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'pdName is unique name of the + PD resource in GCE. Used to identify the + disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'gitRepo represents a git repository + at a particular revision. DEPRECATED: GitRepo + is deprecated. To provision a container with + a git repo, mount an EmptyDir into an InitContainer + that clones the repo using git, then mount the + EmptyDir into the Pod''s container.' + properties: + directory: + description: directory is the target directory + name. Must not contain or start with '..'. If + '.' is supplied, the volume directory will + be the git repository. Otherwise, if specified, + the volume will contain the git repository + in the subdirectory with the given name. + type: string + repository: + description: repository is the URL + type: string + revision: + description: revision is the commit hash for + the specified revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'glusterfs represents a Glusterfs + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'endpoints is the endpoint name + that details Glusterfs topology. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'path is the Glusterfs volume + path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'readOnly here will force the + Glusterfs volume to be mounted with read-only + permissions. Defaults to false. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'hostPath represents a pre-existing + file or directory on the host machine that is + directly exposed to the container. This is generally + used for system agents or other privileged things + that are allowed to see the host machine. Most + containers will NOT need this. More info: https://kubernetes.' + properties: + path: + description: 'path of the directory on the + host. If the path is a symlink, it will + follow the link to the real path. More info: + https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'type for HostPath Volume Defaults + to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'iscsi represents an ISCSI Disk resource + that is attached to a kubelet''s host machine + and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: chapAuthDiscovery defines whether + support iSCSI Discovery CHAP authentication + type: boolean + chapAuthSession: + description: chapAuthSession defines whether + support iSCSI Session CHAP authentication + type: boolean + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + initiatorName: + description: initiatorName is the custom iSCSI + Initiator Name. If initiatorName is specified + with iscsiInterface simultaneously, new + iSCSI interface : will be created for the connection. + type: string + iqn: + description: iqn is the target iSCSI Qualified + Name. + type: string + iscsiInterface: + description: iscsiInterface is the interface + Name that uses an iSCSI transport. Defaults + to 'default' (tcp). + type: string + lun: + description: lun represents iSCSI Target Lun + number. + format: int32 + type: integer + portals: + description: portals is the iSCSI Target Portal + List. The portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. + type: boolean + secretRef: + description: secretRef is the CHAP Secret + for iSCSI target and initiator authentication + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + description: targetPortal is iSCSI Target + Portal. The Portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'name of the volume. Must be a DNS_LABEL + and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'nfs represents an NFS mount on the + host that shares a pod''s lifetime More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'path that is exported by the + NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'readOnly here will force the + NFS export to be mounted with read-only + permissions. Defaults to false. More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'server is the hostname or IP + address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'persistentVolumeClaimVolumeSource + represents a reference to a PersistentVolumeClaim + in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'claimName is the name of a PersistentVolumeClaim + in the same namespace as the pod using this + volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: readOnly Will force the ReadOnly + setting in VolumeMounts. Default false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: photonPersistentDisk represents a + PhotonController persistent disk attached and + mounted on kubelets host machine + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + pdID: + description: pdID is the ID that identifies + Photon Controller persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: portworxVolume represents a portworx + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fSType represents the filesystem + type to mount Must be a filesystem type + supported by the host operating system. + Ex. "ext4", "xfs". Implicitly inferred to + be "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + volumeID: + description: volumeID uniquely identifies + a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: projected items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits + used to set permissions on created files + by default. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. Directories within the path are + not affected by this setting. + format: int32 + type: integer + sources: + description: sources is the list of volume + projections + items: + description: Projection that may be projected + along with other supported volume types + properties: + configMap: + description: configMap information about + the configMap data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced ConfigMap + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional specify whether + the ConfigMap or its keys must + be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information + about the downwardAPI data to project + properties: + items: + description: Items is a list of + DownwardAPIVolume file + items: + description: DownwardAPIVolumeFile + represents information to create + the file containing the pod + field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only + annotations, labels, name + and namespace are supported.' + properties: + apiVersion: + description: Version of + the schema the FieldPath + is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the + field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode + bits used to set permissions + on this file, must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path + is the relative path name + of the file to be created. + Must not be absolute or + contain the ''..'' path. + Must be utf-8 encoded. The + first item of the relative + path must not start with + ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) are + currently supported.' + properties: + containerName: + description: 'Container + name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies + the output format of + the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: + resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about + the secret data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced Secret + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional field specify + whether the Secret or its key + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is + information about the serviceAccountToken + data to project + properties: + audience: + description: audience is the intended + audience of the token. A recipient + of a token must identify itself + with an identifier specified in + the audience of the token, and + otherwise should reject the token. + The audience defaults to the identifier + of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is + the requested duration of validity + of the service account token. + As the token approaches expiration, + the kubelet volume plugin will + proactively rotate the service + account token. The kubelet will + start trying to rotate the token + if the token is older than 80 + percent of its time to live or + if the token is older than 24 + hours.Defaults to 1 hour and must + be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative + to the mount point of the file + to project the token into. + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + description: quobyte represents a Quobyte mount + on the host that shares a pod's lifetime + properties: + group: + description: group to map volume access to + Default is no group + type: string + readOnly: + description: readOnly here will force the + Quobyte volume to be mounted with read-only + permissions. Defaults to false. + type: boolean + registry: + description: registry represents a single + or multiple Quobyte Registry services specified + as a string as host:port pair (multiple + entries are separated with commas) which + acts as the central registry for volumes + type: string + tenant: + description: tenant owning the given Quobyte + volume in the Backend Used with dynamically + provisioned Quobyte volumes, value is set + by the plugin + type: string + user: + description: user to map volume access to + Defaults to serivceaccount user + type: string + volume: + description: volume is a string that references + an already created Quobyte volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'rbd represents a Rados Block Device + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + image: + description: 'image is the rados image name. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'keyring is the path to key ring + for RBDUser. Default is /etc/ceph/keyring. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'monitors is a collection of + Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'pool is the rados pool name. + Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'secretRef is name of the authentication + secret for RBDUser. If provided overrides + keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is the rados user name. + Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: scaleIO represents a ScaleIO persistent + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: gateway is the host address of + the ScaleIO API Gateway. + type: string + protectionDomain: + description: protectionDomain is the name + of the ScaleIO Protection Domain for the + configured storage. + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef references to the secret + for ScaleIO user and other sensitive information. + If this is not provided, Login operation + will fail. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + description: sslEnabled Flag enable/disable + SSL communication with Gateway, default + false + type: boolean + storageMode: + description: storageMode indicates whether + the storage for a volume should be ThickProvisioned + or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: storagePool is the ScaleIO Storage + Pool associated with the protection domain. + type: string + system: + description: system is the name of the storage + system as configured in ScaleIO. + type: string + volumeName: + description: volumeName is the name of a volume + already created in the ScaleIO system that + is associated with this volume source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'secret represents a secret that + should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value + pair in the Data field of the referenced + Secret will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether + the Secret or its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the + secret in the pod''s namespace to use. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: storageOS represents a StorageOS + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef specifies the secret + to use for obtaining the StorageOS API credentials. If + not specified, default values will be attempted. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + description: volumeName is the human-readable + name of the StorageOS volume. Volume names + are only unique within a namespace. + type: string + volumeNamespace: + description: volumeNamespace specifies the + scope of the volume within StorageOS. If + no namespace is specified then the Pod's + namespace will be used. This allows the + Kubernetes name scoping to be mirrored within + StorageOS for tighter integration. Set VolumeName + to any name to override the default behaviour. + Set to "default" if you are not using namespaces + within StorageOS. + type: string + type: object + vsphereVolume: + description: vsphereVolume represents a vSphere + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fsType is filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + storagePolicyID: + description: storagePolicyID is the storage + Policy Based Management (SPBM) profile ID + associated with the StoragePolicyName. + type: string + storagePolicyName: + description: storagePolicyName is the storage + Policy Based Management (SPBM) profile name. + type: string + volumePath: + description: volumePath is the path that identifies + vSphere volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + description: '`MPIReplicaSpecs` contains maps from `MPIReplicaType` + to `ReplicaSpec` that specify the MPI replicas to run.' + type: object + runPolicy: + description: '`RunPolicy` encapsulates various runtime policies of + the distributed training job, for example how to clean up resources + and how long the job can stay active.' + properties: + activeDeadlineSeconds: + description: Specifies the duration in seconds relative to the + startTime that the job may be active before the system tries + to terminate it; value must be positive integer. + format: int64 + type: integer + backoffLimit: + description: Optional number of retries before marking this job + failed. + format: int32 + type: integer + cleanPodPolicy: + description: CleanPodPolicy defines the policy to kill pods after + the job completes. Default to None. + type: string + schedulingPolicy: + description: SchedulingPolicy defines the policy related to scheduling, + e.g. gang-scheduling + properties: + minAvailable: + format: int32 + type: integer + minResources: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + priorityClass: + type: string + queue: + type: string + scheduleTimeoutSeconds: + format: int32 + type: integer + type: object + suspend: + default: false + description: suspend specifies whether the Job controller should + create Pods or not. If a Job is created with suspend set to + true, no Pods are created by the Job controller. If a Job is + suspended after creation (i.e. the flag goes from false to true), + the Job controller will delete all active Pods and PodGroups + associated with this Job. Users must design their workload to + gracefully handle this. + type: boolean + ttlSecondsAfterFinished: + description: TTLSecondsAfterFinished is the TTL to clean up jobs. + It may take extra ReconcilePeriod seconds for the cleanup, since + reconcile gets called periodically. Default to infinite. + format: int32 + type: integer + type: object + slotsPerWorker: + description: Specifies the number of slots per worker used in hostfile. + Defaults to 1. + format: int32 + type: integer + required: + - mpiReplicaSpecs + type: object + status: + description: JobStatus represents the current observed state of the training + Job. + properties: + completionTime: + description: Represents time when the job was completed. It is not + guaranteed to be set in happens-before order across separate operations. + It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + conditions: + description: Conditions is an array of current observed job conditions. + items: + description: JobCondition describes the state of the job at a certain + point. + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + lastUpdateTime: + description: The last time this condition was updated. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of job condition. + type: string + required: + - status + - type + type: object + type: array + lastReconcileTime: + description: Represents last time when the job was reconciled. It + is not guaranteed to be set in happens-before order across separate + operations. It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + replicaStatuses: + additionalProperties: + description: ReplicaStatus represents the current observed state + of the replica. + properties: + active: + description: The number of actively running pods. + format: int32 + type: integer + failed: + description: The number of pods which reached phase Failed. + format: int32 + type: integer + labelSelector: + description: 'Deprecated: Use Selector instead' + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + selector: + description: A Selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. + An empty Selector matches all objects. A null Selector matches + no objects. + type: string + succeeded: + description: The number of pods which reached phase Succeeded. + format: int32 + type: integer + type: object + description: ReplicaStatuses is map of ReplicaType and ReplicaStatus, + specifies the status of each replica. + type: object + startTime: + description: Represents time when the job was acknowledged by the + job controller. It is not guaranteed to be set in happens-before + order across separate operations. It is represented in RFC3339 form + and is in UTC. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.0 + name: mxjobs.kubeflow.org +spec: + group: kubeflow.org + names: + kind: MXJob + listKind: MXJobList + plural: mxjobs + singular: mxjob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[-1:].type + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: MXJob is the Schema for the mxjobs API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: MXJobSpec defines the desired state of MXJob + properties: + jobMode: + description: JobMode specify the kind of MXjob to do. Different mode + may have different MXReplicaSpecs request + type: string + mxReplicaSpecs: + additionalProperties: + description: ReplicaSpec is a description of the replica + properties: + replicas: + description: Replicas is the desired number of replicas of the + given template. If unspecified, defaults to 1. + format: int32 + type: integer + restartPolicy: + description: Restart policy for all replicas within the job. + One of Always, OnFailure, Never and ExitCode. Default to Never. + type: string + template: + description: Template is the object that describes the pod that + will be created for this replica. RestartPolicy in PodTemplateSpec + will be overide by RestartPolicy in ReplicaSpec + properties: + metadata: + description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: 'Specification of the desired behavior of the + pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + activeDeadlineSeconds: + description: Optional duration in seconds the pod may + be active on the node relative to StartTime before + the system will actively try to mark it failed and + kill associated containers. Value must be a positive + integer. + format: int64 + type: integer + affinity: + description: If specified, the pod's scheduling constraints + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: An empty preferred scheduling + term matches all objects with implicit weight + 0 (i.e. it's a no-op). A null preferred + scheduling term matches no objects (i.e. + is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to an update), the + system may or may not try to eventually evict + the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. The requirements + of them are ANDed. The TopologySelectorTerm + type implements a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. co-locate this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to a pod label update), + the system may or may not try to eventually + evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. avoid putting this pod in the same + node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity + expressions specified by this field, but it + may choose a node that violates one or more + of the expressions. The node that is most + preferred is the one with the greatest sum + of weights, i.e. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements + specified by this field are not met at scheduling + time, the pod will not be scheduled onto the + node. If the anti-affinity requirements specified + by this field cease to be met at some point + during pod execution (e.g. due to a pod label + update), the system may or may not try to + eventually evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates + whether a service account token should be automatically + mounted. + type: boolean + containers: + description: List of containers belonging to the pod. + Containers cannot currently be added or removed. There + must be at least one container in a Pod. Cannot be + updated. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + dnsConfig: + description: Specifies the DNS parameters of a pod. + Parameters specified here will be merged to the generated + DNS configuration based on DNSPolicy. + properties: + nameservers: + description: A list of DNS name server IP addresses. + This will be appended to the base nameservers + generated from DNSPolicy. Duplicated nameservers + will be removed. + items: + type: string + type: array + options: + description: A list of DNS resolver options. This + will be merged with the base options generated + from DNSPolicy. Duplicated entries will be removed. + Resolution options given in Options will override + those that appear in the base DNSPolicy. + items: + description: PodDNSConfigOption defines DNS resolver + options of a pod. + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + description: A list of DNS search domains for host-name + lookup. This will be appended to the base search + paths generated from DNSPolicy. Duplicated search + paths will be removed. + items: + type: string + type: array + type: object + dnsPolicy: + description: Set DNS policy for the pod. Defaults to + "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', + 'ClusterFirst', 'Default' or 'None'. DNS parameters + given in DNSConfig will be merged with the policy + selected with DNSPolicy. To have DNS options set along + with hostNetwork, you have to specify DNS policy explicitly + to 'ClusterFirstWithHostNet'. + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information + about services should be injected into pod''s environment + variables, matching the syntax of Docker links. Optional: + Defaults to true.' + type: boolean + ephemeralContainers: + description: List of ephemeral containers run in this + pod. Ephemeral containers may be run in an existing + pod to perform user-initiated actions such as debugging. + This list cannot be specified when creating a pod, + and it cannot be modified by updating the pod spec. + In order to add an ephemeral container to an existing + pod, use the pod's ephemeralcontainers subresource. + items: + description: An EphemeralContainer is a temporary + container that you may add to an existing Pod for + user-initiated activities such as debugging. Ephemeral + containers have no resource or scheduling guarantees, + and they will not be restarted when they exit or + when a Pod is removed or restarted. The kubelet + may evict a Pod if an ephemeral container causes + the Pod to exceed its resource allocation. + properties: + args: + description: 'Arguments to the entrypoint. The + image''s CMD is used if this is not provided. + Variable references $(VAR_NAME) are expanded + using the container''s environment. If a variable + cannot be resolved, the reference in the input + string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will + produce the string literal "$(VAR_NAME)".' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The image''s ENTRYPOINT is used if + this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Lifecycle is not allowed for ephemeral + containers. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the ephemeral container specified + as a DNS_LABEL. This name must be unique among + all containers, init containers and ephemeral + containers. + type: string + ports: + description: Ports are not allowed for ephemeral + containers. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: Resources are not allowed for ephemeral + containers. Ephemeral containers use spare resources + already allocated to the pod. + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'Optional: SecurityContext defines + the security options the ephemeral container + should be run with. If set, the fields of SecurityContext + override the equivalent fields of PodSecurityContext.' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + targetContainerName: + description: "If set, the name of the container + from PodSpec that this ephemeral container targets. + The ephemeral container will be run in the namespaces + (IPC, PID, etc) of this container. If not set + then the ephemeral container uses the namespaces + configured in the Pod spec. \n The container + runtime must implement support for this feature." + type: string + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Subpath mounts are not allowed for + ephemeral containers. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + hostAliases: + description: HostAliases is an optional list of hosts + and IPs that will be injected into the pod's hosts + file if specified. This is only valid for non-hostNetwork + pods. + items: + description: HostAlias holds the mapping between IP + and hostnames that will be injected as an entry + in the pod's hosts file. + properties: + hostnames: + description: Hostnames for the above IP address. + items: + type: string + type: array + ip: + description: IP address of the host file entry. + type: string + type: object + type: array + hostIPC: + description: 'Use the host''s ipc namespace. Optional: + Default to false.' + type: boolean + hostNetwork: + description: Host networking requested for this pod. + Use the host's network namespace. If this option is + set, the ports that will be used must be specified. + Default to false. + type: boolean + hostPID: + description: 'Use the host''s pid namespace. Optional: + Default to false.' + type: boolean + hostUsers: + description: 'Use the host''s user namespace. Optional: + Default to true. If set to true or not present, the + pod will be run in the host user namespace, useful + for when the pod needs a feature only available to + the host user namespace, such as loading a kernel + module with CAP_SYS_MODULE. When set to false, a new + userns is created for the pod.' + type: boolean + hostname: + description: Specifies the hostname of the Pod If not + specified, the pod's hostname will be set to a system-defined + value. + type: string + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of + references to secrets in the same namespace to use + for pulling any of the images used by this PodSpec. + If specified, these secrets will be passed to individual + puller implementations for them to use. More info: + https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + items: + description: LocalObjectReference contains enough + information to let you locate the referenced object + inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + initContainers: + description: List of initialization containers belonging + to the pod. Init containers are executed in order + prior to containers being started. If any init container + fails, the pod is considered to have failed and is + handled according to its restartPolicy. The name for + an init container or normal container must be unique + among all containers. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + nodeName: + description: NodeName is a request to schedule this + pod onto a specific node. If it is non-empty, the + scheduler simply schedules this pod onto that node, + assuming that it fits resource requirements. + type: string + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector which must + be true for the pod to fit on a node. Selector which + must match a node''s labels for the pod to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + x-kubernetes-map-type: atomic + os: + description: "Specifies the OS of the containers in + the pod. Some pod and container fields are restricted + if this is set. \n If the OS field is set to linux, + the following fields must be unset: -securityContext.windowsOptions + \n If the OS field is set to windows, following fields + must be unset: - spec.hostPID - spec.hostIPC - spec.hostUsers + - spec.securityContext.seLinuxOptions - spec.securityContext." + properties: + name: + description: 'Name is the name of the operating + system. The currently supported values are linux + and windows. Additional value may be defined in + future and can be one of: https://github.com/opencontainers/runtime-spec/blob/master/config.md#platform-specific-configuration + Clients should expect to handle additional values + and treat unrecognized values in this field as + os: null' + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Overhead represents the resource overhead + associated with running a pod for a given RuntimeClass. + This field will be autopopulated at admission time + by the RuntimeClass admission controller. If the RuntimeClass + admission controller is enabled, overhead must not + be set in Pod create requests. The RuntimeClass admission + controller will reject Pod create requests which have + the overhead already set. + type: object + preemptionPolicy: + description: PreemptionPolicy is the Policy for preempting + pods with lower priority. One of Never, PreemptLowerPriority. + Defaults to PreemptLowerPriority if unset. + type: string + priority: + description: The priority value. Various system components + use this field to find the priority of the pod. When + Priority Admission Controller is enabled, it prevents + users from setting this field. The admission controller + populates this field from PriorityClassName. The higher + the value, the higher the priority. + format: int32 + type: integer + priorityClassName: + description: If specified, indicates the pod's priority. + "system-node-critical" and "system-cluster-critical" + are two special keywords which indicate the highest + priorities with the former being the highest priority. + Any other name must be defined by creating a PriorityClass + object with that name. If not specified, the pod priority + will be default or zero if there is no default. + type: string + readinessGates: + description: 'If specified, all readiness gates will + be evaluated for pod readiness. A pod is ready when + all its containers are ready AND all conditions specified + in the readiness gates have status equal to "True" + More info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates' + items: + description: PodReadinessGate contains the reference + to a pod condition + properties: + conditionType: + description: ConditionType refers to a condition + in the pod's condition list with matching type. + type: string + required: + - conditionType + type: object + type: array + resourceClaims: + description: "ResourceClaims defines which ResourceClaims + must be allocated and reserved before the Pod is allowed + to start. The resources will be made available to + those containers which consume them by name. \n This + is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable." + items: + description: PodResourceClaim references exactly one + ResourceClaim through a ClaimSource. It adds a name + to it that uniquely identifies the ResourceClaim + inside the Pod. Containers that need access to the + ResourceClaim reference it with this name. + properties: + name: + description: Name uniquely identifies this resource + claim inside the pod. This must be a DNS_LABEL. + type: string + source: + description: Source describes where to find the + ResourceClaim. + properties: + resourceClaimName: + description: ResourceClaimName is the name + of a ResourceClaim object in the same namespace + as this pod. + type: string + resourceClaimTemplateName: + description: "ResourceClaimTemplateName is + the name of a ResourceClaimTemplate object + in the same namespace as this pod. \n The + template will be used to create a new ResourceClaim, + which will be bound to this pod. When this + pod is deleted, the ResourceClaim will also + be deleted. The name of the ResourceClaim + will be -, where + is the PodResourceClaim.Name." + type: string + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restartPolicy: + description: 'Restart policy for all containers within + the pod. One of Always, OnFailure, Never. In some + contexts, only a subset of those values may be permitted. + Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' + type: string + runtimeClassName: + description: 'RuntimeClassName refers to a RuntimeClass + object in the node.k8s.io group, which should be used + to run this pod. If no RuntimeClass resource matches + the named class, the pod will not be run. If unset + or empty, the "legacy" RuntimeClass will be used, + which is an implicit class with an empty definition + that uses the default runtime handler. More info: + https://git.k8s.' + type: string + schedulerName: + description: If specified, the pod will be dispatched + by specified scheduler. If not specified, the pod + will be dispatched by default scheduler. + type: string + schedulingGates: + description: "SchedulingGates is an opaque list of values + that if specified will block scheduling the pod. If + schedulingGates is not empty, the pod will stay in + the SchedulingGated state and the scheduler will not + attempt to schedule the pod. \n SchedulingGates can + only be set at pod creation time, and be removed only + afterwards. \n This is a beta feature enabled by the + PodSchedulingReadiness feature gate." + items: + description: PodSchedulingGate is associated to a + Pod to guard its scheduling. + properties: + name: + description: Name of the scheduling gate. Each + scheduling gate must have a unique name field. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + description: 'SecurityContext holds pod-level security + attributes and common container settings. Optional: + Defaults to empty. See type description for default + values of each field.' + properties: + fsGroup: + description: "A special supplemental group that + applies to all containers in a pod. Some volume + types allow the Kubelet to change the ownership + of that volume to be owned by the pod: \n 1. The + owning GID will be the FSGroup 2. The setgid bit + is set (new files created in the volume will be + owned by FSGroup) 3." + format: int64 + type: integer + fsGroupChangePolicy: + description: 'fsGroupChangePolicy defines behavior + of changing ownership and permission of the volume + before being exposed inside Pod. This field will + only apply to volume types which support fsGroup + based ownership(and permissions). It will have + no effect on ephemeral volume types such as: secret, + configmaps and emptydir. Valid values are "OnRootMismatch" + and "Always". If not specified, "Always" is used.' + type: string + runAsGroup: + description: The GID to run the entrypoint of the + container process. Uses runtime default if unset. + May also be set in SecurityContext. If set in + both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run + as a non-root user. If true, the Kubelet will + validate the image at runtime to ensure that it + does not run as UID 0 (root) and fail to start + the container if it does. If unset or false, no + such validation will be performed. May also be + set in SecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the + container process. Defaults to user specified + in image metadata if unspecified. May also be + set in SecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence for that container. + Note that this field cannot be set when spec.os.name + is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to + all containers. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in SecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + properties: + level: + description: Level is SELinux level label that + applies to the container. + type: string + role: + description: Role is a SELinux role label that + applies to the container. + type: string + type: + description: Type is a SELinux type label that + applies to the container. + type: string + user: + description: User is a SELinux user label that + applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. Note that this field cannot be set + when spec.os.name is windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node should be used. + The profile must be preconfigured on the node + to work. Must be a descending path, relative + to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp + profile will be applied. Valid options are: + \n Localhost - a profile defined in a file + on the node should be used. RuntimeDefault + - the container runtime default profile should + be used. Unconfined - no profile should be + applied." + type: string + required: + - type + type: object + supplementalGroups: + description: A list of groups applied to the first + process run in each container, in addition to + the container's primary GID, the fsGroup (if specified), + and group memberships defined in the container + image for the uid of the container process. If + unspecified, no additional groups are added to + any container. + items: + format: int64 + type: integer + type: array + sysctls: + description: Sysctls hold a list of namespaced sysctls + used for the pod. Pods with unsupported sysctls + (by the container runtime) might fail to launch. + Note that this field cannot be set when spec.os.name + is windows. + items: + description: Sysctl defines a kernel parameter + to be set + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + description: The Windows specific settings applied + to all containers. If unspecified, the options + within a container's SecurityContext will be used. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the + GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + hostProcess: + description: HostProcess determines if a container + should be run as a 'Host Process' container. + This field is alpha-level and will only be + honored by components that enable the WindowsHostProcessContainers + feature flag. Setting this field without the + feature flag will result in errors when validating + the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to run + the entrypoint of the container process. Defaults + to the user specified in image metadata if + unspecified. May also be set in PodSecurityContext. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. + type: string + type: object + type: object + serviceAccount: + description: 'DeprecatedServiceAccount is a depreciated + alias for ServiceAccountName. Deprecated: Use serviceAccountName + instead.' + type: string + serviceAccountName: + description: 'ServiceAccountName is the name of the + ServiceAccount to use to run this pod. More info: + https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + setHostnameAsFQDN: + description: If true the pod's hostname will be configured + as the pod's FQDN, rather than the leaf name (the + default). In Linux containers, this means setting + the FQDN in the hostname field of the kernel (the + nodename field of struct utsname). + type: boolean + shareProcessNamespace: + description: 'Share a single process namespace between + all of the containers in a pod. When this is set containers + will be able to view and signal processes from other + containers in the same pod, and the first process + in each container will not be assigned PID 1. HostPID + and ShareProcessNamespace cannot both be set. Optional: + Default to false.' + type: boolean + subdomain: + description: If specified, the fully qualified Pod hostname + will be "...svc.". If not specified, the pod will not have + a domainname at all. + type: string + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully. May be decreased in delete + request. Value must be non-negative integer. The value + zero indicates stop immediately via the kill signal + (no opportunity to shut down). If this value is nil, + the default grace period will be used instead. + format: int64 + type: integer + tolerations: + description: If specified, the pod's tolerations. + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + effect: + description: Effect indicates the taint effect + to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, + PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; + this combination means to match all values and + all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and + Equal. Defaults to Equal. Exists is equivalent + to wildcard for value, so that a pod can tolerate + all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the + period of time the toleration (which must be + of effect NoExecute, otherwise this field is + ignored) tolerates the taint. By default, it + is not set, which means tolerate the taint forever + (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value + should be empty, otherwise just a regular string. + type: string + type: object + type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how + a group of pods ought to spread across topology domains. + Scheduler will schedule pods in a way which abides + by the constraints. All topologySpreadConstraints + are ANDed. + items: + description: TopologySpreadConstraint specifies how + to spread matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are + counted to determine the number of pods in their + corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of + label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, a + key, and an operator that relates the + key and values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + description: MatchLabelKeys is a set of pod label + keys to select the pods over which spreading + will be calculated. The keys are used to lookup + values from the incoming pod labels, those key-value + labels are ANDed with labelSelector to select + the group of existing pods over which spreading + will be calculated for the incoming pod. The + same key is forbidden to exist in both MatchLabelKeys + and LabelSelector. + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + description: MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between + the number of matching pods in the target topology + and the global minimum. The global minimum is + the minimum number of matching pods in an eligible + domain or zero if the number of eligible domains + is less than MinDomains. + format: int32 + type: integer + minDomains: + description: MinDomains indicates a minimum number + of eligible domains. When the number of eligible + domains with matching topology keys is less + than minDomains, Pod Topology Spread treats + "global minimum" as 0, and then the calculation + of Skew is performed. And when the number of + eligible domains with matching topology keys + equals or greater than minDomains, this value + has no effect on scheduling. + format: int32 + type: integer + nodeAffinityPolicy: + description: "NodeAffinityPolicy indicates how + we will treat Pod's nodeAffinity/nodeSelector + when calculating pod topology spread skew. Options + are: - Honor: only nodes matching nodeAffinity/nodeSelector + are included in the calculations. - Ignore: + nodeAffinity/nodeSelector are ignored. All nodes + are included in the calculations. \n If this + value is nil, the behavior is equivalent to + the Honor policy." + type: string + nodeTaintsPolicy: + description: "NodeTaintsPolicy indicates how we + will treat node taints when calculating pod + topology spread skew. Options are: - Honor: + nodes without taints, along with tainted nodes + for which the incoming pod has a toleration, + are included. - Ignore: node taints are ignored. + All nodes are included. \n If this value is + nil, the behavior is equivalent to the Ignore + policy." + type: string + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", + and try to put balanced number of pods into + each bucket. We define a domain as a particular + instance of a topology. + type: string + whenUnsatisfiable: + description: WhenUnsatisfiable indicates how to + deal with a pod if it doesn't satisfy the spread + constraint. - DoNotSchedule (default) tells + the scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to topologies + that would help reduce the skew. + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + description: 'List of volumes that can be mounted by + containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + items: + description: Volume represents a named volume in a + pod that may be accessed by any container in the + pod. + properties: + awsElasticBlockStore: + description: 'awsElasticBlockStore represents + an AWS Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'readOnly value true will force + the readOnly setting in VolumeMounts. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'volumeID is unique ID of the + persistent disk resource in AWS (Amazon + EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: azureDisk represents an Azure Data + Disk mount on the host and bind mount to the + pod. + properties: + cachingMode: + description: 'cachingMode is the Host Caching + mode: None, Read Only, Read Write.' + type: string + diskName: + description: diskName is the Name of the data + disk in the blob storage + type: string + diskURI: + description: diskURI is the URI of data disk + in the blob storage + type: string + fsType: + description: fsType is Filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + kind: + description: 'kind expected values are Shared: + multiple blob disks per storage account Dedicated: + single blob disk per storage account Managed: + azure managed data disk (only in managed + availability set). defaults to shared' + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: azureFile represents an Azure File + Service mount on the host and bind mount to + the pod. + properties: + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretName: + description: secretName is the name of secret + that contains Azure Storage Account Name + and Key + type: string + shareName: + description: shareName is the azure share + Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: cephFS represents a Ceph FS mount + on the host that shares a pod's lifetime + properties: + monitors: + description: 'monitors is Required: Monitors + is a collection of Ceph monitors More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'path is Optional: Used as the + mounted root, rather than the full Ceph + tree, default is /' + type: string + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'secretFile is Optional: SecretFile + is the path to key ring for User, default + is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'secretRef is Optional: SecretRef + is reference to the authentication secret + for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is optional: User is the + rados user name, default is admin More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'cinder represents a cinder volume + attached and mounted on kubelets host machine. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'secretRef is optional: points + to a secret object containing parameters + used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + description: 'volumeID used to identify the + volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: configMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced + ConfigMap will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional specify whether the + ConfigMap or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + description: csi (Container Storage Interface) + represents ephemeral storage that is handled + by certain external CSI drivers (Beta feature). + properties: + driver: + description: driver is the name of the CSI + driver that handles this volume. Consult + with your admin for the correct name as + registered in the cluster. + type: string + fsType: + description: fsType to mount. Ex. "ext4", + "xfs", "ntfs". If not provided, the empty + value is passed to the associated CSI driver + which will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: nodePublishSecretRef is a reference + to the secret object containing sensitive + information to pass to the CSI driver to + complete the CSI NodePublishVolume and NodeUnpublishVolume + calls. This field is optional, and may + be empty if no secret is required. If the + secret object contains more than one secret, + all secret references are passed. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + description: readOnly specifies a read-only + configuration for the volume. Defaults to + false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: volumeAttributes stores driver-specific + properties that are passed to the CSI driver. + Consult your driver's documentation for + supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: downwardAPI represents downward API + about the pod that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits to use on + created files by default. Must be a Optional: + mode bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: Items is a list of downward API + volume file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects a field + of the pod: only annotations, labels, + name and namespace are supported.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits used + to set permissions on this file, must + be an octal value between 0000 and + 0777 or a decimal value between 0 + and 511. YAML accepts both octal and + decimal values, JSON requires decimal + values for mode bits. If not specified, + the volume defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path is the + relative path name of the file to + be created. Must not be absolute or + contain the ''..'' path. Must be utf-8 + encoded. The first item of the relative + path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + requests.cpu and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'emptyDir represents a temporary + directory that shares a pod''s lifetime. More + info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'medium represents what type + of storage medium should back this directory. + The default is "" which means to use the + node''s default medium. Must be an empty + string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount + of local storage required for this EmptyDir + volume. The size limit is also applicable + for memory medium. The maximum usage on + memory medium EmptyDir would be the minimum + value between the SizeLimit specified here + and the sum of memory limits of all containers + in a pod. The default is nil which means + that the limit is undefined. More info: + https://kubernetes.' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + description: ephemeral represents a volume that + is handled by a cluster storage driver. The + volume's lifecycle is tied to the pod that defines + it - it will be created before the pod starts, + and deleted when the pod is removed. + properties: + volumeClaimTemplate: + description: Will be used to create a stand-alone + PVC to provision the volume. The pod in + which this EphemeralVolumeSource is embedded + will be the owner of the PVC, i.e. the PVC + will be deleted together with the pod. The + name of the PVC will be `-` where `` is the name + from the `PodSpec.Volumes` array entry. + properties: + metadata: + description: May contain labels and annotations + that will be copied into the PVC when + creating it. No other fields are allowed + and will be rejected during validation. + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: The specification for the + PersistentVolumeClaim. The entire content + is copied unchanged into the PVC that + gets created from this template. The + same fields as in a PersistentVolumeClaim + are also valid here. + properties: + accessModes: + description: 'accessModes contains + the desired access modes the volume + should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can + be used to specify either: * An + existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) + If the provisioner or an external + controller can support the specified + data source, it will create a new + volume based on the contents of + the specified data source.' + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: dataSourceRef specifies + the object from which to populate + the volume with data, if a non-empty + volume is desired. This may be any + object from a non-empty API group + (non core object) or a PersistentVolumeClaim + object. When this field is specified, + volume binding will only succeed + if the type of the specified object + matches some installed volume populator + or dynamic provisioner. + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + namespace: + description: Namespace is the + namespace of resource being + referenced Note that when a + namespace is specified, a gateway.networking.k8s.io/ReferenceGrant + object is required in the referent + namespace to allow that namespace's + owner to accept the reference. + See the ReferenceGrant documentation + for details. (Alpha) This field + requires the CrossNamespaceVolumeDataSource + feature gate to be enabled. + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents + the minimum resources the volume + should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed + to specify resource requirements + that are lower than previous value + but must still be higher than capacity + recorded in the status field of + the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + claims: + description: "Claims lists the + names of resources, defined + in spec.resourceClaims, that + are used by this container. + \n This is an alpha field and + requires enabling the DynamicResourceAllocation + feature gate. \n This field + is immutable. It can only be + set for containers." + items: + description: ResourceClaim references + one entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match + the name of one entry + in pod.spec.resourceClaims + of the Pod where this + field is used. It makes + that resource available + inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes + the maximum amount of compute + resources allowed. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes + the minimum amount of compute + resources required. If Requests + is omitted for a container, + it defaults to Limits if that + is explicitly specified, otherwise + to an implementation-defined + value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query + over volumes to consider for binding. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + description: 'storageClassName is + the name of the StorageClass required + by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what + type of volume is required by the + claim. Value of Filesystem is implied + when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding + reference to the PersistentVolume + backing this claim. + type: string + type: object + required: + - spec + type: object + type: object + fc: + description: fc represents a Fibre Channel resource + that is attached to a kubelet's host machine + and then exposed to the pod. + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. TODO: how do we prevent + errors in the filesystem from compromising + the machine' + type: string + lun: + description: 'lun is Optional: FC target lun + number' + format: int32 + type: integer + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'targetWWNs is Optional: FC target + worldwide names (WWNs)' + items: + type: string + type: array + wwids: + description: 'wwids Optional: FC volume world + wide identifiers (wwids) Either wwids or + combination of targetWWNs and lun must be + set, but not both simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: flexVolume represents a generic volume + resource that is provisioned/attached using + an exec based plugin. + properties: + driver: + description: driver is the name of the driver + to use for this volume. + type: string + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". The default filesystem depends + on FlexVolume script. + type: string + options: + additionalProperties: + type: string + description: 'options is Optional: this field + holds extra command options if any.' + type: object + readOnly: + description: 'readOnly is Optional: defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'secretRef is Optional: secretRef + is reference to the secret object containing + sensitive information to pass to the plugin + scripts. This may be empty if no secret + object is specified. If the secret object + contains more than one secret, all secrets + are passed to the plugin scripts.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + description: flocker represents a Flocker volume + attached to a kubelet's host machine. This depends + on the Flocker control service being running + properties: + datasetName: + description: datasetName is Name of the dataset + stored as metadata -> name on the dataset + for Flocker should be considered as deprecated + type: string + datasetUUID: + description: datasetUUID is the UUID of the + dataset. This is unique identifier of a + Flocker dataset + type: string + type: object + gcePersistentDisk: + description: 'gcePersistentDisk represents a GCE + Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'fsType is filesystem type of + the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'pdName is unique name of the + PD resource in GCE. Used to identify the + disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'gitRepo represents a git repository + at a particular revision. DEPRECATED: GitRepo + is deprecated. To provision a container with + a git repo, mount an EmptyDir into an InitContainer + that clones the repo using git, then mount the + EmptyDir into the Pod''s container.' + properties: + directory: + description: directory is the target directory + name. Must not contain or start with '..'. If + '.' is supplied, the volume directory will + be the git repository. Otherwise, if specified, + the volume will contain the git repository + in the subdirectory with the given name. + type: string + repository: + description: repository is the URL + type: string + revision: + description: revision is the commit hash for + the specified revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'glusterfs represents a Glusterfs + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'endpoints is the endpoint name + that details Glusterfs topology. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'path is the Glusterfs volume + path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'readOnly here will force the + Glusterfs volume to be mounted with read-only + permissions. Defaults to false. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'hostPath represents a pre-existing + file or directory on the host machine that is + directly exposed to the container. This is generally + used for system agents or other privileged things + that are allowed to see the host machine. Most + containers will NOT need this. More info: https://kubernetes.' + properties: + path: + description: 'path of the directory on the + host. If the path is a symlink, it will + follow the link to the real path. More info: + https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'type for HostPath Volume Defaults + to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'iscsi represents an ISCSI Disk resource + that is attached to a kubelet''s host machine + and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: chapAuthDiscovery defines whether + support iSCSI Discovery CHAP authentication + type: boolean + chapAuthSession: + description: chapAuthSession defines whether + support iSCSI Session CHAP authentication + type: boolean + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + initiatorName: + description: initiatorName is the custom iSCSI + Initiator Name. If initiatorName is specified + with iscsiInterface simultaneously, new + iSCSI interface : will be created for the connection. + type: string + iqn: + description: iqn is the target iSCSI Qualified + Name. + type: string + iscsiInterface: + description: iscsiInterface is the interface + Name that uses an iSCSI transport. Defaults + to 'default' (tcp). + type: string + lun: + description: lun represents iSCSI Target Lun + number. + format: int32 + type: integer + portals: + description: portals is the iSCSI Target Portal + List. The portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. + type: boolean + secretRef: + description: secretRef is the CHAP Secret + for iSCSI target and initiator authentication + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + description: targetPortal is iSCSI Target + Portal. The Portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'name of the volume. Must be a DNS_LABEL + and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'nfs represents an NFS mount on the + host that shares a pod''s lifetime More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'path that is exported by the + NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'readOnly here will force the + NFS export to be mounted with read-only + permissions. Defaults to false. More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'server is the hostname or IP + address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'persistentVolumeClaimVolumeSource + represents a reference to a PersistentVolumeClaim + in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'claimName is the name of a PersistentVolumeClaim + in the same namespace as the pod using this + volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: readOnly Will force the ReadOnly + setting in VolumeMounts. Default false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: photonPersistentDisk represents a + PhotonController persistent disk attached and + mounted on kubelets host machine + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + pdID: + description: pdID is the ID that identifies + Photon Controller persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: portworxVolume represents a portworx + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fSType represents the filesystem + type to mount Must be a filesystem type + supported by the host operating system. + Ex. "ext4", "xfs". Implicitly inferred to + be "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + volumeID: + description: volumeID uniquely identifies + a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: projected items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits + used to set permissions on created files + by default. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. Directories within the path are + not affected by this setting. + format: int32 + type: integer + sources: + description: sources is the list of volume + projections + items: + description: Projection that may be projected + along with other supported volume types + properties: + configMap: + description: configMap information about + the configMap data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced ConfigMap + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional specify whether + the ConfigMap or its keys must + be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information + about the downwardAPI data to project + properties: + items: + description: Items is a list of + DownwardAPIVolume file + items: + description: DownwardAPIVolumeFile + represents information to create + the file containing the pod + field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only + annotations, labels, name + and namespace are supported.' + properties: + apiVersion: + description: Version of + the schema the FieldPath + is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the + field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode + bits used to set permissions + on this file, must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path + is the relative path name + of the file to be created. + Must not be absolute or + contain the ''..'' path. + Must be utf-8 encoded. The + first item of the relative + path must not start with + ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) are + currently supported.' + properties: + containerName: + description: 'Container + name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies + the output format of + the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: + resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about + the secret data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced Secret + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional field specify + whether the Secret or its key + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is + information about the serviceAccountToken + data to project + properties: + audience: + description: audience is the intended + audience of the token. A recipient + of a token must identify itself + with an identifier specified in + the audience of the token, and + otherwise should reject the token. + The audience defaults to the identifier + of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is + the requested duration of validity + of the service account token. + As the token approaches expiration, + the kubelet volume plugin will + proactively rotate the service + account token. The kubelet will + start trying to rotate the token + if the token is older than 80 + percent of its time to live or + if the token is older than 24 + hours.Defaults to 1 hour and must + be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative + to the mount point of the file + to project the token into. + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + description: quobyte represents a Quobyte mount + on the host that shares a pod's lifetime + properties: + group: + description: group to map volume access to + Default is no group + type: string + readOnly: + description: readOnly here will force the + Quobyte volume to be mounted with read-only + permissions. Defaults to false. + type: boolean + registry: + description: registry represents a single + or multiple Quobyte Registry services specified + as a string as host:port pair (multiple + entries are separated with commas) which + acts as the central registry for volumes + type: string + tenant: + description: tenant owning the given Quobyte + volume in the Backend Used with dynamically + provisioned Quobyte volumes, value is set + by the plugin + type: string + user: + description: user to map volume access to + Defaults to serivceaccount user + type: string + volume: + description: volume is a string that references + an already created Quobyte volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'rbd represents a Rados Block Device + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + image: + description: 'image is the rados image name. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'keyring is the path to key ring + for RBDUser. Default is /etc/ceph/keyring. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'monitors is a collection of + Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'pool is the rados pool name. + Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'secretRef is name of the authentication + secret for RBDUser. If provided overrides + keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is the rados user name. + Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: scaleIO represents a ScaleIO persistent + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: gateway is the host address of + the ScaleIO API Gateway. + type: string + protectionDomain: + description: protectionDomain is the name + of the ScaleIO Protection Domain for the + configured storage. + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef references to the secret + for ScaleIO user and other sensitive information. + If this is not provided, Login operation + will fail. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + description: sslEnabled Flag enable/disable + SSL communication with Gateway, default + false + type: boolean + storageMode: + description: storageMode indicates whether + the storage for a volume should be ThickProvisioned + or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: storagePool is the ScaleIO Storage + Pool associated with the protection domain. + type: string + system: + description: system is the name of the storage + system as configured in ScaleIO. + type: string + volumeName: + description: volumeName is the name of a volume + already created in the ScaleIO system that + is associated with this volume source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'secret represents a secret that + should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value + pair in the Data field of the referenced + Secret will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether + the Secret or its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the + secret in the pod''s namespace to use. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: storageOS represents a StorageOS + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef specifies the secret + to use for obtaining the StorageOS API credentials. If + not specified, default values will be attempted. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + description: volumeName is the human-readable + name of the StorageOS volume. Volume names + are only unique within a namespace. + type: string + volumeNamespace: + description: volumeNamespace specifies the + scope of the volume within StorageOS. If + no namespace is specified then the Pod's + namespace will be used. This allows the + Kubernetes name scoping to be mirrored within + StorageOS for tighter integration. Set VolumeName + to any name to override the default behaviour. + Set to "default" if you are not using namespaces + within StorageOS. + type: string + type: object + vsphereVolume: + description: vsphereVolume represents a vSphere + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fsType is filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + storagePolicyID: + description: storagePolicyID is the storage + Policy Based Management (SPBM) profile ID + associated with the StoragePolicyName. + type: string + storagePolicyName: + description: storagePolicyName is the storage + Policy Based Management (SPBM) profile name. + type: string + volumePath: + description: volumePath is the path that identifies + vSphere volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + description: 'MXReplicaSpecs is map of ReplicaType and ReplicaSpec + specifies the MX replicas to run. For example, { "Scheduler": ReplicaSpec, + "Server": ReplicaSpec, "Worker": ReplicaSpec, }' + type: object + runPolicy: + description: RunPolicy encapsulates various runtime policies of the + distributed training job, for example how to clean up resources + and how long the job can stay active. + properties: + activeDeadlineSeconds: + description: Specifies the duration in seconds relative to the + startTime that the job may be active before the system tries + to terminate it; value must be positive integer. + format: int64 + type: integer + backoffLimit: + description: Optional number of retries before marking this job + failed. + format: int32 + type: integer + cleanPodPolicy: + description: CleanPodPolicy defines the policy to kill pods after + the job completes. Default to None. + type: string + schedulingPolicy: + description: SchedulingPolicy defines the policy related to scheduling, + e.g. gang-scheduling + properties: + minAvailable: + format: int32 + type: integer + minResources: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + priorityClass: + type: string + queue: + type: string + scheduleTimeoutSeconds: + format: int32 + type: integer + type: object + suspend: + default: false + description: suspend specifies whether the Job controller should + create Pods or not. If a Job is created with suspend set to + true, no Pods are created by the Job controller. If a Job is + suspended after creation (i.e. the flag goes from false to true), + the Job controller will delete all active Pods and PodGroups + associated with this Job. Users must design their workload to + gracefully handle this. + type: boolean + ttlSecondsAfterFinished: + description: TTLSecondsAfterFinished is the TTL to clean up jobs. + It may take extra ReconcilePeriod seconds for the cleanup, since + reconcile gets called periodically. Default to infinite. + format: int32 + type: integer + type: object + required: + - jobMode + - mxReplicaSpecs + type: object + status: + description: JobStatus represents the current observed state of the training + Job. + properties: + completionTime: + description: Represents time when the job was completed. It is not + guaranteed to be set in happens-before order across separate operations. + It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + conditions: + description: Conditions is an array of current observed job conditions. + items: + description: JobCondition describes the state of the job at a certain + point. + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + lastUpdateTime: + description: The last time this condition was updated. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of job condition. + type: string + required: + - status + - type + type: object + type: array + lastReconcileTime: + description: Represents last time when the job was reconciled. It + is not guaranteed to be set in happens-before order across separate + operations. It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + replicaStatuses: + additionalProperties: + description: ReplicaStatus represents the current observed state + of the replica. + properties: + active: + description: The number of actively running pods. + format: int32 + type: integer + failed: + description: The number of pods which reached phase Failed. + format: int32 + type: integer + labelSelector: + description: 'Deprecated: Use Selector instead' + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + selector: + description: A Selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. + An empty Selector matches all objects. A null Selector matches + no objects. + type: string + succeeded: + description: The number of pods which reached phase Succeeded. + format: int32 + type: integer + type: object + description: ReplicaStatuses is map of ReplicaType and ReplicaStatus, + specifies the status of each replica. + type: object + startTime: + description: Represents time when the job was acknowledged by the + job controller. It is not guaranteed to be set in happens-before + order across separate operations. It is represented in RFC3339 form + and is in UTC. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.8.0 + creationTimestamp: null + labels: + app: notebook-controller + kustomize.component: notebook-controller + name: notebooks.kubeflow.org +spec: + conversion: + strategy: None + group: kubeflow.org + names: + kind: Notebook + listKind: NotebookList + plural: notebooks + singular: notebook + preserveUnknownFields: false + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + template: + properties: + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + maxSkew: + format: int32 + type: integer + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + status: + properties: + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + containerState: + properties: + running: + properties: + startedAt: + format: date-time + type: string + type: object + terminated: + properties: + containerID: + type: string + exitCode: + format: int32 + type: integer + finishedAt: + format: date-time + type: string + message: + type: string + reason: + type: string + signal: + format: int32 + type: integer + startedAt: + format: date-time + type: string + required: + - exitCode + type: object + waiting: + properties: + message: + type: string + reason: + type: string + type: object + type: object + readyReplicas: + format: int32 + type: integer + required: + - conditions + - containerState + - readyReplicas + type: object + type: object + served: true + storage: true + subresources: + status: {} + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + template: + properties: + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + maxSkew: + format: int32 + type: integer + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + status: + properties: + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + containerState: + properties: + running: + properties: + startedAt: + format: date-time + type: string + type: object + terminated: + properties: + containerID: + type: string + exitCode: + format: int32 + type: integer + finishedAt: + format: date-time + type: string + message: + type: string + reason: + type: string + signal: + format: int32 + type: integer + startedAt: + format: date-time + type: string + required: + - exitCode + type: object + waiting: + properties: + message: + type: string + reason: + type: string + type: object + type: object + readyReplicas: + format: int32 + type: integer + required: + - conditions + - containerState + - readyReplicas + type: object + type: object + served: true + storage: false + subresources: + status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + template: + properties: + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + maxSkew: + format: int32 + type: integer + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + status: + properties: + conditions: + items: + properties: + lastProbeTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + containerState: + properties: + running: + properties: + startedAt: + format: date-time + type: string + type: object + terminated: + properties: + containerID: + type: string + exitCode: + format: int32 + type: integer + finishedAt: + format: date-time + type: string + message: + type: string + reason: + type: string + signal: + format: int32 + type: integer + startedAt: + format: date-time + type: string + required: + - exitCode + type: object + waiting: + properties: + message: + type: string + reason: + type: string + type: object + type: object + readyReplicas: + format: int32 + type: integer + required: + - conditions + - containerState + - readyReplicas + type: object + type: object + served: true + storage: false + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: orders.acme.cert-manager.io +spec: + group: acme.cert-manager.io + names: + categories: + - cert-manager + - cert-manager-acme + kind: Order + listKind: OrderList + plural: orders + singular: order + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.state + name: State + type: string + - jsonPath: .spec.issuerRef.name + name: Issuer + priority: 1 + type: string + - jsonPath: .status.reason + name: Reason + priority: 1 + type: string + - description: CreationTimestamp is a timestamp representing the server time when + this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: Order is a type to represent an Order with an ACME server + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + properties: + commonName: + description: CommonName is the common name as specified on the DER + encoded CSR. If specified, this value must also be present in `dnsNames` + or `ipAddresses`. This field must match the corresponding field + on the DER encoded CSR. + type: string + dnsNames: + description: DNSNames is a list of DNS names that should be included + as part of the Order validation process. This field must match the + corresponding field on the DER encoded CSR. + items: + type: string + type: array + duration: + description: Duration is the duration for the not after date for the + requested certificate. this is set on order creation as pe the ACME + spec. + type: string + ipAddresses: + description: IPAddresses is a list of IP addresses that should be + included as part of the Order validation process. This field must + match the corresponding field on the DER encoded CSR. + items: + type: string + type: array + issuerRef: + description: IssuerRef references a properly configured ACME-type + Issuer which should be used to create this Order. If the Issuer + does not exist, processing will be retried. If the Issuer is not + an 'ACME' Issuer, an error will be returned and the Order will be + marked as failed. + properties: + group: + description: Group of the resource being referred to. + type: string + kind: + description: Kind of the resource being referred to. + type: string + name: + description: Name of the resource being referred to. + type: string + required: + - name + type: object + request: + description: Certificate signing request bytes in DER encoding. This + will be used when finalizing the order. This field must be set on + the order. + format: byte + type: string + required: + - issuerRef + - request + type: object + status: + properties: + authorizations: + description: Authorizations contains data returned from the ACME server + on what authorizations must be completed in order to validate the + DNS names specified on the Order. + items: + description: ACMEAuthorization contains data returned from the ACME + server on an authorization that must be completed in order validate + a DNS name on an ACME Order resource. + properties: + challenges: + description: Challenges specifies the challenge types offered + by the ACME server. One of these challenge types will be selected + when validating the DNS name and an appropriate Challenge + resource will be created to perform the ACME challenge process. + items: + description: Challenge specifies a challenge offered by the + ACME server for an Order. An appropriate Challenge resource + can be created to perform the ACME challenge process. + properties: + token: + description: Token is the token that must be presented + for this challenge. This is used to compute the 'key' + that must also be presented. + type: string + type: + description: Type is the type of challenge being offered, + e.g. 'http-01', 'dns-01', 'tls-sni-01', etc. This is + the raw value retrieved from the ACME server. Only 'http-01' + and 'dns-01' are supported by cert-manager, other values + will be ignored. + type: string + url: + description: URL is the URL of this challenge. It can + be used to retrieve additional metadata about the Challenge + from the ACME server. + type: string + required: + - token + - type + - url + type: object + type: array + identifier: + description: Identifier is the DNS name to be validated as part + of this authorization + type: string + initialState: + description: InitialState is the initial state of the ACME authorization + when first fetched from the ACME server. If an Authorization + is already 'valid', the Order controller will not create a + Challenge resource for the authorization. This will occur + when working with an ACME server that enables 'authz reuse' + (such as Let's Encrypt's production endpoint). If not set + and 'identifier' is set, the state is assumed to be pending + and a Challenge will be created. + enum: + - valid + - ready + - pending + - processing + - invalid + - expired + - errored + type: string + url: + description: URL is the URL of the Authorization that must be + completed + type: string + wildcard: + description: Wildcard will be true if this authorization is + for a wildcard DNS name. If this is true, the identifier will + be the *non-wildcard* version of the DNS name. For example, + if '*.example.com' is the DNS name being validated, this field + will be 'true' and the 'identifier' field will be 'example.com'. + type: boolean + required: + - url + type: object + type: array + certificate: + description: Certificate is a copy of the PEM encoded certificate + for this Order. This field will be populated after the order has + been successfully finalized with the ACME server, and the order + has transitioned to the 'valid' state. + format: byte + type: string + failureTime: + description: FailureTime stores the time that this order failed. This + is used to influence garbage collection and back-off. + format: date-time + type: string + finalizeURL: + description: FinalizeURL of the Order. This is used to obtain certificates + for this order once it has been completed. + type: string + reason: + description: Reason optionally provides more information about a why + the order is in the current state. + type: string + state: + description: State contains the current state of this Order resource. + States 'success' and 'expired' are 'final' + enum: + - valid + - ready + - pending + - processing + - invalid + - expired + - errored + type: string + url: + description: URL of the Order. This will initially be empty when the + resource is first created. The Order controller will populate this + field when the Order is first processed. This field will be immutable + after it is initially set. + type: string + type: object + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.0 + name: paddlejobs.kubeflow.org +spec: + group: kubeflow.org + names: + kind: PaddleJob + listKind: PaddleJobList + plural: paddlejobs + singular: paddlejob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[-1:].type + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: PaddleJob Represents a PaddleJob resource. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Specification of the desired state of the PaddleJob. + properties: + elasticPolicy: + description: ElasticPolicy holds the elastic policy for paddle job. + properties: + maxReplicas: + description: upper limit for the number of pods that can be set + by the autoscaler; cannot be smaller than MinReplicas, defaults + to null. + format: int32 + type: integer + maxRestarts: + description: MaxRestarts is the limit for restart times of pods + in elastic mode. + format: int32 + type: integer + metrics: + description: Metrics contains the specifications which are used + to calculate the desired replica count (the maximum replica + count across all metrics will be used). The desired replica + count is calculated with multiplying the ratio between the target + value and the current value by the current number of pods. Ergo, + metrics used must decrease as the pod count is increased, and + vice-versa. + items: + description: MetricSpec specifies how to scale based on a single + metric (only `type` and one other matching field should be + set at once). + properties: + containerResource: + description: containerResource refers to a resource metric + (such as those specified in requests and limits) known + to Kubernetes describing a single container in each pod + of the current scale target (e.g. CPU or memory). Such + metrics are built in to Kubernetes, and have special scaling + options on top of those available to normal per-pod metrics + using the "pods" source. + properties: + container: + description: container is the name of the container + in the pods of the scaling target + type: string + name: + description: name is the name of the resource in question. + type: string + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - container + - name + - target + type: object + external: + description: external refers to a global metric that is + not associated with any Kubernetes object. It allows autoscaling + based on information coming from components running outside + of cluster (for example length of queue in cloud messaging + service, or QPS from loadbalancer running outside of cluster). + properties: + metric: + description: metric identifies the target metric by + name and selector + properties: + name: + description: name is the name of the given metric + type: string + selector: + description: selector is the string-encoded form + of a standard kubernetes label selector for the + given metric When set, it is passed as an additional + parameter to the metrics server for more specific + metrics scoping. When unset, just the metricName + will be used to gather metrics. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + required: + - name + type: object + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - metric + - target + type: object + object: + description: object refers to a metric describing a single + kubernetes object (for example, hits-per-second on an + Ingress object). + properties: + describedObject: + description: describedObject specifies the descriptions + of a object,such as kind,name apiVersion + properties: + apiVersion: + description: apiVersion is the API version of the + referent + type: string + kind: + description: 'kind is the kind of the referent; + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'name is the name of the referent; + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - kind + - name + type: object + metric: + description: metric identifies the target metric by + name and selector + properties: + name: + description: name is the name of the given metric + type: string + selector: + description: selector is the string-encoded form + of a standard kubernetes label selector for the + given metric When set, it is passed as an additional + parameter to the metrics server for more specific + metrics scoping. When unset, just the metricName + will be used to gather metrics. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + required: + - name + type: object + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - describedObject + - metric + - target + type: object + pods: + description: pods refers to a metric describing each pod + in the current scale target (for example, transactions-processed-per-second). The + values will be averaged together before being compared + to the target value. + properties: + metric: + description: metric identifies the target metric by + name and selector + properties: + name: + description: name is the name of the given metric + type: string + selector: + description: selector is the string-encoded form + of a standard kubernetes label selector for the + given metric When set, it is passed as an additional + parameter to the metrics server for more specific + metrics scoping. When unset, just the metricName + will be used to gather metrics. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + required: + - name + type: object + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - metric + - target + type: object + resource: + description: resource refers to a resource metric (such + as those specified in requests and limits) known to Kubernetes + describing each pod in the current scale target (e.g. + CPU or memory). Such metrics are built in to Kubernetes, + and have special scaling options on top of those available + to normal per-pod metrics using the "pods" source. + properties: + name: + description: name is the name of the resource in question. + type: string + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - name + - target + type: object + type: + description: 'type is the type of metric source. It should + be one of "ContainerResource", "External", "Object", "Pods" + or "Resource", each mapping to a matching field in the + object. Note: "ContainerResource" type is available on + when the feature-gate HPAContainerMetrics is enabled' + type: string + required: + - type + type: object + type: array + minReplicas: + description: minReplicas is the lower limit for the number of + replicas to which the training job can scale down. It defaults + to null. + format: int32 + type: integer + type: object + paddleReplicaSpecs: + additionalProperties: + description: ReplicaSpec is a description of the replica + properties: + replicas: + description: Replicas is the desired number of replicas of the + given template. If unspecified, defaults to 1. + format: int32 + type: integer + restartPolicy: + description: Restart policy for all replicas within the job. + One of Always, OnFailure, Never and ExitCode. Default to Never. + type: string + template: + description: Template is the object that describes the pod that + will be created for this replica. RestartPolicy in PodTemplateSpec + will be overide by RestartPolicy in ReplicaSpec + properties: + metadata: + description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: 'Specification of the desired behavior of the + pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + activeDeadlineSeconds: + description: Optional duration in seconds the pod may + be active on the node relative to StartTime before + the system will actively try to mark it failed and + kill associated containers. Value must be a positive + integer. + format: int64 + type: integer + affinity: + description: If specified, the pod's scheduling constraints + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: An empty preferred scheduling + term matches all objects with implicit weight + 0 (i.e. it's a no-op). A null preferred + scheduling term matches no objects (i.e. + is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to an update), the + system may or may not try to eventually evict + the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. The requirements + of them are ANDed. The TopologySelectorTerm + type implements a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. co-locate this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to a pod label update), + the system may or may not try to eventually + evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. avoid putting this pod in the same + node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity + expressions specified by this field, but it + may choose a node that violates one or more + of the expressions. The node that is most + preferred is the one with the greatest sum + of weights, i.e. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements + specified by this field are not met at scheduling + time, the pod will not be scheduled onto the + node. If the anti-affinity requirements specified + by this field cease to be met at some point + during pod execution (e.g. due to a pod label + update), the system may or may not try to + eventually evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates + whether a service account token should be automatically + mounted. + type: boolean + containers: + description: List of containers belonging to the pod. + Containers cannot currently be added or removed. There + must be at least one container in a Pod. Cannot be + updated. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + dnsConfig: + description: Specifies the DNS parameters of a pod. + Parameters specified here will be merged to the generated + DNS configuration based on DNSPolicy. + properties: + nameservers: + description: A list of DNS name server IP addresses. + This will be appended to the base nameservers + generated from DNSPolicy. Duplicated nameservers + will be removed. + items: + type: string + type: array + options: + description: A list of DNS resolver options. This + will be merged with the base options generated + from DNSPolicy. Duplicated entries will be removed. + Resolution options given in Options will override + those that appear in the base DNSPolicy. + items: + description: PodDNSConfigOption defines DNS resolver + options of a pod. + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + description: A list of DNS search domains for host-name + lookup. This will be appended to the base search + paths generated from DNSPolicy. Duplicated search + paths will be removed. + items: + type: string + type: array + type: object + dnsPolicy: + description: Set DNS policy for the pod. Defaults to + "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', + 'ClusterFirst', 'Default' or 'None'. DNS parameters + given in DNSConfig will be merged with the policy + selected with DNSPolicy. To have DNS options set along + with hostNetwork, you have to specify DNS policy explicitly + to 'ClusterFirstWithHostNet'. + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information + about services should be injected into pod''s environment + variables, matching the syntax of Docker links. Optional: + Defaults to true.' + type: boolean + ephemeralContainers: + description: List of ephemeral containers run in this + pod. Ephemeral containers may be run in an existing + pod to perform user-initiated actions such as debugging. + This list cannot be specified when creating a pod, + and it cannot be modified by updating the pod spec. + In order to add an ephemeral container to an existing + pod, use the pod's ephemeralcontainers subresource. + items: + description: An EphemeralContainer is a temporary + container that you may add to an existing Pod for + user-initiated activities such as debugging. Ephemeral + containers have no resource or scheduling guarantees, + and they will not be restarted when they exit or + when a Pod is removed or restarted. The kubelet + may evict a Pod if an ephemeral container causes + the Pod to exceed its resource allocation. + properties: + args: + description: 'Arguments to the entrypoint. The + image''s CMD is used if this is not provided. + Variable references $(VAR_NAME) are expanded + using the container''s environment. If a variable + cannot be resolved, the reference in the input + string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will + produce the string literal "$(VAR_NAME)".' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The image''s ENTRYPOINT is used if + this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Lifecycle is not allowed for ephemeral + containers. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the ephemeral container specified + as a DNS_LABEL. This name must be unique among + all containers, init containers and ephemeral + containers. + type: string + ports: + description: Ports are not allowed for ephemeral + containers. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: Resources are not allowed for ephemeral + containers. Ephemeral containers use spare resources + already allocated to the pod. + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'Optional: SecurityContext defines + the security options the ephemeral container + should be run with. If set, the fields of SecurityContext + override the equivalent fields of PodSecurityContext.' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + targetContainerName: + description: "If set, the name of the container + from PodSpec that this ephemeral container targets. + The ephemeral container will be run in the namespaces + (IPC, PID, etc) of this container. If not set + then the ephemeral container uses the namespaces + configured in the Pod spec. \n The container + runtime must implement support for this feature." + type: string + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Subpath mounts are not allowed for + ephemeral containers. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + hostAliases: + description: HostAliases is an optional list of hosts + and IPs that will be injected into the pod's hosts + file if specified. This is only valid for non-hostNetwork + pods. + items: + description: HostAlias holds the mapping between IP + and hostnames that will be injected as an entry + in the pod's hosts file. + properties: + hostnames: + description: Hostnames for the above IP address. + items: + type: string + type: array + ip: + description: IP address of the host file entry. + type: string + type: object + type: array + hostIPC: + description: 'Use the host''s ipc namespace. Optional: + Default to false.' + type: boolean + hostNetwork: + description: Host networking requested for this pod. + Use the host's network namespace. If this option is + set, the ports that will be used must be specified. + Default to false. + type: boolean + hostPID: + description: 'Use the host''s pid namespace. Optional: + Default to false.' + type: boolean + hostUsers: + description: 'Use the host''s user namespace. Optional: + Default to true. If set to true or not present, the + pod will be run in the host user namespace, useful + for when the pod needs a feature only available to + the host user namespace, such as loading a kernel + module with CAP_SYS_MODULE. When set to false, a new + userns is created for the pod.' + type: boolean + hostname: + description: Specifies the hostname of the Pod If not + specified, the pod's hostname will be set to a system-defined + value. + type: string + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of + references to secrets in the same namespace to use + for pulling any of the images used by this PodSpec. + If specified, these secrets will be passed to individual + puller implementations for them to use. More info: + https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + items: + description: LocalObjectReference contains enough + information to let you locate the referenced object + inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + initContainers: + description: List of initialization containers belonging + to the pod. Init containers are executed in order + prior to containers being started. If any init container + fails, the pod is considered to have failed and is + handled according to its restartPolicy. The name for + an init container or normal container must be unique + among all containers. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + nodeName: + description: NodeName is a request to schedule this + pod onto a specific node. If it is non-empty, the + scheduler simply schedules this pod onto that node, + assuming that it fits resource requirements. + type: string + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector which must + be true for the pod to fit on a node. Selector which + must match a node''s labels for the pod to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + x-kubernetes-map-type: atomic + os: + description: "Specifies the OS of the containers in + the pod. Some pod and container fields are restricted + if this is set. \n If the OS field is set to linux, + the following fields must be unset: -securityContext.windowsOptions + \n If the OS field is set to windows, following fields + must be unset: - spec.hostPID - spec.hostIPC - spec.hostUsers + - spec.securityContext.seLinuxOptions - spec.securityContext." + properties: + name: + description: 'Name is the name of the operating + system. The currently supported values are linux + and windows. Additional value may be defined in + future and can be one of: https://github.com/opencontainers/runtime-spec/blob/master/config.md#platform-specific-configuration + Clients should expect to handle additional values + and treat unrecognized values in this field as + os: null' + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Overhead represents the resource overhead + associated with running a pod for a given RuntimeClass. + This field will be autopopulated at admission time + by the RuntimeClass admission controller. If the RuntimeClass + admission controller is enabled, overhead must not + be set in Pod create requests. The RuntimeClass admission + controller will reject Pod create requests which have + the overhead already set. + type: object + preemptionPolicy: + description: PreemptionPolicy is the Policy for preempting + pods with lower priority. One of Never, PreemptLowerPriority. + Defaults to PreemptLowerPriority if unset. + type: string + priority: + description: The priority value. Various system components + use this field to find the priority of the pod. When + Priority Admission Controller is enabled, it prevents + users from setting this field. The admission controller + populates this field from PriorityClassName. The higher + the value, the higher the priority. + format: int32 + type: integer + priorityClassName: + description: If specified, indicates the pod's priority. + "system-node-critical" and "system-cluster-critical" + are two special keywords which indicate the highest + priorities with the former being the highest priority. + Any other name must be defined by creating a PriorityClass + object with that name. If not specified, the pod priority + will be default or zero if there is no default. + type: string + readinessGates: + description: 'If specified, all readiness gates will + be evaluated for pod readiness. A pod is ready when + all its containers are ready AND all conditions specified + in the readiness gates have status equal to "True" + More info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates' + items: + description: PodReadinessGate contains the reference + to a pod condition + properties: + conditionType: + description: ConditionType refers to a condition + in the pod's condition list with matching type. + type: string + required: + - conditionType + type: object + type: array + resourceClaims: + description: "ResourceClaims defines which ResourceClaims + must be allocated and reserved before the Pod is allowed + to start. The resources will be made available to + those containers which consume them by name. \n This + is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable." + items: + description: PodResourceClaim references exactly one + ResourceClaim through a ClaimSource. It adds a name + to it that uniquely identifies the ResourceClaim + inside the Pod. Containers that need access to the + ResourceClaim reference it with this name. + properties: + name: + description: Name uniquely identifies this resource + claim inside the pod. This must be a DNS_LABEL. + type: string + source: + description: Source describes where to find the + ResourceClaim. + properties: + resourceClaimName: + description: ResourceClaimName is the name + of a ResourceClaim object in the same namespace + as this pod. + type: string + resourceClaimTemplateName: + description: "ResourceClaimTemplateName is + the name of a ResourceClaimTemplate object + in the same namespace as this pod. \n The + template will be used to create a new ResourceClaim, + which will be bound to this pod. When this + pod is deleted, the ResourceClaim will also + be deleted. The name of the ResourceClaim + will be -, where + is the PodResourceClaim.Name." + type: string + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restartPolicy: + description: 'Restart policy for all containers within + the pod. One of Always, OnFailure, Never. In some + contexts, only a subset of those values may be permitted. + Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' + type: string + runtimeClassName: + description: 'RuntimeClassName refers to a RuntimeClass + object in the node.k8s.io group, which should be used + to run this pod. If no RuntimeClass resource matches + the named class, the pod will not be run. If unset + or empty, the "legacy" RuntimeClass will be used, + which is an implicit class with an empty definition + that uses the default runtime handler. More info: + https://git.k8s.' + type: string + schedulerName: + description: If specified, the pod will be dispatched + by specified scheduler. If not specified, the pod + will be dispatched by default scheduler. + type: string + schedulingGates: + description: "SchedulingGates is an opaque list of values + that if specified will block scheduling the pod. If + schedulingGates is not empty, the pod will stay in + the SchedulingGated state and the scheduler will not + attempt to schedule the pod. \n SchedulingGates can + only be set at pod creation time, and be removed only + afterwards. \n This is a beta feature enabled by the + PodSchedulingReadiness feature gate." + items: + description: PodSchedulingGate is associated to a + Pod to guard its scheduling. + properties: + name: + description: Name of the scheduling gate. Each + scheduling gate must have a unique name field. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + description: 'SecurityContext holds pod-level security + attributes and common container settings. Optional: + Defaults to empty. See type description for default + values of each field.' + properties: + fsGroup: + description: "A special supplemental group that + applies to all containers in a pod. Some volume + types allow the Kubelet to change the ownership + of that volume to be owned by the pod: \n 1. The + owning GID will be the FSGroup 2. The setgid bit + is set (new files created in the volume will be + owned by FSGroup) 3." + format: int64 + type: integer + fsGroupChangePolicy: + description: 'fsGroupChangePolicy defines behavior + of changing ownership and permission of the volume + before being exposed inside Pod. This field will + only apply to volume types which support fsGroup + based ownership(and permissions). It will have + no effect on ephemeral volume types such as: secret, + configmaps and emptydir. Valid values are "OnRootMismatch" + and "Always". If not specified, "Always" is used.' + type: string + runAsGroup: + description: The GID to run the entrypoint of the + container process. Uses runtime default if unset. + May also be set in SecurityContext. If set in + both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run + as a non-root user. If true, the Kubelet will + validate the image at runtime to ensure that it + does not run as UID 0 (root) and fail to start + the container if it does. If unset or false, no + such validation will be performed. May also be + set in SecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the + container process. Defaults to user specified + in image metadata if unspecified. May also be + set in SecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence for that container. + Note that this field cannot be set when spec.os.name + is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to + all containers. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in SecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + properties: + level: + description: Level is SELinux level label that + applies to the container. + type: string + role: + description: Role is a SELinux role label that + applies to the container. + type: string + type: + description: Type is a SELinux type label that + applies to the container. + type: string + user: + description: User is a SELinux user label that + applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. Note that this field cannot be set + when spec.os.name is windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node should be used. + The profile must be preconfigured on the node + to work. Must be a descending path, relative + to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp + profile will be applied. Valid options are: + \n Localhost - a profile defined in a file + on the node should be used. RuntimeDefault + - the container runtime default profile should + be used. Unconfined - no profile should be + applied." + type: string + required: + - type + type: object + supplementalGroups: + description: A list of groups applied to the first + process run in each container, in addition to + the container's primary GID, the fsGroup (if specified), + and group memberships defined in the container + image for the uid of the container process. If + unspecified, no additional groups are added to + any container. + items: + format: int64 + type: integer + type: array + sysctls: + description: Sysctls hold a list of namespaced sysctls + used for the pod. Pods with unsupported sysctls + (by the container runtime) might fail to launch. + Note that this field cannot be set when spec.os.name + is windows. + items: + description: Sysctl defines a kernel parameter + to be set + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + description: The Windows specific settings applied + to all containers. If unspecified, the options + within a container's SecurityContext will be used. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the + GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + hostProcess: + description: HostProcess determines if a container + should be run as a 'Host Process' container. + This field is alpha-level and will only be + honored by components that enable the WindowsHostProcessContainers + feature flag. Setting this field without the + feature flag will result in errors when validating + the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to run + the entrypoint of the container process. Defaults + to the user specified in image metadata if + unspecified. May also be set in PodSecurityContext. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. + type: string + type: object + type: object + serviceAccount: + description: 'DeprecatedServiceAccount is a depreciated + alias for ServiceAccountName. Deprecated: Use serviceAccountName + instead.' + type: string + serviceAccountName: + description: 'ServiceAccountName is the name of the + ServiceAccount to use to run this pod. More info: + https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + setHostnameAsFQDN: + description: If true the pod's hostname will be configured + as the pod's FQDN, rather than the leaf name (the + default). In Linux containers, this means setting + the FQDN in the hostname field of the kernel (the + nodename field of struct utsname). + type: boolean + shareProcessNamespace: + description: 'Share a single process namespace between + all of the containers in a pod. When this is set containers + will be able to view and signal processes from other + containers in the same pod, and the first process + in each container will not be assigned PID 1. HostPID + and ShareProcessNamespace cannot both be set. Optional: + Default to false.' + type: boolean + subdomain: + description: If specified, the fully qualified Pod hostname + will be "...svc.". If not specified, the pod will not have + a domainname at all. + type: string + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully. May be decreased in delete + request. Value must be non-negative integer. The value + zero indicates stop immediately via the kill signal + (no opportunity to shut down). If this value is nil, + the default grace period will be used instead. + format: int64 + type: integer + tolerations: + description: If specified, the pod's tolerations. + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + effect: + description: Effect indicates the taint effect + to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, + PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; + this combination means to match all values and + all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and + Equal. Defaults to Equal. Exists is equivalent + to wildcard for value, so that a pod can tolerate + all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the + period of time the toleration (which must be + of effect NoExecute, otherwise this field is + ignored) tolerates the taint. By default, it + is not set, which means tolerate the taint forever + (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value + should be empty, otherwise just a regular string. + type: string + type: object + type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how + a group of pods ought to spread across topology domains. + Scheduler will schedule pods in a way which abides + by the constraints. All topologySpreadConstraints + are ANDed. + items: + description: TopologySpreadConstraint specifies how + to spread matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are + counted to determine the number of pods in their + corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of + label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, a + key, and an operator that relates the + key and values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + description: MatchLabelKeys is a set of pod label + keys to select the pods over which spreading + will be calculated. The keys are used to lookup + values from the incoming pod labels, those key-value + labels are ANDed with labelSelector to select + the group of existing pods over which spreading + will be calculated for the incoming pod. The + same key is forbidden to exist in both MatchLabelKeys + and LabelSelector. + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + description: MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between + the number of matching pods in the target topology + and the global minimum. The global minimum is + the minimum number of matching pods in an eligible + domain or zero if the number of eligible domains + is less than MinDomains. + format: int32 + type: integer + minDomains: + description: MinDomains indicates a minimum number + of eligible domains. When the number of eligible + domains with matching topology keys is less + than minDomains, Pod Topology Spread treats + "global minimum" as 0, and then the calculation + of Skew is performed. And when the number of + eligible domains with matching topology keys + equals or greater than minDomains, this value + has no effect on scheduling. + format: int32 + type: integer + nodeAffinityPolicy: + description: "NodeAffinityPolicy indicates how + we will treat Pod's nodeAffinity/nodeSelector + when calculating pod topology spread skew. Options + are: - Honor: only nodes matching nodeAffinity/nodeSelector + are included in the calculations. - Ignore: + nodeAffinity/nodeSelector are ignored. All nodes + are included in the calculations. \n If this + value is nil, the behavior is equivalent to + the Honor policy." + type: string + nodeTaintsPolicy: + description: "NodeTaintsPolicy indicates how we + will treat node taints when calculating pod + topology spread skew. Options are: - Honor: + nodes without taints, along with tainted nodes + for which the incoming pod has a toleration, + are included. - Ignore: node taints are ignored. + All nodes are included. \n If this value is + nil, the behavior is equivalent to the Ignore + policy." + type: string + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", + and try to put balanced number of pods into + each bucket. We define a domain as a particular + instance of a topology. + type: string + whenUnsatisfiable: + description: WhenUnsatisfiable indicates how to + deal with a pod if it doesn't satisfy the spread + constraint. - DoNotSchedule (default) tells + the scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to topologies + that would help reduce the skew. + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + description: 'List of volumes that can be mounted by + containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + items: + description: Volume represents a named volume in a + pod that may be accessed by any container in the + pod. + properties: + awsElasticBlockStore: + description: 'awsElasticBlockStore represents + an AWS Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'readOnly value true will force + the readOnly setting in VolumeMounts. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'volumeID is unique ID of the + persistent disk resource in AWS (Amazon + EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: azureDisk represents an Azure Data + Disk mount on the host and bind mount to the + pod. + properties: + cachingMode: + description: 'cachingMode is the Host Caching + mode: None, Read Only, Read Write.' + type: string + diskName: + description: diskName is the Name of the data + disk in the blob storage + type: string + diskURI: + description: diskURI is the URI of data disk + in the blob storage + type: string + fsType: + description: fsType is Filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + kind: + description: 'kind expected values are Shared: + multiple blob disks per storage account Dedicated: + single blob disk per storage account Managed: + azure managed data disk (only in managed + availability set). defaults to shared' + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: azureFile represents an Azure File + Service mount on the host and bind mount to + the pod. + properties: + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretName: + description: secretName is the name of secret + that contains Azure Storage Account Name + and Key + type: string + shareName: + description: shareName is the azure share + Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: cephFS represents a Ceph FS mount + on the host that shares a pod's lifetime + properties: + monitors: + description: 'monitors is Required: Monitors + is a collection of Ceph monitors More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'path is Optional: Used as the + mounted root, rather than the full Ceph + tree, default is /' + type: string + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'secretFile is Optional: SecretFile + is the path to key ring for User, default + is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'secretRef is Optional: SecretRef + is reference to the authentication secret + for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is optional: User is the + rados user name, default is admin More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'cinder represents a cinder volume + attached and mounted on kubelets host machine. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'secretRef is optional: points + to a secret object containing parameters + used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + description: 'volumeID used to identify the + volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: configMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced + ConfigMap will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional specify whether the + ConfigMap or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + description: csi (Container Storage Interface) + represents ephemeral storage that is handled + by certain external CSI drivers (Beta feature). + properties: + driver: + description: driver is the name of the CSI + driver that handles this volume. Consult + with your admin for the correct name as + registered in the cluster. + type: string + fsType: + description: fsType to mount. Ex. "ext4", + "xfs", "ntfs". If not provided, the empty + value is passed to the associated CSI driver + which will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: nodePublishSecretRef is a reference + to the secret object containing sensitive + information to pass to the CSI driver to + complete the CSI NodePublishVolume and NodeUnpublishVolume + calls. This field is optional, and may + be empty if no secret is required. If the + secret object contains more than one secret, + all secret references are passed. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + description: readOnly specifies a read-only + configuration for the volume. Defaults to + false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: volumeAttributes stores driver-specific + properties that are passed to the CSI driver. + Consult your driver's documentation for + supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: downwardAPI represents downward API + about the pod that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits to use on + created files by default. Must be a Optional: + mode bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: Items is a list of downward API + volume file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects a field + of the pod: only annotations, labels, + name and namespace are supported.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits used + to set permissions on this file, must + be an octal value between 0000 and + 0777 or a decimal value between 0 + and 511. YAML accepts both octal and + decimal values, JSON requires decimal + values for mode bits. If not specified, + the volume defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path is the + relative path name of the file to + be created. Must not be absolute or + contain the ''..'' path. Must be utf-8 + encoded. The first item of the relative + path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + requests.cpu and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'emptyDir represents a temporary + directory that shares a pod''s lifetime. More + info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'medium represents what type + of storage medium should back this directory. + The default is "" which means to use the + node''s default medium. Must be an empty + string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount + of local storage required for this EmptyDir + volume. The size limit is also applicable + for memory medium. The maximum usage on + memory medium EmptyDir would be the minimum + value between the SizeLimit specified here + and the sum of memory limits of all containers + in a pod. The default is nil which means + that the limit is undefined. More info: + https://kubernetes.' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + description: ephemeral represents a volume that + is handled by a cluster storage driver. The + volume's lifecycle is tied to the pod that defines + it - it will be created before the pod starts, + and deleted when the pod is removed. + properties: + volumeClaimTemplate: + description: Will be used to create a stand-alone + PVC to provision the volume. The pod in + which this EphemeralVolumeSource is embedded + will be the owner of the PVC, i.e. the PVC + will be deleted together with the pod. The + name of the PVC will be `-` where `` is the name + from the `PodSpec.Volumes` array entry. + properties: + metadata: + description: May contain labels and annotations + that will be copied into the PVC when + creating it. No other fields are allowed + and will be rejected during validation. + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: The specification for the + PersistentVolumeClaim. The entire content + is copied unchanged into the PVC that + gets created from this template. The + same fields as in a PersistentVolumeClaim + are also valid here. + properties: + accessModes: + description: 'accessModes contains + the desired access modes the volume + should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can + be used to specify either: * An + existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) + If the provisioner or an external + controller can support the specified + data source, it will create a new + volume based on the contents of + the specified data source.' + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: dataSourceRef specifies + the object from which to populate + the volume with data, if a non-empty + volume is desired. This may be any + object from a non-empty API group + (non core object) or a PersistentVolumeClaim + object. When this field is specified, + volume binding will only succeed + if the type of the specified object + matches some installed volume populator + or dynamic provisioner. + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + namespace: + description: Namespace is the + namespace of resource being + referenced Note that when a + namespace is specified, a gateway.networking.k8s.io/ReferenceGrant + object is required in the referent + namespace to allow that namespace's + owner to accept the reference. + See the ReferenceGrant documentation + for details. (Alpha) This field + requires the CrossNamespaceVolumeDataSource + feature gate to be enabled. + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents + the minimum resources the volume + should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed + to specify resource requirements + that are lower than previous value + but must still be higher than capacity + recorded in the status field of + the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + claims: + description: "Claims lists the + names of resources, defined + in spec.resourceClaims, that + are used by this container. + \n This is an alpha field and + requires enabling the DynamicResourceAllocation + feature gate. \n This field + is immutable. It can only be + set for containers." + items: + description: ResourceClaim references + one entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match + the name of one entry + in pod.spec.resourceClaims + of the Pod where this + field is used. It makes + that resource available + inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes + the maximum amount of compute + resources allowed. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes + the minimum amount of compute + resources required. If Requests + is omitted for a container, + it defaults to Limits if that + is explicitly specified, otherwise + to an implementation-defined + value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query + over volumes to consider for binding. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + description: 'storageClassName is + the name of the StorageClass required + by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what + type of volume is required by the + claim. Value of Filesystem is implied + when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding + reference to the PersistentVolume + backing this claim. + type: string + type: object + required: + - spec + type: object + type: object + fc: + description: fc represents a Fibre Channel resource + that is attached to a kubelet's host machine + and then exposed to the pod. + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. TODO: how do we prevent + errors in the filesystem from compromising + the machine' + type: string + lun: + description: 'lun is Optional: FC target lun + number' + format: int32 + type: integer + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'targetWWNs is Optional: FC target + worldwide names (WWNs)' + items: + type: string + type: array + wwids: + description: 'wwids Optional: FC volume world + wide identifiers (wwids) Either wwids or + combination of targetWWNs and lun must be + set, but not both simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: flexVolume represents a generic volume + resource that is provisioned/attached using + an exec based plugin. + properties: + driver: + description: driver is the name of the driver + to use for this volume. + type: string + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". The default filesystem depends + on FlexVolume script. + type: string + options: + additionalProperties: + type: string + description: 'options is Optional: this field + holds extra command options if any.' + type: object + readOnly: + description: 'readOnly is Optional: defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'secretRef is Optional: secretRef + is reference to the secret object containing + sensitive information to pass to the plugin + scripts. This may be empty if no secret + object is specified. If the secret object + contains more than one secret, all secrets + are passed to the plugin scripts.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + description: flocker represents a Flocker volume + attached to a kubelet's host machine. This depends + on the Flocker control service being running + properties: + datasetName: + description: datasetName is Name of the dataset + stored as metadata -> name on the dataset + for Flocker should be considered as deprecated + type: string + datasetUUID: + description: datasetUUID is the UUID of the + dataset. This is unique identifier of a + Flocker dataset + type: string + type: object + gcePersistentDisk: + description: 'gcePersistentDisk represents a GCE + Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'fsType is filesystem type of + the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'pdName is unique name of the + PD resource in GCE. Used to identify the + disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'gitRepo represents a git repository + at a particular revision. DEPRECATED: GitRepo + is deprecated. To provision a container with + a git repo, mount an EmptyDir into an InitContainer + that clones the repo using git, then mount the + EmptyDir into the Pod''s container.' + properties: + directory: + description: directory is the target directory + name. Must not contain or start with '..'. If + '.' is supplied, the volume directory will + be the git repository. Otherwise, if specified, + the volume will contain the git repository + in the subdirectory with the given name. + type: string + repository: + description: repository is the URL + type: string + revision: + description: revision is the commit hash for + the specified revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'glusterfs represents a Glusterfs + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'endpoints is the endpoint name + that details Glusterfs topology. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'path is the Glusterfs volume + path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'readOnly here will force the + Glusterfs volume to be mounted with read-only + permissions. Defaults to false. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'hostPath represents a pre-existing + file or directory on the host machine that is + directly exposed to the container. This is generally + used for system agents or other privileged things + that are allowed to see the host machine. Most + containers will NOT need this. More info: https://kubernetes.' + properties: + path: + description: 'path of the directory on the + host. If the path is a symlink, it will + follow the link to the real path. More info: + https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'type for HostPath Volume Defaults + to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'iscsi represents an ISCSI Disk resource + that is attached to a kubelet''s host machine + and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: chapAuthDiscovery defines whether + support iSCSI Discovery CHAP authentication + type: boolean + chapAuthSession: + description: chapAuthSession defines whether + support iSCSI Session CHAP authentication + type: boolean + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + initiatorName: + description: initiatorName is the custom iSCSI + Initiator Name. If initiatorName is specified + with iscsiInterface simultaneously, new + iSCSI interface : will be created for the connection. + type: string + iqn: + description: iqn is the target iSCSI Qualified + Name. + type: string + iscsiInterface: + description: iscsiInterface is the interface + Name that uses an iSCSI transport. Defaults + to 'default' (tcp). + type: string + lun: + description: lun represents iSCSI Target Lun + number. + format: int32 + type: integer + portals: + description: portals is the iSCSI Target Portal + List. The portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. + type: boolean + secretRef: + description: secretRef is the CHAP Secret + for iSCSI target and initiator authentication + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + description: targetPortal is iSCSI Target + Portal. The Portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'name of the volume. Must be a DNS_LABEL + and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'nfs represents an NFS mount on the + host that shares a pod''s lifetime More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'path that is exported by the + NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'readOnly here will force the + NFS export to be mounted with read-only + permissions. Defaults to false. More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'server is the hostname or IP + address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'persistentVolumeClaimVolumeSource + represents a reference to a PersistentVolumeClaim + in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'claimName is the name of a PersistentVolumeClaim + in the same namespace as the pod using this + volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: readOnly Will force the ReadOnly + setting in VolumeMounts. Default false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: photonPersistentDisk represents a + PhotonController persistent disk attached and + mounted on kubelets host machine + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + pdID: + description: pdID is the ID that identifies + Photon Controller persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: portworxVolume represents a portworx + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fSType represents the filesystem + type to mount Must be a filesystem type + supported by the host operating system. + Ex. "ext4", "xfs". Implicitly inferred to + be "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + volumeID: + description: volumeID uniquely identifies + a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: projected items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits + used to set permissions on created files + by default. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. Directories within the path are + not affected by this setting. + format: int32 + type: integer + sources: + description: sources is the list of volume + projections + items: + description: Projection that may be projected + along with other supported volume types + properties: + configMap: + description: configMap information about + the configMap data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced ConfigMap + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional specify whether + the ConfigMap or its keys must + be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information + about the downwardAPI data to project + properties: + items: + description: Items is a list of + DownwardAPIVolume file + items: + description: DownwardAPIVolumeFile + represents information to create + the file containing the pod + field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only + annotations, labels, name + and namespace are supported.' + properties: + apiVersion: + description: Version of + the schema the FieldPath + is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the + field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode + bits used to set permissions + on this file, must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path + is the relative path name + of the file to be created. + Must not be absolute or + contain the ''..'' path. + Must be utf-8 encoded. The + first item of the relative + path must not start with + ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) are + currently supported.' + properties: + containerName: + description: 'Container + name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies + the output format of + the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: + resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about + the secret data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced Secret + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional field specify + whether the Secret or its key + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is + information about the serviceAccountToken + data to project + properties: + audience: + description: audience is the intended + audience of the token. A recipient + of a token must identify itself + with an identifier specified in + the audience of the token, and + otherwise should reject the token. + The audience defaults to the identifier + of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is + the requested duration of validity + of the service account token. + As the token approaches expiration, + the kubelet volume plugin will + proactively rotate the service + account token. The kubelet will + start trying to rotate the token + if the token is older than 80 + percent of its time to live or + if the token is older than 24 + hours.Defaults to 1 hour and must + be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative + to the mount point of the file + to project the token into. + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + description: quobyte represents a Quobyte mount + on the host that shares a pod's lifetime + properties: + group: + description: group to map volume access to + Default is no group + type: string + readOnly: + description: readOnly here will force the + Quobyte volume to be mounted with read-only + permissions. Defaults to false. + type: boolean + registry: + description: registry represents a single + or multiple Quobyte Registry services specified + as a string as host:port pair (multiple + entries are separated with commas) which + acts as the central registry for volumes + type: string + tenant: + description: tenant owning the given Quobyte + volume in the Backend Used with dynamically + provisioned Quobyte volumes, value is set + by the plugin + type: string + user: + description: user to map volume access to + Defaults to serivceaccount user + type: string + volume: + description: volume is a string that references + an already created Quobyte volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'rbd represents a Rados Block Device + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + image: + description: 'image is the rados image name. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'keyring is the path to key ring + for RBDUser. Default is /etc/ceph/keyring. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'monitors is a collection of + Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'pool is the rados pool name. + Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'secretRef is name of the authentication + secret for RBDUser. If provided overrides + keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is the rados user name. + Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: scaleIO represents a ScaleIO persistent + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: gateway is the host address of + the ScaleIO API Gateway. + type: string + protectionDomain: + description: protectionDomain is the name + of the ScaleIO Protection Domain for the + configured storage. + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef references to the secret + for ScaleIO user and other sensitive information. + If this is not provided, Login operation + will fail. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + description: sslEnabled Flag enable/disable + SSL communication with Gateway, default + false + type: boolean + storageMode: + description: storageMode indicates whether + the storage for a volume should be ThickProvisioned + or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: storagePool is the ScaleIO Storage + Pool associated with the protection domain. + type: string + system: + description: system is the name of the storage + system as configured in ScaleIO. + type: string + volumeName: + description: volumeName is the name of a volume + already created in the ScaleIO system that + is associated with this volume source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'secret represents a secret that + should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value + pair in the Data field of the referenced + Secret will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether + the Secret or its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the + secret in the pod''s namespace to use. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: storageOS represents a StorageOS + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef specifies the secret + to use for obtaining the StorageOS API credentials. If + not specified, default values will be attempted. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + description: volumeName is the human-readable + name of the StorageOS volume. Volume names + are only unique within a namespace. + type: string + volumeNamespace: + description: volumeNamespace specifies the + scope of the volume within StorageOS. If + no namespace is specified then the Pod's + namespace will be used. This allows the + Kubernetes name scoping to be mirrored within + StorageOS for tighter integration. Set VolumeName + to any name to override the default behaviour. + Set to "default" if you are not using namespaces + within StorageOS. + type: string + type: object + vsphereVolume: + description: vsphereVolume represents a vSphere + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fsType is filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + storagePolicyID: + description: storagePolicyID is the storage + Policy Based Management (SPBM) profile ID + associated with the StoragePolicyName. + type: string + storagePolicyName: + description: storagePolicyName is the storage + Policy Based Management (SPBM) profile name. + type: string + volumePath: + description: volumePath is the path that identifies + vSphere volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + description: 'A map of PaddleReplicaType (type) to ReplicaSpec (value). + Specifies the Paddle cluster configuration. For example, { "Master": + PaddleReplicaSpec, "Worker": PaddleReplicaSpec, }' + type: object + runPolicy: + description: RunPolicy encapsulates various runtime policies of the + distributed training job, for example how to clean up resources + and how long the job can stay active. + properties: + activeDeadlineSeconds: + description: Specifies the duration in seconds relative to the + startTime that the job may be active before the system tries + to terminate it; value must be positive integer. + format: int64 + type: integer + backoffLimit: + description: Optional number of retries before marking this job + failed. + format: int32 + type: integer + cleanPodPolicy: + description: CleanPodPolicy defines the policy to kill pods after + the job completes. Default to None. + type: string + schedulingPolicy: + description: SchedulingPolicy defines the policy related to scheduling, + e.g. gang-scheduling + properties: + minAvailable: + format: int32 + type: integer + minResources: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + priorityClass: + type: string + queue: + type: string + scheduleTimeoutSeconds: + format: int32 + type: integer + type: object + suspend: + default: false + description: suspend specifies whether the Job controller should + create Pods or not. If a Job is created with suspend set to + true, no Pods are created by the Job controller. If a Job is + suspended after creation (i.e. the flag goes from false to true), + the Job controller will delete all active Pods and PodGroups + associated with this Job. Users must design their workload to + gracefully handle this. + type: boolean + ttlSecondsAfterFinished: + description: TTLSecondsAfterFinished is the TTL to clean up jobs. + It may take extra ReconcilePeriod seconds for the cleanup, since + reconcile gets called periodically. Default to infinite. + format: int32 + type: integer + type: object + required: + - paddleReplicaSpecs + type: object + status: + description: Most recently observed status of the PaddleJob. Read-only + (modified by the system). + properties: + completionTime: + description: Represents time when the job was completed. It is not + guaranteed to be set in happens-before order across separate operations. + It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + conditions: + description: Conditions is an array of current observed job conditions. + items: + description: JobCondition describes the state of the job at a certain + point. + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + lastUpdateTime: + description: The last time this condition was updated. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of job condition. + type: string + required: + - status + - type + type: object + type: array + lastReconcileTime: + description: Represents last time when the job was reconciled. It + is not guaranteed to be set in happens-before order across separate + operations. It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + replicaStatuses: + additionalProperties: + description: ReplicaStatus represents the current observed state + of the replica. + properties: + active: + description: The number of actively running pods. + format: int32 + type: integer + failed: + description: The number of pods which reached phase Failed. + format: int32 + type: integer + labelSelector: + description: 'Deprecated: Use Selector instead' + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + selector: + description: A Selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. + An empty Selector matches all objects. A null Selector matches + no objects. + type: string + succeeded: + description: The number of pods which reached phase Succeeded. + format: int32 + type: integer + type: object + description: ReplicaStatuses is map of ReplicaType and ReplicaStatus, + specifies the status of each replica. + type: object + startTime: + description: Represents time when the job was acknowledged by the + job controller. It is not guaranteed to be set in happens-before + order across separate operations. It is represented in RFC3339 form + and is in UTC. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + scale: + labelSelectorPath: .status.replicaStatuses.Worker.selector + specReplicasPath: .spec.paddleReplicaSpecs.Worker.replicas + statusReplicasPath: .status.replicaStatuses.Worker.active + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/addressable: "true" + knative.dev/crd-install: "true" + kustomize.component: knative + name: parallels.flows.knative.dev +spec: + group: flows.knative.dev + names: + categories: + - all + - knative + - flows + kind: Parallel + plural: parallels + singular: parallel + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.address.url + name: URL + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: Parallel defines conditional branches that will be wired in series + through Channels and Subscriptions. + properties: + spec: + description: Spec defines the desired state of the Parallel. + properties: + branches: + description: Branches is the list of Filter/Subscribers pairs. + items: + properties: + delivery: + description: Delivery is the delivery specification for events + to the subscriber This includes things like retries, DLQ, + etc. + properties: + backoffDelay: + description: 'BackoffDelay is the delay before retrying. + More information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html + - https://en.wikipedia.org/wiki/ISO_8601 For linear policy, + backoff delay is backoffDelay*. For exponential + policy, backoff delay is backoffDelay*2^.' + type: string + backoffPolicy: + description: BackoffPolicy is the retry backoff policy (linear, + exponential). + type: string + deadLetterSink: + description: DeadLetterSink is the sink receiving event + that could not be sent to a destination. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the + object holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme + and non-empty host) pointing to the target or a relative + URI. Relative URIs will be resolved using the base + URI retrieved from Ref. + type: string + type: object + retry: + description: Retry is the minimum number of retries the + sender should attempt when sending an event before moving + it to the dead letter sink. + format: int32 + type: integer + type: object + x-kubernetes-preserve-unknown-fields: true + filter: + description: Filter is the expression guarding the branch + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme + and non-empty host) pointing to the target or a relative + URI. Relative URIs will be resolved using the base URI + retrieved from Ref. + type: string + type: object + reply: + description: Reply is a Reference to where the result of Subscriber + of this case gets sent to. If not specified, sent the result + to the Parallel Reply + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme + and non-empty host) pointing to the target or a relative + URI. Relative URIs will be resolved using the base URI + retrieved from Ref. + type: string + type: object + subscriber: + description: Subscriber receiving the event when the filter + passes + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme + and non-empty host) pointing to the target or a relative + URI. Relative URIs will be resolved using the base URI + retrieved from Ref. + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + channelTemplate: + description: ChannelTemplate specifies which Channel CRD to use. If + left unspecified, it is set to the default Channel CRD for the namespace + (or cluster, in case there are no defaults for the namespace). + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this + representation of an object. Servers should convert recognized + schemas to the latest internal value, and may reject unrecognized + values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: Spec defines the Spec to use for each channel created. + Passed in verbatim to the Channel CRD as Spec section. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + reply: + description: Reply is a Reference to where the result of a case Subscriber + gets sent to when the case does not have a Reply + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + type: object + status: + description: Status represents the current state of the Parallel. This + data may be out of date. + properties: + address: + properties: + url: + type: string + type: object + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + branchStatuses: + description: BranchStatuses is an array of corresponding to branch + statuses. Matches the Spec.Branches array in the order. + items: + properties: + filterChannelStatus: + description: FilterChannelStatus corresponds to the filter channel + status. + properties: + channel: + description: Channel is the reference to the underlying + channel. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead + of an entire object, this string should contain a + valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container + within a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container + that triggered the event) or if no container name + is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to + have some well-defined way of referencing a part of + an object.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this + reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + ready: + description: ReadyCondition indicates whether the Channel + is ready or not. + properties: + message: + description: A human readable message indicating details + about the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of + this type of condition. When this is not specified, + it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, + Unknown. + type: string + type: + description: Type of condition. + type: string + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + filterSubscriptionStatus: + description: FilterSubscriptionStatus corresponds to the filter + subscription status. + properties: + ready: + description: ReadyCondition indicates whether the Subscription + is ready or not. + properties: + message: + description: A human readable message indicating details + about the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of + this type of condition. When this is not specified, + it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, + Unknown. + type: string + type: + description: Type of condition. + type: string + type: object + subscription: + description: Subscription is the reference to the underlying + Subscription. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead + of an entire object, this string should contain a + valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container + within a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container + that triggered the event) or if no container name + is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to + have some well-defined way of referencing a part of + an object.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this + reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: object + subscriberSubscriptionStatus: + description: SubscriptionStatus corresponds to the subscriber + subscription status. + properties: + ready: + description: ReadyCondition indicates whether the Subscription + is ready or not. + properties: + message: + description: A human readable message indicating details + about the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of + this type of condition. When this is not specified, + it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, + Unknown. + type: string + type: + description: Type of condition. + type: string + type: object + subscription: + description: Subscription is the reference to the underlying + Subscription. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead + of an entire object, this string should contain a + valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container + within a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container + that triggered the event) or if no container name + is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to + have some well-defined way of referencing a part of + an object.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this + reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: object + type: object + type: array + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + type: object + type: array + ingressChannelStatus: + description: IngressChannelStatus corresponds to the ingress channel + status. + properties: + channel: + description: Channel is the reference to the underlying channel. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead + of an entire object, this string should contain a valid + JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part + of an object.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + ready: + description: ReadyCondition indicates whether the Channel is ready + or not. + properties: + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this + type of condition. When this is not specified, it defaults + to Error. + type: string + status: + description: Status of the condition, one of True, False, + Unknown. + type: string + type: + description: Type of condition. + type: string + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + istio: security + release: istio + name: peerauthentications.security.istio.io +spec: + group: security.istio.io + names: + categories: + - istio-io + - security-istio-io + kind: PeerAuthentication + listKind: PeerAuthenticationList + plural: peerauthentications + shortNames: + - pa + singular: peerauthentication + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Defines the mTLS mode used for peer authentication. + jsonPath: .spec.mtls.mode + name: Mode + type: string + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: PeerAuthentication defines how traffic will be tunneled (or + not) to the sidecar. + properties: + mtls: + description: Mutual TLS settings for workload. + properties: + mode: + description: Defines the mTLS mode used for peer authentication. + enum: + - UNSET + - DISABLE + - PERMISSIVE + - STRICT + type: string + type: object + portLevelMtls: + additionalProperties: + properties: + mode: + description: Defines the mTLS mode used for peer authentication. + enum: + - UNSET + - DISABLE + - PERMISSIVE + - STRICT + type: string + type: object + description: Port specific mutual TLS settings. + type: object + selector: + description: The selector determines the workloads to apply the ChannelAuthentication + on. + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + registry.knative.dev/eventTypes: | + [ + { "type": "dev.knative.sources.ping" } + ] + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/source: "true" + eventing.knative.dev/source: "true" + knative.dev/crd-install: "true" + kustomize.component: knative + name: pingsources.sources.knative.dev +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + service: + name: eventing-webhook + namespace: knative-eventing + conversionReviewVersions: + - v1 + - v1beta1 + group: sources.knative.dev + names: + categories: + - all + - knative + - sources + kind: PingSource + plural: pingsources + singular: pingsource + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.sinkUri + name: Sink + type: string + - jsonPath: .spec.schedule + name: Schedule + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1beta2 + schema: + openAPIV3Schema: + description: PingSource describes an event source with a fixed payload produced + on a specified cron schedule. + properties: + spec: + description: PingSourceSpec defines the desired state of the PingSource + (from the client). + properties: + ceOverrides: + description: CloudEventOverrides defines overrides to control the + output format and modifications of the event sent to the sink. + properties: + extensions: + additionalProperties: + type: string + description: Extensions specify what attribute are added or overridden + on the outbound event. Each `Extensions` key-value pair are + set on the event as an attribute extension independently. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + contentType: + description: ContentType is the media type of `data` or `dataBase64`. + Default is empty. + type: string + data: + description: Data is data used as the body of the event posted to + the sink. Default is empty. Mutually exclusive with `dataBase64`. + type: string + dataBase64: + description: DataBase64 is the base64-encoded string of the actual + event's body posted to the sink. Default is empty. Mutually exclusive + with `data`. + type: string + schedule: + description: Schedule is the cron schedule. Defaults to `* * * * *`. + type: string + sink: + description: Sink is a reference to an object that will resolve to + a uri to use as the sink. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + timezone: + description: 'Timezone modifies the actual time relative to the specified + timezone. Defaults to the system time zone. More general information + about time zones: https://www.iana.org/time-zones List of valid + timezone values: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones' + type: string + type: object + status: + description: PingSourceStatus defines the observed state of PingSource + (from the controller). + properties: + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + ceAttributes: + description: CloudEventAttributes are the specific attributes that + the Source uses as part of its CloudEvents. + items: + properties: + source: + description: Source is the CloudEvents source attribute. + type: string + type: + description: Type refers to the CloudEvent type attribute. + type: string + type: object + type: array + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + observedGeneration: + description: ObservedGeneration is the "Generation" of the Service + that was last processed by the controller. + format: int64 + type: integer + sinkUri: + description: SinkURI is the current active sink URI that has been + configured for the Source. + type: string + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .status.sinkUri + name: Sink + type: string + - jsonPath: .spec.schedule + name: Schedule + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: PingSource describes an event source with a fixed payload produced + on a specified cron schedule. + properties: + spec: + description: PingSourceSpec defines the desired state of the PingSource + (from the client). + properties: + ceOverrides: + description: CloudEventOverrides defines overrides to control the + output format and modifications of the event sent to the sink. + properties: + extensions: + additionalProperties: + type: string + description: Extensions specify what attribute are added or overridden + on the outbound event. Each `Extensions` key-value pair are + set on the event as an attribute extension independently. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + contentType: + description: ContentType is the media type of `data` or `dataBase64`. + Default is empty. + type: string + data: + description: Data is data used as the body of the event posted to + the sink. Default is empty. Mutually exclusive with `dataBase64`. + type: string + dataBase64: + description: DataBase64 is the base64-encoded string of the actual + event's body posted to the sink. Default is empty. Mutually exclusive + with `data`. + type: string + schedule: + description: Schedule is the cron schedule. Defaults to `* * * * *`. + type: string + sink: + description: Sink is a reference to an object that will resolve to + a uri to use as the sink. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + timezone: + description: 'Timezone modifies the actual time relative to the specified + timezone. Defaults to the system time zone. More general information + about time zones: https://www.iana.org/time-zones List of valid + timezone values: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones' + type: string + type: object + status: + description: PingSourceStatus defines the observed state of PingSource + (from the controller). + properties: + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + ceAttributes: + description: CloudEventAttributes are the specific attributes that + the Source uses as part of its CloudEvents. + items: + properties: + source: + description: Source is the CloudEvents source attribute. + type: string + type: + description: Type refers to the CloudEvent type attribute. + type: string + type: object + type: array + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + observedGeneration: + description: ObservedGeneration is the "Generation" of the Service + that was last processed by the controller. + format: int64 + type: integer + sinkUri: + description: SinkURI is the current active sink URI that has been + configured for the Source. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + knative.dev/crd-install: "true" + name: podautoscalers.autoscaling.internal.knative.dev +spec: + group: autoscaling.internal.knative.dev + names: + categories: + - knative-internal + - autoscaling + kind: PodAutoscaler + plural: podautoscalers + shortNames: + - kpa + - pa + singular: podautoscaler + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.desiredScale + name: DesiredScale + type: integer + - jsonPath: .status.actualScale + name: ActualScale + type: integer + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: 'PodAutoscaler is a Knative abstraction that encapsulates the + interface by which Knative components instantiate autoscalers. This definition + is an abstraction that may be backed by multiple definitions. For more + information, see the Knative Pluggability presentation: https://docs.google.com/presentation/d/19vW9HFZ6Puxt31biNZF3uLRejDmu82rxJIk1cWmxF7w/edit' + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec holds the desired state of the PodAutoscaler (from the + client). + properties: + containerConcurrency: + description: ContainerConcurrency specifies the maximum allowed in-flight + (concurrent) requests per container of the Revision. Defaults to + `0` which means unlimited concurrency. + format: int64 + type: integer + protocolType: + description: The application-layer protocol. Matches `ProtocolType` + inferred from the revision spec. + type: string + reachability: + description: Reachability specifies whether or not the `ScaleTargetRef` + can be reached (ie. has a route). Defaults to `ReachabilityUnknown` + type: string + scaleTargetRef: + description: ScaleTargetRef defines the /scale-able resource that + this PodAutoscaler is responsible for quickly right-sizing. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - protocolType + - scaleTargetRef + type: object + status: + description: Status communicates the observed state of the PodAutoscaler + (from the controller). + properties: + actualScale: + description: ActualScale shows the actual number of replicas for the + revision. + format: int32 + type: integer + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + desiredScale: + description: DesiredScale shows the current desired number of replicas + for the revision. + format: int32 + type: integer + metricsServiceName: + description: MetricsServiceName is the K8s Service name that provides + revision metrics. The service is managed by the PA object. + type: string + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + serviceName: + description: ServiceName is the K8s Service name that serves the revision, + scaled by this PA. The service is created and owned by the ServerlessService + object owned by this PA. + type: string + required: + - metricsServiceName + - serviceName + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.8.0 + creationTimestamp: null + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + name: poddefaults.kubeflow.org +spec: + group: kubeflow.org + names: + kind: PodDefault + listKind: PodDefaultList + plural: poddefaults + singular: poddefault + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + annotations: + additionalProperties: + type: string + type: object + args: + items: + type: string + type: array + automountServiceAccountToken: + type: boolean + command: + items: + type: string + type: array + desc: + type: string + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + labels: + additionalProperties: + type: string + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + serviceAccountName: + type: string + sidecars: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - selector + type: object + status: + type: object + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.8.0 + creationTimestamp: null + labels: + kustomize.component: profiles + name: profiles.kubeflow.org +spec: + conversion: + strategy: None + group: kubeflow.org + names: + kind: Profile + listKind: ProfileList + plural: profiles + singular: profile + preserveUnknownFields: false + scope: Cluster + versions: + - name: v1 + schema: + openAPIV3Schema: + description: Profile is the Schema for the profiles API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ProfileSpec defines the desired state of Profile + properties: + owner: + description: The profile owner + properties: + apiGroup: + description: APIGroup holds the API group of the referenced subject. + Defaults to "" for ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io" + for User and Group subjects. + type: string + kind: + description: Kind of object being referenced. Values defined by + this API group are "User", "Group", and "ServiceAccount". If + the Authorizer does not recognized the kind value, the Authorizer + should report an error. + type: string + name: + description: Name of the object being referenced. + type: string + namespace: + description: Namespace of the referenced object. If the object + kind is non-namespace, such as "User" or "Group", and this value + is not empty the Authorizer should report an error. + type: string + required: + - kind + - name + type: object + plugins: + items: + description: Plugin is for customize actions on different platform. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this + representation of an object. Servers should convert recognized + schemas to the latest internal value, and may reject unrecognized + values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + resourceQuotaSpec: + description: Resourcequota that will be applied to target namespace + properties: + hard: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'hard is the set of desired hard limits for each + named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/' + type: object + scopeSelector: + description: scopeSelector is also a collection of filters like + scopes that must match each object tracked by a quota but expressed + using ScopeSelectorOperator in combination with possible values. + For a resource to match, both scopes AND scopeSelector (if specified + in spec), must be matched. + properties: + matchExpressions: + description: A list of scope selector requirements by scope + of the resources. + items: + description: A scoped-resource selector requirement is a + selector that contains values, a scope name, and an operator + that relates the scope name and values. + properties: + operator: + description: Represents a scope's relationship to a + set of values. Valid operators are In, NotIn, Exists, + DoesNotExist. + type: string + scopeName: + description: The name of the scope that the selector + applies to. + type: string + values: + description: An array of string values. If the operator + is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - operator + - scopeName + type: object + type: array + type: object + scopes: + description: A collection of filters that must match each object + tracked by a quota. If not specified, the quota matches all + objects. + items: + description: A ResourceQuotaScope defines a filter that must + match each object tracked by a quota + type: string + type: array + type: object + type: object + status: + description: ProfileStatus defines the observed state of Profile + properties: + conditions: + items: + properties: + message: + type: string + status: + type: string + type: + type: string + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + description: Profile is the Schema for the profiles API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ProfileSpec defines the desired state of Profile + properties: + owner: + description: The profile owner + properties: + apiGroup: + description: APIGroup holds the API group of the referenced subject. + Defaults to "" for ServiceAccount subjects. Defaults to "rbac.authorization.k8s.io" + for User and Group subjects. + type: string + kind: + description: Kind of object being referenced. Values defined by + this API group are "User", "Group", and "ServiceAccount". If + the Authorizer does not recognized the kind value, the Authorizer + should report an error. + type: string + name: + description: Name of the object being referenced. + type: string + namespace: + description: Namespace of the referenced object. If the object + kind is non-namespace, such as "User" or "Group", and this value + is not empty the Authorizer should report an error. + type: string + required: + - kind + - name + type: object + plugins: + items: + description: Plugin is for customize actions on different platform. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this + representation of an object. Servers should convert recognized + schemas to the latest internal value, and may reject unrecognized + values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: array + resourceQuotaSpec: + description: Resourcequota that will be applied to target namespace + properties: + hard: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'hard is the set of desired hard limits for each + named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/' + type: object + scopeSelector: + description: scopeSelector is also a collection of filters like + scopes that must match each object tracked by a quota but expressed + using ScopeSelectorOperator in combination with possible values. + For a resource to match, both scopes AND scopeSelector (if specified + in spec), must be matched. + properties: + matchExpressions: + description: A list of scope selector requirements by scope + of the resources. + items: + description: A scoped-resource selector requirement is a + selector that contains values, a scope name, and an operator + that relates the scope name and values. + properties: + operator: + description: Represents a scope's relationship to a + set of values. Valid operators are In, NotIn, Exists, + DoesNotExist. + type: string + scopeName: + description: The name of the scope that the selector + applies to. + type: string + values: + description: An array of string values. If the operator + is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - operator + - scopeName + type: object + type: array + type: object + scopes: + description: A collection of filters that must match each object + tracked by a quota. If not specified, the quota matches all + objects. + items: + description: A ResourceQuotaScope defines a filter that must + match each object tracked by a quota + type: string + type: array + type: object + type: object + status: + description: ProfileStatus defines the observed state of Profile + properties: + conditions: + items: + properties: + message: + type: string + status: + type: string + type: + type: string + type: object + type: array + type: object + type: object + served: true + storage: false + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: proxyconfigs.networking.istio.io +spec: + group: networking.istio.io + names: + categories: + - istio-io + - networking-istio-io + kind: ProxyConfig + listKind: ProxyConfigList + plural: proxyconfigs + singular: proxyconfig + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Provides configuration for individual workloads. See more + details at: https://istio.io/docs/reference/config/networking/proxy-config.html' + properties: + concurrency: + description: The number of worker threads to run. + nullable: true + type: integer + environmentVariables: + additionalProperties: + type: string + description: Additional environment variables for the proxy. + type: object + image: + description: Specifies the details of the proxy image. + properties: + imageType: + description: The image type of the image. + type: string + type: object + selector: + description: Optional. + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.0 + name: pytorchjobs.kubeflow.org +spec: + group: kubeflow.org + names: + kind: PyTorchJob + listKind: PyTorchJobList + plural: pytorchjobs + singular: pytorchjob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[-1:].type + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: PyTorchJob Represents a PyTorchJob resource. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Specification of the desired state of the PyTorchJob. + properties: + elasticPolicy: + properties: + maxReplicas: + description: upper limit for the number of pods that can be set + by the autoscaler; cannot be smaller than MinReplicas, defaults + to null. + format: int32 + type: integer + maxRestarts: + format: int32 + type: integer + metrics: + description: Metrics contains the specifications which are used + to calculate the desired replica count (the maximum replica + count across all metrics will be used). The desired replica + count is calculated with multiplying the ratio between the target + value and the current value by the current number of pods. Ergo, + metrics used must decrease as the pod count is increased, and + vice-versa. + items: + description: MetricSpec specifies how to scale based on a single + metric (only `type` and one other matching field should be + set at once). + properties: + containerResource: + description: containerResource refers to a resource metric + (such as those specified in requests and limits) known + to Kubernetes describing a single container in each pod + of the current scale target (e.g. CPU or memory). Such + metrics are built in to Kubernetes, and have special scaling + options on top of those available to normal per-pod metrics + using the "pods" source. + properties: + container: + description: container is the name of the container + in the pods of the scaling target + type: string + name: + description: name is the name of the resource in question. + type: string + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - container + - name + - target + type: object + external: + description: external refers to a global metric that is + not associated with any Kubernetes object. It allows autoscaling + based on information coming from components running outside + of cluster (for example length of queue in cloud messaging + service, or QPS from loadbalancer running outside of cluster). + properties: + metric: + description: metric identifies the target metric by + name and selector + properties: + name: + description: name is the name of the given metric + type: string + selector: + description: selector is the string-encoded form + of a standard kubernetes label selector for the + given metric When set, it is passed as an additional + parameter to the metrics server for more specific + metrics scoping. When unset, just the metricName + will be used to gather metrics. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + required: + - name + type: object + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - metric + - target + type: object + object: + description: object refers to a metric describing a single + kubernetes object (for example, hits-per-second on an + Ingress object). + properties: + describedObject: + description: describedObject specifies the descriptions + of a object,such as kind,name apiVersion + properties: + apiVersion: + description: apiVersion is the API version of the + referent + type: string + kind: + description: 'kind is the kind of the referent; + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'name is the name of the referent; + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + required: + - kind + - name + type: object + metric: + description: metric identifies the target metric by + name and selector + properties: + name: + description: name is the name of the given metric + type: string + selector: + description: selector is the string-encoded form + of a standard kubernetes label selector for the + given metric When set, it is passed as an additional + parameter to the metrics server for more specific + metrics scoping. When unset, just the metricName + will be used to gather metrics. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + required: + - name + type: object + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - describedObject + - metric + - target + type: object + pods: + description: pods refers to a metric describing each pod + in the current scale target (for example, transactions-processed-per-second). The + values will be averaged together before being compared + to the target value. + properties: + metric: + description: metric identifies the target metric by + name and selector + properties: + name: + description: name is the name of the given metric + type: string + selector: + description: selector is the string-encoded form + of a standard kubernetes label selector for the + given metric When set, it is passed as an additional + parameter to the metrics server for more specific + metrics scoping. When unset, just the metricName + will be used to gather metrics. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + required: + - name + type: object + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - metric + - target + type: object + resource: + description: resource refers to a resource metric (such + as those specified in requests and limits) known to Kubernetes + describing each pod in the current scale target (e.g. + CPU or memory). Such metrics are built in to Kubernetes, + and have special scaling options on top of those available + to normal per-pod metrics using the "pods" source. + properties: + name: + description: name is the name of the resource in question. + type: string + target: + description: target specifies the target value for the + given metric + properties: + averageUtilization: + description: averageUtilization is the target value + of the average of the resource metric across all + relevant pods, represented as a percentage of + the requested value of the resource for the pods. + Currently only valid for Resource metric source + type + format: int32 + type: integer + averageValue: + anyOf: + - type: integer + - type: string + description: averageValue is the target value of + the average of the metric across all relevant + pods (as a quantity) + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: type represents whether the metric + type is Utilization, Value, or AverageValue + type: string + value: + anyOf: + - type: integer + - type: string + description: value is the target value of the metric + (as a quantity). + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - type + type: object + required: + - name + - target + type: object + type: + description: 'type is the type of metric source. It should + be one of "ContainerResource", "External", "Object", "Pods" + or "Resource", each mapping to a matching field in the + object. Note: "ContainerResource" type is available on + when the feature-gate HPAContainerMetrics is enabled' + type: string + required: + - type + type: object + type: array + minReplicas: + description: minReplicas is the lower limit for the number of + replicas to which the training job can scale down. It defaults + to null. + format: int32 + type: integer + nProcPerNode: + description: 'Number of workers per node; supported values: [auto, + cpu, gpu, int]. Deprecated: This API is deprecated in v1.7+ + Use .spec.nprocPerNode instead.' + format: int32 + type: integer + rdzvBackend: + type: string + rdzvConf: + description: RDZVConf contains additional rendezvous configuration + (=,=,...). + items: + properties: + key: + type: string + value: + type: string + type: object + type: array + rdzvHost: + type: string + rdzvId: + type: string + rdzvPort: + format: int32 + type: integer + standalone: + description: Start a local standalone rendezvous backend that + is represented by a C10d TCP store on port 29400. Useful when + launching single-node, multi-worker job. If specified --rdzv_backend, + --rdzv_endpoint, --rdzv_id are auto-assigned; any explicitly + set values are ignored. + type: boolean + type: object + nprocPerNode: + description: 'Number of workers per node; supported values: [auto, + cpu, gpu, int]. For more, https://github.com/pytorch/pytorch/blob/26f7f470df64d90e092081e39507e4ac751f55d6/torch/distributed/run.py#L629-L658. + Defaults to auto.' + type: string + pytorchReplicaSpecs: + additionalProperties: + description: ReplicaSpec is a description of the replica + properties: + replicas: + description: Replicas is the desired number of replicas of the + given template. If unspecified, defaults to 1. + format: int32 + type: integer + restartPolicy: + description: Restart policy for all replicas within the job. + One of Always, OnFailure, Never and ExitCode. Default to Never. + type: string + template: + description: Template is the object that describes the pod that + will be created for this replica. RestartPolicy in PodTemplateSpec + will be overide by RestartPolicy in ReplicaSpec + properties: + metadata: + description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: 'Specification of the desired behavior of the + pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + activeDeadlineSeconds: + description: Optional duration in seconds the pod may + be active on the node relative to StartTime before + the system will actively try to mark it failed and + kill associated containers. Value must be a positive + integer. + format: int64 + type: integer + affinity: + description: If specified, the pod's scheduling constraints + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: An empty preferred scheduling + term matches all objects with implicit weight + 0 (i.e. it's a no-op). A null preferred + scheduling term matches no objects (i.e. + is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to an update), the + system may or may not try to eventually evict + the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. The requirements + of them are ANDed. The TopologySelectorTerm + type implements a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. co-locate this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to a pod label update), + the system may or may not try to eventually + evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. avoid putting this pod in the same + node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity + expressions specified by this field, but it + may choose a node that violates one or more + of the expressions. The node that is most + preferred is the one with the greatest sum + of weights, i.e. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements + specified by this field are not met at scheduling + time, the pod will not be scheduled onto the + node. If the anti-affinity requirements specified + by this field cease to be met at some point + during pod execution (e.g. due to a pod label + update), the system may or may not try to + eventually evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates + whether a service account token should be automatically + mounted. + type: boolean + containers: + description: List of containers belonging to the pod. + Containers cannot currently be added or removed. There + must be at least one container in a Pod. Cannot be + updated. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + dnsConfig: + description: Specifies the DNS parameters of a pod. + Parameters specified here will be merged to the generated + DNS configuration based on DNSPolicy. + properties: + nameservers: + description: A list of DNS name server IP addresses. + This will be appended to the base nameservers + generated from DNSPolicy. Duplicated nameservers + will be removed. + items: + type: string + type: array + options: + description: A list of DNS resolver options. This + will be merged with the base options generated + from DNSPolicy. Duplicated entries will be removed. + Resolution options given in Options will override + those that appear in the base DNSPolicy. + items: + description: PodDNSConfigOption defines DNS resolver + options of a pod. + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + description: A list of DNS search domains for host-name + lookup. This will be appended to the base search + paths generated from DNSPolicy. Duplicated search + paths will be removed. + items: + type: string + type: array + type: object + dnsPolicy: + description: Set DNS policy for the pod. Defaults to + "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', + 'ClusterFirst', 'Default' or 'None'. DNS parameters + given in DNSConfig will be merged with the policy + selected with DNSPolicy. To have DNS options set along + with hostNetwork, you have to specify DNS policy explicitly + to 'ClusterFirstWithHostNet'. + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information + about services should be injected into pod''s environment + variables, matching the syntax of Docker links. Optional: + Defaults to true.' + type: boolean + ephemeralContainers: + description: List of ephemeral containers run in this + pod. Ephemeral containers may be run in an existing + pod to perform user-initiated actions such as debugging. + This list cannot be specified when creating a pod, + and it cannot be modified by updating the pod spec. + In order to add an ephemeral container to an existing + pod, use the pod's ephemeralcontainers subresource. + items: + description: An EphemeralContainer is a temporary + container that you may add to an existing Pod for + user-initiated activities such as debugging. Ephemeral + containers have no resource or scheduling guarantees, + and they will not be restarted when they exit or + when a Pod is removed or restarted. The kubelet + may evict a Pod if an ephemeral container causes + the Pod to exceed its resource allocation. + properties: + args: + description: 'Arguments to the entrypoint. The + image''s CMD is used if this is not provided. + Variable references $(VAR_NAME) are expanded + using the container''s environment. If a variable + cannot be resolved, the reference in the input + string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will + produce the string literal "$(VAR_NAME)".' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The image''s ENTRYPOINT is used if + this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Lifecycle is not allowed for ephemeral + containers. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the ephemeral container specified + as a DNS_LABEL. This name must be unique among + all containers, init containers and ephemeral + containers. + type: string + ports: + description: Ports are not allowed for ephemeral + containers. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: Resources are not allowed for ephemeral + containers. Ephemeral containers use spare resources + already allocated to the pod. + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'Optional: SecurityContext defines + the security options the ephemeral container + should be run with. If set, the fields of SecurityContext + override the equivalent fields of PodSecurityContext.' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + targetContainerName: + description: "If set, the name of the container + from PodSpec that this ephemeral container targets. + The ephemeral container will be run in the namespaces + (IPC, PID, etc) of this container. If not set + then the ephemeral container uses the namespaces + configured in the Pod spec. \n The container + runtime must implement support for this feature." + type: string + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Subpath mounts are not allowed for + ephemeral containers. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + hostAliases: + description: HostAliases is an optional list of hosts + and IPs that will be injected into the pod's hosts + file if specified. This is only valid for non-hostNetwork + pods. + items: + description: HostAlias holds the mapping between IP + and hostnames that will be injected as an entry + in the pod's hosts file. + properties: + hostnames: + description: Hostnames for the above IP address. + items: + type: string + type: array + ip: + description: IP address of the host file entry. + type: string + type: object + type: array + hostIPC: + description: 'Use the host''s ipc namespace. Optional: + Default to false.' + type: boolean + hostNetwork: + description: Host networking requested for this pod. + Use the host's network namespace. If this option is + set, the ports that will be used must be specified. + Default to false. + type: boolean + hostPID: + description: 'Use the host''s pid namespace. Optional: + Default to false.' + type: boolean + hostUsers: + description: 'Use the host''s user namespace. Optional: + Default to true. If set to true or not present, the + pod will be run in the host user namespace, useful + for when the pod needs a feature only available to + the host user namespace, such as loading a kernel + module with CAP_SYS_MODULE. When set to false, a new + userns is created for the pod.' + type: boolean + hostname: + description: Specifies the hostname of the Pod If not + specified, the pod's hostname will be set to a system-defined + value. + type: string + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of + references to secrets in the same namespace to use + for pulling any of the images used by this PodSpec. + If specified, these secrets will be passed to individual + puller implementations for them to use. More info: + https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + items: + description: LocalObjectReference contains enough + information to let you locate the referenced object + inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + initContainers: + description: List of initialization containers belonging + to the pod. Init containers are executed in order + prior to containers being started. If any init container + fails, the pod is considered to have failed and is + handled according to its restartPolicy. The name for + an init container or normal container must be unique + among all containers. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + nodeName: + description: NodeName is a request to schedule this + pod onto a specific node. If it is non-empty, the + scheduler simply schedules this pod onto that node, + assuming that it fits resource requirements. + type: string + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector which must + be true for the pod to fit on a node. Selector which + must match a node''s labels for the pod to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + x-kubernetes-map-type: atomic + os: + description: "Specifies the OS of the containers in + the pod. Some pod and container fields are restricted + if this is set. \n If the OS field is set to linux, + the following fields must be unset: -securityContext.windowsOptions + \n If the OS field is set to windows, following fields + must be unset: - spec.hostPID - spec.hostIPC - spec.hostUsers + - spec.securityContext.seLinuxOptions - spec.securityContext." + properties: + name: + description: 'Name is the name of the operating + system. The currently supported values are linux + and windows. Additional value may be defined in + future and can be one of: https://github.com/opencontainers/runtime-spec/blob/master/config.md#platform-specific-configuration + Clients should expect to handle additional values + and treat unrecognized values in this field as + os: null' + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Overhead represents the resource overhead + associated with running a pod for a given RuntimeClass. + This field will be autopopulated at admission time + by the RuntimeClass admission controller. If the RuntimeClass + admission controller is enabled, overhead must not + be set in Pod create requests. The RuntimeClass admission + controller will reject Pod create requests which have + the overhead already set. + type: object + preemptionPolicy: + description: PreemptionPolicy is the Policy for preempting + pods with lower priority. One of Never, PreemptLowerPriority. + Defaults to PreemptLowerPriority if unset. + type: string + priority: + description: The priority value. Various system components + use this field to find the priority of the pod. When + Priority Admission Controller is enabled, it prevents + users from setting this field. The admission controller + populates this field from PriorityClassName. The higher + the value, the higher the priority. + format: int32 + type: integer + priorityClassName: + description: If specified, indicates the pod's priority. + "system-node-critical" and "system-cluster-critical" + are two special keywords which indicate the highest + priorities with the former being the highest priority. + Any other name must be defined by creating a PriorityClass + object with that name. If not specified, the pod priority + will be default or zero if there is no default. + type: string + readinessGates: + description: 'If specified, all readiness gates will + be evaluated for pod readiness. A pod is ready when + all its containers are ready AND all conditions specified + in the readiness gates have status equal to "True" + More info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates' + items: + description: PodReadinessGate contains the reference + to a pod condition + properties: + conditionType: + description: ConditionType refers to a condition + in the pod's condition list with matching type. + type: string + required: + - conditionType + type: object + type: array + resourceClaims: + description: "ResourceClaims defines which ResourceClaims + must be allocated and reserved before the Pod is allowed + to start. The resources will be made available to + those containers which consume them by name. \n This + is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable." + items: + description: PodResourceClaim references exactly one + ResourceClaim through a ClaimSource. It adds a name + to it that uniquely identifies the ResourceClaim + inside the Pod. Containers that need access to the + ResourceClaim reference it with this name. + properties: + name: + description: Name uniquely identifies this resource + claim inside the pod. This must be a DNS_LABEL. + type: string + source: + description: Source describes where to find the + ResourceClaim. + properties: + resourceClaimName: + description: ResourceClaimName is the name + of a ResourceClaim object in the same namespace + as this pod. + type: string + resourceClaimTemplateName: + description: "ResourceClaimTemplateName is + the name of a ResourceClaimTemplate object + in the same namespace as this pod. \n The + template will be used to create a new ResourceClaim, + which will be bound to this pod. When this + pod is deleted, the ResourceClaim will also + be deleted. The name of the ResourceClaim + will be -, where + is the PodResourceClaim.Name." + type: string + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restartPolicy: + description: 'Restart policy for all containers within + the pod. One of Always, OnFailure, Never. In some + contexts, only a subset of those values may be permitted. + Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' + type: string + runtimeClassName: + description: 'RuntimeClassName refers to a RuntimeClass + object in the node.k8s.io group, which should be used + to run this pod. If no RuntimeClass resource matches + the named class, the pod will not be run. If unset + or empty, the "legacy" RuntimeClass will be used, + which is an implicit class with an empty definition + that uses the default runtime handler. More info: + https://git.k8s.' + type: string + schedulerName: + description: If specified, the pod will be dispatched + by specified scheduler. If not specified, the pod + will be dispatched by default scheduler. + type: string + schedulingGates: + description: "SchedulingGates is an opaque list of values + that if specified will block scheduling the pod. If + schedulingGates is not empty, the pod will stay in + the SchedulingGated state and the scheduler will not + attempt to schedule the pod. \n SchedulingGates can + only be set at pod creation time, and be removed only + afterwards. \n This is a beta feature enabled by the + PodSchedulingReadiness feature gate." + items: + description: PodSchedulingGate is associated to a + Pod to guard its scheduling. + properties: + name: + description: Name of the scheduling gate. Each + scheduling gate must have a unique name field. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + description: 'SecurityContext holds pod-level security + attributes and common container settings. Optional: + Defaults to empty. See type description for default + values of each field.' + properties: + fsGroup: + description: "A special supplemental group that + applies to all containers in a pod. Some volume + types allow the Kubelet to change the ownership + of that volume to be owned by the pod: \n 1. The + owning GID will be the FSGroup 2. The setgid bit + is set (new files created in the volume will be + owned by FSGroup) 3." + format: int64 + type: integer + fsGroupChangePolicy: + description: 'fsGroupChangePolicy defines behavior + of changing ownership and permission of the volume + before being exposed inside Pod. This field will + only apply to volume types which support fsGroup + based ownership(and permissions). It will have + no effect on ephemeral volume types such as: secret, + configmaps and emptydir. Valid values are "OnRootMismatch" + and "Always". If not specified, "Always" is used.' + type: string + runAsGroup: + description: The GID to run the entrypoint of the + container process. Uses runtime default if unset. + May also be set in SecurityContext. If set in + both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run + as a non-root user. If true, the Kubelet will + validate the image at runtime to ensure that it + does not run as UID 0 (root) and fail to start + the container if it does. If unset or false, no + such validation will be performed. May also be + set in SecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the + container process. Defaults to user specified + in image metadata if unspecified. May also be + set in SecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence for that container. + Note that this field cannot be set when spec.os.name + is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to + all containers. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in SecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + properties: + level: + description: Level is SELinux level label that + applies to the container. + type: string + role: + description: Role is a SELinux role label that + applies to the container. + type: string + type: + description: Type is a SELinux type label that + applies to the container. + type: string + user: + description: User is a SELinux user label that + applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. Note that this field cannot be set + when spec.os.name is windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node should be used. + The profile must be preconfigured on the node + to work. Must be a descending path, relative + to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp + profile will be applied. Valid options are: + \n Localhost - a profile defined in a file + on the node should be used. RuntimeDefault + - the container runtime default profile should + be used. Unconfined - no profile should be + applied." + type: string + required: + - type + type: object + supplementalGroups: + description: A list of groups applied to the first + process run in each container, in addition to + the container's primary GID, the fsGroup (if specified), + and group memberships defined in the container + image for the uid of the container process. If + unspecified, no additional groups are added to + any container. + items: + format: int64 + type: integer + type: array + sysctls: + description: Sysctls hold a list of namespaced sysctls + used for the pod. Pods with unsupported sysctls + (by the container runtime) might fail to launch. + Note that this field cannot be set when spec.os.name + is windows. + items: + description: Sysctl defines a kernel parameter + to be set + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + description: The Windows specific settings applied + to all containers. If unspecified, the options + within a container's SecurityContext will be used. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the + GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + hostProcess: + description: HostProcess determines if a container + should be run as a 'Host Process' container. + This field is alpha-level and will only be + honored by components that enable the WindowsHostProcessContainers + feature flag. Setting this field without the + feature flag will result in errors when validating + the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to run + the entrypoint of the container process. Defaults + to the user specified in image metadata if + unspecified. May also be set in PodSecurityContext. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. + type: string + type: object + type: object + serviceAccount: + description: 'DeprecatedServiceAccount is a depreciated + alias for ServiceAccountName. Deprecated: Use serviceAccountName + instead.' + type: string + serviceAccountName: + description: 'ServiceAccountName is the name of the + ServiceAccount to use to run this pod. More info: + https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + setHostnameAsFQDN: + description: If true the pod's hostname will be configured + as the pod's FQDN, rather than the leaf name (the + default). In Linux containers, this means setting + the FQDN in the hostname field of the kernel (the + nodename field of struct utsname). + type: boolean + shareProcessNamespace: + description: 'Share a single process namespace between + all of the containers in a pod. When this is set containers + will be able to view and signal processes from other + containers in the same pod, and the first process + in each container will not be assigned PID 1. HostPID + and ShareProcessNamespace cannot both be set. Optional: + Default to false.' + type: boolean + subdomain: + description: If specified, the fully qualified Pod hostname + will be "...svc.". If not specified, the pod will not have + a domainname at all. + type: string + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully. May be decreased in delete + request. Value must be non-negative integer. The value + zero indicates stop immediately via the kill signal + (no opportunity to shut down). If this value is nil, + the default grace period will be used instead. + format: int64 + type: integer + tolerations: + description: If specified, the pod's tolerations. + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + effect: + description: Effect indicates the taint effect + to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, + PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; + this combination means to match all values and + all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and + Equal. Defaults to Equal. Exists is equivalent + to wildcard for value, so that a pod can tolerate + all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the + period of time the toleration (which must be + of effect NoExecute, otherwise this field is + ignored) tolerates the taint. By default, it + is not set, which means tolerate the taint forever + (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value + should be empty, otherwise just a regular string. + type: string + type: object + type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how + a group of pods ought to spread across topology domains. + Scheduler will schedule pods in a way which abides + by the constraints. All topologySpreadConstraints + are ANDed. + items: + description: TopologySpreadConstraint specifies how + to spread matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are + counted to determine the number of pods in their + corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of + label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, a + key, and an operator that relates the + key and values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + description: MatchLabelKeys is a set of pod label + keys to select the pods over which spreading + will be calculated. The keys are used to lookup + values from the incoming pod labels, those key-value + labels are ANDed with labelSelector to select + the group of existing pods over which spreading + will be calculated for the incoming pod. The + same key is forbidden to exist in both MatchLabelKeys + and LabelSelector. + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + description: MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between + the number of matching pods in the target topology + and the global minimum. The global minimum is + the minimum number of matching pods in an eligible + domain or zero if the number of eligible domains + is less than MinDomains. + format: int32 + type: integer + minDomains: + description: MinDomains indicates a minimum number + of eligible domains. When the number of eligible + domains with matching topology keys is less + than minDomains, Pod Topology Spread treats + "global minimum" as 0, and then the calculation + of Skew is performed. And when the number of + eligible domains with matching topology keys + equals or greater than minDomains, this value + has no effect on scheduling. + format: int32 + type: integer + nodeAffinityPolicy: + description: "NodeAffinityPolicy indicates how + we will treat Pod's nodeAffinity/nodeSelector + when calculating pod topology spread skew. Options + are: - Honor: only nodes matching nodeAffinity/nodeSelector + are included in the calculations. - Ignore: + nodeAffinity/nodeSelector are ignored. All nodes + are included in the calculations. \n If this + value is nil, the behavior is equivalent to + the Honor policy." + type: string + nodeTaintsPolicy: + description: "NodeTaintsPolicy indicates how we + will treat node taints when calculating pod + topology spread skew. Options are: - Honor: + nodes without taints, along with tainted nodes + for which the incoming pod has a toleration, + are included. - Ignore: node taints are ignored. + All nodes are included. \n If this value is + nil, the behavior is equivalent to the Ignore + policy." + type: string + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", + and try to put balanced number of pods into + each bucket. We define a domain as a particular + instance of a topology. + type: string + whenUnsatisfiable: + description: WhenUnsatisfiable indicates how to + deal with a pod if it doesn't satisfy the spread + constraint. - DoNotSchedule (default) tells + the scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to topologies + that would help reduce the skew. + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + description: 'List of volumes that can be mounted by + containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + items: + description: Volume represents a named volume in a + pod that may be accessed by any container in the + pod. + properties: + awsElasticBlockStore: + description: 'awsElasticBlockStore represents + an AWS Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'readOnly value true will force + the readOnly setting in VolumeMounts. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'volumeID is unique ID of the + persistent disk resource in AWS (Amazon + EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: azureDisk represents an Azure Data + Disk mount on the host and bind mount to the + pod. + properties: + cachingMode: + description: 'cachingMode is the Host Caching + mode: None, Read Only, Read Write.' + type: string + diskName: + description: diskName is the Name of the data + disk in the blob storage + type: string + diskURI: + description: diskURI is the URI of data disk + in the blob storage + type: string + fsType: + description: fsType is Filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + kind: + description: 'kind expected values are Shared: + multiple blob disks per storage account Dedicated: + single blob disk per storage account Managed: + azure managed data disk (only in managed + availability set). defaults to shared' + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: azureFile represents an Azure File + Service mount on the host and bind mount to + the pod. + properties: + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretName: + description: secretName is the name of secret + that contains Azure Storage Account Name + and Key + type: string + shareName: + description: shareName is the azure share + Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: cephFS represents a Ceph FS mount + on the host that shares a pod's lifetime + properties: + monitors: + description: 'monitors is Required: Monitors + is a collection of Ceph monitors More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'path is Optional: Used as the + mounted root, rather than the full Ceph + tree, default is /' + type: string + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'secretFile is Optional: SecretFile + is the path to key ring for User, default + is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'secretRef is Optional: SecretRef + is reference to the authentication secret + for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is optional: User is the + rados user name, default is admin More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'cinder represents a cinder volume + attached and mounted on kubelets host machine. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'secretRef is optional: points + to a secret object containing parameters + used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + description: 'volumeID used to identify the + volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: configMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced + ConfigMap will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional specify whether the + ConfigMap or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + description: csi (Container Storage Interface) + represents ephemeral storage that is handled + by certain external CSI drivers (Beta feature). + properties: + driver: + description: driver is the name of the CSI + driver that handles this volume. Consult + with your admin for the correct name as + registered in the cluster. + type: string + fsType: + description: fsType to mount. Ex. "ext4", + "xfs", "ntfs". If not provided, the empty + value is passed to the associated CSI driver + which will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: nodePublishSecretRef is a reference + to the secret object containing sensitive + information to pass to the CSI driver to + complete the CSI NodePublishVolume and NodeUnpublishVolume + calls. This field is optional, and may + be empty if no secret is required. If the + secret object contains more than one secret, + all secret references are passed. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + description: readOnly specifies a read-only + configuration for the volume. Defaults to + false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: volumeAttributes stores driver-specific + properties that are passed to the CSI driver. + Consult your driver's documentation for + supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: downwardAPI represents downward API + about the pod that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits to use on + created files by default. Must be a Optional: + mode bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: Items is a list of downward API + volume file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects a field + of the pod: only annotations, labels, + name and namespace are supported.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits used + to set permissions on this file, must + be an octal value between 0000 and + 0777 or a decimal value between 0 + and 511. YAML accepts both octal and + decimal values, JSON requires decimal + values for mode bits. If not specified, + the volume defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path is the + relative path name of the file to + be created. Must not be absolute or + contain the ''..'' path. Must be utf-8 + encoded. The first item of the relative + path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + requests.cpu and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'emptyDir represents a temporary + directory that shares a pod''s lifetime. More + info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'medium represents what type + of storage medium should back this directory. + The default is "" which means to use the + node''s default medium. Must be an empty + string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount + of local storage required for this EmptyDir + volume. The size limit is also applicable + for memory medium. The maximum usage on + memory medium EmptyDir would be the minimum + value between the SizeLimit specified here + and the sum of memory limits of all containers + in a pod. The default is nil which means + that the limit is undefined. More info: + https://kubernetes.' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + description: ephemeral represents a volume that + is handled by a cluster storage driver. The + volume's lifecycle is tied to the pod that defines + it - it will be created before the pod starts, + and deleted when the pod is removed. + properties: + volumeClaimTemplate: + description: Will be used to create a stand-alone + PVC to provision the volume. The pod in + which this EphemeralVolumeSource is embedded + will be the owner of the PVC, i.e. the PVC + will be deleted together with the pod. The + name of the PVC will be `-` where `` is the name + from the `PodSpec.Volumes` array entry. + properties: + metadata: + description: May contain labels and annotations + that will be copied into the PVC when + creating it. No other fields are allowed + and will be rejected during validation. + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: The specification for the + PersistentVolumeClaim. The entire content + is copied unchanged into the PVC that + gets created from this template. The + same fields as in a PersistentVolumeClaim + are also valid here. + properties: + accessModes: + description: 'accessModes contains + the desired access modes the volume + should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can + be used to specify either: * An + existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) + If the provisioner or an external + controller can support the specified + data source, it will create a new + volume based on the contents of + the specified data source.' + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: dataSourceRef specifies + the object from which to populate + the volume with data, if a non-empty + volume is desired. This may be any + object from a non-empty API group + (non core object) or a PersistentVolumeClaim + object. When this field is specified, + volume binding will only succeed + if the type of the specified object + matches some installed volume populator + or dynamic provisioner. + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + namespace: + description: Namespace is the + namespace of resource being + referenced Note that when a + namespace is specified, a gateway.networking.k8s.io/ReferenceGrant + object is required in the referent + namespace to allow that namespace's + owner to accept the reference. + See the ReferenceGrant documentation + for details. (Alpha) This field + requires the CrossNamespaceVolumeDataSource + feature gate to be enabled. + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents + the minimum resources the volume + should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed + to specify resource requirements + that are lower than previous value + but must still be higher than capacity + recorded in the status field of + the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + claims: + description: "Claims lists the + names of resources, defined + in spec.resourceClaims, that + are used by this container. + \n This is an alpha field and + requires enabling the DynamicResourceAllocation + feature gate. \n This field + is immutable. It can only be + set for containers." + items: + description: ResourceClaim references + one entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match + the name of one entry + in pod.spec.resourceClaims + of the Pod where this + field is used. It makes + that resource available + inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes + the maximum amount of compute + resources allowed. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes + the minimum amount of compute + resources required. If Requests + is omitted for a container, + it defaults to Limits if that + is explicitly specified, otherwise + to an implementation-defined + value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query + over volumes to consider for binding. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + description: 'storageClassName is + the name of the StorageClass required + by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what + type of volume is required by the + claim. Value of Filesystem is implied + when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding + reference to the PersistentVolume + backing this claim. + type: string + type: object + required: + - spec + type: object + type: object + fc: + description: fc represents a Fibre Channel resource + that is attached to a kubelet's host machine + and then exposed to the pod. + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. TODO: how do we prevent + errors in the filesystem from compromising + the machine' + type: string + lun: + description: 'lun is Optional: FC target lun + number' + format: int32 + type: integer + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'targetWWNs is Optional: FC target + worldwide names (WWNs)' + items: + type: string + type: array + wwids: + description: 'wwids Optional: FC volume world + wide identifiers (wwids) Either wwids or + combination of targetWWNs and lun must be + set, but not both simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: flexVolume represents a generic volume + resource that is provisioned/attached using + an exec based plugin. + properties: + driver: + description: driver is the name of the driver + to use for this volume. + type: string + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". The default filesystem depends + on FlexVolume script. + type: string + options: + additionalProperties: + type: string + description: 'options is Optional: this field + holds extra command options if any.' + type: object + readOnly: + description: 'readOnly is Optional: defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'secretRef is Optional: secretRef + is reference to the secret object containing + sensitive information to pass to the plugin + scripts. This may be empty if no secret + object is specified. If the secret object + contains more than one secret, all secrets + are passed to the plugin scripts.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + description: flocker represents a Flocker volume + attached to a kubelet's host machine. This depends + on the Flocker control service being running + properties: + datasetName: + description: datasetName is Name of the dataset + stored as metadata -> name on the dataset + for Flocker should be considered as deprecated + type: string + datasetUUID: + description: datasetUUID is the UUID of the + dataset. This is unique identifier of a + Flocker dataset + type: string + type: object + gcePersistentDisk: + description: 'gcePersistentDisk represents a GCE + Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'fsType is filesystem type of + the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'pdName is unique name of the + PD resource in GCE. Used to identify the + disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'gitRepo represents a git repository + at a particular revision. DEPRECATED: GitRepo + is deprecated. To provision a container with + a git repo, mount an EmptyDir into an InitContainer + that clones the repo using git, then mount the + EmptyDir into the Pod''s container.' + properties: + directory: + description: directory is the target directory + name. Must not contain or start with '..'. If + '.' is supplied, the volume directory will + be the git repository. Otherwise, if specified, + the volume will contain the git repository + in the subdirectory with the given name. + type: string + repository: + description: repository is the URL + type: string + revision: + description: revision is the commit hash for + the specified revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'glusterfs represents a Glusterfs + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'endpoints is the endpoint name + that details Glusterfs topology. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'path is the Glusterfs volume + path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'readOnly here will force the + Glusterfs volume to be mounted with read-only + permissions. Defaults to false. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'hostPath represents a pre-existing + file or directory on the host machine that is + directly exposed to the container. This is generally + used for system agents or other privileged things + that are allowed to see the host machine. Most + containers will NOT need this. More info: https://kubernetes.' + properties: + path: + description: 'path of the directory on the + host. If the path is a symlink, it will + follow the link to the real path. More info: + https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'type for HostPath Volume Defaults + to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'iscsi represents an ISCSI Disk resource + that is attached to a kubelet''s host machine + and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: chapAuthDiscovery defines whether + support iSCSI Discovery CHAP authentication + type: boolean + chapAuthSession: + description: chapAuthSession defines whether + support iSCSI Session CHAP authentication + type: boolean + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + initiatorName: + description: initiatorName is the custom iSCSI + Initiator Name. If initiatorName is specified + with iscsiInterface simultaneously, new + iSCSI interface : will be created for the connection. + type: string + iqn: + description: iqn is the target iSCSI Qualified + Name. + type: string + iscsiInterface: + description: iscsiInterface is the interface + Name that uses an iSCSI transport. Defaults + to 'default' (tcp). + type: string + lun: + description: lun represents iSCSI Target Lun + number. + format: int32 + type: integer + portals: + description: portals is the iSCSI Target Portal + List. The portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. + type: boolean + secretRef: + description: secretRef is the CHAP Secret + for iSCSI target and initiator authentication + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + description: targetPortal is iSCSI Target + Portal. The Portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'name of the volume. Must be a DNS_LABEL + and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'nfs represents an NFS mount on the + host that shares a pod''s lifetime More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'path that is exported by the + NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'readOnly here will force the + NFS export to be mounted with read-only + permissions. Defaults to false. More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'server is the hostname or IP + address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'persistentVolumeClaimVolumeSource + represents a reference to a PersistentVolumeClaim + in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'claimName is the name of a PersistentVolumeClaim + in the same namespace as the pod using this + volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: readOnly Will force the ReadOnly + setting in VolumeMounts. Default false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: photonPersistentDisk represents a + PhotonController persistent disk attached and + mounted on kubelets host machine + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + pdID: + description: pdID is the ID that identifies + Photon Controller persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: portworxVolume represents a portworx + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fSType represents the filesystem + type to mount Must be a filesystem type + supported by the host operating system. + Ex. "ext4", "xfs". Implicitly inferred to + be "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + volumeID: + description: volumeID uniquely identifies + a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: projected items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits + used to set permissions on created files + by default. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. Directories within the path are + not affected by this setting. + format: int32 + type: integer + sources: + description: sources is the list of volume + projections + items: + description: Projection that may be projected + along with other supported volume types + properties: + configMap: + description: configMap information about + the configMap data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced ConfigMap + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional specify whether + the ConfigMap or its keys must + be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information + about the downwardAPI data to project + properties: + items: + description: Items is a list of + DownwardAPIVolume file + items: + description: DownwardAPIVolumeFile + represents information to create + the file containing the pod + field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only + annotations, labels, name + and namespace are supported.' + properties: + apiVersion: + description: Version of + the schema the FieldPath + is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the + field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode + bits used to set permissions + on this file, must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path + is the relative path name + of the file to be created. + Must not be absolute or + contain the ''..'' path. + Must be utf-8 encoded. The + first item of the relative + path must not start with + ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) are + currently supported.' + properties: + containerName: + description: 'Container + name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies + the output format of + the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: + resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about + the secret data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced Secret + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional field specify + whether the Secret or its key + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is + information about the serviceAccountToken + data to project + properties: + audience: + description: audience is the intended + audience of the token. A recipient + of a token must identify itself + with an identifier specified in + the audience of the token, and + otherwise should reject the token. + The audience defaults to the identifier + of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is + the requested duration of validity + of the service account token. + As the token approaches expiration, + the kubelet volume plugin will + proactively rotate the service + account token. The kubelet will + start trying to rotate the token + if the token is older than 80 + percent of its time to live or + if the token is older than 24 + hours.Defaults to 1 hour and must + be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative + to the mount point of the file + to project the token into. + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + description: quobyte represents a Quobyte mount + on the host that shares a pod's lifetime + properties: + group: + description: group to map volume access to + Default is no group + type: string + readOnly: + description: readOnly here will force the + Quobyte volume to be mounted with read-only + permissions. Defaults to false. + type: boolean + registry: + description: registry represents a single + or multiple Quobyte Registry services specified + as a string as host:port pair (multiple + entries are separated with commas) which + acts as the central registry for volumes + type: string + tenant: + description: tenant owning the given Quobyte + volume in the Backend Used with dynamically + provisioned Quobyte volumes, value is set + by the plugin + type: string + user: + description: user to map volume access to + Defaults to serivceaccount user + type: string + volume: + description: volume is a string that references + an already created Quobyte volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'rbd represents a Rados Block Device + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + image: + description: 'image is the rados image name. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'keyring is the path to key ring + for RBDUser. Default is /etc/ceph/keyring. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'monitors is a collection of + Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'pool is the rados pool name. + Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'secretRef is name of the authentication + secret for RBDUser. If provided overrides + keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is the rados user name. + Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: scaleIO represents a ScaleIO persistent + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: gateway is the host address of + the ScaleIO API Gateway. + type: string + protectionDomain: + description: protectionDomain is the name + of the ScaleIO Protection Domain for the + configured storage. + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef references to the secret + for ScaleIO user and other sensitive information. + If this is not provided, Login operation + will fail. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + description: sslEnabled Flag enable/disable + SSL communication with Gateway, default + false + type: boolean + storageMode: + description: storageMode indicates whether + the storage for a volume should be ThickProvisioned + or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: storagePool is the ScaleIO Storage + Pool associated with the protection domain. + type: string + system: + description: system is the name of the storage + system as configured in ScaleIO. + type: string + volumeName: + description: volumeName is the name of a volume + already created in the ScaleIO system that + is associated with this volume source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'secret represents a secret that + should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value + pair in the Data field of the referenced + Secret will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether + the Secret or its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the + secret in the pod''s namespace to use. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: storageOS represents a StorageOS + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef specifies the secret + to use for obtaining the StorageOS API credentials. If + not specified, default values will be attempted. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + description: volumeName is the human-readable + name of the StorageOS volume. Volume names + are only unique within a namespace. + type: string + volumeNamespace: + description: volumeNamespace specifies the + scope of the volume within StorageOS. If + no namespace is specified then the Pod's + namespace will be used. This allows the + Kubernetes name scoping to be mirrored within + StorageOS for tighter integration. Set VolumeName + to any name to override the default behaviour. + Set to "default" if you are not using namespaces + within StorageOS. + type: string + type: object + vsphereVolume: + description: vsphereVolume represents a vSphere + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fsType is filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + storagePolicyID: + description: storagePolicyID is the storage + Policy Based Management (SPBM) profile ID + associated with the StoragePolicyName. + type: string + storagePolicyName: + description: storagePolicyName is the storage + Policy Based Management (SPBM) profile name. + type: string + volumePath: + description: volumePath is the path that identifies + vSphere volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + description: 'A map of PyTorchReplicaType (type) to ReplicaSpec (value). + Specifies the PyTorch cluster configuration. For example, { "Master": + PyTorchReplicaSpec, "Worker": PyTorchReplicaSpec, }' + type: object + runPolicy: + description: RunPolicy encapsulates various runtime policies of the + distributed training job, for example how to clean up resources + and how long the job can stay active. + properties: + activeDeadlineSeconds: + description: Specifies the duration in seconds relative to the + startTime that the job may be active before the system tries + to terminate it; value must be positive integer. + format: int64 + type: integer + backoffLimit: + description: Optional number of retries before marking this job + failed. + format: int32 + type: integer + cleanPodPolicy: + description: CleanPodPolicy defines the policy to kill pods after + the job completes. Default to None. + type: string + schedulingPolicy: + description: SchedulingPolicy defines the policy related to scheduling, + e.g. gang-scheduling + properties: + minAvailable: + format: int32 + type: integer + minResources: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + priorityClass: + type: string + queue: + type: string + scheduleTimeoutSeconds: + format: int32 + type: integer + type: object + suspend: + default: false + description: suspend specifies whether the Job controller should + create Pods or not. If a Job is created with suspend set to + true, no Pods are created by the Job controller. If a Job is + suspended after creation (i.e. the flag goes from false to true), + the Job controller will delete all active Pods and PodGroups + associated with this Job. Users must design their workload to + gracefully handle this. + type: boolean + ttlSecondsAfterFinished: + description: TTLSecondsAfterFinished is the TTL to clean up jobs. + It may take extra ReconcilePeriod seconds for the cleanup, since + reconcile gets called periodically. Default to infinite. + format: int32 + type: integer + type: object + required: + - pytorchReplicaSpecs + type: object + status: + description: Most recently observed status of the PyTorchJob. Read-only + (modified by the system). + properties: + completionTime: + description: Represents time when the job was completed. It is not + guaranteed to be set in happens-before order across separate operations. + It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + conditions: + description: Conditions is an array of current observed job conditions. + items: + description: JobCondition describes the state of the job at a certain + point. + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + lastUpdateTime: + description: The last time this condition was updated. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of job condition. + type: string + required: + - status + - type + type: object + type: array + lastReconcileTime: + description: Represents last time when the job was reconciled. It + is not guaranteed to be set in happens-before order across separate + operations. It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + replicaStatuses: + additionalProperties: + description: ReplicaStatus represents the current observed state + of the replica. + properties: + active: + description: The number of actively running pods. + format: int32 + type: integer + failed: + description: The number of pods which reached phase Failed. + format: int32 + type: integer + labelSelector: + description: 'Deprecated: Use Selector instead' + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + selector: + description: A Selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. + An empty Selector matches all objects. A null Selector matches + no objects. + type: string + succeeded: + description: The number of pods which reached phase Succeeded. + format: int32 + type: integer + type: object + description: ReplicaStatuses is map of ReplicaType and ReplicaStatus, + specifies the status of each replica. + type: object + startTime: + description: Represents time when the job was acknowledged by the + job controller. It is not guaranteed to be set in happens-before + order across separate operations. It is represented in RFC3339 form + and is in UTC. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + scale: + labelSelectorPath: .status.replicaStatuses.Worker.selector + specReplicasPath: .spec.pytorchReplicaSpecs.Worker.replicas + statusReplicasPath: .status.replicaStatuses.Worker.active + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + istio: security + release: istio + name: requestauthentications.security.istio.io +spec: + group: security.istio.io + names: + categories: + - istio-io + - security-istio-io + kind: RequestAuthentication + listKind: RequestAuthenticationList + plural: requestauthentications + shortNames: + - ra + singular: requestauthentication + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + properties: + spec: + description: RequestAuthentication defines what request authentication + methods are supported by a workload. + properties: + jwtRules: + description: Define the list of JWTs that can be validated at the + selected workloads' proxy. + items: + properties: + audiences: + items: + type: string + type: array + forwardOriginalToken: + description: If set to true, the original token will be kept + for the upstream request. + type: boolean + fromHeaders: + description: List of header locations from which JWT is expected. + items: + properties: + name: + description: The HTTP header name. + type: string + prefix: + description: The prefix that should be stripped before + decoding the token. + type: string + type: object + type: array + fromParams: + description: List of query parameters from which JWT is expected. + items: + type: string + type: array + issuer: + description: Identifies the issuer that issued the JWT. + type: string + jwks: + description: JSON Web Key Set of public keys to validate signature + of the JWT. + type: string + jwks_uri: + type: string + jwksUri: + type: string + outputClaimToHeaders: + description: This field specifies a list of operations to copy + the claim to HTTP headers on a successfully verified token. + items: + properties: + claim: + description: The name of the claim to be copied from. + type: string + header: + description: The name of the header to be created. + type: string + type: object + type: array + outputPayloadToHeader: + type: string + type: object + type: array + selector: + description: Optional. + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: false + subresources: + status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: RequestAuthentication defines what request authentication + methods are supported by a workload. + properties: + jwtRules: + description: Define the list of JWTs that can be validated at the + selected workloads' proxy. + items: + properties: + audiences: + items: + type: string + type: array + forwardOriginalToken: + description: If set to true, the original token will be kept + for the upstream request. + type: boolean + fromHeaders: + description: List of header locations from which JWT is expected. + items: + properties: + name: + description: The HTTP header name. + type: string + prefix: + description: The prefix that should be stripped before + decoding the token. + type: string + type: object + type: array + fromParams: + description: List of query parameters from which JWT is expected. + items: + type: string + type: array + issuer: + description: Identifies the issuer that issued the JWT. + type: string + jwks: + description: JSON Web Key Set of public keys to validate signature + of the JWT. + type: string + jwks_uri: + type: string + jwksUri: + type: string + outputClaimToHeaders: + description: This field specifies a list of operations to copy + the claim to HTTP headers on a successfully verified token. + items: + properties: + claim: + description: The name of the claim to be copied from. + type: string + header: + description: The name of the header to be created. + type: string + type: object + type: array + outputPayloadToHeader: + type: string + type: object + type: array + selector: + description: Optional. + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + knative.dev/crd-install: "true" + name: revisions.serving.knative.dev +spec: + group: serving.knative.dev + names: + categories: + - all + - knative + - serving + kind: Revision + plural: revisions + shortNames: + - rev + singular: revision + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.labels['serving\.knative\.dev/configuration'] + name: Config Name + type: string + - jsonPath: .status.serviceName + name: K8s Service Name + type: string + - jsonPath: .metadata.labels['serving\.knative\.dev/configurationGeneration'] + name: Generation + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + - jsonPath: .status.actualReplicas + name: Actual Replicas + type: integer + - jsonPath: .status.desiredReplicas + name: Desired Replicas + type: integer + name: v1 + schema: + openAPIV3Schema: + description: "Revision is an immutable snapshot of code and configuration. + \ A revision references a container image. Revisions are created by updates + to a Configuration. \n See also: https://github.com/knative/serving/blob/main/docs/spec/overview.md#revision" + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: RevisionSpec holds the desired state of the Revision (from + the client). + properties: + affinity: + description: This is accessible behind a feature flag - kubernetes.podspec-affinity + type: object + x-kubernetes-preserve-unknown-fields: true + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates whether a service + account token should be automatically mounted. + type: boolean + containerConcurrency: + description: ContainerConcurrency specifies the maximum allowed in-flight + (concurrent) requests per container of the Revision. Defaults to + `0` which means concurrency to the application is not limited, and + the system decides the target concurrency for the autoscaler. + format: int64 + type: integer + containers: + description: List of containers belonging to the pod. Containers cannot + currently be added or removed. There must be at least one container + in a Pod. Cannot be updated. + items: + description: A single application container that you want to run + within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The container image''s + CMD is used if this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. If a variable + cannot be resolved, the reference in the input string will + be unchanged. Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will + produce the string literal "$(VAR_NAME)". Escaped references + will never be expanded, regardless of whether the variable + exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within a shell. + The container image''s ENTRYPOINT is used if this is not provided. + Variable references $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, the reference + in the input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) syntax: + i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + Escaped references will never be expanded, regardless of whether + the variable exists or not. Cannot be updated. More info: + https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + env: + description: List of environment variables to set in the container. + Cannot be updated. + items: + description: EnvVar represents an environment variable present + in a Container. + properties: + name: + description: Name of the environment variable. Must be + a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded + using the previously defined environment variables in + the container and any service environment variables. + If a variable cannot be resolved, the reference in the + input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) + syntax: i.e. "$$(VAR_NAME)" will produce the string + literal "$(VAR_NAME)". Escaped references will never + be expanded, regardless of whether the variable exists + or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. + Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap or + its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: This is accessible behind a feature flag + - kubernetes.podspec-fieldref + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + resourceFieldRef: + description: This is accessible behind a feature flag + - kubernetes.podspec-fieldref + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment variables + in the container. The keys defined within a source must be + a C_IDENTIFIER. All invalid keys will be reported as an event + when the container is starting. When a key exists in multiple + sources, the value associated with the last source will take + precedence. Values defined by an Env with a duplicate key + will take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source of a set + of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap must be + defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend to each + key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level config management + to default or override container images in workload controllers + like Deployments and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, Never, IfNotPresent. + Defaults to Always if :latest tag is specified, or IfNotPresent + otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + livenessProbe: + description: 'Periodic probe of container liveness. Container + will be restarted if the probe fails. Cannot be updated. More + info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for the + command is root ('/') in the container's filesystem. + The command is simply exec'd, it is not run inside + a shell, so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is treated + as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed after having succeeded. Defaults + to 3. Minimum value is 1. + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the + pod IP. You probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP + allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. + Defaults to HTTP. + type: string + type: object + initialDelaySeconds: + description: 'Number of seconds after the container has + started before liveness probes are initiated. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successful after having failed. Defaults + to 1. Must be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving a TCP + port. + properties: + host: + description: 'Optional: Host name to connect to, defaults + to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + type: object + timeoutSeconds: + description: 'Number of seconds after which the probe times + out. Defaults to 1 second. Minimum value is 1. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as a DNS_LABEL. + Each container in a pod must have a unique name (DNS_LABEL). + Cannot be updated. + type: string + ports: + description: List of ports to expose from the container. Not + specifying a port here DOES NOT prevent that port from being + exposed. Any port which is listening on the default "0.0.0.0" + address inside a container will be accessible from the network. + Modifying this array with strategic merge patch may corrupt + the data. For more information See https://github.com/kubernetes/kubernetes/issues/108255. + Cannot be updated. + items: + description: ContainerPort represents a network port in a + single container. + properties: + containerPort: + description: Number of port to expose on the pod's IP + address. This must be a valid port number, 0 < x < 65536. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME + and unique within the pod. Each named port in a pod + must have a unique name. Name for the port that can + be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, or SCTP. + Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service readiness. + Container will be removed from service endpoints if the probe + fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for the + command is root ('/') in the container's filesystem. + The command is simply exec'd, it is not run inside + a shell, so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is treated + as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed after having succeeded. Defaults + to 3. Minimum value is 1. + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the + pod IP. You probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP + allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. + Defaults to HTTP. + type: string + type: object + initialDelaySeconds: + description: 'Number of seconds after the container has + started before liveness probes are initiated. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successful after having failed. Defaults + to 1. Must be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving a TCP + port. + properties: + host: + description: 'Optional: Host name to connect to, defaults + to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + type: object + timeoutSeconds: + description: 'Number of seconds after which the probe times + out. Defaults to 1 second. Minimum value is 1. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resources: + description: 'Compute Resources required by this container. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, + otherwise to an implementation-defined value. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security options the + container should be run with. If set, the fields of SecurityContext + override the equivalent fields of PodSecurityContext. More + info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls whether + a process can gain more privileges than its parent process. + This bool directly controls if the no_new_privs flag will + be set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) run as Privileged + 2) has CAP_SYS_ADMIN Note that this field cannot be set + when spec.os.name is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop when running containers. + Defaults to the default set of capabilities granted by + the container runtime. Note that this field cannot be + set when spec.os.name is windows. + properties: + add: + description: This is accessible behind a feature flag + - kubernetes.containerspec-addcapabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + readOnlyRootFilesystem: + description: Whether this container has a read-only root + filesystem. Default is false. Note that this field cannot + be set when spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. Uses runtime default if unset. May also be set + in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. Note that this field cannot be set when + spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as a + non-root user. If true, the Kubelet will validate the + image at runtime to ensure that it does not run as UID + 0 (root) and fail to start the container if it does. If + unset or false, no such validation will be performed. + May also be set in PodSecurityContext. If set in both + SecurityContext and PodSecurityContext, the value specified + in SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. Defaults to user specified in image metadata + if unspecified. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name is windows. + format: int64 + type: integer + seccompProfile: + description: The seccomp options to use by this container. + If seccomp options are provided at both the pod & container + level, the container options override the pod options. + Note that this field cannot be set when spec.os.name is + windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile defined + in a file on the node should be used. The profile + must be preconfigured on the node to work. Must be + a descending path, relative to the kubelet's configured + seccomp profile location. Must only be set if type + is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp profile + will be applied. Valid options are: \n Localhost - + a profile defined in a file on the node should be + used. RuntimeDefault - the container runtime default + profile should be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + type: object + terminationMessagePath: + description: 'Optional: Path at which the file to which the + container''s termination message will be written is mounted + into the container''s filesystem. Message written is intended + to be brief final status, such as an assertion failure message. + Will be truncated by the node if greater than 4096 bytes. + The total message length across all containers will be limited + to 12kb. Defaults to /dev/termination-log. Cannot be updated.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should be + populated. File will use the contents of terminationMessagePath + to populate the container status message on both success and + failure. FallbackToLogsOnError will use the last chunk of + container log output if the termination message file is empty + and the container exited with an error. The log output is + limited to 2048 bytes or 80 lines, whichever is smaller. Defaults + to File. Cannot be updated. + type: string + volumeMounts: + description: Pod volumes to mount into the container's filesystem. + Cannot be updated. + items: + description: VolumeMount describes a mounting of a Volume + within a container. + properties: + mountPath: + description: Path within the container at which the volume + should be mounted. Must not contain ':'. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write otherwise + (false or unspecified). Defaults to false. + type: boolean + subPath: + description: Path within the volume from which the container's + volume should be mounted. Defaults to "" (volume's root). + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If not specified, + the container runtime's default will be used, which might + be configured in the container image. Cannot be updated. + type: string + type: object + type: array + dnsConfig: + description: This is accessible behind a feature flag - kubernetes.podspec-dnsconfig + type: object + x-kubernetes-preserve-unknown-fields: true + dnsPolicy: + description: This is accessible behind a feature flag - kubernetes.podspec-dnspolicy + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information about + services should be injected into pod''s environment variables, matching + the syntax of Docker links. Optional: Knative defaults this to false.' + type: boolean + hostAliases: + description: This is accessible behind a feature flag - kubernetes.podspec-hostaliases + items: + description: This is accessible behind a feature flag - kubernetes.podspec-hostaliases + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + idleTimeoutSeconds: + description: IdleTimeoutSeconds is the maximum duration in seconds + a request will be allowed to stay open while not receiving any bytes + from the user's application. If unspecified, a system default will + be provided. + format: int64 + type: integer + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of references to + secrets in the same namespace to use for pulling any of the images + used by this PodSpec. If specified, these secrets will be passed + to individual puller implementations for them to use. More info: + https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + items: + description: LocalObjectReference contains enough information to + let you locate the referenced object inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + initContainers: + description: 'List of initialization containers belonging to the pod. + Init containers are executed in order prior to containers being + started. If any init container fails, the pod is considered to have + failed and is handled according to its restartPolicy. The name for + an init container or normal container must be unique among all containers. + Init containers may not have Lifecycle actions, Readiness probes, + Liveness probes, or Startup probes. The resourceRequirements of + an init container are taken into account during scheduling by finding + the highest request/limit for each resource type, and then using + the max of of that value or the sum of the normal containers. Limits + are applied to init containers in a similar fashion. Init containers + cannot currently be added or removed. Cannot be updated. More info: + https://kubernetes.io/docs/concepts/workloads/pods/init-containers/' + items: + description: This is accessible behind a feature flag - kubernetes.podspec-init-containers + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + nodeSelector: + description: This is accessible behind a feature flag - kubernetes.podspec-nodeselector + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + priorityClassName: + description: This is accessible behind a feature flag - kubernetes.podspec-priorityclassname + type: string + x-kubernetes-preserve-unknown-fields: true + responseStartTimeoutSeconds: + description: ResponseStartTimeoutSeconds is the maximum duration in + seconds that the request routing layer will wait for a request delivered + to a container to begin sending any network traffic. + format: int64 + type: integer + runtimeClassName: + description: This is accessible behind a feature flag - kubernetes.podspec-runtimeclassname + type: string + x-kubernetes-preserve-unknown-fields: true + schedulerName: + description: This is accessible behind a feature flag - kubernetes.podspec-schedulername + type: string + x-kubernetes-preserve-unknown-fields: true + securityContext: + description: This is accessible behind a feature flag - kubernetes.podspec-securitycontext + type: object + x-kubernetes-preserve-unknown-fields: true + serviceAccountName: + description: 'ServiceAccountName is the name of the ServiceAccount + to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + timeoutSeconds: + description: TimeoutSeconds is the maximum duration in seconds that + the request instance is allowed to respond to a request. If unspecified, + a system default will be provided. + format: int64 + type: integer + tolerations: + description: This is accessible behind a feature flag - kubernetes.podspec-tolerations + items: + description: This is accessible behind a feature flag - kubernetes.podspec-tolerations + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + topologySpreadConstraints: + description: This is accessible behind a feature flag - kubernetes.podspec-topologyspreadconstraints + items: + description: This is accessible behind a feature flag - kubernetes.podspec-topologyspreadconstraints + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + volumes: + description: 'List of volumes that can be mounted by containers belonging + to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + items: + description: Volume represents a named volume in a pod that may + be accessed by any container in the pod. + properties: + configMap: + description: configMap represents a configMap that should populate + this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode bits used to + set permissions on created files by default. Must be an + octal value between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. Defaults to + 0644. Directories within the path are not affected by + this setting. This might be in conflict with other options + that affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value pair in + the Data field of the referenced ConfigMap will be projected + into the volume as a file whose name is the key and content + is the value. If specified, the listed keys will be projected + into the specified paths, and unlisted keys will not be + present. If a key is specified which is not present in + the ConfigMap, the volume setup will error unless it is + marked optional. Paths must be relative and may not contain + the '..' path or start with '..'. + items: + description: Maps a string key to a path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits used to + set permissions on this file. Must be an octal value + between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. If not + specified, the volume defaultMode will be used. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of the file + to map the key to. May not be an absolute path. + May not contain the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: optional specify whether the ConfigMap or its + keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + emptyDir: + description: This is accessible behind a feature flag - kubernetes.podspec-emptydir + type: object + x-kubernetes-preserve-unknown-fields: true + name: + description: 'name of the volume. Must be a DNS_LABEL and unique + within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + persistentVolumeClaim: + description: This is accessible behind a feature flag - kubernetes.podspec-persistent-volume-claim + type: object + x-kubernetes-preserve-unknown-fields: true + projected: + description: projected items for all in one resources secrets, + configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits used to set permissions + on created files by default. Must be an octal value between + 0000 and 0777 or a decimal value between 0 and 511. YAML + accepts both octal and decimal values, JSON requires decimal + values for mode bits. Directories within the path are + not affected by this setting. This might be in conflict + with other options that affect the file mode, like fsGroup, + and the result can be other mode bits set. + format: int32 + type: integer + sources: + description: sources is the list of volume projections + items: + description: Projection that may be projected along with + other supported volume types + properties: + configMap: + description: configMap information about the configMap + data to project + properties: + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced ConfigMap + will be projected into the volume as a file + whose name is the key and content is the value. + If specified, the listed keys will be projected + into the specified paths, and unlisted keys + will not be present. If a key is specified which + is not present in the ConfigMap, the volume + setup will error unless it is marked optional. + Paths must be relative and may not contain the + '..' path or start with '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. + Must be an octal value between 0000 and + 0777 or a decimal value between 0 and + 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. If not specified, the volume + defaultMode will be used. This might be + in conflict with other options that affect + the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be + an absolute path. May not contain the + path element '..'. May not start with + the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: optional specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information about the downwardAPI + data to project + properties: + items: + description: Items is a list of DownwardAPIVolume + file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects a field + of the pod: only annotations, labels, + name and namespace are supported.' + properties: + apiVersion: + description: Version of the schema the + FieldPath is written in terms of, + defaults to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits used to + set permissions on this file, must be + an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML + accepts both octal and decimal values, + JSON requires decimal values for mode + bits. If not specified, the volume defaultMode + will be used. This might be in conflict + with other options that affect the file + mode, like fsGroup, and the result can + be other mode bits set.' + format: int32 + type: integer + path: + description: 'Required: Path is the relative + path name of the file to be created. Must + not be absolute or contain the ''..'' + path. Must be utf-8 encoded. The first + item of the relative path must not start + with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of the + container: only resources limits and requests + (limits.cpu, limits.memory, requests.cpu + and requests.memory) are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults + to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to + select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about the secret data + to project + properties: + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced Secret + will be projected into the volume as a file + whose name is the key and content is the value. + If specified, the listed keys will be projected + into the specified paths, and unlisted keys + will not be present. If a key is specified which + is not present in the Secret, the volume setup + will error unless it is marked optional. Paths + must be relative and may not contain the '..' + path or start with '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. + Must be an octal value between 0000 and + 0777 or a decimal value between 0 and + 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. If not specified, the volume + defaultMode will be used. This might be + in conflict with other options that affect + the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be + an absolute path. May not contain the + path element '..'. May not start with + the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: optional field specify whether the + Secret or its key must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is information about + the serviceAccountToken data to project + properties: + audience: + description: audience is the intended audience + of the token. A recipient of a token must identify + itself with an identifier specified in the audience + of the token, and otherwise should reject the + token. The audience defaults to the identifier + of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is the requested + duration of validity of the service account + token. As the token approaches expiration, the + kubelet volume plugin will proactively rotate + the service account token. The kubelet will + start trying to rotate the token if the token + is older than 80 percent of its time to live + or if the token is older than 24 hours.Defaults + to 1 hour and must be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative to the + mount point of the file to project the token + into. + type: string + required: + - path + type: object + type: object + type: array + type: object + secret: + description: 'secret represents a secret that should populate + this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode bits used to + set permissions on created files by default. Must be an + octal value between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. Defaults to + 0644. Directories within the path are not affected by + this setting. This might be in conflict with other options + that affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value pair in + the Data field of the referenced Secret will be projected + into the volume as a file whose name is the key and content + is the value. If specified, the listed keys will be projected + into the specified paths, and unlisted keys will not be + present. If a key is specified which is not present in + the Secret, the volume setup will error unless it is marked + optional. Paths must be relative and may not contain the + '..' path or start with '..'. + items: + description: Maps a string key to a path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits used to + set permissions on this file. Must be an octal value + between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. If not + specified, the volume defaultMode will be used. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of the file + to map the key to. May not be an absolute path. + May not contain the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether the Secret or + its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the secret in the + pod''s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + status: + description: RevisionStatus communicates the observed state of the Revision + (from the controller). + properties: + actualReplicas: + description: ActualReplicas reflects the amount of ready pods running + this revision. + format: int32 + type: integer + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + containerStatuses: + description: 'ContainerStatuses is a slice of images present in .Spec.Container[*].Image + to their respective digests and their container name. The digests + are resolved during the creation of Revision. ContainerStatuses + holds the container name and image digests for both serving and + non serving containers. ref: http://bit.ly/image-digests' + items: + description: ContainerStatus holds the information of container + name and image digest value + properties: + imageDigest: + type: string + name: + type: string + type: object + type: array + desiredReplicas: + description: DesiredReplicas reflects the desired amount of pods running + this revision. + format: int32 + type: integer + initContainerStatuses: + description: 'InitContainerStatuses is a slice of images present in + .Spec.InitContainer[*].Image to their respective digests and their + container name. The digests are resolved during the creation of + Revision. ContainerStatuses holds the container name and image digests + for both serving and non serving containers. ref: http://bit.ly/image-digests' + items: + description: ContainerStatus holds the information of container + name and image digest value + properties: + imageDigest: + type: string + name: + type: string + type: object + type: array + logUrl: + description: LogURL specifies the generated logging url for this particular + revision based on the revision url template specified in the controller's + config. + type: string + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + duck.knative.dev/addressable: "true" + knative.dev/crd-install: "true" + name: routes.serving.knative.dev +spec: + group: serving.knative.dev + names: + categories: + - all + - knative + - serving + kind: Route + plural: routes + shortNames: + - rt + singular: route + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.url + name: URL + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: 'Route is responsible for configuring ingress over a collection + of Revisions. Some of the Revisions a Route distributes traffic over may + be specified by referencing the Configuration responsible for creating them; + in these cases the Route is additionally responsible for monitoring the + Configuration for "latest ready revision" changes, and smoothly rolling + out latest revisions. See also: https://github.com/knative/serving/blob/main/docs/spec/overview.md#route' + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec holds the desired state of the Route (from the client). + properties: + traffic: + description: Traffic specifies how to distribute traffic over a collection + of revisions and configurations. + items: + description: TrafficTarget holds a single entry of the routing table + for a Route. + properties: + configurationName: + description: ConfigurationName of a configuration to whose latest + revision we will send this portion of traffic. When the "status.latestReadyRevisionName" + of the referenced configuration changes, we will automatically + migrate traffic from the prior "latest ready" revision to + the new one. This field is never set in Route's status, only + its spec. This is mutually exclusive with RevisionName. + type: string + latestRevision: + description: LatestRevision may be optionally provided to indicate + that the latest ready Revision of the Configuration should + be used for this traffic target. When provided LatestRevision + must be true if RevisionName is empty; it must be false when + RevisionName is non-empty. + type: boolean + percent: + description: 'Percent indicates that percentage based routing + should be used and the value indicates the percent of traffic + that is be routed to this Revision or Configuration. `0` (zero) + mean no traffic, `100` means all traffic. When percentage + based routing is being used the follow rules apply: - the + sum of all percent values must equal 100 - when not specified, + the implied value for `percent` is zero for that particular + Revision or Configuration' + format: int64 + type: integer + revisionName: + description: RevisionName of a specific revision to which to + send this portion of traffic. This is mutually exclusive + with ConfigurationName. + type: string + tag: + description: Tag is optionally used to expose a dedicated url + for referencing this target exclusively. + type: string + url: + description: URL displays the URL for accessing named traffic + targets. URL is displayed in status, and is disallowed on + spec. URL must contain a scheme (e.g. http://) and a hostname, + but may not contain anything else (e.g. basic auth, url path, + etc.) + type: string + type: object + type: array + type: object + status: + description: Status communicates the observed state of the Route (from + the controller). + properties: + address: + description: Address holds the information needed for a Route to be + the target of an event. + properties: + CACerts: + description: CACerts is the Certification Authority (CA) certificates + in PEM format according to https://www.rfc-editor.org/rfc/rfc7468. + type: string + name: + description: Name is the name of the address. + type: string + url: + type: string + type: object + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + traffic: + description: Traffic holds the configured traffic distribution. These + entries will always contain RevisionName references. When ConfigurationName + appears in the spec, this will hold the LatestReadyRevisionName + that we last observed. + items: + description: TrafficTarget holds a single entry of the routing table + for a Route. + properties: + configurationName: + description: ConfigurationName of a configuration to whose latest + revision we will send this portion of traffic. When the "status.latestReadyRevisionName" + of the referenced configuration changes, we will automatically + migrate traffic from the prior "latest ready" revision to + the new one. This field is never set in Route's status, only + its spec. This is mutually exclusive with RevisionName. + type: string + latestRevision: + description: LatestRevision may be optionally provided to indicate + that the latest ready Revision of the Configuration should + be used for this traffic target. When provided LatestRevision + must be true if RevisionName is empty; it must be false when + RevisionName is non-empty. + type: boolean + percent: + description: 'Percent indicates that percentage based routing + should be used and the value indicates the percent of traffic + that is be routed to this Revision or Configuration. `0` (zero) + mean no traffic, `100` means all traffic. When percentage + based routing is being used the follow rules apply: - the + sum of all percent values must equal 100 - when not specified, + the implied value for `percent` is zero for that particular + Revision or Configuration' + format: int64 + type: integer + revisionName: + description: RevisionName of a specific revision to which to + send this portion of traffic. This is mutually exclusive + with ConfigurationName. + type: string + tag: + description: Tag is optionally used to expose a dedicated url + for referencing this target exclusively. + type: string + url: + description: URL displays the URL for accessing named traffic + targets. URL is displayed in status, and is disallowed on + spec. URL must contain a scheme (e.g. http://) and a hostname, + but may not contain anything else (e.g. basic auth, url path, + etc.) + type: string + type: object + type: array + url: + description: URL holds the url that will distribute traffic over the + provided traffic targets. It generally has the form http[s]://{route-name}.{route-namespace}.{cluster-level-suffix} + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: scheduledworkflows.kubeflow.org +spec: + group: kubeflow.org + names: + kind: ScheduledWorkflow + listKind: ScheduledWorkflowList + plural: scheduledworkflows + shortNames: + - swf + singular: scheduledworkflow + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - spec + - status + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/addressable: "true" + knative.dev/crd-install: "true" + kustomize.component: knative + name: sequences.flows.knative.dev +spec: + group: flows.knative.dev + names: + categories: + - all + - knative + - flows + kind: Sequence + plural: sequences + singular: sequence + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.address.url + name: URL + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: Sequence defines a sequence of Subscribers that will be wired + in series through Channels and Subscriptions. + properties: + spec: + description: Spec defines the desired state of the Sequence. + properties: + channelTemplate: + description: ChannelTemplate specifies which Channel CRD to use. If + left unspecified, it is set to the default Channel CRD for the namespace + (or cluster, in case there are no defaults for the namespace). + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this + representation of an object. Servers should convert recognized + schemas to the latest internal value, and may reject unrecognized + values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: Spec defines the Spec to use for each channel created. + Passed in verbatim to the Channel CRD as Spec section. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + reply: + description: Reply is a Reference to where the result of the last + Subscriber gets sent to. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + steps: + description: Steps is the list of Destinations (processors / functions) + that will be called in the order provided. Each step has its own + delivery options + items: + properties: + delivery: + description: Delivery is the delivery specification for events + to the subscriber This includes things like retries, DLQ, + etc. + properties: + backoffDelay: + description: 'BackoffDelay is the delay before retrying. + More information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html + - https://en.wikipedia.org/wiki/ISO_8601 For linear policy, + backoff delay is backoffDelay*. For exponential + policy, backoff delay is backoffDelay*2^.' + type: string + backoffPolicy: + description: BackoffPolicy is the retry backoff policy (linear, + exponential). + type: string + deadLetterSink: + description: DeadLetterSink is the sink receiving event + that could not be sent to a destination. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the + object holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme + and non-empty host) pointing to the target or a relative + URI. Relative URIs will be resolved using the base + URI retrieved from Ref. + type: string + type: object + retry: + description: Retry is the minimum number of retries the + sender should attempt when sending an event before moving + it to the dead letter sink. + format: int32 + type: integer + type: object + x-kubernetes-preserve-unknown-fields: true + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and + non-empty host) pointing to the target or a relative URI. + Relative URIs will be resolved using the base URI retrieved + from Ref. + type: string + type: object + type: array + type: object + status: + description: Status represents the current state of the Sequence. This + data may be out of date. + properties: + address: + properties: + url: + type: string + type: object + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + channelStatuses: + description: ChannelStatuses is an array of corresponding Channel + statuses. Matches the Spec.Steps array in the order. + items: + properties: + channel: + description: Channel is the reference to the underlying channel. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead + of an entire object, this string should contain a valid + JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container + within a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that + triggered the event) or if no container name is specified + "spec.containers[2]" (container with index 2 in this pod). + This syntax is chosen only to have some well-defined way + of referencing a part of an object.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + ready: + description: ReadyCondition indicates whether the Channel is + ready or not. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating + equality.Semantic differences (all other things held constant). + type: string + message: + description: A human readable message indicating details + about the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this + type of condition. When this is not specified, it defaults + to Error. + type: string + status: + description: Status of the condition, one of True, False, + Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: object + type: array + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + subscriptionStatuses: + description: SubscriptionStatuses is an array of corresponding Subscription + statuses. Matches the Spec.Steps array in the order. + items: + properties: + ready: + description: ReadyCondition indicates whether the Subscription + is ready or not. + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating + equality.Semantic differences (all other things held constant). + type: string + message: + description: A human readable message indicating details + about the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this + type of condition. When this is not specified, it defaults + to Error. + type: string + status: + description: Status of the condition, one of True, False, + Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + subscription: + description: Subscription is the reference to the underlying + Subscription. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead + of an entire object, this string should contain a valid + JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container + within a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that + triggered the event) or if no container name is specified + "spec.containers[2]" (container with index 2 in this pod). + This syntax is chosen only to have some well-defined way + of referencing a part of an object.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: networking + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + knative.dev/crd-install: "true" + name: serverlessservices.networking.internal.knative.dev +spec: + group: networking.internal.knative.dev + names: + categories: + - knative-internal + - networking + kind: ServerlessService + plural: serverlessservices + shortNames: + - sks + singular: serverlessservice + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.mode + name: Mode + type: string + - jsonPath: .spec.numActivators + name: Activators + type: integer + - jsonPath: .status.serviceName + name: ServiceName + type: string + - jsonPath: .status.privateServiceName + name: PrivateServiceName + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: 'ServerlessService is a proxy for the K8s service objects containing + the endpoints for the revision, whether those are endpoints of the activator + or revision pods. See: https://knative.page.link/naxz for details.' + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: 'Spec is the desired state of the ServerlessService. More + info: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + mode: + description: Mode describes the mode of operation of the ServerlessService. + type: string + numActivators: + description: NumActivators contains number of Activators that this + revision should be assigned. O means — assign all. + format: int32 + type: integer + objectRef: + description: ObjectRef defines the resource that this ServerlessService + is responsible for making "serverless". + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + x-kubernetes-map-type: atomic + protocolType: + description: The application-layer protocol. Matches `RevisionProtocolType` + set on the owning pa/revision. serving imports networking, so just + use string. + type: string + required: + - objectRef + - protocolType + type: object + status: + description: 'Status is the current state of the ServerlessService. More + info: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + privateServiceName: + description: PrivateServiceName holds the name of a core K8s Service + resource that load balances over the user service pods backing this + Revision. + type: string + serviceName: + description: ServiceName holds the name of a core K8s Service resource + that load balances over the pods backing this Revision (activator + or revision). + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: serviceentries.networking.istio.io +spec: + group: networking.istio.io + names: + categories: + - istio-io + - networking-istio-io + kind: ServiceEntry + listKind: ServiceEntryList + plural: serviceentries + shortNames: + - se + singular: serviceentry + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The hosts associated with the ServiceEntry + jsonPath: .spec.hosts + name: Hosts + type: string + - description: Whether the service is external to the mesh or part of the mesh + (MESH_EXTERNAL or MESH_INTERNAL) + jsonPath: .spec.location + name: Location + type: string + - description: Service resolution mode for the hosts (NONE, STATIC, or DNS) + jsonPath: .spec.resolution + name: Resolution + type: string + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha3 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting service registry. See more details + at: https://istio.io/docs/reference/config/networking/service-entry.html' + properties: + addresses: + description: The virtual IP addresses associated with the service. + items: + type: string + type: array + endpoints: + description: One or more endpoints associated with the service. + items: + properties: + address: + type: string + labels: + additionalProperties: + type: string + description: One or more labels associated with the endpoint. + type: object + locality: + description: The locality associated with the endpoint. + type: string + network: + type: string + ports: + additionalProperties: + type: integer + description: Set of ports associated with the endpoint. + type: object + serviceAccount: + type: string + weight: + description: The load balancing weight associated with the endpoint. + type: integer + type: object + type: array + exportTo: + description: A list of namespaces to which this service is exported. + items: + type: string + type: array + hosts: + description: The hosts associated with the ServiceEntry. + items: + type: string + type: array + location: + enum: + - MESH_EXTERNAL + - MESH_INTERNAL + type: string + ports: + description: The ports associated with the external service. + items: + properties: + name: + description: Label assigned to the port. + type: string + number: + description: A valid non-negative integer port number. + type: integer + protocol: + description: The protocol exposed on the port. + type: string + targetPort: + type: integer + type: object + type: array + resolution: + description: Service resolution mode for the hosts. + enum: + - NONE + - STATIC + - DNS + - DNS_ROUND_ROBIN + type: string + subjectAltNames: + items: + type: string + type: array + workloadSelector: + description: Applicable only for MESH_INTERNAL services. + properties: + labels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: The hosts associated with the ServiceEntry + jsonPath: .spec.hosts + name: Hosts + type: string + - description: Whether the service is external to the mesh or part of the mesh + (MESH_EXTERNAL or MESH_INTERNAL) + jsonPath: .spec.location + name: Location + type: string + - description: Service resolution mode for the hosts (NONE, STATIC, or DNS) + jsonPath: .spec.resolution + name: Resolution + type: string + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting service registry. See more details + at: https://istio.io/docs/reference/config/networking/service-entry.html' + properties: + addresses: + description: The virtual IP addresses associated with the service. + items: + type: string + type: array + endpoints: + description: One or more endpoints associated with the service. + items: + properties: + address: + type: string + labels: + additionalProperties: + type: string + description: One or more labels associated with the endpoint. + type: object + locality: + description: The locality associated with the endpoint. + type: string + network: + type: string + ports: + additionalProperties: + type: integer + description: Set of ports associated with the endpoint. + type: object + serviceAccount: + type: string + weight: + description: The load balancing weight associated with the endpoint. + type: integer + type: object + type: array + exportTo: + description: A list of namespaces to which this service is exported. + items: + type: string + type: array + hosts: + description: The hosts associated with the ServiceEntry. + items: + type: string + type: array + location: + enum: + - MESH_EXTERNAL + - MESH_INTERNAL + type: string + ports: + description: The ports associated with the external service. + items: + properties: + name: + description: Label assigned to the port. + type: string + number: + description: A valid non-negative integer port number. + type: integer + protocol: + description: The protocol exposed on the port. + type: string + targetPort: + type: integer + type: object + type: array + resolution: + description: Service resolution mode for the hosts. + enum: + - NONE + - STATIC + - DNS + - DNS_ROUND_ROBIN + type: string + subjectAltNames: + items: + type: string + type: array + workloadSelector: + description: Applicable only for MESH_INTERNAL services. + properties: + labels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: false + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + duck.knative.dev/addressable: "true" + duck.knative.dev/podspecable: "true" + knative.dev/crd-install: "true" + name: services.serving.knative.dev +spec: + group: serving.knative.dev + names: + categories: + - all + - knative + - serving + kind: Service + plural: services + shortNames: + - kservice + - ksvc + singular: service + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.url + name: URL + type: string + - jsonPath: .status.latestCreatedRevisionName + name: LatestCreated + type: string + - jsonPath: .status.latestReadyRevisionName + name: LatestReady + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: "Service acts as a top-level container that manages a Route and + Configuration which implement a network service. Service exists to provide + a singular abstraction which can be access controlled, reasoned about, and + which encapsulates software lifecycle decisions such as rollout policy and + team resource ownership. Service acts only as an orchestrator of the underlying + Routes and Configurations (much as a kubernetes Deployment orchestrates + ReplicaSets), and its usage is optional but recommended. \n The Service's + controller will track the statuses of its owned Configuration and Route, + reflecting their statuses and conditions as its own. \n See also: https://github.com/knative/serving/blob/main/docs/spec/overview.md#service" + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ServiceSpec represents the configuration for the Service + object. A Service's specification is the union of the specifications + for a Route and Configuration. The Service restricts what can be expressed + in these fields, e.g. the Route must reference the provided Configuration; + however, these limitations also enable friendlier defaulting, e.g. Route + never needs a Configuration name, and may be defaulted to the appropriate + "run latest" spec. + properties: + template: + description: Template holds the latest specification for the Revision + to be stamped out. + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + x-kubernetes-preserve-unknown-fields: true + spec: + description: RevisionSpec holds the desired state of the Revision + (from the client). + properties: + affinity: + description: This is accessible behind a feature flag - kubernetes.podspec-affinity + type: object + x-kubernetes-preserve-unknown-fields: true + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates whether + a service account token should be automatically mounted. + type: boolean + containerConcurrency: + description: ContainerConcurrency specifies the maximum allowed + in-flight (concurrent) requests per container of the Revision. Defaults + to `0` which means concurrency to the application is not + limited, and the system decides the target concurrency for + the autoscaler. + format: int64 + type: integer + containers: + description: List of containers belonging to the pod. Containers + cannot currently be added or removed. There must be at least + one container in a Pod. Cannot be updated. + items: + description: A single application container that you want + to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The container + image''s CMD is used if this is not provided. Variable + references $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, the + reference in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for escaping + the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce + the string literal "$(VAR_NAME)". Escaped references + will never be expanded, regardless of whether the + variable exists or not. Cannot be updated. More info: + https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is used + if this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. If + a variable cannot be resolved, the reference in the + input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) + syntax: i.e. "$$(VAR_NAME)" will produce the string + literal "$(VAR_NAME)". Escaped references will never + be expanded, regardless of whether the variable exists + or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + env: + description: List of environment variables to set in + the container. Cannot be updated. + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined environment + variables in the container and any service environment + variables. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)". + Escaped references will never be expanded, regardless + of whether the variable exists or not. Defaults + to "".' + type: string + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: This is accessible behind a feature + flag - kubernetes.podspec-fieldref + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + resourceFieldRef: + description: This is accessible behind a feature + flag - kubernetes.podspec-fieldref + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + secretKeyRef: + description: Selects a key of a secret in + the pod's namespace + properties: + key: + description: The key of the secret to + select from. Must be a valid secret + key. + type: string + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined within + a source must be a C_IDENTIFIER. All invalid keys + will be reported as an event when the container is + starting. When a key exists in multiple sources, the + value associated with the last source will take precedence. + Values defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source of + a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret must + be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level config + management to default or override container images + in workload controllers like Deployments and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, Never, + IfNotPresent. Defaults to Always if :latest tag is + specified, or IfNotPresent otherwise. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. Cannot + be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to + execute inside the container, the working + directory for the command is root ('/') in + the container's filesystem. The command is + simply exec'd, it is not run inside a shell, + so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is + treated as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the + probe to be considered failed after having succeeded. + Defaults to 3. Minimum value is 1. + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. You probably want to set "Host" + in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + type: object + initialDelaySeconds: + description: 'Number of seconds after the container + has started before liveness probes are initiated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the + probe. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the + probe to be considered successful after having + failed. Defaults to 1. Must be 1 for liveness + and startup. Minimum value is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + type: object + timeoutSeconds: + description: 'Number of seconds after which the + probe times out. Defaults to 1 second. Minimum + value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as a DNS_LABEL. + Each container in a pod must have a unique name (DNS_LABEL). + Cannot be updated. + type: string + ports: + description: List of ports to expose from the container. + Not specifying a port here DOES NOT prevent that port + from being exposed. Any port which is listening on + the default "0.0.0.0" address inside a container will + be accessible from the network. Modifying this array + with strategic merge patch may corrupt the data. For + more information See https://github.com/kubernetes/kubernetes/issues/108255. + Cannot be updated. + items: + description: ContainerPort represents a network port + in a single container. + properties: + containerPort: + description: Number of port to expose on the pod's + IP address. This must be a valid port number, + 0 < x < 65536. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME + and unique within the pod. Each named port in + a pod must have a unique name. Name for the + port that can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, + or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service readiness. + Container will be removed from service endpoints if + the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to + execute inside the container, the working + directory for the command is root ('/') in + the container's filesystem. The command is + simply exec'd, it is not run inside a shell, + so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is + treated as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the + probe to be considered failed after having succeeded. + Defaults to 3. Minimum value is 1. + format: int32 + type: integer + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, defaults + to the pod IP. You probably want to set "Host" + in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom + header to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to + the host. Defaults to HTTP. + type: string + type: object + initialDelaySeconds: + description: 'Number of seconds after the container + has started before liveness probes are initiated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the + probe. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the + probe to be considered successful after having + failed. Defaults to 1. Must be 1 for liveness + and startup. Minimum value is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving + a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + type: object + timeoutSeconds: + description: 'Number of seconds after which the + probe times out. Defaults to 1 second. Minimum + value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resources: + description: 'Compute Resources required by this container. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount + of compute resources required. If Requests is + omitted for a container, it defaults to Limits + if that is explicitly specified, otherwise to + an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security options + the container should be run with. If set, the fields + of SecurityContext override the equivalent fields + of PodSecurityContext. More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges than + its parent process. This bool directly controls + if the no_new_privs flag will be set on the container + process. AllowPrivilegeEscalation is true always + when the container is: 1) run as Privileged 2) + has CAP_SYS_ADMIN Note that this field cannot + be set when spec.os.name is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop when running + containers. Defaults to the default set of capabilities + granted by the container runtime. Note that this + field cannot be set when spec.os.name is windows. + properties: + add: + description: This is accessible behind a feature + flag - kubernetes.containerspec-addcapabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + readOnlyRootFilesystem: + description: Whether this container has a read-only + root filesystem. Default is false. Note that this + field cannot be set when spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the + container process. Uses runtime default if unset. + May also be set in PodSecurityContext. If set + in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name + is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run + as a non-root user. If true, the Kubelet will + validate the image at runtime to ensure that it + does not run as UID 0 (root) and fail to start + the container if it does. If unset or false, no + such validation will be performed. May also be + set in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the + container process. Defaults to user specified + in image metadata if unspecified. May also be + set in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence. Note that this + field cannot be set when spec.os.name is windows. + format: int64 + type: integer + seccompProfile: + description: The seccomp options to use by this + container. If seccomp options are provided at + both the pod & container level, the container + options override the pod options. Note that this + field cannot be set when spec.os.name is windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node should be used. + The profile must be preconfigured on the node + to work. Must be a descending path, relative + to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp + profile will be applied. Valid options are: + \n Localhost - a profile defined in a file + on the node should be used. RuntimeDefault + - the container runtime default profile should + be used. Unconfined - no profile should be + applied." + type: string + required: + - type + type: object + type: object + terminationMessagePath: + description: 'Optional: Path at which the file to which + the container''s termination message will be written + is mounted into the container''s filesystem. Message + written is intended to be brief final status, such + as an assertion failure message. Will be truncated + by the node if greater than 4096 bytes. The total + message length across all containers will be limited + to 12kb. Defaults to /dev/termination-log. Cannot + be updated.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should + be populated. File will use the contents of terminationMessagePath + to populate the container status message on both success + and failure. FallbackToLogsOnError will use the last + chunk of container log output if the termination message + file is empty and the container exited with an error. + The log output is limited to 2048 bytes or 80 lines, + whichever is smaller. Defaults to File. Cannot be + updated. + type: string + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting of a + Volume within a container. + properties: + mountPath: + description: Path within the container at which + the volume should be mounted. Must not contain + ':'. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write + otherwise (false or unspecified). Defaults to + false. + type: boolean + subPath: + description: Path within the volume from which + the container's volume should be mounted. Defaults + to "" (volume's root). + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If not specified, + the container runtime's default will be used, which + might be configured in the container image. Cannot + be updated. + type: string + type: object + type: array + dnsConfig: + description: This is accessible behind a feature flag - kubernetes.podspec-dnsconfig + type: object + x-kubernetes-preserve-unknown-fields: true + dnsPolicy: + description: This is accessible behind a feature flag - kubernetes.podspec-dnspolicy + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information + about services should be injected into pod''s environment + variables, matching the syntax of Docker links. Optional: + Knative defaults this to false.' + type: boolean + hostAliases: + description: This is accessible behind a feature flag - kubernetes.podspec-hostaliases + items: + description: This is accessible behind a feature flag - + kubernetes.podspec-hostaliases + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + idleTimeoutSeconds: + description: IdleTimeoutSeconds is the maximum duration in + seconds a request will be allowed to stay open while not + receiving any bytes from the user's application. If unspecified, + a system default will be provided. + format: int64 + type: integer + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of references + to secrets in the same namespace to use for pulling any + of the images used by this PodSpec. If specified, these + secrets will be passed to individual puller implementations + for them to use. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + items: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same + namespace. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + initContainers: + description: 'List of initialization containers belonging + to the pod. Init containers are executed in order prior + to containers being started. If any init container fails, + the pod is considered to have failed and is handled according + to its restartPolicy. The name for an init container or + normal container must be unique among all containers. Init + containers may not have Lifecycle actions, Readiness probes, + Liveness probes, or Startup probes. The resourceRequirements + of an init container are taken into account during scheduling + by finding the highest request/limit for each resource type, + and then using the max of of that value or the sum of the + normal containers. Limits are applied to init containers + in a similar fashion. Init containers cannot currently be + added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/' + items: + description: This is accessible behind a feature flag - + kubernetes.podspec-init-containers + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + nodeSelector: + description: This is accessible behind a feature flag - kubernetes.podspec-nodeselector + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + priorityClassName: + description: This is accessible behind a feature flag - kubernetes.podspec-priorityclassname + type: string + x-kubernetes-preserve-unknown-fields: true + responseStartTimeoutSeconds: + description: ResponseStartTimeoutSeconds is the maximum duration + in seconds that the request routing layer will wait for + a request delivered to a container to begin sending any + network traffic. + format: int64 + type: integer + runtimeClassName: + description: This is accessible behind a feature flag - kubernetes.podspec-runtimeclassname + type: string + x-kubernetes-preserve-unknown-fields: true + schedulerName: + description: This is accessible behind a feature flag - kubernetes.podspec-schedulername + type: string + x-kubernetes-preserve-unknown-fields: true + securityContext: + description: This is accessible behind a feature flag - kubernetes.podspec-securitycontext + type: object + x-kubernetes-preserve-unknown-fields: true + serviceAccountName: + description: 'ServiceAccountName is the name of the ServiceAccount + to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + timeoutSeconds: + description: TimeoutSeconds is the maximum duration in seconds + that the request instance is allowed to respond to a request. + If unspecified, a system default will be provided. + format: int64 + type: integer + tolerations: + description: This is accessible behind a feature flag - kubernetes.podspec-tolerations + items: + description: This is accessible behind a feature flag - + kubernetes.podspec-tolerations + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + topologySpreadConstraints: + description: This is accessible behind a feature flag - kubernetes.podspec-topologyspreadconstraints + items: + description: This is accessible behind a feature flag - + kubernetes.podspec-topologyspreadconstraints + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + volumes: + description: 'List of volumes that can be mounted by containers + belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + items: + description: Volume represents a named volume in a pod that + may be accessed by any container in the pod. + properties: + configMap: + description: configMap represents a configMap that should + populate this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode bits + used to set permissions on created files by default. + Must be an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML accepts + both octal and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. Directories + within the path are not affected by this setting. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced ConfigMap + will be projected into the volume as a file whose + name is the key and content is the value. If specified, + the listed keys will be projected into the specified + paths, and unlisted keys will not be present. + If a key is specified which is not present in + the ConfigMap, the volume setup will error unless + it is marked optional. Paths must be relative + and may not contain the '..' path or start with + '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. Must + be an octal value between 0000 and 0777 + or a decimal value between 0 and 511. YAML + accepts both octal and decimal values, JSON + requires decimal values for mode bits. If + not specified, the volume defaultMode will + be used. This might be in conflict with + other options that affect the file mode, + like fsGroup, and the result can be other + mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be an + absolute path. May not contain the path + element '..'. May not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: optional specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + emptyDir: + description: This is accessible behind a feature flag + - kubernetes.podspec-emptydir + type: object + x-kubernetes-preserve-unknown-fields: true + name: + description: 'name of the volume. Must be a DNS_LABEL + and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + persistentVolumeClaim: + description: This is accessible behind a feature flag + - kubernetes.podspec-persistent-volume-claim + type: object + x-kubernetes-preserve-unknown-fields: true + projected: + description: projected items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits used + to set permissions on created files by default. + Must be an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML accepts + both octal and decimal values, JSON requires decimal + values for mode bits. Directories within the path + are not affected by this setting. This might be + in conflict with other options that affect the + file mode, like fsGroup, and the result can be + other mode bits set. + format: int32 + type: integer + sources: + description: sources is the list of volume projections + items: + description: Projection that may be projected + along with other supported volume types + properties: + configMap: + description: configMap information about the + configMap data to project + properties: + items: + description: items if unspecified, each + key-value pair in the Data field of + the referenced ConfigMap will be projected + into the volume as a file whose name + is the key and content is the value. + If specified, the listed keys will be + projected into the specified paths, + and unlisted keys will not be present. + If a key is specified which is not present + in the ConfigMap, the volume setup will + error unless it is marked optional. + Paths must be relative and may not contain + the '..' path or start with '..'. + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an octal + value between 0000 and 0777 or + a decimal value between 0 and + 511. YAML accepts both octal and + decimal values, JSON requires + decimal values for mode bits. + If not specified, the volume defaultMode + will be used. This might be in + conflict with other options that + affect the file mode, like fsGroup, + and the result can be other mode + bits set.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map the key + to. May not be an absolute path. + May not contain the path element + '..'. May not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional specify whether + the ConfigMap or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information about + the downwardAPI data to project + properties: + items: + description: Items is a list of DownwardAPIVolume + file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only annotations, + labels, name and namespace are + supported.' + properties: + apiVersion: + description: Version of the + schema the FieldPath is written + in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field + to select in the specified + API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits + used to set permissions on this + file, must be an octal value between + 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts + both octal and decimal values, + JSON requires decimal values for + mode bits. If not specified, the + volume defaultMode will be used. + This might be in conflict with + other options that affect the + file mode, like fsGroup, and the + result can be other mode bits + set.' + format: int32 + type: integer + path: + description: 'Required: Path is the + relative path name of the file + to be created. Must not be absolute + or contain the ''..'' path. Must + be utf-8 encoded. The first item + of the relative path must not + start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu and + requests.memory) are currently + supported.' + properties: + containerName: + description: 'Container name: + required for volumes, optional + for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about the + secret data to project + properties: + items: + description: items if unspecified, each + key-value pair in the Data field of + the referenced Secret will be projected + into the volume as a file whose name + is the key and content is the value. + If specified, the listed keys will be + projected into the specified paths, + and unlisted keys will not be present. + If a key is specified which is not present + in the Secret, the volume setup will + error unless it is marked optional. + Paths must be relative and may not contain + the '..' path or start with '..'. + items: + description: Maps a string key to a + path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an octal + value between 0000 and 0777 or + a decimal value between 0 and + 511. YAML accepts both octal and + decimal values, JSON requires + decimal values for mode bits. + If not specified, the volume defaultMode + will be used. This might be in + conflict with other options that + affect the file mode, like fsGroup, + and the result can be other mode + bits set.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map the key + to. May not be an absolute path. + May not contain the path element + '..'. May not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional field specify whether + the Secret or its key must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is information + about the serviceAccountToken data to project + properties: + audience: + description: audience is the intended + audience of the token. A recipient of + a token must identify itself with an + identifier specified in the audience + of the token, and otherwise should reject + the token. The audience defaults to + the identifier of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is the + requested duration of validity of the + service account token. As the token + approaches expiration, the kubelet volume + plugin will proactively rotate the service + account token. The kubelet will start + trying to rotate the token if the token + is older than 80 percent of its time + to live or if the token is older than + 24 hours.Defaults to 1 hour and must + be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative + to the mount point of the file to project + the token into. + type: string + required: + - path + type: object + type: object + type: array + type: object + secret: + description: 'secret represents a secret that should + populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode bits + used to set permissions on created files by default. + Must be an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML accepts + both octal and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. Directories + within the path are not affected by this setting. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value + pair in the Data field of the referenced Secret + will be projected into the volume as a file whose + name is the key and content is the value. If specified, + the listed keys will be projected into the specified + paths, and unlisted keys will not be present. + If a key is specified which is not present in + the Secret, the volume setup will error unless + it is marked optional. Paths must be relative + and may not contain the '..' path or start with + '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. Must + be an octal value between 0000 and 0777 + or a decimal value between 0 and 511. YAML + accepts both octal and decimal values, JSON + requires decimal values for mode bits. If + not specified, the volume defaultMode will + be used. This might be in conflict with + other options that affect the file mode, + like fsGroup, and the result can be other + mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be an + absolute path. May not contain the path + element '..'. May not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether the + Secret or its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the secret + in the pod''s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + traffic: + description: Traffic specifies how to distribute traffic over a collection + of revisions and configurations. + items: + description: TrafficTarget holds a single entry of the routing table + for a Route. + properties: + configurationName: + description: ConfigurationName of a configuration to whose latest + revision we will send this portion of traffic. When the "status.latestReadyRevisionName" + of the referenced configuration changes, we will automatically + migrate traffic from the prior "latest ready" revision to + the new one. This field is never set in Route's status, only + its spec. This is mutually exclusive with RevisionName. + type: string + latestRevision: + description: LatestRevision may be optionally provided to indicate + that the latest ready Revision of the Configuration should + be used for this traffic target. When provided LatestRevision + must be true if RevisionName is empty; it must be false when + RevisionName is non-empty. + type: boolean + percent: + description: 'Percent indicates that percentage based routing + should be used and the value indicates the percent of traffic + that is be routed to this Revision or Configuration. `0` (zero) + mean no traffic, `100` means all traffic. When percentage + based routing is being used the follow rules apply: - the + sum of all percent values must equal 100 - when not specified, + the implied value for `percent` is zero for that particular + Revision or Configuration' + format: int64 + type: integer + revisionName: + description: RevisionName of a specific revision to which to + send this portion of traffic. This is mutually exclusive + with ConfigurationName. + type: string + tag: + description: Tag is optionally used to expose a dedicated url + for referencing this target exclusively. + type: string + url: + description: URL displays the URL for accessing named traffic + targets. URL is displayed in status, and is disallowed on + spec. URL must contain a scheme (e.g. http://) and a hostname, + but may not contain anything else (e.g. basic auth, url path, + etc.) + type: string + type: object + type: array + type: object + status: + description: ServiceStatus represents the Status stanza of the Service + resource. + properties: + address: + description: Address holds the information needed for a Route to be + the target of an event. + properties: + CACerts: + description: CACerts is the Certification Authority (CA) certificates + in PEM format according to https://www.rfc-editor.org/rfc/rfc7468. + type: string + name: + description: Name is the name of the address. + type: string + url: + type: string + type: object + annotations: + additionalProperties: + type: string + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + description: 'Condition defines a readiness condition for a Knative + resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties' + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - status + - type + type: object + type: array + latestCreatedRevisionName: + description: LatestCreatedRevisionName is the last revision that was + created from this Configuration. It might not be ready yet, for + that use LatestReadyRevisionName. + type: string + latestReadyRevisionName: + description: LatestReadyRevisionName holds the name of the latest + Revision stamped out from this Configuration that has had its "Ready" + condition become "True". + type: string + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + traffic: + description: Traffic holds the configured traffic distribution. These + entries will always contain RevisionName references. When ConfigurationName + appears in the spec, this will hold the LatestReadyRevisionName + that we last observed. + items: + description: TrafficTarget holds a single entry of the routing table + for a Route. + properties: + configurationName: + description: ConfigurationName of a configuration to whose latest + revision we will send this portion of traffic. When the "status.latestReadyRevisionName" + of the referenced configuration changes, we will automatically + migrate traffic from the prior "latest ready" revision to + the new one. This field is never set in Route's status, only + its spec. This is mutually exclusive with RevisionName. + type: string + latestRevision: + description: LatestRevision may be optionally provided to indicate + that the latest ready Revision of the Configuration should + be used for this traffic target. When provided LatestRevision + must be true if RevisionName is empty; it must be false when + RevisionName is non-empty. + type: boolean + percent: + description: 'Percent indicates that percentage based routing + should be used and the value indicates the percent of traffic + that is be routed to this Revision or Configuration. `0` (zero) + mean no traffic, `100` means all traffic. When percentage + based routing is being used the follow rules apply: - the + sum of all percent values must equal 100 - when not specified, + the implied value for `percent` is zero for that particular + Revision or Configuration' + format: int64 + type: integer + revisionName: + description: RevisionName of a specific revision to which to + send this portion of traffic. This is mutually exclusive + with ConfigurationName. + type: string + tag: + description: Tag is optionally used to expose a dedicated url + for referencing this target exclusively. + type: string + url: + description: URL displays the URL for accessing named traffic + targets. URL is displayed in status, and is disallowed on + spec. URL must contain a scheme (e.g. http://) and a hostname, + but may not contain anything else (e.g. basic auth, url path, + etc.) + type: string + type: object + type: array + url: + description: URL holds the url that will distribute traffic over the + provided traffic targets. It generally has the form http[s]://{route-name}.{route-namespace}.{cluster-level-suffix} + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + creationTimestamp: null + labels: + app: kserve + app.kubernetes.io/name: kserve + name: servingruntimes.serving.kserve.io +spec: + group: serving.kserve.io + names: + kind: ServingRuntime + listKind: ServingRuntimeList + plural: servingruntimes + singular: servingruntime + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.disabled + name: Disabled + type: boolean + - jsonPath: .spec.supportedModelFormats[*].name + name: ModelType + type: string + - jsonPath: .spec.containers[*].name + name: Containers + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + type: object + builtInAdapter: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + memBufferBytes: + type: integer + modelLoadingTimeoutMillis: + type: integer + runtimeManagementPort: + type: integer + serverType: + type: string + type: object + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + disabled: + type: boolean + grpcDataEndpoint: + type: string + grpcEndpoint: + type: string + httpDataEndpoint: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + labels: + additionalProperties: + type: string + type: object + multiModel: + type: boolean + nodeSelector: + additionalProperties: + type: string + type: object + protocolVersions: + items: + type: string + type: array + replicas: + type: integer + storageHelper: + properties: + disabled: + type: boolean + type: object + supportedModelFormats: + items: + properties: + autoSelect: + type: boolean + name: + type: string + version: + type: string + required: + - name + type: object + type: array + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + status: + type: object + type: object + served: true + storage: true + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: sidecars.networking.istio.io +spec: + group: networking.istio.io + names: + categories: + - istio-io + - networking-istio-io + kind: Sidecar + listKind: SidecarList + plural: sidecars + singular: sidecar + scope: Namespaced + versions: + - name: v1alpha3 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting network reachability of a sidecar. + See more details at: https://istio.io/docs/reference/config/networking/sidecar.html' + properties: + egress: + items: + properties: + bind: + type: string + captureMode: + enum: + - DEFAULT + - IPTABLES + - NONE + type: string + hosts: + items: + type: string + type: array + port: + description: The port associated with the listener. + properties: + name: + description: Label assigned to the port. + type: string + number: + description: A valid non-negative integer port number. + type: integer + protocol: + description: The protocol exposed on the port. + type: string + targetPort: + type: integer + type: object + type: object + type: array + ingress: + items: + properties: + bind: + description: The IP(IPv4 or IPv6) to which the listener should + be bound. + type: string + captureMode: + enum: + - DEFAULT + - IPTABLES + - NONE + type: string + defaultEndpoint: + type: string + port: + description: The port associated with the listener. + properties: + name: + description: Label assigned to the port. + type: string + number: + description: A valid non-negative integer port number. + type: integer + protocol: + description: The protocol exposed on the port. + type: string + targetPort: + type: integer + type: object + tls: + properties: + caCertificates: + description: REQUIRED if mode is `MUTUAL`. + type: string + cipherSuites: + description: 'Optional: If specified, only support the specified + cipher list.' + items: + type: string + type: array + credentialName: + type: string + httpsRedirect: + type: boolean + maxProtocolVersion: + description: 'Optional: Maximum TLS protocol version.' + enum: + - TLS_AUTO + - TLSV1_0 + - TLSV1_1 + - TLSV1_2 + - TLSV1_3 + type: string + minProtocolVersion: + description: 'Optional: Minimum TLS protocol version.' + enum: + - TLS_AUTO + - TLSV1_0 + - TLSV1_1 + - TLSV1_2 + - TLSV1_3 + type: string + mode: + enum: + - PASSTHROUGH + - SIMPLE + - MUTUAL + - AUTO_PASSTHROUGH + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `SIMPLE` or `MUTUAL`. + type: string + serverCertificate: + description: REQUIRED if mode is `SIMPLE` or `MUTUAL`. + type: string + subjectAltNames: + items: + type: string + type: array + verifyCertificateHash: + items: + type: string + type: array + verifyCertificateSpki: + items: + type: string + type: array + type: object + type: object + type: array + outboundTrafficPolicy: + description: Configuration for the outbound traffic policy. + properties: + egressProxy: + properties: + host: + description: The name of a service from the service registry. + type: string + port: + description: Specifies the port on the host that is being + addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + mode: + enum: + - REGISTRY_ONLY + - ALLOW_ANY + type: string + type: object + workloadSelector: + properties: + labels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting network reachability of a sidecar. + See more details at: https://istio.io/docs/reference/config/networking/sidecar.html' + properties: + egress: + items: + properties: + bind: + type: string + captureMode: + enum: + - DEFAULT + - IPTABLES + - NONE + type: string + hosts: + items: + type: string + type: array + port: + description: The port associated with the listener. + properties: + name: + description: Label assigned to the port. + type: string + number: + description: A valid non-negative integer port number. + type: integer + protocol: + description: The protocol exposed on the port. + type: string + targetPort: + type: integer + type: object + type: object + type: array + ingress: + items: + properties: + bind: + description: The IP(IPv4 or IPv6) to which the listener should + be bound. + type: string + captureMode: + enum: + - DEFAULT + - IPTABLES + - NONE + type: string + defaultEndpoint: + type: string + port: + description: The port associated with the listener. + properties: + name: + description: Label assigned to the port. + type: string + number: + description: A valid non-negative integer port number. + type: integer + protocol: + description: The protocol exposed on the port. + type: string + targetPort: + type: integer + type: object + tls: + properties: + caCertificates: + description: REQUIRED if mode is `MUTUAL`. + type: string + cipherSuites: + description: 'Optional: If specified, only support the specified + cipher list.' + items: + type: string + type: array + credentialName: + type: string + httpsRedirect: + type: boolean + maxProtocolVersion: + description: 'Optional: Maximum TLS protocol version.' + enum: + - TLS_AUTO + - TLSV1_0 + - TLSV1_1 + - TLSV1_2 + - TLSV1_3 + type: string + minProtocolVersion: + description: 'Optional: Minimum TLS protocol version.' + enum: + - TLS_AUTO + - TLSV1_0 + - TLSV1_1 + - TLSV1_2 + - TLSV1_3 + type: string + mode: + enum: + - PASSTHROUGH + - SIMPLE + - MUTUAL + - AUTO_PASSTHROUGH + - ISTIO_MUTUAL + type: string + privateKey: + description: REQUIRED if mode is `SIMPLE` or `MUTUAL`. + type: string + serverCertificate: + description: REQUIRED if mode is `SIMPLE` or `MUTUAL`. + type: string + subjectAltNames: + items: + type: string + type: array + verifyCertificateHash: + items: + type: string + type: array + verifyCertificateSpki: + items: + type: string + type: array + type: object + type: object + type: array + outboundTrafficPolicy: + description: Configuration for the outbound traffic policy. + properties: + egressProxy: + properties: + host: + description: The name of a service from the service registry. + type: string + port: + description: Specifies the port on the host that is being + addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + mode: + enum: + - REGISTRY_ONLY + - ALLOW_ANY + type: string + type: object + workloadSelector: + properties: + labels: + additionalProperties: + type: string + type: object + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: false + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/binding: "true" + duck.knative.dev/source: "true" + eventing.knative.dev/source: "true" + knative.dev/crd-install: "true" + kustomize.component: knative + name: sinkbindings.sources.knative.dev +spec: + group: sources.knative.dev + names: + categories: + - all + - knative + - sources + - bindings + kind: SinkBinding + plural: sinkbindings + singular: sinkbinding + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.sinkUri + name: Sink + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: SinkBinding describes a Binding that is also a Source. The `sink` + (from the Source duck) is resolved to a URL and then projected into the + `subject` by augmenting the runtime contract of the referenced containers + to have a `K_SINK` environment variable holding the endpoint to which to + send cloud events. + properties: + spec: + properties: + ceOverrides: + description: CloudEventOverrides defines overrides to control the + output format and modifications of the event sent to the sink. + properties: + extensions: + description: Extensions specify what attribute are added or overridden + on the outbound event. Each `Extensions` key-value pair are + set on the event as an attribute extension independently. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + sink: + description: Sink is a reference to an object that will resolve to + a uri to use as the sink. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + subject: + description: Subject references the resource(s) whose "runtime contract" + should be augmented by Binding implementations. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: Kind of the referent. + type: string + name: + description: Name of the referent. Mutually exclusive with Selector. + type: string + namespace: + description: Namespace of the referent. + type: string + selector: + description: Selector of the referents. Mutually exclusive with + Name. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If + the operator is In or NotIn, the values array must + be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + type: object + type: array + matchLabels: + description: matchLabels is a map of {key,value} pairs. A + single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is "key", + the operator is "In", and the values array contains only + "value". The requirements are ANDed. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + type: object + status: + properties: + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + ceAttributes: + description: CloudEventAttributes are the specific attributes that + the Source uses as part of its CloudEvents. + items: + properties: + source: + description: Source is the CloudEvents source attribute. + type: string + type: + description: Type refers to the CloudEvent type attribute. + type: string + type: object + type: array + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + sinkUri: + description: SinkURI is the current active sink URI that has been + configured for the Source. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + knative.dev/crd-install: "true" + kustomize.component: knative + name: subscriptions.messaging.knative.dev +spec: + group: messaging.knative.dev + names: + categories: + - all + - knative + - messaging + kind: Subscription + plural: subscriptions + shortNames: + - sub + singular: subscription + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: Subscription routes events received on a Channel to a DNS name + and corresponds to the subscriptions.channels.knative.dev CRD. + properties: + spec: + properties: + channel: + description: 'Reference to a channel that will be used to create the + subscription. You can specify only the following fields of the KReference: + kind, apiVersion and name. The resource pointed by this KReference + must meet the contract to the ChannelableSpec duck type. If the + resource does not meet this contract it will be reflected in the + Subscription''s status. This field is immutable. We have no good + answer on what happens to the events that are currently in the channel + being consumed from and what the semantics there should be. For + now, you can always delete the Subscription and recreate it to point + to a different channel, giving the user more control over what semantics + should be used (drain the channel first, possibly have events dropped, + etc.)' + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + type: object + x-kubernetes-preserve-unknown-fields: true + delivery: + description: Delivery configuration + properties: + backoffDelay: + description: 'BackoffDelay is the delay before retrying. More + information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html + - https://en.wikipedia.org/wiki/ISO_8601 For linear policy, + backoff delay is backoffDelay*. For exponential + policy, backoff delay is backoffDelay*2^.' + type: string + backoffPolicy: + description: BackoffPolicy is the retry backoff policy (linear, + exponential). + type: string + deadLetterSink: + description: DeadLetterSink is the sink receiving event that could + not be sent to a destination. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and + non-empty host) pointing to the target or a relative URI. + Relative URIs will be resolved using the base URI retrieved + from Ref. + type: string + type: object + retry: + description: Retry is the minimum number of retries the sender + should attempt when sending an event before moving it to the + dead letter sink. + format: int32 + type: integer + type: object + x-kubernetes-preserve-unknown-fields: true + reply: + description: Reply specifies (optionally) how to handle events returned + from the Subscriber target. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + subscriber: + description: Subscriber is reference to (optional) function for processing + events. Events from the Channel will be delivered here and replies + are sent to a Destination as specified by the Reply. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + x-kubernetes-preserve-unknown-fields: true + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + type: object + status: + properties: + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + physicalSubscription: + description: PhysicalSubscription is the fully resolved values that + this Subscription represents. + properties: + deadLetterSinkUri: + description: ReplyURI is the fully resolved URI for the spec.delivery.deadLetterSink. + type: string + replyUri: + description: ReplyURI is the fully resolved URI for the spec.reply. + type: string + subscriberUri: + description: SubscriberURI is the fully resolved URI for spec.subscriber. + type: string + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: suggestions.kubeflow.org +spec: + group: kubeflow.org + names: + categories: + - all + - kubeflow + - katib + kind: Suggestion + plural: suggestions + singular: suggestion + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[-1:].type + name: Type + type: string + - jsonPath: .status.conditions[-1:].status + name: Status + type: string + - jsonPath: .spec.requests + name: Requested + type: string + - jsonPath: .status.suggestionCount + name: Assigned + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + istio: telemetry + release: istio + name: telemetries.telemetry.istio.io +spec: + group: telemetry.istio.io + names: + categories: + - istio-io + - telemetry-istio-io + kind: Telemetry + listKind: TelemetryList + plural: telemetries + shortNames: + - telemetry + singular: telemetry + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Telemetry configuration for workloads. See more details + at: https://istio.io/docs/reference/config/telemetry.html' + properties: + accessLogging: + description: Optional. + items: + properties: + disabled: + description: Controls logging. + nullable: true + type: boolean + filter: + description: Optional. + properties: + expression: + description: CEL expression for selecting when requests/connections + should be logged. + type: string + type: object + match: + description: Allows tailoring of logging behavior to specific + conditions. + properties: + mode: + enum: + - CLIENT_AND_SERVER + - CLIENT + - SERVER + type: string + type: object + providers: + description: Optional. + items: + properties: + name: + description: Required. + type: string + type: object + type: array + type: object + type: array + metrics: + description: Optional. + items: + properties: + overrides: + description: Optional. + items: + properties: + disabled: + description: Optional. + nullable: true + type: boolean + match: + description: Match allows provides the scope of the override. + oneOf: + - not: + anyOf: + - required: + - metric + - required: + - customMetric + - required: + - metric + - required: + - customMetric + properties: + customMetric: + description: Allows free-form specification of a metric. + type: string + metric: + description: One of the well-known Istio Standard + Metrics. + enum: + - ALL_METRICS + - REQUEST_COUNT + - REQUEST_DURATION + - REQUEST_SIZE + - RESPONSE_SIZE + - TCP_OPENED_CONNECTIONS + - TCP_CLOSED_CONNECTIONS + - TCP_SENT_BYTES + - TCP_RECEIVED_BYTES + - GRPC_REQUEST_MESSAGES + - GRPC_RESPONSE_MESSAGES + type: string + mode: + enum: + - CLIENT_AND_SERVER + - CLIENT + - SERVER + type: string + type: object + tagOverrides: + additionalProperties: + properties: + operation: + description: Operation controls whether or not to + update/add a tag, or to remove it. + enum: + - UPSERT + - REMOVE + type: string + value: + description: Value is only considered if the operation + is `UPSERT`. + type: string + type: object + description: Optional. + type: object + type: object + type: array + providers: + description: Optional. + items: + properties: + name: + description: Required. + type: string + type: object + type: array + reportingInterval: + description: Optional. + type: string + type: object + type: array + selector: + description: Optional. + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + tracing: + description: Optional. + items: + properties: + customTags: + additionalProperties: + oneOf: + - not: + anyOf: + - required: + - literal + - required: + - environment + - required: + - header + - required: + - literal + - required: + - environment + - required: + - header + properties: + environment: + description: Environment adds the value of an environment + variable to each span. + properties: + defaultValue: + description: Optional. + type: string + name: + description: Name of the environment variable from + which to extract the tag value. + type: string + type: object + header: + properties: + defaultValue: + description: Optional. + type: string + name: + description: Name of the header from which to extract + the tag value. + type: string + type: object + literal: + description: Literal adds the same, hard-coded value to + each span. + properties: + value: + description: The tag value to use. + type: string + type: object + type: object + description: Optional. + type: object + disableSpanReporting: + description: Controls span reporting. + nullable: true + type: boolean + match: + description: Allows tailoring of behavior to specific conditions. + properties: + mode: + enum: + - CLIENT_AND_SERVER + - CLIENT + - SERVER + type: string + type: object + providers: + description: Optional. + items: + properties: + name: + description: Required. + type: string + type: object + type: array + randomSamplingPercentage: + nullable: true + type: number + useRequestIdForTraceSampling: + nullable: true + type: boolean + type: object + type: array + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.8.0 + creationTimestamp: null + labels: + app: tensorboard-controller + kustomize.component: tensorboard-controller + name: tensorboards.tensorboard.kubeflow.org +spec: + group: tensorboard.kubeflow.org + names: + kind: Tensorboard + listKind: TensorboardList + plural: tensorboards + singular: tensorboard + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: Tensorboard is the Schema for the tensorboards API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: TensorboardSpec defines the desired state of Tensorboard + properties: + logspath: + description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster + Important: Run "make" to regenerate code after modifying this file' + type: string + required: + - logspath + type: object + status: + description: TensorboardStatus defines the observed state of Tensorboard + properties: + conditions: + description: Conditions is an array of current conditions + items: + description: TensorboardCondition defines the observed state of + Tensorboard + properties: + deploymentState: + description: Deployment status, 'Available', 'Progressing', + 'ReplicaFailure' . + type: string + lastProbeTime: + description: Last time we probed the condition. + format: date-time + type: string + required: + - deploymentState + type: object + type: array + readyReplicas: + description: ReadyReplicas defines the number of Tensorboard Servers + that are available to connect. The value of ReadyReplicas can be + either 0 or 1 + format: int32 + type: integer + required: + - conditions + - readyReplicas + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.0 + name: tfjobs.kubeflow.org +spec: + group: kubeflow.org + names: + kind: TFJob + listKind: TFJobList + plural: tfjobs + singular: tfjob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[-1:].type + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: TFJob represents a TFJob resource. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Specification of the desired state of the TFJob. + properties: + enableDynamicWorker: + description: A switch to enable dynamic worker + type: boolean + runPolicy: + description: RunPolicy encapsulates various runtime policies of the + distributed training job, for example how to clean up resources + and how long the job can stay active. + properties: + activeDeadlineSeconds: + description: Specifies the duration in seconds relative to the + startTime that the job may be active before the system tries + to terminate it; value must be positive integer. + format: int64 + type: integer + backoffLimit: + description: Optional number of retries before marking this job + failed. + format: int32 + type: integer + cleanPodPolicy: + description: CleanPodPolicy defines the policy to kill pods after + the job completes. Default to None. + type: string + schedulingPolicy: + description: SchedulingPolicy defines the policy related to scheduling, + e.g. gang-scheduling + properties: + minAvailable: + format: int32 + type: integer + minResources: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + priorityClass: + type: string + queue: + type: string + scheduleTimeoutSeconds: + format: int32 + type: integer + type: object + suspend: + default: false + description: suspend specifies whether the Job controller should + create Pods or not. If a Job is created with suspend set to + true, no Pods are created by the Job controller. If a Job is + suspended after creation (i.e. the flag goes from false to true), + the Job controller will delete all active Pods and PodGroups + associated with this Job. Users must design their workload to + gracefully handle this. + type: boolean + ttlSecondsAfterFinished: + description: TTLSecondsAfterFinished is the TTL to clean up jobs. + It may take extra ReconcilePeriod seconds for the cleanup, since + reconcile gets called periodically. Default to infinite. + format: int32 + type: integer + type: object + successPolicy: + description: SuccessPolicy defines the policy to mark the TFJob as + succeeded. Default to "", using the default rules. + type: string + tfReplicaSpecs: + additionalProperties: + description: ReplicaSpec is a description of the replica + properties: + replicas: + description: Replicas is the desired number of replicas of the + given template. If unspecified, defaults to 1. + format: int32 + type: integer + restartPolicy: + description: Restart policy for all replicas within the job. + One of Always, OnFailure, Never and ExitCode. Default to Never. + type: string + template: + description: Template is the object that describes the pod that + will be created for this replica. RestartPolicy in PodTemplateSpec + will be overide by RestartPolicy in ReplicaSpec + properties: + metadata: + description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: 'Specification of the desired behavior of the + pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + activeDeadlineSeconds: + description: Optional duration in seconds the pod may + be active on the node relative to StartTime before + the system will actively try to mark it failed and + kill associated containers. Value must be a positive + integer. + format: int64 + type: integer + affinity: + description: If specified, the pod's scheduling constraints + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: An empty preferred scheduling + term matches all objects with implicit weight + 0 (i.e. it's a no-op). A null preferred + scheduling term matches no objects (i.e. + is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to an update), the + system may or may not try to eventually evict + the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. The requirements + of them are ANDed. The TopologySelectorTerm + type implements a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. co-locate this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to a pod label update), + the system may or may not try to eventually + evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. avoid putting this pod in the same + node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity + expressions specified by this field, but it + may choose a node that violates one or more + of the expressions. The node that is most + preferred is the one with the greatest sum + of weights, i.e. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements + specified by this field are not met at scheduling + time, the pod will not be scheduled onto the + node. If the anti-affinity requirements specified + by this field cease to be met at some point + during pod execution (e.g. due to a pod label + update), the system may or may not try to + eventually evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates + whether a service account token should be automatically + mounted. + type: boolean + containers: + description: List of containers belonging to the pod. + Containers cannot currently be added or removed. There + must be at least one container in a Pod. Cannot be + updated. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + dnsConfig: + description: Specifies the DNS parameters of a pod. + Parameters specified here will be merged to the generated + DNS configuration based on DNSPolicy. + properties: + nameservers: + description: A list of DNS name server IP addresses. + This will be appended to the base nameservers + generated from DNSPolicy. Duplicated nameservers + will be removed. + items: + type: string + type: array + options: + description: A list of DNS resolver options. This + will be merged with the base options generated + from DNSPolicy. Duplicated entries will be removed. + Resolution options given in Options will override + those that appear in the base DNSPolicy. + items: + description: PodDNSConfigOption defines DNS resolver + options of a pod. + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + description: A list of DNS search domains for host-name + lookup. This will be appended to the base search + paths generated from DNSPolicy. Duplicated search + paths will be removed. + items: + type: string + type: array + type: object + dnsPolicy: + description: Set DNS policy for the pod. Defaults to + "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', + 'ClusterFirst', 'Default' or 'None'. DNS parameters + given in DNSConfig will be merged with the policy + selected with DNSPolicy. To have DNS options set along + with hostNetwork, you have to specify DNS policy explicitly + to 'ClusterFirstWithHostNet'. + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information + about services should be injected into pod''s environment + variables, matching the syntax of Docker links. Optional: + Defaults to true.' + type: boolean + ephemeralContainers: + description: List of ephemeral containers run in this + pod. Ephemeral containers may be run in an existing + pod to perform user-initiated actions such as debugging. + This list cannot be specified when creating a pod, + and it cannot be modified by updating the pod spec. + In order to add an ephemeral container to an existing + pod, use the pod's ephemeralcontainers subresource. + items: + description: An EphemeralContainer is a temporary + container that you may add to an existing Pod for + user-initiated activities such as debugging. Ephemeral + containers have no resource or scheduling guarantees, + and they will not be restarted when they exit or + when a Pod is removed or restarted. The kubelet + may evict a Pod if an ephemeral container causes + the Pod to exceed its resource allocation. + properties: + args: + description: 'Arguments to the entrypoint. The + image''s CMD is used if this is not provided. + Variable references $(VAR_NAME) are expanded + using the container''s environment. If a variable + cannot be resolved, the reference in the input + string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will + produce the string literal "$(VAR_NAME)".' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The image''s ENTRYPOINT is used if + this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Lifecycle is not allowed for ephemeral + containers. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the ephemeral container specified + as a DNS_LABEL. This name must be unique among + all containers, init containers and ephemeral + containers. + type: string + ports: + description: Ports are not allowed for ephemeral + containers. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: Resources are not allowed for ephemeral + containers. Ephemeral containers use spare resources + already allocated to the pod. + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'Optional: SecurityContext defines + the security options the ephemeral container + should be run with. If set, the fields of SecurityContext + override the equivalent fields of PodSecurityContext.' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + targetContainerName: + description: "If set, the name of the container + from PodSpec that this ephemeral container targets. + The ephemeral container will be run in the namespaces + (IPC, PID, etc) of this container. If not set + then the ephemeral container uses the namespaces + configured in the Pod spec. \n The container + runtime must implement support for this feature." + type: string + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Subpath mounts are not allowed for + ephemeral containers. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + hostAliases: + description: HostAliases is an optional list of hosts + and IPs that will be injected into the pod's hosts + file if specified. This is only valid for non-hostNetwork + pods. + items: + description: HostAlias holds the mapping between IP + and hostnames that will be injected as an entry + in the pod's hosts file. + properties: + hostnames: + description: Hostnames for the above IP address. + items: + type: string + type: array + ip: + description: IP address of the host file entry. + type: string + type: object + type: array + hostIPC: + description: 'Use the host''s ipc namespace. Optional: + Default to false.' + type: boolean + hostNetwork: + description: Host networking requested for this pod. + Use the host's network namespace. If this option is + set, the ports that will be used must be specified. + Default to false. + type: boolean + hostPID: + description: 'Use the host''s pid namespace. Optional: + Default to false.' + type: boolean + hostUsers: + description: 'Use the host''s user namespace. Optional: + Default to true. If set to true or not present, the + pod will be run in the host user namespace, useful + for when the pod needs a feature only available to + the host user namespace, such as loading a kernel + module with CAP_SYS_MODULE. When set to false, a new + userns is created for the pod.' + type: boolean + hostname: + description: Specifies the hostname of the Pod If not + specified, the pod's hostname will be set to a system-defined + value. + type: string + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of + references to secrets in the same namespace to use + for pulling any of the images used by this PodSpec. + If specified, these secrets will be passed to individual + puller implementations for them to use. More info: + https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + items: + description: LocalObjectReference contains enough + information to let you locate the referenced object + inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + initContainers: + description: List of initialization containers belonging + to the pod. Init containers are executed in order + prior to containers being started. If any init container + fails, the pod is considered to have failed and is + handled according to its restartPolicy. The name for + an init container or normal container must be unique + among all containers. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + nodeName: + description: NodeName is a request to schedule this + pod onto a specific node. If it is non-empty, the + scheduler simply schedules this pod onto that node, + assuming that it fits resource requirements. + type: string + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector which must + be true for the pod to fit on a node. Selector which + must match a node''s labels for the pod to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + x-kubernetes-map-type: atomic + os: + description: "Specifies the OS of the containers in + the pod. Some pod and container fields are restricted + if this is set. \n If the OS field is set to linux, + the following fields must be unset: -securityContext.windowsOptions + \n If the OS field is set to windows, following fields + must be unset: - spec.hostPID - spec.hostIPC - spec.hostUsers + - spec.securityContext.seLinuxOptions - spec.securityContext." + properties: + name: + description: 'Name is the name of the operating + system. The currently supported values are linux + and windows. Additional value may be defined in + future and can be one of: https://github.com/opencontainers/runtime-spec/blob/master/config.md#platform-specific-configuration + Clients should expect to handle additional values + and treat unrecognized values in this field as + os: null' + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Overhead represents the resource overhead + associated with running a pod for a given RuntimeClass. + This field will be autopopulated at admission time + by the RuntimeClass admission controller. If the RuntimeClass + admission controller is enabled, overhead must not + be set in Pod create requests. The RuntimeClass admission + controller will reject Pod create requests which have + the overhead already set. + type: object + preemptionPolicy: + description: PreemptionPolicy is the Policy for preempting + pods with lower priority. One of Never, PreemptLowerPriority. + Defaults to PreemptLowerPriority if unset. + type: string + priority: + description: The priority value. Various system components + use this field to find the priority of the pod. When + Priority Admission Controller is enabled, it prevents + users from setting this field. The admission controller + populates this field from PriorityClassName. The higher + the value, the higher the priority. + format: int32 + type: integer + priorityClassName: + description: If specified, indicates the pod's priority. + "system-node-critical" and "system-cluster-critical" + are two special keywords which indicate the highest + priorities with the former being the highest priority. + Any other name must be defined by creating a PriorityClass + object with that name. If not specified, the pod priority + will be default or zero if there is no default. + type: string + readinessGates: + description: 'If specified, all readiness gates will + be evaluated for pod readiness. A pod is ready when + all its containers are ready AND all conditions specified + in the readiness gates have status equal to "True" + More info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates' + items: + description: PodReadinessGate contains the reference + to a pod condition + properties: + conditionType: + description: ConditionType refers to a condition + in the pod's condition list with matching type. + type: string + required: + - conditionType + type: object + type: array + resourceClaims: + description: "ResourceClaims defines which ResourceClaims + must be allocated and reserved before the Pod is allowed + to start. The resources will be made available to + those containers which consume them by name. \n This + is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable." + items: + description: PodResourceClaim references exactly one + ResourceClaim through a ClaimSource. It adds a name + to it that uniquely identifies the ResourceClaim + inside the Pod. Containers that need access to the + ResourceClaim reference it with this name. + properties: + name: + description: Name uniquely identifies this resource + claim inside the pod. This must be a DNS_LABEL. + type: string + source: + description: Source describes where to find the + ResourceClaim. + properties: + resourceClaimName: + description: ResourceClaimName is the name + of a ResourceClaim object in the same namespace + as this pod. + type: string + resourceClaimTemplateName: + description: "ResourceClaimTemplateName is + the name of a ResourceClaimTemplate object + in the same namespace as this pod. \n The + template will be used to create a new ResourceClaim, + which will be bound to this pod. When this + pod is deleted, the ResourceClaim will also + be deleted. The name of the ResourceClaim + will be -, where + is the PodResourceClaim.Name." + type: string + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restartPolicy: + description: 'Restart policy for all containers within + the pod. One of Always, OnFailure, Never. In some + contexts, only a subset of those values may be permitted. + Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' + type: string + runtimeClassName: + description: 'RuntimeClassName refers to a RuntimeClass + object in the node.k8s.io group, which should be used + to run this pod. If no RuntimeClass resource matches + the named class, the pod will not be run. If unset + or empty, the "legacy" RuntimeClass will be used, + which is an implicit class with an empty definition + that uses the default runtime handler. More info: + https://git.k8s.' + type: string + schedulerName: + description: If specified, the pod will be dispatched + by specified scheduler. If not specified, the pod + will be dispatched by default scheduler. + type: string + schedulingGates: + description: "SchedulingGates is an opaque list of values + that if specified will block scheduling the pod. If + schedulingGates is not empty, the pod will stay in + the SchedulingGated state and the scheduler will not + attempt to schedule the pod. \n SchedulingGates can + only be set at pod creation time, and be removed only + afterwards. \n This is a beta feature enabled by the + PodSchedulingReadiness feature gate." + items: + description: PodSchedulingGate is associated to a + Pod to guard its scheduling. + properties: + name: + description: Name of the scheduling gate. Each + scheduling gate must have a unique name field. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + description: 'SecurityContext holds pod-level security + attributes and common container settings. Optional: + Defaults to empty. See type description for default + values of each field.' + properties: + fsGroup: + description: "A special supplemental group that + applies to all containers in a pod. Some volume + types allow the Kubelet to change the ownership + of that volume to be owned by the pod: \n 1. The + owning GID will be the FSGroup 2. The setgid bit + is set (new files created in the volume will be + owned by FSGroup) 3." + format: int64 + type: integer + fsGroupChangePolicy: + description: 'fsGroupChangePolicy defines behavior + of changing ownership and permission of the volume + before being exposed inside Pod. This field will + only apply to volume types which support fsGroup + based ownership(and permissions). It will have + no effect on ephemeral volume types such as: secret, + configmaps and emptydir. Valid values are "OnRootMismatch" + and "Always". If not specified, "Always" is used.' + type: string + runAsGroup: + description: The GID to run the entrypoint of the + container process. Uses runtime default if unset. + May also be set in SecurityContext. If set in + both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run + as a non-root user. If true, the Kubelet will + validate the image at runtime to ensure that it + does not run as UID 0 (root) and fail to start + the container if it does. If unset or false, no + such validation will be performed. May also be + set in SecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the + container process. Defaults to user specified + in image metadata if unspecified. May also be + set in SecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence for that container. + Note that this field cannot be set when spec.os.name + is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to + all containers. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in SecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + properties: + level: + description: Level is SELinux level label that + applies to the container. + type: string + role: + description: Role is a SELinux role label that + applies to the container. + type: string + type: + description: Type is a SELinux type label that + applies to the container. + type: string + user: + description: User is a SELinux user label that + applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. Note that this field cannot be set + when spec.os.name is windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node should be used. + The profile must be preconfigured on the node + to work. Must be a descending path, relative + to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp + profile will be applied. Valid options are: + \n Localhost - a profile defined in a file + on the node should be used. RuntimeDefault + - the container runtime default profile should + be used. Unconfined - no profile should be + applied." + type: string + required: + - type + type: object + supplementalGroups: + description: A list of groups applied to the first + process run in each container, in addition to + the container's primary GID, the fsGroup (if specified), + and group memberships defined in the container + image for the uid of the container process. If + unspecified, no additional groups are added to + any container. + items: + format: int64 + type: integer + type: array + sysctls: + description: Sysctls hold a list of namespaced sysctls + used for the pod. Pods with unsupported sysctls + (by the container runtime) might fail to launch. + Note that this field cannot be set when spec.os.name + is windows. + items: + description: Sysctl defines a kernel parameter + to be set + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + description: The Windows specific settings applied + to all containers. If unspecified, the options + within a container's SecurityContext will be used. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the + GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + hostProcess: + description: HostProcess determines if a container + should be run as a 'Host Process' container. + This field is alpha-level and will only be + honored by components that enable the WindowsHostProcessContainers + feature flag. Setting this field without the + feature flag will result in errors when validating + the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to run + the entrypoint of the container process. Defaults + to the user specified in image metadata if + unspecified. May also be set in PodSecurityContext. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. + type: string + type: object + type: object + serviceAccount: + description: 'DeprecatedServiceAccount is a depreciated + alias for ServiceAccountName. Deprecated: Use serviceAccountName + instead.' + type: string + serviceAccountName: + description: 'ServiceAccountName is the name of the + ServiceAccount to use to run this pod. More info: + https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + setHostnameAsFQDN: + description: If true the pod's hostname will be configured + as the pod's FQDN, rather than the leaf name (the + default). In Linux containers, this means setting + the FQDN in the hostname field of the kernel (the + nodename field of struct utsname). + type: boolean + shareProcessNamespace: + description: 'Share a single process namespace between + all of the containers in a pod. When this is set containers + will be able to view and signal processes from other + containers in the same pod, and the first process + in each container will not be assigned PID 1. HostPID + and ShareProcessNamespace cannot both be set. Optional: + Default to false.' + type: boolean + subdomain: + description: If specified, the fully qualified Pod hostname + will be "...svc.". If not specified, the pod will not have + a domainname at all. + type: string + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully. May be decreased in delete + request. Value must be non-negative integer. The value + zero indicates stop immediately via the kill signal + (no opportunity to shut down). If this value is nil, + the default grace period will be used instead. + format: int64 + type: integer + tolerations: + description: If specified, the pod's tolerations. + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + effect: + description: Effect indicates the taint effect + to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, + PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; + this combination means to match all values and + all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and + Equal. Defaults to Equal. Exists is equivalent + to wildcard for value, so that a pod can tolerate + all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the + period of time the toleration (which must be + of effect NoExecute, otherwise this field is + ignored) tolerates the taint. By default, it + is not set, which means tolerate the taint forever + (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value + should be empty, otherwise just a regular string. + type: string + type: object + type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how + a group of pods ought to spread across topology domains. + Scheduler will schedule pods in a way which abides + by the constraints. All topologySpreadConstraints + are ANDed. + items: + description: TopologySpreadConstraint specifies how + to spread matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are + counted to determine the number of pods in their + corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of + label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, a + key, and an operator that relates the + key and values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + description: MatchLabelKeys is a set of pod label + keys to select the pods over which spreading + will be calculated. The keys are used to lookup + values from the incoming pod labels, those key-value + labels are ANDed with labelSelector to select + the group of existing pods over which spreading + will be calculated for the incoming pod. The + same key is forbidden to exist in both MatchLabelKeys + and LabelSelector. + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + description: MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between + the number of matching pods in the target topology + and the global minimum. The global minimum is + the minimum number of matching pods in an eligible + domain or zero if the number of eligible domains + is less than MinDomains. + format: int32 + type: integer + minDomains: + description: MinDomains indicates a minimum number + of eligible domains. When the number of eligible + domains with matching topology keys is less + than minDomains, Pod Topology Spread treats + "global minimum" as 0, and then the calculation + of Skew is performed. And when the number of + eligible domains with matching topology keys + equals or greater than minDomains, this value + has no effect on scheduling. + format: int32 + type: integer + nodeAffinityPolicy: + description: "NodeAffinityPolicy indicates how + we will treat Pod's nodeAffinity/nodeSelector + when calculating pod topology spread skew. Options + are: - Honor: only nodes matching nodeAffinity/nodeSelector + are included in the calculations. - Ignore: + nodeAffinity/nodeSelector are ignored. All nodes + are included in the calculations. \n If this + value is nil, the behavior is equivalent to + the Honor policy." + type: string + nodeTaintsPolicy: + description: "NodeTaintsPolicy indicates how we + will treat node taints when calculating pod + topology spread skew. Options are: - Honor: + nodes without taints, along with tainted nodes + for which the incoming pod has a toleration, + are included. - Ignore: node taints are ignored. + All nodes are included. \n If this value is + nil, the behavior is equivalent to the Ignore + policy." + type: string + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", + and try to put balanced number of pods into + each bucket. We define a domain as a particular + instance of a topology. + type: string + whenUnsatisfiable: + description: WhenUnsatisfiable indicates how to + deal with a pod if it doesn't satisfy the spread + constraint. - DoNotSchedule (default) tells + the scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to topologies + that would help reduce the skew. + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + description: 'List of volumes that can be mounted by + containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + items: + description: Volume represents a named volume in a + pod that may be accessed by any container in the + pod. + properties: + awsElasticBlockStore: + description: 'awsElasticBlockStore represents + an AWS Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'readOnly value true will force + the readOnly setting in VolumeMounts. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'volumeID is unique ID of the + persistent disk resource in AWS (Amazon + EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: azureDisk represents an Azure Data + Disk mount on the host and bind mount to the + pod. + properties: + cachingMode: + description: 'cachingMode is the Host Caching + mode: None, Read Only, Read Write.' + type: string + diskName: + description: diskName is the Name of the data + disk in the blob storage + type: string + diskURI: + description: diskURI is the URI of data disk + in the blob storage + type: string + fsType: + description: fsType is Filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + kind: + description: 'kind expected values are Shared: + multiple blob disks per storage account Dedicated: + single blob disk per storage account Managed: + azure managed data disk (only in managed + availability set). defaults to shared' + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: azureFile represents an Azure File + Service mount on the host and bind mount to + the pod. + properties: + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretName: + description: secretName is the name of secret + that contains Azure Storage Account Name + and Key + type: string + shareName: + description: shareName is the azure share + Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: cephFS represents a Ceph FS mount + on the host that shares a pod's lifetime + properties: + monitors: + description: 'monitors is Required: Monitors + is a collection of Ceph monitors More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'path is Optional: Used as the + mounted root, rather than the full Ceph + tree, default is /' + type: string + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'secretFile is Optional: SecretFile + is the path to key ring for User, default + is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'secretRef is Optional: SecretRef + is reference to the authentication secret + for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is optional: User is the + rados user name, default is admin More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'cinder represents a cinder volume + attached and mounted on kubelets host machine. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'secretRef is optional: points + to a secret object containing parameters + used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + description: 'volumeID used to identify the + volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: configMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced + ConfigMap will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional specify whether the + ConfigMap or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + description: csi (Container Storage Interface) + represents ephemeral storage that is handled + by certain external CSI drivers (Beta feature). + properties: + driver: + description: driver is the name of the CSI + driver that handles this volume. Consult + with your admin for the correct name as + registered in the cluster. + type: string + fsType: + description: fsType to mount. Ex. "ext4", + "xfs", "ntfs". If not provided, the empty + value is passed to the associated CSI driver + which will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: nodePublishSecretRef is a reference + to the secret object containing sensitive + information to pass to the CSI driver to + complete the CSI NodePublishVolume and NodeUnpublishVolume + calls. This field is optional, and may + be empty if no secret is required. If the + secret object contains more than one secret, + all secret references are passed. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + description: readOnly specifies a read-only + configuration for the volume. Defaults to + false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: volumeAttributes stores driver-specific + properties that are passed to the CSI driver. + Consult your driver's documentation for + supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: downwardAPI represents downward API + about the pod that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits to use on + created files by default. Must be a Optional: + mode bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: Items is a list of downward API + volume file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects a field + of the pod: only annotations, labels, + name and namespace are supported.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits used + to set permissions on this file, must + be an octal value between 0000 and + 0777 or a decimal value between 0 + and 511. YAML accepts both octal and + decimal values, JSON requires decimal + values for mode bits. If not specified, + the volume defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path is the + relative path name of the file to + be created. Must not be absolute or + contain the ''..'' path. Must be utf-8 + encoded. The first item of the relative + path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + requests.cpu and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'emptyDir represents a temporary + directory that shares a pod''s lifetime. More + info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'medium represents what type + of storage medium should back this directory. + The default is "" which means to use the + node''s default medium. Must be an empty + string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount + of local storage required for this EmptyDir + volume. The size limit is also applicable + for memory medium. The maximum usage on + memory medium EmptyDir would be the minimum + value between the SizeLimit specified here + and the sum of memory limits of all containers + in a pod. The default is nil which means + that the limit is undefined. More info: + https://kubernetes.' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + description: ephemeral represents a volume that + is handled by a cluster storage driver. The + volume's lifecycle is tied to the pod that defines + it - it will be created before the pod starts, + and deleted when the pod is removed. + properties: + volumeClaimTemplate: + description: Will be used to create a stand-alone + PVC to provision the volume. The pod in + which this EphemeralVolumeSource is embedded + will be the owner of the PVC, i.e. the PVC + will be deleted together with the pod. The + name of the PVC will be `-` where `` is the name + from the `PodSpec.Volumes` array entry. + properties: + metadata: + description: May contain labels and annotations + that will be copied into the PVC when + creating it. No other fields are allowed + and will be rejected during validation. + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: The specification for the + PersistentVolumeClaim. The entire content + is copied unchanged into the PVC that + gets created from this template. The + same fields as in a PersistentVolumeClaim + are also valid here. + properties: + accessModes: + description: 'accessModes contains + the desired access modes the volume + should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can + be used to specify either: * An + existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) + If the provisioner or an external + controller can support the specified + data source, it will create a new + volume based on the contents of + the specified data source.' + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: dataSourceRef specifies + the object from which to populate + the volume with data, if a non-empty + volume is desired. This may be any + object from a non-empty API group + (non core object) or a PersistentVolumeClaim + object. When this field is specified, + volume binding will only succeed + if the type of the specified object + matches some installed volume populator + or dynamic provisioner. + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + namespace: + description: Namespace is the + namespace of resource being + referenced Note that when a + namespace is specified, a gateway.networking.k8s.io/ReferenceGrant + object is required in the referent + namespace to allow that namespace's + owner to accept the reference. + See the ReferenceGrant documentation + for details. (Alpha) This field + requires the CrossNamespaceVolumeDataSource + feature gate to be enabled. + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents + the minimum resources the volume + should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed + to specify resource requirements + that are lower than previous value + but must still be higher than capacity + recorded in the status field of + the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + claims: + description: "Claims lists the + names of resources, defined + in spec.resourceClaims, that + are used by this container. + \n This is an alpha field and + requires enabling the DynamicResourceAllocation + feature gate. \n This field + is immutable. It can only be + set for containers." + items: + description: ResourceClaim references + one entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match + the name of one entry + in pod.spec.resourceClaims + of the Pod where this + field is used. It makes + that resource available + inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes + the maximum amount of compute + resources allowed. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes + the minimum amount of compute + resources required. If Requests + is omitted for a container, + it defaults to Limits if that + is explicitly specified, otherwise + to an implementation-defined + value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query + over volumes to consider for binding. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + description: 'storageClassName is + the name of the StorageClass required + by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what + type of volume is required by the + claim. Value of Filesystem is implied + when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding + reference to the PersistentVolume + backing this claim. + type: string + type: object + required: + - spec + type: object + type: object + fc: + description: fc represents a Fibre Channel resource + that is attached to a kubelet's host machine + and then exposed to the pod. + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. TODO: how do we prevent + errors in the filesystem from compromising + the machine' + type: string + lun: + description: 'lun is Optional: FC target lun + number' + format: int32 + type: integer + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'targetWWNs is Optional: FC target + worldwide names (WWNs)' + items: + type: string + type: array + wwids: + description: 'wwids Optional: FC volume world + wide identifiers (wwids) Either wwids or + combination of targetWWNs and lun must be + set, but not both simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: flexVolume represents a generic volume + resource that is provisioned/attached using + an exec based plugin. + properties: + driver: + description: driver is the name of the driver + to use for this volume. + type: string + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". The default filesystem depends + on FlexVolume script. + type: string + options: + additionalProperties: + type: string + description: 'options is Optional: this field + holds extra command options if any.' + type: object + readOnly: + description: 'readOnly is Optional: defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'secretRef is Optional: secretRef + is reference to the secret object containing + sensitive information to pass to the plugin + scripts. This may be empty if no secret + object is specified. If the secret object + contains more than one secret, all secrets + are passed to the plugin scripts.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + description: flocker represents a Flocker volume + attached to a kubelet's host machine. This depends + on the Flocker control service being running + properties: + datasetName: + description: datasetName is Name of the dataset + stored as metadata -> name on the dataset + for Flocker should be considered as deprecated + type: string + datasetUUID: + description: datasetUUID is the UUID of the + dataset. This is unique identifier of a + Flocker dataset + type: string + type: object + gcePersistentDisk: + description: 'gcePersistentDisk represents a GCE + Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'fsType is filesystem type of + the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'pdName is unique name of the + PD resource in GCE. Used to identify the + disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'gitRepo represents a git repository + at a particular revision. DEPRECATED: GitRepo + is deprecated. To provision a container with + a git repo, mount an EmptyDir into an InitContainer + that clones the repo using git, then mount the + EmptyDir into the Pod''s container.' + properties: + directory: + description: directory is the target directory + name. Must not contain or start with '..'. If + '.' is supplied, the volume directory will + be the git repository. Otherwise, if specified, + the volume will contain the git repository + in the subdirectory with the given name. + type: string + repository: + description: repository is the URL + type: string + revision: + description: revision is the commit hash for + the specified revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'glusterfs represents a Glusterfs + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'endpoints is the endpoint name + that details Glusterfs topology. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'path is the Glusterfs volume + path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'readOnly here will force the + Glusterfs volume to be mounted with read-only + permissions. Defaults to false. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'hostPath represents a pre-existing + file or directory on the host machine that is + directly exposed to the container. This is generally + used for system agents or other privileged things + that are allowed to see the host machine. Most + containers will NOT need this. More info: https://kubernetes.' + properties: + path: + description: 'path of the directory on the + host. If the path is a symlink, it will + follow the link to the real path. More info: + https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'type for HostPath Volume Defaults + to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'iscsi represents an ISCSI Disk resource + that is attached to a kubelet''s host machine + and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: chapAuthDiscovery defines whether + support iSCSI Discovery CHAP authentication + type: boolean + chapAuthSession: + description: chapAuthSession defines whether + support iSCSI Session CHAP authentication + type: boolean + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + initiatorName: + description: initiatorName is the custom iSCSI + Initiator Name. If initiatorName is specified + with iscsiInterface simultaneously, new + iSCSI interface : will be created for the connection. + type: string + iqn: + description: iqn is the target iSCSI Qualified + Name. + type: string + iscsiInterface: + description: iscsiInterface is the interface + Name that uses an iSCSI transport. Defaults + to 'default' (tcp). + type: string + lun: + description: lun represents iSCSI Target Lun + number. + format: int32 + type: integer + portals: + description: portals is the iSCSI Target Portal + List. The portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. + type: boolean + secretRef: + description: secretRef is the CHAP Secret + for iSCSI target and initiator authentication + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + description: targetPortal is iSCSI Target + Portal. The Portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'name of the volume. Must be a DNS_LABEL + and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'nfs represents an NFS mount on the + host that shares a pod''s lifetime More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'path that is exported by the + NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'readOnly here will force the + NFS export to be mounted with read-only + permissions. Defaults to false. More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'server is the hostname or IP + address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'persistentVolumeClaimVolumeSource + represents a reference to a PersistentVolumeClaim + in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'claimName is the name of a PersistentVolumeClaim + in the same namespace as the pod using this + volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: readOnly Will force the ReadOnly + setting in VolumeMounts. Default false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: photonPersistentDisk represents a + PhotonController persistent disk attached and + mounted on kubelets host machine + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + pdID: + description: pdID is the ID that identifies + Photon Controller persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: portworxVolume represents a portworx + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fSType represents the filesystem + type to mount Must be a filesystem type + supported by the host operating system. + Ex. "ext4", "xfs". Implicitly inferred to + be "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + volumeID: + description: volumeID uniquely identifies + a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: projected items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits + used to set permissions on created files + by default. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. Directories within the path are + not affected by this setting. + format: int32 + type: integer + sources: + description: sources is the list of volume + projections + items: + description: Projection that may be projected + along with other supported volume types + properties: + configMap: + description: configMap information about + the configMap data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced ConfigMap + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional specify whether + the ConfigMap or its keys must + be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information + about the downwardAPI data to project + properties: + items: + description: Items is a list of + DownwardAPIVolume file + items: + description: DownwardAPIVolumeFile + represents information to create + the file containing the pod + field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only + annotations, labels, name + and namespace are supported.' + properties: + apiVersion: + description: Version of + the schema the FieldPath + is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the + field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode + bits used to set permissions + on this file, must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path + is the relative path name + of the file to be created. + Must not be absolute or + contain the ''..'' path. + Must be utf-8 encoded. The + first item of the relative + path must not start with + ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) are + currently supported.' + properties: + containerName: + description: 'Container + name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies + the output format of + the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: + resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about + the secret data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced Secret + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional field specify + whether the Secret or its key + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is + information about the serviceAccountToken + data to project + properties: + audience: + description: audience is the intended + audience of the token. A recipient + of a token must identify itself + with an identifier specified in + the audience of the token, and + otherwise should reject the token. + The audience defaults to the identifier + of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is + the requested duration of validity + of the service account token. + As the token approaches expiration, + the kubelet volume plugin will + proactively rotate the service + account token. The kubelet will + start trying to rotate the token + if the token is older than 80 + percent of its time to live or + if the token is older than 24 + hours.Defaults to 1 hour and must + be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative + to the mount point of the file + to project the token into. + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + description: quobyte represents a Quobyte mount + on the host that shares a pod's lifetime + properties: + group: + description: group to map volume access to + Default is no group + type: string + readOnly: + description: readOnly here will force the + Quobyte volume to be mounted with read-only + permissions. Defaults to false. + type: boolean + registry: + description: registry represents a single + or multiple Quobyte Registry services specified + as a string as host:port pair (multiple + entries are separated with commas) which + acts as the central registry for volumes + type: string + tenant: + description: tenant owning the given Quobyte + volume in the Backend Used with dynamically + provisioned Quobyte volumes, value is set + by the plugin + type: string + user: + description: user to map volume access to + Defaults to serivceaccount user + type: string + volume: + description: volume is a string that references + an already created Quobyte volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'rbd represents a Rados Block Device + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + image: + description: 'image is the rados image name. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'keyring is the path to key ring + for RBDUser. Default is /etc/ceph/keyring. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'monitors is a collection of + Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'pool is the rados pool name. + Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'secretRef is name of the authentication + secret for RBDUser. If provided overrides + keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is the rados user name. + Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: scaleIO represents a ScaleIO persistent + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: gateway is the host address of + the ScaleIO API Gateway. + type: string + protectionDomain: + description: protectionDomain is the name + of the ScaleIO Protection Domain for the + configured storage. + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef references to the secret + for ScaleIO user and other sensitive information. + If this is not provided, Login operation + will fail. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + description: sslEnabled Flag enable/disable + SSL communication with Gateway, default + false + type: boolean + storageMode: + description: storageMode indicates whether + the storage for a volume should be ThickProvisioned + or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: storagePool is the ScaleIO Storage + Pool associated with the protection domain. + type: string + system: + description: system is the name of the storage + system as configured in ScaleIO. + type: string + volumeName: + description: volumeName is the name of a volume + already created in the ScaleIO system that + is associated with this volume source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'secret represents a secret that + should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value + pair in the Data field of the referenced + Secret will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether + the Secret or its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the + secret in the pod''s namespace to use. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: storageOS represents a StorageOS + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef specifies the secret + to use for obtaining the StorageOS API credentials. If + not specified, default values will be attempted. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + description: volumeName is the human-readable + name of the StorageOS volume. Volume names + are only unique within a namespace. + type: string + volumeNamespace: + description: volumeNamespace specifies the + scope of the volume within StorageOS. If + no namespace is specified then the Pod's + namespace will be used. This allows the + Kubernetes name scoping to be mirrored within + StorageOS for tighter integration. Set VolumeName + to any name to override the default behaviour. + Set to "default" if you are not using namespaces + within StorageOS. + type: string + type: object + vsphereVolume: + description: vsphereVolume represents a vSphere + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fsType is filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + storagePolicyID: + description: storagePolicyID is the storage + Policy Based Management (SPBM) profile ID + associated with the StoragePolicyName. + type: string + storagePolicyName: + description: storagePolicyName is the storage + Policy Based Management (SPBM) profile name. + type: string + volumePath: + description: volumePath is the path that identifies + vSphere volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + description: 'A map of TFReplicaType (type) to ReplicaSpec (value). + Specifies the TF cluster configuration. For example, { "PS": ReplicaSpec, + "Worker": ReplicaSpec, }' + type: object + required: + - tfReplicaSpecs + type: object + status: + description: Most recently observed status of the TFJob. Populated by + the system. Read-only. + properties: + completionTime: + description: Represents time when the job was completed. It is not + guaranteed to be set in happens-before order across separate operations. + It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + conditions: + description: Conditions is an array of current observed job conditions. + items: + description: JobCondition describes the state of the job at a certain + point. + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + lastUpdateTime: + description: The last time this condition was updated. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of job condition. + type: string + required: + - status + - type + type: object + type: array + lastReconcileTime: + description: Represents last time when the job was reconciled. It + is not guaranteed to be set in happens-before order across separate + operations. It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + replicaStatuses: + additionalProperties: + description: ReplicaStatus represents the current observed state + of the replica. + properties: + active: + description: The number of actively running pods. + format: int32 + type: integer + failed: + description: The number of pods which reached phase Failed. + format: int32 + type: integer + labelSelector: + description: 'Deprecated: Use Selector instead' + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + selector: + description: A Selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. + An empty Selector matches all objects. A null Selector matches + no objects. + type: string + succeeded: + description: The number of pods which reached phase Succeeded. + format: int32 + type: integer + type: object + description: ReplicaStatuses is map of ReplicaType and ReplicaStatus, + specifies the status of each replica. + type: object + startTime: + description: Represents time when the job was acknowledged by the + job controller. It is not guaranteed to be set in happens-before + order across separate operations. It is represented in RFC3339 form + and is in UTC. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.0 + creationTimestamp: null + labels: + app: kserve + app.kubernetes.io/name: kserve + name: trainedmodels.serving.kserve.io +spec: + group: serving.kserve.io + names: + kind: TrainedModel + listKind: TrainedModelList + plural: trainedmodels + shortNames: + - tm + singular: trainedmodel + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.url + name: URL + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + inferenceService: + type: string + model: + properties: + framework: + type: string + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageUri: + type: string + required: + - framework + - memory + - storageUri + type: object + required: + - inferenceService + - model + type: object + status: + properties: + address: + properties: + url: + type: string + type: object + annotations: + additionalProperties: + type: string + type: object + conditions: + items: + properties: + lastTransitionTime: + type: string + message: + type: string + reason: + type: string + severity: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + url: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: trials.kubeflow.org +spec: + group: kubeflow.org + names: + categories: + - all + - kubeflow + - katib + kind: Trial + plural: trials + singular: trial + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[-1:].type + name: Type + type: string + - jsonPath: .status.conditions[-1:].status + name: Status + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + knative.dev/crd-install: "true" + kustomize.component: knative + name: triggers.eventing.knative.dev +spec: + group: eventing.knative.dev + names: + categories: + - all + - knative + - eventing + kind: Trigger + plural: triggers + singular: trigger + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.broker + name: Broker + type: string + - jsonPath: .status.subscriberUri + name: Subscriber_URI + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].reason + name: Reason + type: string + name: v1 + schema: + openAPIV3Schema: + description: Trigger represents a request to have events delivered to a subscriber + from a Broker's event pool. + properties: + spec: + description: Spec defines the desired state of the Trigger. + properties: + broker: + description: Broker is the broker that this trigger receives events + from. + type: string + delivery: + description: Delivery contains the delivery spec for this specific + trigger. + properties: + backoffDelay: + description: 'BackoffDelay is the delay before retrying. More + information on Duration format: - https://www.iso.org/iso-8601-date-and-time-format.html + - https://en.wikipedia.org/wiki/ISO_8601 For linear policy, + backoff delay is backoffDelay*. For exponential + policy, backoff delay is backoffDelay*2^.' + type: string + backoffPolicy: + description: BackoffPolicy is the retry backoff policy (linear, + exponential). + type: string + deadLetterSink: + description: DeadLetterSink is the sink receiving event that could + not be sent to a destination. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and + non-empty host) pointing to the target or a relative URI. + Relative URIs will be resolved using the base URI retrieved + from Ref. + type: string + type: object + retry: + description: Retry is the minimum number of retries the sender + should attempt when sending an event before moving it to the + dead letter sink. + format: int32 + type: integer + type: object + x-kubernetes-preserve-unknown-fields: true + filter: + description: 'Filter is the filter to apply against all events from + the Broker. Only events that pass this filter will be sent to the + Subscriber. If not specified, will default to allowing all events. ' + properties: + attributes: + description: 'Attributes filters events by exact match on event + context attributes. Each key in the map is compared with the + equivalent key in the event context. An event passes the filter + if all values are equal to the specified values. Nested context + attributes are not supported as keys. Only string values are + supported. ' + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + subscriber: + description: Subscriber is the addressable that receives events from + the Broker that pass the Filter. It is required. + properties: + ref: + description: Ref points to an Addressable. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ + This is optional field, it gets defaulted to the object + holding it if left out.' + type: string + type: object + uri: + description: URI can be an absolute URL(non-empty scheme and non-empty + host) pointing to the target or a relative URI. Relative URIs + will be resolved using the base URI retrieved from Ref. + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + status: + description: Status represents the current state of the Trigger. This + data may be out of date. + properties: + annotations: + description: Annotations is additional Status fields for the Resource + to save some additional State as well as convey more information + to the user. This is roughly akin to Annotations on any k8s resource, + just the reconciler conveying richer information outwards. + type: object + x-kubernetes-preserve-unknown-fields: true + conditions: + description: Conditions the latest available observations of a resource's + current state. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition + transitioned from one status to another. We use VolatileTime + in place of metav1.Time to exclude this from creating equality.Semantic + differences (all other things held constant). + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + severity: + description: Severity with which to treat failures of this type + of condition. When this is not specified, it defaults to Error. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + required: + - type + - status + type: object + type: array + deadLetterSinkUri: + description: DeadLetterSinkURI is the resolved URI of the dead letter + sink for this Trigger, in case there is none this will fallback + to it's Broker status DeadLetterSinkURI. + type: string + observedGeneration: + description: ObservedGeneration is the 'Generation' of the Service + that was last processed by the controller. + format: int64 + type: integer + subscriberUri: + description: SubscriberURI is the resolved URI of the receiver for + this Trigger. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: viewers.kubeflow.org +spec: + group: kubeflow.org + names: + kind: Viewer + listKind: ViewerList + plural: viewers + shortNames: + - vi + singular: viewer + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: virtualservices.networking.istio.io +spec: + group: networking.istio.io + names: + categories: + - istio-io + - networking-istio-io + kind: VirtualService + listKind: VirtualServiceList + plural: virtualservices + shortNames: + - vs + singular: virtualservice + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The names of gateways and sidecars that should apply these routes + jsonPath: .spec.gateways + name: Gateways + type: string + - description: The destination hosts to which traffic is being sent + jsonPath: .spec.hosts + name: Hosts + type: string + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha3 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting label/content routing, sni routing, + etc. See more details at: https://istio.io/docs/reference/config/networking/virtual-service.html' + properties: + exportTo: + description: A list of namespaces to which this virtual service is + exported. + items: + type: string + type: array + gateways: + description: The names of gateways and sidecars that should apply + these routes. + items: + type: string + type: array + hosts: + description: The destination hosts to which traffic is being sent. + items: + type: string + type: array + http: + description: An ordered list of route rules for HTTP traffic. + items: + properties: + corsPolicy: + description: Cross-Origin Resource Sharing policy (CORS). + properties: + allowCredentials: + nullable: true + type: boolean + allowHeaders: + items: + type: string + type: array + allowMethods: + description: List of HTTP methods allowed to access the + resource. + items: + type: string + type: array + allowOrigin: + description: The list of origins that are allowed to perform + CORS requests. + items: + type: string + type: array + allowOrigins: + description: String patterns that match allowed origins. + items: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + type: array + exposeHeaders: + items: + type: string + type: array + maxAge: + type: string + type: object + delegate: + properties: + name: + description: Name specifies the name of the delegate VirtualService. + type: string + namespace: + description: Namespace specifies the namespace where the + delegate VirtualService resides. + type: string + type: object + directResponse: + description: A HTTP rule can either return a direct_response, + redirect or forward (default) traffic. + properties: + body: + description: Specifies the content of the response body. + oneOf: + - not: + anyOf: + - required: + - string + - required: + - bytes + - required: + - string + - required: + - bytes + properties: + bytes: + description: response body as base64 encoded bytes. + format: binary + type: string + string: + type: string + type: object + status: + description: Specifies the HTTP response status to be returned. + type: integer + type: object + fault: + description: Fault injection policy to apply on HTTP traffic + at the client side. + properties: + abort: + oneOf: + - not: + anyOf: + - required: + - httpStatus + - required: + - grpcStatus + - required: + - http2Error + - required: + - httpStatus + - required: + - grpcStatus + - required: + - http2Error + properties: + grpcStatus: + description: GRPC status code to use to abort the request. + type: string + http2Error: + type: string + httpStatus: + description: HTTP status code to use to abort the Http + request. + format: int32 + type: integer + percentage: + description: Percentage of requests to be aborted with + the error code provided. + properties: + value: + format: double + type: number + type: object + type: object + delay: + oneOf: + - not: + anyOf: + - required: + - fixedDelay + - required: + - exponentialDelay + - required: + - fixedDelay + - required: + - exponentialDelay + properties: + exponentialDelay: + type: string + fixedDelay: + description: Add a fixed delay before forwarding the + request. + type: string + percent: + description: Percentage of requests on which the delay + will be injected (0-100). + format: int32 + type: integer + percentage: + description: Percentage of requests on which the delay + will be injected. + properties: + value: + format: double + type: number + type: object + type: object + type: object + headers: + properties: + request: + properties: + add: + additionalProperties: + type: string + type: object + remove: + items: + type: string + type: array + set: + additionalProperties: + type: string + type: object + type: object + response: + properties: + add: + additionalProperties: + type: string + type: object + remove: + items: + type: string + type: array + set: + additionalProperties: + type: string + type: object + type: object + type: object + match: + items: + properties: + authority: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + gateways: + description: Names of gateways where the rule should be + applied. + items: + type: string + type: array + headers: + additionalProperties: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + type: object + ignoreUriCase: + description: Flag to specify whether the URI matching + should be case-insensitive. + type: boolean + method: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + name: + description: The name assigned to a match. + type: string + port: + description: Specifies the ports on the host that is being + addressed. + type: integer + queryParams: + additionalProperties: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + description: Query parameters for matching. + type: object + scheme: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + sourceLabels: + additionalProperties: + type: string + type: object + sourceNamespace: + description: Source namespace constraining the applicability + of a rule to workloads in that namespace. + type: string + statPrefix: + description: The human readable prefix to use when emitting + statistics for this route. + type: string + uri: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + withoutHeaders: + additionalProperties: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + description: withoutHeader has the same syntax with the + header, but has opposite meaning. + type: object + type: object + type: array + mirror: + properties: + host: + description: The name of a service from the service registry. + type: string + port: + description: Specifies the port on the host that is being + addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + mirror_percent: + description: Percentage of the traffic to be mirrored by the + `mirror` field. + nullable: true + type: integer + mirrorPercent: + description: Percentage of the traffic to be mirrored by the + `mirror` field. + nullable: true + type: integer + mirrorPercentage: + description: Percentage of the traffic to be mirrored by the + `mirror` field. + properties: + value: + format: double + type: number + type: object + name: + description: The name assigned to the route for debugging purposes. + type: string + redirect: + description: A HTTP rule can either return a direct_response, + redirect or forward (default) traffic. + oneOf: + - not: + anyOf: + - required: + - port + - required: + - derivePort + - required: + - port + - required: + - derivePort + properties: + authority: + type: string + derivePort: + enum: + - FROM_PROTOCOL_DEFAULT + - FROM_REQUEST_PORT + type: string + port: + description: On a redirect, overwrite the port portion of + the URL with this value. + type: integer + redirectCode: + type: integer + scheme: + description: On a redirect, overwrite the scheme portion + of the URL with this value. + type: string + uri: + type: string + type: object + retries: + description: Retry policy for HTTP requests. + properties: + attempts: + description: Number of retries to be allowed for a given + request. + format: int32 + type: integer + perTryTimeout: + description: Timeout per attempt for a given request, including + the initial call and any retries. + type: string + retryOn: + description: Specifies the conditions under which retry + takes place. + type: string + retryRemoteLocalities: + description: Flag to specify whether the retries should + retry to other localities. + nullable: true + type: boolean + type: object + rewrite: + description: Rewrite HTTP URIs and Authority headers. + properties: + authority: + description: rewrite the Authority/Host header with this + value. + type: string + uri: + type: string + type: object + route: + description: A HTTP rule can either return a direct_response, + redirect or forward (default) traffic. + items: + properties: + destination: + properties: + host: + description: The name of a service from the service + registry. + type: string + port: + description: Specifies the port on the host that is + being addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + headers: + properties: + request: + properties: + add: + additionalProperties: + type: string + type: object + remove: + items: + type: string + type: array + set: + additionalProperties: + type: string + type: object + type: object + response: + properties: + add: + additionalProperties: + type: string + type: object + remove: + items: + type: string + type: array + set: + additionalProperties: + type: string + type: object + type: object + type: object + weight: + description: Weight specifies the relative proportion + of traffic to be forwarded to the destination. + format: int32 + type: integer + type: object + type: array + timeout: + description: Timeout for HTTP requests, default is disabled. + type: string + type: object + type: array + tcp: + description: An ordered list of route rules for opaque TCP traffic. + items: + properties: + match: + items: + properties: + destinationSubnets: + description: IPv4 or IPv6 ip addresses of destination + with optional subnet. + items: + type: string + type: array + gateways: + description: Names of gateways where the rule should be + applied. + items: + type: string + type: array + port: + description: Specifies the port on the host that is being + addressed. + type: integer + sourceLabels: + additionalProperties: + type: string + type: object + sourceNamespace: + description: Source namespace constraining the applicability + of a rule to workloads in that namespace. + type: string + sourceSubnet: + description: IPv4 or IPv6 ip address of source with optional + subnet. + type: string + type: object + type: array + route: + description: The destination to which the connection should + be forwarded to. + items: + properties: + destination: + properties: + host: + description: The name of a service from the service + registry. + type: string + port: + description: Specifies the port on the host that is + being addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + weight: + description: Weight specifies the relative proportion + of traffic to be forwarded to the destination. + format: int32 + type: integer + type: object + type: array + type: object + type: array + tls: + items: + properties: + match: + items: + properties: + destinationSubnets: + description: IPv4 or IPv6 ip addresses of destination + with optional subnet. + items: + type: string + type: array + gateways: + description: Names of gateways where the rule should be + applied. + items: + type: string + type: array + port: + description: Specifies the port on the host that is being + addressed. + type: integer + sniHosts: + description: SNI (server name indicator) to match on. + items: + type: string + type: array + sourceLabels: + additionalProperties: + type: string + type: object + sourceNamespace: + description: Source namespace constraining the applicability + of a rule to workloads in that namespace. + type: string + type: object + type: array + route: + description: The destination to which the connection should + be forwarded to. + items: + properties: + destination: + properties: + host: + description: The name of a service from the service + registry. + type: string + port: + description: Specifies the port on the host that is + being addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + weight: + description: Weight specifies the relative proportion + of traffic to be forwarded to the destination. + format: int32 + type: integer + type: object + type: array + type: object + type: array + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: The names of gateways and sidecars that should apply these routes + jsonPath: .spec.gateways + name: Gateways + type: string + - description: The destination hosts to which traffic is being sent + jsonPath: .spec.hosts + name: Hosts + type: string + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting label/content routing, sni routing, + etc. See more details at: https://istio.io/docs/reference/config/networking/virtual-service.html' + properties: + exportTo: + description: A list of namespaces to which this virtual service is + exported. + items: + type: string + type: array + gateways: + description: The names of gateways and sidecars that should apply + these routes. + items: + type: string + type: array + hosts: + description: The destination hosts to which traffic is being sent. + items: + type: string + type: array + http: + description: An ordered list of route rules for HTTP traffic. + items: + properties: + corsPolicy: + description: Cross-Origin Resource Sharing policy (CORS). + properties: + allowCredentials: + nullable: true + type: boolean + allowHeaders: + items: + type: string + type: array + allowMethods: + description: List of HTTP methods allowed to access the + resource. + items: + type: string + type: array + allowOrigin: + description: The list of origins that are allowed to perform + CORS requests. + items: + type: string + type: array + allowOrigins: + description: String patterns that match allowed origins. + items: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + type: array + exposeHeaders: + items: + type: string + type: array + maxAge: + type: string + type: object + delegate: + properties: + name: + description: Name specifies the name of the delegate VirtualService. + type: string + namespace: + description: Namespace specifies the namespace where the + delegate VirtualService resides. + type: string + type: object + directResponse: + description: A HTTP rule can either return a direct_response, + redirect or forward (default) traffic. + properties: + body: + description: Specifies the content of the response body. + oneOf: + - not: + anyOf: + - required: + - string + - required: + - bytes + - required: + - string + - required: + - bytes + properties: + bytes: + description: response body as base64 encoded bytes. + format: binary + type: string + string: + type: string + type: object + status: + description: Specifies the HTTP response status to be returned. + type: integer + type: object + fault: + description: Fault injection policy to apply on HTTP traffic + at the client side. + properties: + abort: + oneOf: + - not: + anyOf: + - required: + - httpStatus + - required: + - grpcStatus + - required: + - http2Error + - required: + - httpStatus + - required: + - grpcStatus + - required: + - http2Error + properties: + grpcStatus: + description: GRPC status code to use to abort the request. + type: string + http2Error: + type: string + httpStatus: + description: HTTP status code to use to abort the Http + request. + format: int32 + type: integer + percentage: + description: Percentage of requests to be aborted with + the error code provided. + properties: + value: + format: double + type: number + type: object + type: object + delay: + oneOf: + - not: + anyOf: + - required: + - fixedDelay + - required: + - exponentialDelay + - required: + - fixedDelay + - required: + - exponentialDelay + properties: + exponentialDelay: + type: string + fixedDelay: + description: Add a fixed delay before forwarding the + request. + type: string + percent: + description: Percentage of requests on which the delay + will be injected (0-100). + format: int32 + type: integer + percentage: + description: Percentage of requests on which the delay + will be injected. + properties: + value: + format: double + type: number + type: object + type: object + type: object + headers: + properties: + request: + properties: + add: + additionalProperties: + type: string + type: object + remove: + items: + type: string + type: array + set: + additionalProperties: + type: string + type: object + type: object + response: + properties: + add: + additionalProperties: + type: string + type: object + remove: + items: + type: string + type: array + set: + additionalProperties: + type: string + type: object + type: object + type: object + match: + items: + properties: + authority: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + gateways: + description: Names of gateways where the rule should be + applied. + items: + type: string + type: array + headers: + additionalProperties: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + type: object + ignoreUriCase: + description: Flag to specify whether the URI matching + should be case-insensitive. + type: boolean + method: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + name: + description: The name assigned to a match. + type: string + port: + description: Specifies the ports on the host that is being + addressed. + type: integer + queryParams: + additionalProperties: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + description: Query parameters for matching. + type: object + scheme: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + sourceLabels: + additionalProperties: + type: string + type: object + sourceNamespace: + description: Source namespace constraining the applicability + of a rule to workloads in that namespace. + type: string + statPrefix: + description: The human readable prefix to use when emitting + statistics for this route. + type: string + uri: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + withoutHeaders: + additionalProperties: + oneOf: + - not: + anyOf: + - required: + - exact + - required: + - prefix + - required: + - regex + - required: + - exact + - required: + - prefix + - required: + - regex + properties: + exact: + type: string + prefix: + type: string + regex: + description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). + type: string + type: object + description: withoutHeader has the same syntax with the + header, but has opposite meaning. + type: object + type: object + type: array + mirror: + properties: + host: + description: The name of a service from the service registry. + type: string + port: + description: Specifies the port on the host that is being + addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + mirror_percent: + description: Percentage of the traffic to be mirrored by the + `mirror` field. + nullable: true + type: integer + mirrorPercent: + description: Percentage of the traffic to be mirrored by the + `mirror` field. + nullable: true + type: integer + mirrorPercentage: + description: Percentage of the traffic to be mirrored by the + `mirror` field. + properties: + value: + format: double + type: number + type: object + name: + description: The name assigned to the route for debugging purposes. + type: string + redirect: + description: A HTTP rule can either return a direct_response, + redirect or forward (default) traffic. + oneOf: + - not: + anyOf: + - required: + - port + - required: + - derivePort + - required: + - port + - required: + - derivePort + properties: + authority: + type: string + derivePort: + enum: + - FROM_PROTOCOL_DEFAULT + - FROM_REQUEST_PORT + type: string + port: + description: On a redirect, overwrite the port portion of + the URL with this value. + type: integer + redirectCode: + type: integer + scheme: + description: On a redirect, overwrite the scheme portion + of the URL with this value. + type: string + uri: + type: string + type: object + retries: + description: Retry policy for HTTP requests. + properties: + attempts: + description: Number of retries to be allowed for a given + request. + format: int32 + type: integer + perTryTimeout: + description: Timeout per attempt for a given request, including + the initial call and any retries. + type: string + retryOn: + description: Specifies the conditions under which retry + takes place. + type: string + retryRemoteLocalities: + description: Flag to specify whether the retries should + retry to other localities. + nullable: true + type: boolean + type: object + rewrite: + description: Rewrite HTTP URIs and Authority headers. + properties: + authority: + description: rewrite the Authority/Host header with this + value. + type: string + uri: + type: string + type: object + route: + description: A HTTP rule can either return a direct_response, + redirect or forward (default) traffic. + items: + properties: + destination: + properties: + host: + description: The name of a service from the service + registry. + type: string + port: + description: Specifies the port on the host that is + being addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + headers: + properties: + request: + properties: + add: + additionalProperties: + type: string + type: object + remove: + items: + type: string + type: array + set: + additionalProperties: + type: string + type: object + type: object + response: + properties: + add: + additionalProperties: + type: string + type: object + remove: + items: + type: string + type: array + set: + additionalProperties: + type: string + type: object + type: object + type: object + weight: + description: Weight specifies the relative proportion + of traffic to be forwarded to the destination. + format: int32 + type: integer + type: object + type: array + timeout: + description: Timeout for HTTP requests, default is disabled. + type: string + type: object + type: array + tcp: + description: An ordered list of route rules for opaque TCP traffic. + items: + properties: + match: + items: + properties: + destinationSubnets: + description: IPv4 or IPv6 ip addresses of destination + with optional subnet. + items: + type: string + type: array + gateways: + description: Names of gateways where the rule should be + applied. + items: + type: string + type: array + port: + description: Specifies the port on the host that is being + addressed. + type: integer + sourceLabels: + additionalProperties: + type: string + type: object + sourceNamespace: + description: Source namespace constraining the applicability + of a rule to workloads in that namespace. + type: string + sourceSubnet: + description: IPv4 or IPv6 ip address of source with optional + subnet. + type: string + type: object + type: array + route: + description: The destination to which the connection should + be forwarded to. + items: + properties: + destination: + properties: + host: + description: The name of a service from the service + registry. + type: string + port: + description: Specifies the port on the host that is + being addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + weight: + description: Weight specifies the relative proportion + of traffic to be forwarded to the destination. + format: int32 + type: integer + type: object + type: array + type: object + type: array + tls: + items: + properties: + match: + items: + properties: + destinationSubnets: + description: IPv4 or IPv6 ip addresses of destination + with optional subnet. + items: + type: string + type: array + gateways: + description: Names of gateways where the rule should be + applied. + items: + type: string + type: array + port: + description: Specifies the port on the host that is being + addressed. + type: integer + sniHosts: + description: SNI (server name indicator) to match on. + items: + type: string + type: array + sourceLabels: + additionalProperties: + type: string + type: object + sourceNamespace: + description: Source namespace constraining the applicability + of a rule to workloads in that namespace. + type: string + type: object + type: array + route: + description: The destination to which the connection should + be forwarded to. + items: + properties: + destination: + properties: + host: + description: The name of a service from the service + registry. + type: string + port: + description: Specifies the port on the host that is + being addressed. + properties: + number: + type: integer + type: object + subset: + description: The name of a subset within the service. + type: string + type: object + weight: + description: Weight specifies the relative proportion + of traffic to be forwarded to the destination. + format: int32 + type: integer + type: object + type: array + type: object + type: array + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: false + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: wasmplugins.extensions.istio.io +spec: + group: extensions.istio.io + names: + categories: + - istio-io + - extensions-istio-io + kind: WasmPlugin + listKind: WasmPluginList + plural: wasmplugins + singular: wasmplugin + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Extend the functionality provided by the Istio proxy through + WebAssembly filters. See more details at: https://istio.io/docs/reference/config/proxy_extensions/wasm-plugin.html' + properties: + imagePullPolicy: + enum: + - UNSPECIFIED_POLICY + - IfNotPresent + - Always + type: string + imagePullSecret: + description: Credentials to use for OCI image pulling. + type: string + match: + description: Specifies the criteria to determine which traffic is + passed to WasmPlugin. + items: + properties: + mode: + description: Criteria for selecting traffic by their direction. + enum: + - UNDEFINED + - CLIENT + - SERVER + - CLIENT_AND_SERVER + type: string + ports: + description: Criteria for selecting traffic by their destination + port. + items: + properties: + number: + type: integer + type: object + type: array + type: object + type: array + phase: + description: Determines where in the filter chain this `WasmPlugin` + is to be injected. + enum: + - UNSPECIFIED_PHASE + - AUTHN + - AUTHZ + - STATS + type: string + pluginConfig: + description: The configuration that will be passed on to the plugin. + type: object + x-kubernetes-preserve-unknown-fields: true + pluginName: + type: string + priority: + description: Determines ordering of `WasmPlugins` in the same `phase`. + nullable: true + type: integer + selector: + properties: + matchLabels: + additionalProperties: + type: string + type: object + type: object + sha256: + description: SHA256 checksum that will be used to verify Wasm module + or OCI container. + type: string + url: + description: URL of a Wasm module or OCI container. + type: string + verificationKey: + type: string + vmConfig: + description: Configuration for a Wasm VM. + properties: + env: + description: Specifies environment variables to be injected to + this VM. + items: + properties: + name: + type: string + value: + description: Value for the environment variable. + type: string + valueFrom: + enum: + - INLINE + - HOST + type: string + type: object + type: array + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: workfloweventbindings.argoproj.io +spec: + group: argoproj.io + names: + kind: WorkflowEventBinding + listKind: WorkflowEventBindingList + plural: workfloweventbindings + shortNames: + - wfeb + singular: workfloweventbinding + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: workflows.argoproj.io +spec: + group: argoproj.io + names: + kind: Workflow + listKind: WorkflowList + plural: workflows + shortNames: + - wf + singular: workflow + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Status of the workflow + jsonPath: .status.phase + name: Status + type: string + - description: When the workflow was started + format: date-time + jsonPath: .status.startedAt + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: workflowtaskresults.argoproj.io +spec: + group: argoproj.io + names: + kind: WorkflowTaskResult + listKind: WorkflowTaskResultList + plural: workflowtaskresults + singular: workflowtaskresult + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + message: + type: string + metadata: + type: object + outputs: + properties: + artifacts: + items: + properties: + archive: + properties: + none: + type: object + tar: + properties: + compressionLevel: + format: int32 + type: integer + type: object + zip: + type: object + type: object + archiveLogs: + type: boolean + artifactory: + properties: + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + url: + type: string + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - url + type: object + from: + type: string + fromExpression: + type: string + gcs: + properties: + bucket: + type: string + key: + type: string + serviceAccountKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - key + type: object + git: + properties: + depth: + format: int64 + type: integer + disableSubmodules: + type: boolean + fetch: + items: + type: string + type: array + insecureIgnoreHostKey: + type: boolean + passwordSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + repo: + type: string + revision: + type: string + sshPrivateKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + usernameSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + required: + - repo + type: object + globalName: + type: string + hdfs: + properties: + addresses: + items: + type: string + type: array + force: + type: boolean + hdfsUser: + type: string + krbCCacheSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbConfigConfigMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbKeytabSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + krbRealm: + type: string + krbServicePrincipalName: + type: string + krbUsername: + type: string + path: + type: string + required: + - path + type: object + http: + properties: + headers: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + url: + type: string + required: + - url + type: object + mode: + format: int32 + type: integer + name: + type: string + optional: + type: boolean + oss: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + type: boolean + endpoint: + type: string + key: + type: string + lifecycleRule: + properties: + markDeletionAfterDays: + format: int32 + type: integer + markInfrequentAccessAfterDays: + format: int32 + type: integer + type: object + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + securityToken: + type: string + required: + - key + type: object + path: + type: string + raw: + properties: + data: + type: string + required: + - data + type: object + recurseMode: + type: boolean + s3: + properties: + accessKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + bucket: + type: string + createBucketIfNotPresent: + properties: + objectLocking: + type: boolean + type: object + encryptionOptions: + properties: + enableEncryption: + type: boolean + kmsEncryptionContext: + type: string + kmsKeyId: + type: string + serverSideCustomerKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + endpoint: + type: string + insecure: + type: boolean + key: + type: string + region: + type: string + roleARN: + type: string + secretKeySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + useSDKCreds: + type: boolean + type: object + subPath: + type: string + required: + - name + type: object + type: array + exitCode: + type: string + parameters: + items: + properties: + default: + type: string + description: + type: string + enum: + items: + type: string + type: array + globalName: + type: string + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + default: + type: string + event: + type: string + expression: + type: string + jqFilter: + type: string + jsonPath: + type: string + parameter: + type: string + path: + type: string + supplied: + type: object + type: object + required: + - name + type: object + type: array + result: + type: string + type: object + phase: + type: string + progress: + type: string + required: + - metadata + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: workflowtasksets.argoproj.io +spec: + group: argoproj.io + names: + kind: WorkflowTaskSet + listKind: WorkflowTaskSetList + plural: workflowtasksets + shortNames: + - wfts + singular: workflowtaskset + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + status: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: workflowtemplates.argoproj.io +spec: + group: argoproj.io + names: + kind: WorkflowTemplate + listKind: WorkflowTemplateList + plural: workflowtemplates + shortNames: + - wftmpl + singular: workflowtemplate + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + type: object + x-kubernetes-map-type: atomic + x-kubernetes-preserve-unknown-fields: true + required: + - metadata + - spec + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + helm.sh/resource-policy: keep + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: workloadentries.networking.istio.io +spec: + group: networking.istio.io + names: + categories: + - istio-io + - networking-istio-io + kind: WorkloadEntry + listKind: WorkloadEntryList + plural: workloadentries + shortNames: + - we + singular: workloadentry + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + - description: Address associated with the network endpoint. + jsonPath: .spec.address + name: Address + type: string + name: v1alpha3 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting VMs onboarded into the mesh. See + more details at: https://istio.io/docs/reference/config/networking/workload-entry.html' + properties: + address: + type: string + labels: + additionalProperties: + type: string + description: One or more labels associated with the endpoint. + type: object + locality: + description: The locality associated with the endpoint. + type: string + network: + type: string + ports: + additionalProperties: + type: integer + description: Set of ports associated with the endpoint. + type: object + serviceAccount: + type: string + weight: + description: The load balancing weight associated with the endpoint. + type: integer + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + - description: Address associated with the network endpoint. + jsonPath: .spec.address + name: Address + type: string + name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Configuration affecting VMs onboarded into the mesh. See + more details at: https://istio.io/docs/reference/config/networking/workload-entry.html' + properties: + address: + type: string + labels: + additionalProperties: + type: string + description: One or more labels associated with the endpoint. + type: object + locality: + description: The locality associated with the endpoint. + type: string + network: + type: string + ports: + additionalProperties: + type: integer + description: Set of ports associated with the endpoint. + type: object + serviceAccount: + type: string + weight: + description: The load balancing weight associated with the endpoint. + type: integer + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: false + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + app: istio-pilot + chart: istio + heritage: Tiller + release: istio + name: workloadgroups.networking.istio.io +spec: + group: networking.istio.io + names: + categories: + - istio-io + - networking-istio-io + kind: WorkloadGroup + listKind: WorkloadGroupList + plural: workloadgroups + shortNames: + - wg + singular: workloadgroup + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha3 + schema: + openAPIV3Schema: + properties: + spec: + description: 'Describes a collection of workload instances. See more details + at: https://istio.io/docs/reference/config/networking/workload-group.html' + properties: + metadata: + description: Metadata that will be used for all corresponding `WorkloadEntries`. + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + probe: + description: '`ReadinessProbe` describes the configuration the user + must provide for healthchecking on their workload.' + oneOf: + - not: + anyOf: + - required: + - httpGet + - required: + - tcpSocket + - required: + - exec + - required: + - httpGet + - required: + - tcpSocket + - required: + - exec + properties: + exec: + description: Health is determined by how the command that is executed + exited. + properties: + command: + description: Command to run. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe to be + considered failed after having succeeded. + format: int32 + type: integer + httpGet: + properties: + host: + description: Host name to connect to, defaults to the pod + IP. + type: string + httpHeaders: + description: Headers the proxy will pass on to make the request. + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + description: Port on which the endpoint lives. + type: integer + scheme: + type: string + type: object + initialDelaySeconds: + description: Number of seconds after the container has started + before readiness probes are initiated. + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe to be + considered successful after having failed. + format: int32 + type: integer + tcpSocket: + description: Health is determined by if the proxy is able to connect. + properties: + host: + type: string + port: + type: integer + type: object + timeoutSeconds: + description: Number of seconds after which the probe times out. + format: int32 + type: integer + type: object + template: + description: Template to be used for the generation of `WorkloadEntry` + resources that belong to this `WorkloadGroup`. + properties: + address: + type: string + labels: + additionalProperties: + type: string + description: One or more labels associated with the endpoint. + type: object + locality: + description: The locality associated with the endpoint. + type: string + network: + type: string + ports: + additionalProperties: + type: integer + description: Set of ports associated with the endpoint. + type: object + serviceAccount: + type: string + weight: + description: The load balancing weight associated with the endpoint. + type: integer + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: 'CreationTimestamp is a timestamp representing the server time + when this object was created. It is not guaranteed to be set in happens-before + order across separate operations. Clients may not set this value. It is represented + in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for + lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata' + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + properties: + metadata: + description: Metadata that will be used for all corresponding `WorkloadEntries`. + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + probe: + description: '`ReadinessProbe` describes the configuration the user + must provide for healthchecking on their workload.' + oneOf: + - not: + anyOf: + - required: + - httpGet + - required: + - tcpSocket + - required: + - exec + - required: + - httpGet + - required: + - tcpSocket + - required: + - exec + properties: + exec: + description: Health is determined by how the command that is executed + exited. + properties: + command: + description: Command to run. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe to be + considered failed after having succeeded. + format: int32 + type: integer + httpGet: + properties: + host: + description: Host name to connect to, defaults to the pod + IP. + type: string + httpHeaders: + description: Headers the proxy will pass on to make the request. + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + description: Port on which the endpoint lives. + type: integer + scheme: + type: string + type: object + initialDelaySeconds: + description: Number of seconds after the container has started + before readiness probes are initiated. + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe to be + considered successful after having failed. + format: int32 + type: integer + tcpSocket: + description: Health is determined by if the proxy is able to connect. + properties: + host: + type: string + port: + type: integer + type: object + timeoutSeconds: + description: Number of seconds after which the probe times out. + format: int32 + type: integer + type: object + template: + description: Template to be used for the generation of `WorkloadEntry` + resources that belong to this `WorkloadGroup`. + properties: + address: + type: string + labels: + additionalProperties: + type: string + description: One or more labels associated with the endpoint. + type: object + locality: + description: The locality associated with the endpoint. + type: string + network: + type: string + ports: + additionalProperties: + type: integer + description: Set of ports associated with the endpoint. + type: object + serviceAccount: + type: string + weight: + description: The load balancing weight associated with the endpoint. + type: integer + type: object + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: false + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.0 + name: xgboostjobs.kubeflow.org +spec: + group: kubeflow.org + names: + kind: XGBoostJob + listKind: XGBoostJobList + plural: xgboostjobs + singular: xgboostjob + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[-1:].type + name: State + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: XGBoostJob is the Schema for the xgboostjobs API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: XGBoostJobSpec defines the desired state of XGBoostJob + properties: + runPolicy: + description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster + Important: Run "make" to regenerate code after modifying this file' + properties: + activeDeadlineSeconds: + description: Specifies the duration in seconds relative to the + startTime that the job may be active before the system tries + to terminate it; value must be positive integer. + format: int64 + type: integer + backoffLimit: + description: Optional number of retries before marking this job + failed. + format: int32 + type: integer + cleanPodPolicy: + description: CleanPodPolicy defines the policy to kill pods after + the job completes. Default to None. + type: string + schedulingPolicy: + description: SchedulingPolicy defines the policy related to scheduling, + e.g. gang-scheduling + properties: + minAvailable: + format: int32 + type: integer + minResources: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + priorityClass: + type: string + queue: + type: string + scheduleTimeoutSeconds: + format: int32 + type: integer + type: object + suspend: + default: false + description: suspend specifies whether the Job controller should + create Pods or not. If a Job is created with suspend set to + true, no Pods are created by the Job controller. If a Job is + suspended after creation (i.e. the flag goes from false to true), + the Job controller will delete all active Pods and PodGroups + associated with this Job. Users must design their workload to + gracefully handle this. + type: boolean + ttlSecondsAfterFinished: + description: TTLSecondsAfterFinished is the TTL to clean up jobs. + It may take extra ReconcilePeriod seconds for the cleanup, since + reconcile gets called periodically. Default to infinite. + format: int32 + type: integer + type: object + xgbReplicaSpecs: + additionalProperties: + description: ReplicaSpec is a description of the replica + properties: + replicas: + description: Replicas is the desired number of replicas of the + given template. If unspecified, defaults to 1. + format: int32 + type: integer + restartPolicy: + description: Restart policy for all replicas within the job. + One of Always, OnFailure, Never and ExitCode. Default to Never. + type: string + template: + description: Template is the object that describes the pod that + will be created for this replica. RestartPolicy in PodTemplateSpec + will be overide by RestartPolicy in ReplicaSpec + properties: + metadata: + description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: 'Specification of the desired behavior of the + pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + properties: + activeDeadlineSeconds: + description: Optional duration in seconds the pod may + be active on the node relative to StartTime before + the system will actively try to mark it failed and + kill associated containers. Value must be a positive + integer. + format: int64 + type: integer + affinity: + description: If specified, the pod's scheduling constraints + properties: + nodeAffinity: + description: Describes node affinity scheduling + rules for the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: An empty preferred scheduling + term matches all objects with implicit weight + 0 (i.e. it's a no-op). A null preferred + scheduling term matches no objects (i.e. + is also a no-op). + properties: + preference: + description: A node selector term, associated + with the corresponding weight. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching + the corresponding nodeSelectorTerm, + in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to an update), the + system may or may not try to eventually evict + the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector + terms. The terms are ORed. + items: + description: A null or empty node selector + term matches no objects. The requirements + of them are ANDed. The TopologySelectorTerm + type implements a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector + requirements by node's labels. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector + requirements by node's fields. + items: + description: A node selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: The label key that + the selector applies to. + type: string + operator: + description: Represents a key's + relationship to a set of values. + Valid operators are In, NotIn, + Exists, DoesNotExist. Gt, + and Lt. + type: string + values: + description: An array of string + values. If the operator is + In or NotIn, the values array + must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. + If the operator is Gt or Lt, + the values array must have + a single element, which will + be interpreted as an integer. + This array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules + (e.g. co-locate this pod in the same node, zone, + etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the affinity expressions + specified by this field, but it may choose + a node that violates one or more of the expressions. + The node that is most preferred is the one + with the greatest sum of weights, i.e. for + each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified + by this field are not met at scheduling time, + the pod will not be scheduled onto the node. + If the affinity requirements specified by + this field cease to be met at some point during + pod execution (e.g. due to a pod label update), + the system may or may not try to eventually + evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling + rules (e.g. avoid putting this pod in the same + node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule + pods to nodes that satisfy the anti-affinity + expressions specified by this field, but it + may choose a node that violates one or more + of the expressions. The node that is most + preferred is the one with the greatest sum + of weights, i.e. + items: + description: The weights of all of the matched + WeightedPodAffinityTerm fields are added + per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity + term, associated with the corresponding + weight. + properties: + labelSelector: + description: A label query over a + set of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the + set of namespaces that the term + applies to. The term is applied + to the union of the namespaces selected + by this field and the ones listed + in the namespaces field. null selector + and null or empty namespaces list + means "this pod's namespace". An + empty selector ({}) matches all + namespaces. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies + a static list of namespace names + that the term applies to. The term + is applied to the union of the namespaces + listed in this field and the ones + selected by namespaceSelector. null + or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where + co-located is defined as running + on a node whose value of the label + with key topologyKey matches that + of any node on which any of the + selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching + the corresponding podAffinityTerm, in + the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements + specified by this field are not met at scheduling + time, the pod will not be scheduled onto the + node. If the anti-affinity requirements specified + by this field cease to be met at some point + during pod execution (e.g. due to a pod label + update), the system may or may not try to + eventually evict the pod from its node. + items: + description: Defines a set of pods (namely + those matching the labelSelector relative + to the given namespace(s)) that this pod + should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is + defined as running on a node whose value + of the label with key matches + that of any node on which a pod of the set + of pods is running + properties: + labelSelector: + description: A label query over a set + of resources, in this case pods. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set + of namespaces that the term applies + to. The term is applied to the union + of the namespaces selected by this field + and the ones listed in the namespaces + field. null selector and null or empty + namespaces list means "this pod's namespace". + An empty selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a + list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label + key that the selector applies + to. + type: string + operator: + description: operator represents + a key's relationship to a + set of values. Valid operators + are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array + of string values. If the operator + is In or NotIn, the values + array must be non-empty. If + the operator is Exists or + DoesNotExist, the values array + must be empty. This array + is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map + of {key,value} pairs. A single {key,value} + in the matchLabels map is equivalent + to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are + ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static + list of namespace names that the term + applies to. The term is applied to the + union of the namespaces listed in this + field and the ones selected by namespaceSelector. + null or empty namespaces list and null + namespaceSelector means "this pod's + namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located + (affinity) or not co-located (anti-affinity) + with the pods matching the labelSelector + in the specified namespaces, where co-located + is defined as running on a node whose + value of the label with key topologyKey + matches that of any node on which any + of the selected pods is running. Empty + topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates + whether a service account token should be automatically + mounted. + type: boolean + containers: + description: List of containers belonging to the pod. + Containers cannot currently be added or removed. There + must be at least one container in a Pod. Cannot be + updated. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + dnsConfig: + description: Specifies the DNS parameters of a pod. + Parameters specified here will be merged to the generated + DNS configuration based on DNSPolicy. + properties: + nameservers: + description: A list of DNS name server IP addresses. + This will be appended to the base nameservers + generated from DNSPolicy. Duplicated nameservers + will be removed. + items: + type: string + type: array + options: + description: A list of DNS resolver options. This + will be merged with the base options generated + from DNSPolicy. Duplicated entries will be removed. + Resolution options given in Options will override + those that appear in the base DNSPolicy. + items: + description: PodDNSConfigOption defines DNS resolver + options of a pod. + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + description: A list of DNS search domains for host-name + lookup. This will be appended to the base search + paths generated from DNSPolicy. Duplicated search + paths will be removed. + items: + type: string + type: array + type: object + dnsPolicy: + description: Set DNS policy for the pod. Defaults to + "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', + 'ClusterFirst', 'Default' or 'None'. DNS parameters + given in DNSConfig will be merged with the policy + selected with DNSPolicy. To have DNS options set along + with hostNetwork, you have to specify DNS policy explicitly + to 'ClusterFirstWithHostNet'. + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information + about services should be injected into pod''s environment + variables, matching the syntax of Docker links. Optional: + Defaults to true.' + type: boolean + ephemeralContainers: + description: List of ephemeral containers run in this + pod. Ephemeral containers may be run in an existing + pod to perform user-initiated actions such as debugging. + This list cannot be specified when creating a pod, + and it cannot be modified by updating the pod spec. + In order to add an ephemeral container to an existing + pod, use the pod's ephemeralcontainers subresource. + items: + description: An EphemeralContainer is a temporary + container that you may add to an existing Pod for + user-initiated activities such as debugging. Ephemeral + containers have no resource or scheduling guarantees, + and they will not be restarted when they exit or + when a Pod is removed or restarted. The kubelet + may evict a Pod if an ephemeral container causes + the Pod to exceed its resource allocation. + properties: + args: + description: 'Arguments to the entrypoint. The + image''s CMD is used if this is not provided. + Variable references $(VAR_NAME) are expanded + using the container''s environment. If a variable + cannot be resolved, the reference in the input + string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will + produce the string literal "$(VAR_NAME)".' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The image''s ENTRYPOINT is used if + this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Lifecycle is not allowed for ephemeral + containers. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the ephemeral container specified + as a DNS_LABEL. This name must be unique among + all containers, init containers and ephemeral + containers. + type: string + ports: + description: Ports are not allowed for ephemeral + containers. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: Resources are not allowed for ephemeral + containers. Ephemeral containers use spare resources + already allocated to the pod. + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'Optional: SecurityContext defines + the security options the ephemeral container + should be run with. If set, the fields of SecurityContext + override the equivalent fields of PodSecurityContext.' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: Probes are not allowed for ephemeral + containers. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + targetContainerName: + description: "If set, the name of the container + from PodSpec that this ephemeral container targets. + The ephemeral container will be run in the namespaces + (IPC, PID, etc) of this container. If not set + then the ephemeral container uses the namespaces + configured in the Pod spec. \n The container + runtime must implement support for this feature." + type: string + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Subpath mounts are not allowed for + ephemeral containers. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + hostAliases: + description: HostAliases is an optional list of hosts + and IPs that will be injected into the pod's hosts + file if specified. This is only valid for non-hostNetwork + pods. + items: + description: HostAlias holds the mapping between IP + and hostnames that will be injected as an entry + in the pod's hosts file. + properties: + hostnames: + description: Hostnames for the above IP address. + items: + type: string + type: array + ip: + description: IP address of the host file entry. + type: string + type: object + type: array + hostIPC: + description: 'Use the host''s ipc namespace. Optional: + Default to false.' + type: boolean + hostNetwork: + description: Host networking requested for this pod. + Use the host's network namespace. If this option is + set, the ports that will be used must be specified. + Default to false. + type: boolean + hostPID: + description: 'Use the host''s pid namespace. Optional: + Default to false.' + type: boolean + hostUsers: + description: 'Use the host''s user namespace. Optional: + Default to true. If set to true or not present, the + pod will be run in the host user namespace, useful + for when the pod needs a feature only available to + the host user namespace, such as loading a kernel + module with CAP_SYS_MODULE. When set to false, a new + userns is created for the pod.' + type: boolean + hostname: + description: Specifies the hostname of the Pod If not + specified, the pod's hostname will be set to a system-defined + value. + type: string + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of + references to secrets in the same namespace to use + for pulling any of the images used by this PodSpec. + If specified, these secrets will be passed to individual + puller implementations for them to use. More info: + https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + items: + description: LocalObjectReference contains enough + information to let you locate the referenced object + inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + initContainers: + description: List of initialization containers belonging + to the pod. Init containers are executed in order + prior to containers being started. If any init container + fails, the pod is considered to have failed and is + handled according to its restartPolicy. The name for + an init container or normal container must be unique + among all containers. + items: + description: A single application container that you + want to run within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The + container image''s CMD is used if this is not + provided. Variable references $(VAR_NAME) are + expanded using the container''s environment. + If a variable cannot be resolved, the reference + in the input string will be unchanged. Double + $$ are reduced to a single $, which allows for + escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within + a shell. The container image''s ENTRYPOINT is + used if this is not provided. Variable references + $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, + the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e.' + items: + type: string + type: array + env: + description: List of environment variables to + set in the container. Cannot be updated. + items: + description: EnvVar represents an environment + variable present in a Container. + properties: + name: + description: Name of the environment variable. + Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) + are expanded using the previously defined + environment variables in the container + and any service environment variables. + If a variable cannot be resolved, the + reference in the input string will be + unchanged. Double $$ are reduced to a + single $, which allows for escaping the + $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" + will produce the string literal "$(VAR_NAME)".' + type: string + valueFrom: + description: Source for the environment + variable's value. Cannot be used if value + is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the + pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret + in the pod's namespace + properties: + key: + description: The key of the secret + to select from. Must be a valid + secret key. + type: string + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the + Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment + variables in the container. The keys defined + within a source must be a C_IDENTIFIER. All + invalid keys will be reported as an event when + the container is starting. When a key exists + in multiple sources, the value associated with + the last source will take precedence. Values + defined by an Env with a duplicate key will + take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source + of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend + to each key in the ConfigMap. Must be + a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: Specify whether the Secret + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + image: + description: 'Container image name. More info: + https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level + config management to default or override container + images in workload controllers like Deployments + and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, + Never, IfNotPresent. Defaults to Always if :latest + tag is specified, or IfNotPresent otherwise. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system + should take in response to container lifecycle + events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately + after a container is created. If the handler + fails, the container is terminated and restarted + according to its restart policy. Other management + of the container blocks until the hook completes. + More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: PreStop is called immediately + before a container is terminated due to + an API request or management event such + as liveness/startup probe failure, preemption, + resource contention, etc. The handler is + not called if the container crashes or exits. + The Pod's termination grace period countdown + begins before the PreStop hook is executed. + properties: + exec: + description: Exec specifies the action + to take. + properties: + command: + description: Command is the command + line to execute inside the container, + the working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it + is not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to + explicitly call out to that shell. + Exit status of 0 is treated as live/healthy + and non-zero is unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http + request to perform. + properties: + host: + description: Host name to connect + to, defaults to the pod IP. You + probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set + in the request. HTTP allows repeated + headers. + items: + description: HTTPHeader describes + a custom header to be used in + HTTP probes + properties: + name: + description: The header field + name. This will be canonicalized + upon output, so case-variant + names will be understood as + the same header. + type: string + value: + description: The header field + value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the + HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is + NOT supported as a LifecycleHandler + and kept for the backward compatibility. + There are no validation of this field + and lifecycle hooks will fail in runtime + when tcp handler is specified. + properties: + host: + description: 'Optional: Host name + to connect to, defaults to the pod + IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the + port to access on the container. + Number must be in the range 1 to + 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. + Container will be restarted if the probe fails. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as + a DNS_LABEL. Each container in a pod must have + a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the + container. Not specifying a port here DOES NOT + prevent that port from being exposed. Any port + which is listening on the default "0.0.0.0" + address inside a container will be accessible + from the network. Modifying this array with + strategic merge patch may corrupt the data. + For more information See https://github.com/kubernetes/kubernetes/issues/108255. + items: + description: ContainerPort represents a network + port in a single container. + properties: + containerPort: + description: Number of port to expose on + the pod's IP address. This must be a valid + port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external + port to. + type: string + hostPort: + description: Number of port to expose on + the host. If specified, this must be a + valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. + Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be + an IANA_SVC_NAME and unique within the + pod. Each named port in a pod must have + a unique name. Name for the port that + can be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be + UDP, TCP, or SCTP. Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service + readiness. Container will be removed from service + endpoints if the probe fails. Cannot be updated. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resizePolicy: + description: Resources resize policy for the container. + items: + description: ContainerResizePolicy represents + resource resize policy for the container. + properties: + resourceName: + description: 'Name of the resource to which + this resource resize policy applies. Supported + values: cpu, memory.' + type: string + restartPolicy: + description: Restart policy to apply when + specified resource is resized. If not + specified, it defaults to NotRequired. + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + description: 'Compute Resources required by this + container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are + used by this container. \n This is an alpha + field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. + It can only be set for containers." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum + amount of compute resources allowed. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If + Requests is omitted for a container, it + defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined + value. Requests cannot exceed Limits. More + info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security + options the container should be run with. If + set, the fields of SecurityContext override + the equivalent fields of PodSecurityContext. + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls + whether a process can gain more privileges + than its parent process. This bool directly + controls if the no_new_privs flag will be + set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) + run as Privileged 2) has CAP_SYS_ADMIN Note + that this field cannot be set when spec.os.name + is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop + when running containers. Defaults to the + default set of capabilities granted by the + container runtime. Note that this field + cannot be set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX + capabilities type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. + Processes in privileged containers are essentially + equivalent to root on the host. Defaults + to false. Note that this field cannot be + set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of + proc mount to use for the containers. The + default is DefaultProcMount which uses the + container runtime defaults for readonly + paths and masked paths. This requires the + ProcMountType feature flag to be enabled. + Note that this field cannot be set when + spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a + read-only root filesystem. Default is false. + Note that this field cannot be set when + spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint + of the container process. Uses runtime default + if unset. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container + must run as a non-root user. If true, the + Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 + (root) and fail to start the container if + it does. If unset or false, no such validation + will be performed. May also be set in PodSecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint + of the container process. Defaults to user + specified in image metadata if unspecified. + May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied + to the container. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in + PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is windows. + properties: + level: + description: Level is SELinux level label + that applies to the container. + type: string + role: + description: Role is a SELinux role label + that applies to the container. + type: string + type: + description: Type is a SELinux type label + that applies to the container. + type: string + user: + description: User is a SELinux user label + that applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by + this container. If seccomp options are provided + at both the pod & container level, the container + options override the pod options. Note that + this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates + a profile defined in a file on the node + should be used. The profile must be + preconfigured on the node to work. Must + be a descending path, relative to the + kubelet's configured seccomp profile + location. Must only be set if type is + "Localhost". + type: string + type: + description: "type indicates which kind + of seccomp profile will be applied. + Valid options are: \n Localhost - a + profile defined in a file on the node + should be used. RuntimeDefault - the + container runtime default profile should + be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings + applied to all containers. If unspecified, + the options from the PodSecurityContext + will be used. If set in both SecurityContext + and PodSecurityContext, the value specified + in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where + the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName + field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is + the name of the GMSA credential spec + to use. + type: string + hostProcess: + description: HostProcess determines if + a container should be run as a 'Host + Process' container. This field is alpha-level + and will only be honored by components + that enable the WindowsHostProcessContainers + feature flag. Setting this field without + the feature flag will result in errors + when validating the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to + run the entrypoint of the container + process. Defaults to the user specified + in image metadata if unspecified. May + also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: StartupProbe indicates that the Pod + has successfully initialized. If specified, + no other probes are executed until this completes + successfully. If this probe fails, the Pod will + be restarted, just as if the livenessProbe failed. + properties: + exec: + description: Exec specifies the action to + take. + properties: + command: + description: Command is the command line + to execute inside the container, the + working directory for the command is + root ('/') in the container's filesystem. + The command is simply exec'd, it is + not run inside a shell, so traditional + shell instructions ('|', etc) won't + work. To use a shell, you need to explicitly + call out to that shell. Exit status + of 0 is treated as live/healthy and + non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures + for the probe to be considered failed after + having succeeded. Defaults to 3. Minimum + value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving + a GRPC port. + properties: + port: + description: Port number of the gRPC service. + Number must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the + service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default + behavior is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request + to perform. + properties: + host: + description: Host name to connect to, + defaults to the pod IP. You probably + want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in + the request. HTTP allows repeated headers. + items: + description: HTTPHeader describes a + custom header to be used in HTTP probes + properties: + name: + description: The header field name. + This will be canonicalized upon + output, so case-variant names + will be understood as the same + header. + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP + server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting + to the host. Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the + container has started before liveness probes + are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform + the probe. Default to 10 seconds. Minimum + value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes + for the probe to be considered successful + after having failed. Defaults to 1. Must + be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action + involving a TCP port. + properties: + host: + description: 'Optional: Host name to connect + to, defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port + to access on the container. Number must + be in the range 1 to 65535. Name must + be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds + the pod needs to terminate gracefully upon + probe failure. The grace period is the duration + in seconds after the processes running in + the pod are sent a termination signal and + the time when the processes are forcibly + halted with a kill signal. Set this value + longer than the expected cleanup time for + your process. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which + the probe times out. Defaults to 1 second. + Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate + a buffer for stdin in the container runtime. + If this is not set, reads from stdin in the + container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should + close the stdin channel after it has been opened + by a single attach. When stdin is true the stdin + stream will remain open across multiple attach + sessions. + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file + to which the container''s termination message + will be written is mounted into the container''s + filesystem. Message written is intended to be + brief final status, such as an assertion failure + message. Will be truncated by the node if greater + than 4096 bytes. The total message length across + all containers will be limited to 12kb. Defaults + to /dev/termination-log.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message + should be populated. File will use the contents + of terminationMessagePath to populate the container + status message on both success and failure. + FallbackToLogsOnError will use the last chunk + of container log output if the termination message + file is empty and the container exited with + an error. + type: string + tty: + description: Whether this container should allocate + a TTY for itself, also requires 'stdin' to be + true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block + devices to be used by the container. + items: + description: volumeDevice describes a mapping + of a raw block device within a container. + properties: + devicePath: + description: devicePath is the path inside + of the container that the device will + be mapped to. + type: string + name: + description: name must match the name of + a persistentVolumeClaim in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's + filesystem. Cannot be updated. + items: + description: VolumeMount describes a mounting + of a Volume within a container. + properties: + mountPath: + description: Path within the container at + which the volume should be mounted. Must + not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines + how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is + used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of + a Volume. + type: string + readOnly: + description: Mounted read-only if true, + read-write otherwise (false or unspecified). + Defaults to false. + type: boolean + subPath: + description: Path within the volume from + which the container's volume should be + mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume + from which the container's volume should + be mounted. Behaves similarly to SubPath + but environment variable references $(VAR_NAME) + are expanded using the container's environment. + Defaults to "" (volume's root). SubPathExpr + and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If + not specified, the container runtime's default + will be used, which might be configured in the + container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + nodeName: + description: NodeName is a request to schedule this + pod onto a specific node. If it is non-empty, the + scheduler simply schedules this pod onto that node, + assuming that it fits resource requirements. + type: string + nodeSelector: + additionalProperties: + type: string + description: 'NodeSelector is a selector which must + be true for the pod to fit on a node. Selector which + must match a node''s labels for the pod to be scheduled + on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + x-kubernetes-map-type: atomic + os: + description: "Specifies the OS of the containers in + the pod. Some pod and container fields are restricted + if this is set. \n If the OS field is set to linux, + the following fields must be unset: -securityContext.windowsOptions + \n If the OS field is set to windows, following fields + must be unset: - spec.hostPID - spec.hostIPC - spec.hostUsers + - spec.securityContext.seLinuxOptions - spec.securityContext." + properties: + name: + description: 'Name is the name of the operating + system. The currently supported values are linux + and windows. Additional value may be defined in + future and can be one of: https://github.com/opencontainers/runtime-spec/blob/master/config.md#platform-specific-configuration + Clients should expect to handle additional values + and treat unrecognized values in this field as + os: null' + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Overhead represents the resource overhead + associated with running a pod for a given RuntimeClass. + This field will be autopopulated at admission time + by the RuntimeClass admission controller. If the RuntimeClass + admission controller is enabled, overhead must not + be set in Pod create requests. The RuntimeClass admission + controller will reject Pod create requests which have + the overhead already set. + type: object + preemptionPolicy: + description: PreemptionPolicy is the Policy for preempting + pods with lower priority. One of Never, PreemptLowerPriority. + Defaults to PreemptLowerPriority if unset. + type: string + priority: + description: The priority value. Various system components + use this field to find the priority of the pod. When + Priority Admission Controller is enabled, it prevents + users from setting this field. The admission controller + populates this field from PriorityClassName. The higher + the value, the higher the priority. + format: int32 + type: integer + priorityClassName: + description: If specified, indicates the pod's priority. + "system-node-critical" and "system-cluster-critical" + are two special keywords which indicate the highest + priorities with the former being the highest priority. + Any other name must be defined by creating a PriorityClass + object with that name. If not specified, the pod priority + will be default or zero if there is no default. + type: string + readinessGates: + description: 'If specified, all readiness gates will + be evaluated for pod readiness. A pod is ready when + all its containers are ready AND all conditions specified + in the readiness gates have status equal to "True" + More info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates' + items: + description: PodReadinessGate contains the reference + to a pod condition + properties: + conditionType: + description: ConditionType refers to a condition + in the pod's condition list with matching type. + type: string + required: + - conditionType + type: object + type: array + resourceClaims: + description: "ResourceClaims defines which ResourceClaims + must be allocated and reserved before the Pod is allowed + to start. The resources will be made available to + those containers which consume them by name. \n This + is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable." + items: + description: PodResourceClaim references exactly one + ResourceClaim through a ClaimSource. It adds a name + to it that uniquely identifies the ResourceClaim + inside the Pod. Containers that need access to the + ResourceClaim reference it with this name. + properties: + name: + description: Name uniquely identifies this resource + claim inside the pod. This must be a DNS_LABEL. + type: string + source: + description: Source describes where to find the + ResourceClaim. + properties: + resourceClaimName: + description: ResourceClaimName is the name + of a ResourceClaim object in the same namespace + as this pod. + type: string + resourceClaimTemplateName: + description: "ResourceClaimTemplateName is + the name of a ResourceClaimTemplate object + in the same namespace as this pod. \n The + template will be used to create a new ResourceClaim, + which will be bound to this pod. When this + pod is deleted, the ResourceClaim will also + be deleted. The name of the ResourceClaim + will be -, where + is the PodResourceClaim.Name." + type: string + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restartPolicy: + description: 'Restart policy for all containers within + the pod. One of Always, OnFailure, Never. In some + contexts, only a subset of those values may be permitted. + Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' + type: string + runtimeClassName: + description: 'RuntimeClassName refers to a RuntimeClass + object in the node.k8s.io group, which should be used + to run this pod. If no RuntimeClass resource matches + the named class, the pod will not be run. If unset + or empty, the "legacy" RuntimeClass will be used, + which is an implicit class with an empty definition + that uses the default runtime handler. More info: + https://git.k8s.' + type: string + schedulerName: + description: If specified, the pod will be dispatched + by specified scheduler. If not specified, the pod + will be dispatched by default scheduler. + type: string + schedulingGates: + description: "SchedulingGates is an opaque list of values + that if specified will block scheduling the pod. If + schedulingGates is not empty, the pod will stay in + the SchedulingGated state and the scheduler will not + attempt to schedule the pod. \n SchedulingGates can + only be set at pod creation time, and be removed only + afterwards. \n This is a beta feature enabled by the + PodSchedulingReadiness feature gate." + items: + description: PodSchedulingGate is associated to a + Pod to guard its scheduling. + properties: + name: + description: Name of the scheduling gate. Each + scheduling gate must have a unique name field. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + description: 'SecurityContext holds pod-level security + attributes and common container settings. Optional: + Defaults to empty. See type description for default + values of each field.' + properties: + fsGroup: + description: "A special supplemental group that + applies to all containers in a pod. Some volume + types allow the Kubelet to change the ownership + of that volume to be owned by the pod: \n 1. The + owning GID will be the FSGroup 2. The setgid bit + is set (new files created in the volume will be + owned by FSGroup) 3." + format: int64 + type: integer + fsGroupChangePolicy: + description: 'fsGroupChangePolicy defines behavior + of changing ownership and permission of the volume + before being exposed inside Pod. This field will + only apply to volume types which support fsGroup + based ownership(and permissions). It will have + no effect on ephemeral volume types such as: secret, + configmaps and emptydir. Valid values are "OnRootMismatch" + and "Always". If not specified, "Always" is used.' + type: string + runAsGroup: + description: The GID to run the entrypoint of the + container process. Uses runtime default if unset. + May also be set in SecurityContext. If set in + both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run + as a non-root user. If true, the Kubelet will + validate the image at runtime to ensure that it + does not run as UID 0 (root) and fail to start + the container if it does. If unset or false, no + such validation will be performed. May also be + set in SecurityContext. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the + container process. Defaults to user specified + in image metadata if unspecified. May also be + set in SecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in + SecurityContext takes precedence for that container. + Note that this field cannot be set when spec.os.name + is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to + all containers. If unspecified, the container + runtime will allocate a random SELinux context + for each container. May also be set in SecurityContext. If + set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence + for that container. Note that this field cannot + be set when spec.os.name is windows. + properties: + level: + description: Level is SELinux level label that + applies to the container. + type: string + role: + description: Role is a SELinux role label that + applies to the container. + type: string + type: + description: Type is a SELinux type label that + applies to the container. + type: string + user: + description: User is a SELinux user label that + applies to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. Note that this field cannot be set + when spec.os.name is windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile + defined in a file on the node should be used. + The profile must be preconfigured on the node + to work. Must be a descending path, relative + to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp + profile will be applied. Valid options are: + \n Localhost - a profile defined in a file + on the node should be used. RuntimeDefault + - the container runtime default profile should + be used. Unconfined - no profile should be + applied." + type: string + required: + - type + type: object + supplementalGroups: + description: A list of groups applied to the first + process run in each container, in addition to + the container's primary GID, the fsGroup (if specified), + and group memberships defined in the container + image for the uid of the container process. If + unspecified, no additional groups are added to + any container. + items: + format: int64 + type: integer + type: array + sysctls: + description: Sysctls hold a list of namespaced sysctls + used for the pod. Pods with unsupported sysctls + (by the container runtime) might fail to launch. + Note that this field cannot be set when spec.os.name + is windows. + items: + description: Sysctl defines a kernel parameter + to be set + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + description: The Windows specific settings applied + to all containers. If unspecified, the options + within a container's SecurityContext will be used. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name + is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the + GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential + spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name + of the GMSA credential spec to use. + type: string + hostProcess: + description: HostProcess determines if a container + should be run as a 'Host Process' container. + This field is alpha-level and will only be + honored by components that enable the WindowsHostProcessContainers + feature flag. Setting this field without the + feature flag will result in errors when validating + the Pod. + type: boolean + runAsUserName: + description: The UserName in Windows to run + the entrypoint of the container process. Defaults + to the user specified in image metadata if + unspecified. May also be set in PodSecurityContext. + If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes + precedence. + type: string + type: object + type: object + serviceAccount: + description: 'DeprecatedServiceAccount is a depreciated + alias for ServiceAccountName. Deprecated: Use serviceAccountName + instead.' + type: string + serviceAccountName: + description: 'ServiceAccountName is the name of the + ServiceAccount to use to run this pod. More info: + https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + setHostnameAsFQDN: + description: If true the pod's hostname will be configured + as the pod's FQDN, rather than the leaf name (the + default). In Linux containers, this means setting + the FQDN in the hostname field of the kernel (the + nodename field of struct utsname). + type: boolean + shareProcessNamespace: + description: 'Share a single process namespace between + all of the containers in a pod. When this is set containers + will be able to view and signal processes from other + containers in the same pod, and the first process + in each container will not be assigned PID 1. HostPID + and ShareProcessNamespace cannot both be set. Optional: + Default to false.' + type: boolean + subdomain: + description: If specified, the fully qualified Pod hostname + will be "...svc.". If not specified, the pod will not have + a domainname at all. + type: string + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully. May be decreased in delete + request. Value must be non-negative integer. The value + zero indicates stop immediately via the kill signal + (no opportunity to shut down). If this value is nil, + the default grace period will be used instead. + format: int64 + type: integer + tolerations: + description: If specified, the pod's tolerations. + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + effect: + description: Effect indicates the taint effect + to match. Empty means match all taint effects. + When specified, allowed values are NoSchedule, + PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. + If the key is empty, operator must be Exists; + this combination means to match all values and + all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and + Equal. Defaults to Equal. Exists is equivalent + to wildcard for value, so that a pod can tolerate + all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the + period of time the toleration (which must be + of effect NoExecute, otherwise this field is + ignored) tolerates the taint. By default, it + is not set, which means tolerate the taint forever + (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value + should be empty, otherwise just a regular string. + type: string + type: object + type: array + topologySpreadConstraints: + description: TopologySpreadConstraints describes how + a group of pods ought to spread across topology domains. + Scheduler will schedule pods in a way which abides + by the constraints. All topologySpreadConstraints + are ANDed. + items: + description: TopologySpreadConstraint specifies how + to spread matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching + pods. Pods that match this label selector are + counted to determine the number of pods in their + corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of + label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, a + key, and an operator that relates the + key and values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + description: MatchLabelKeys is a set of pod label + keys to select the pods over which spreading + will be calculated. The keys are used to lookup + values from the incoming pod labels, those key-value + labels are ANDed with labelSelector to select + the group of existing pods over which spreading + will be calculated for the incoming pod. The + same key is forbidden to exist in both MatchLabelKeys + and LabelSelector. + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + description: MaxSkew describes the degree to which + pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between + the number of matching pods in the target topology + and the global minimum. The global minimum is + the minimum number of matching pods in an eligible + domain or zero if the number of eligible domains + is less than MinDomains. + format: int32 + type: integer + minDomains: + description: MinDomains indicates a minimum number + of eligible domains. When the number of eligible + domains with matching topology keys is less + than minDomains, Pod Topology Spread treats + "global minimum" as 0, and then the calculation + of Skew is performed. And when the number of + eligible domains with matching topology keys + equals or greater than minDomains, this value + has no effect on scheduling. + format: int32 + type: integer + nodeAffinityPolicy: + description: "NodeAffinityPolicy indicates how + we will treat Pod's nodeAffinity/nodeSelector + when calculating pod topology spread skew. Options + are: - Honor: only nodes matching nodeAffinity/nodeSelector + are included in the calculations. - Ignore: + nodeAffinity/nodeSelector are ignored. All nodes + are included in the calculations. \n If this + value is nil, the behavior is equivalent to + the Honor policy." + type: string + nodeTaintsPolicy: + description: "NodeTaintsPolicy indicates how we + will treat node taints when calculating pod + topology spread skew. Options are: - Honor: + nodes without taints, along with tainted nodes + for which the incoming pod has a toleration, + are included. - Ignore: node taints are ignored. + All nodes are included. \n If this value is + nil, the behavior is equivalent to the Ignore + policy." + type: string + topologyKey: + description: TopologyKey is the key of node labels. + Nodes that have a label with this key and identical + values are considered to be in the same topology. + We consider each as a "bucket", + and try to put balanced number of pods into + each bucket. We define a domain as a particular + instance of a topology. + type: string + whenUnsatisfiable: + description: WhenUnsatisfiable indicates how to + deal with a pod if it doesn't satisfy the spread + constraint. - DoNotSchedule (default) tells + the scheduler not to schedule it. - ScheduleAnyway + tells the scheduler to schedule the pod in any + location, but giving higher precedence to topologies + that would help reduce the skew. + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + description: 'List of volumes that can be mounted by + containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + items: + description: Volume represents a named volume in a + pod that may be accessed by any container in the + pod. + properties: + awsElasticBlockStore: + description: 'awsElasticBlockStore represents + an AWS Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'readOnly value true will force + the readOnly setting in VolumeMounts. More + info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'volumeID is unique ID of the + persistent disk resource in AWS (Amazon + EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: azureDisk represents an Azure Data + Disk mount on the host and bind mount to the + pod. + properties: + cachingMode: + description: 'cachingMode is the Host Caching + mode: None, Read Only, Read Write.' + type: string + diskName: + description: diskName is the Name of the data + disk in the blob storage + type: string + diskURI: + description: diskURI is the URI of data disk + in the blob storage + type: string + fsType: + description: fsType is Filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + kind: + description: 'kind expected values are Shared: + multiple blob disks per storage account Dedicated: + single blob disk per storage account Managed: + azure managed data disk (only in managed + availability set). defaults to shared' + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: azureFile represents an Azure File + Service mount on the host and bind mount to + the pod. + properties: + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretName: + description: secretName is the name of secret + that contains Azure Storage Account Name + and Key + type: string + shareName: + description: shareName is the azure share + Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: cephFS represents a Ceph FS mount + on the host that shares a pod's lifetime + properties: + monitors: + description: 'monitors is Required: Monitors + is a collection of Ceph monitors More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'path is Optional: Used as the + mounted root, rather than the full Ceph + tree, default is /' + type: string + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'secretFile is Optional: SecretFile + is the path to key ring for User, default + is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'secretRef is Optional: SecretRef + is reference to the authentication secret + for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is optional: User is the + rados user name, default is admin More info: + https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'cinder represents a cinder volume + attached and mounted on kubelets host machine. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'secretRef is optional: points + to a secret object containing parameters + used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + description: 'volumeID used to identify the + volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: configMap represents a configMap + that should populate this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced + ConfigMap will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + optional: + description: optional specify whether the + ConfigMap or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + description: csi (Container Storage Interface) + represents ephemeral storage that is handled + by certain external CSI drivers (Beta feature). + properties: + driver: + description: driver is the name of the CSI + driver that handles this volume. Consult + with your admin for the correct name as + registered in the cluster. + type: string + fsType: + description: fsType to mount. Ex. "ext4", + "xfs", "ntfs". If not provided, the empty + value is passed to the associated CSI driver + which will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: nodePublishSecretRef is a reference + to the secret object containing sensitive + information to pass to the CSI driver to + complete the CSI NodePublishVolume and NodeUnpublishVolume + calls. This field is optional, and may + be empty if no secret is required. If the + secret object contains more than one secret, + all secret references are passed. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + description: readOnly specifies a read-only + configuration for the volume. Defaults to + false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: volumeAttributes stores driver-specific + properties that are passed to the CSI driver. + Consult your driver's documentation for + supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: downwardAPI represents downward API + about the pod that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits to use on + created files by default. Must be a Optional: + mode bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: Items is a list of downward API + volume file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects a field + of the pod: only annotations, labels, + name and namespace are supported.' + properties: + apiVersion: + description: Version of the schema + the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to + select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits used + to set permissions on this file, must + be an octal value between 0000 and + 0777 or a decimal value between 0 + and 511. YAML accepts both octal and + decimal values, JSON requires decimal + values for mode bits. If not specified, + the volume defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path is the + relative path name of the file to + be created. Must not be absolute or + contain the ''..'' path. Must be utf-8 + encoded. The first item of the relative + path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of + the container: only resources limits + and requests (limits.cpu, limits.memory, + requests.cpu and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env + vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output + format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'emptyDir represents a temporary + directory that shares a pod''s lifetime. More + info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'medium represents what type + of storage medium should back this directory. + The default is "" which means to use the + node''s default medium. Must be an empty + string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount + of local storage required for this EmptyDir + volume. The size limit is also applicable + for memory medium. The maximum usage on + memory medium EmptyDir would be the minimum + value between the SizeLimit specified here + and the sum of memory limits of all containers + in a pod. The default is nil which means + that the limit is undefined. More info: + https://kubernetes.' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + description: ephemeral represents a volume that + is handled by a cluster storage driver. The + volume's lifecycle is tied to the pod that defines + it - it will be created before the pod starts, + and deleted when the pod is removed. + properties: + volumeClaimTemplate: + description: Will be used to create a stand-alone + PVC to provision the volume. The pod in + which this EphemeralVolumeSource is embedded + will be the owner of the PVC, i.e. the PVC + will be deleted together with the pod. The + name of the PVC will be `-` where `` is the name + from the `PodSpec.Volumes` array entry. + properties: + metadata: + description: May contain labels and annotations + that will be copied into the PVC when + creating it. No other fields are allowed + and will be rejected during validation. + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + description: The specification for the + PersistentVolumeClaim. The entire content + is copied unchanged into the PVC that + gets created from this template. The + same fields as in a PersistentVolumeClaim + are also valid here. + properties: + accessModes: + description: 'accessModes contains + the desired access modes the volume + should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can + be used to specify either: * An + existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) + If the provisioner or an external + controller can support the specified + data source, it will create a new + volume based on the contents of + the specified data source.' + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: dataSourceRef specifies + the object from which to populate + the volume with data, if a non-empty + volume is desired. This may be any + object from a non-empty API group + (non core object) or a PersistentVolumeClaim + object. When this field is specified, + volume binding will only succeed + if the type of the specified object + matches some installed volume populator + or dynamic provisioner. + properties: + apiGroup: + description: APIGroup is the group + for the resource being referenced. + If APIGroup is not specified, + the specified Kind must be in + the core API group. For any + other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type + of resource being referenced + type: string + name: + description: Name is the name + of resource being referenced + type: string + namespace: + description: Namespace is the + namespace of resource being + referenced Note that when a + namespace is specified, a gateway.networking.k8s.io/ReferenceGrant + object is required in the referent + namespace to allow that namespace's + owner to accept the reference. + See the ReferenceGrant documentation + for details. (Alpha) This field + requires the CrossNamespaceVolumeDataSource + feature gate to be enabled. + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents + the minimum resources the volume + should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed + to specify resource requirements + that are lower than previous value + but must still be higher than capacity + recorded in the status field of + the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + claims: + description: "Claims lists the + names of resources, defined + in spec.resourceClaims, that + are used by this container. + \n This is an alpha field and + requires enabling the DynamicResourceAllocation + feature gate. \n This field + is immutable. It can only be + set for containers." + items: + description: ResourceClaim references + one entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match + the name of one entry + in pod.spec.resourceClaims + of the Pod where this + field is used. It makes + that resource available + inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes + the maximum amount of compute + resources allowed. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes + the minimum amount of compute + resources required. If Requests + is omitted for a container, + it defaults to Limits if that + is explicitly specified, otherwise + to an implementation-defined + value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query + over volumes to consider for binding. + properties: + matchExpressions: + description: matchExpressions + is a list of label selector + requirements. The requirements + are ANDed. + items: + description: A label selector + requirement is a selector + that contains values, a key, + and an operator that relates + the key and values. + properties: + key: + description: key is the + label key that the selector + applies to. + type: string + operator: + description: operator represents + a key's relationship to + a set of values. Valid + operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an + array of string values. + If the operator is In + or NotIn, the values array + must be non-empty. If + the operator is Exists + or DoesNotExist, the values + array must be empty. This + array is replaced during + a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a + map of {key,value} pairs. A + single {key,value} in the matchLabels + map is equivalent to an element + of matchExpressions, whose key + field is "key", the operator + is "In", and the values array + contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + description: 'storageClassName is + the name of the StorageClass required + by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what + type of volume is required by the + claim. Value of Filesystem is implied + when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding + reference to the PersistentVolume + backing this claim. + type: string + type: object + required: + - spec + type: object + type: object + fc: + description: fc represents a Fibre Channel resource + that is attached to a kubelet's host machine + and then exposed to the pod. + properties: + fsType: + description: 'fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. TODO: how do we prevent + errors in the filesystem from compromising + the machine' + type: string + lun: + description: 'lun is Optional: FC target lun + number' + format: int32 + type: integer + readOnly: + description: 'readOnly is Optional: Defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'targetWWNs is Optional: FC target + worldwide names (WWNs)' + items: + type: string + type: array + wwids: + description: 'wwids Optional: FC volume world + wide identifiers (wwids) Either wwids or + combination of targetWWNs and lun must be + set, but not both simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: flexVolume represents a generic volume + resource that is provisioned/attached using + an exec based plugin. + properties: + driver: + description: driver is the name of the driver + to use for this volume. + type: string + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". The default filesystem depends + on FlexVolume script. + type: string + options: + additionalProperties: + type: string + description: 'options is Optional: this field + holds extra command options if any.' + type: object + readOnly: + description: 'readOnly is Optional: defaults + to false (read/write). ReadOnly here will + force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'secretRef is Optional: secretRef + is reference to the secret object containing + sensitive information to pass to the plugin + scripts. This may be empty if no secret + object is specified. If the secret object + contains more than one secret, all secrets + are passed to the plugin scripts.' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + description: flocker represents a Flocker volume + attached to a kubelet's host machine. This depends + on the Flocker control service being running + properties: + datasetName: + description: datasetName is Name of the dataset + stored as metadata -> name on the dataset + for Flocker should be considered as deprecated + type: string + datasetUUID: + description: datasetUUID is the UUID of the + dataset. This is unique identifier of a + Flocker dataset + type: string + type: object + gcePersistentDisk: + description: 'gcePersistentDisk represents a GCE + Disk resource that is attached to a kubelet''s + host machine and then exposed to the pod. More + info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'fsType is filesystem type of + the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + partition: + description: 'partition is the partition in + the volume that you want to mount. If omitted, + the default is to mount by volume name. + Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume + partition for /dev/sda is "0" (or you can + leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'pdName is unique name of the + PD resource in GCE. Used to identify the + disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'gitRepo represents a git repository + at a particular revision. DEPRECATED: GitRepo + is deprecated. To provision a container with + a git repo, mount an EmptyDir into an InitContainer + that clones the repo using git, then mount the + EmptyDir into the Pod''s container.' + properties: + directory: + description: directory is the target directory + name. Must not contain or start with '..'. If + '.' is supplied, the volume directory will + be the git repository. Otherwise, if specified, + the volume will contain the git repository + in the subdirectory with the given name. + type: string + repository: + description: repository is the URL + type: string + revision: + description: revision is the commit hash for + the specified revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'glusterfs represents a Glusterfs + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'endpoints is the endpoint name + that details Glusterfs topology. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'path is the Glusterfs volume + path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'readOnly here will force the + Glusterfs volume to be mounted with read-only + permissions. Defaults to false. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'hostPath represents a pre-existing + file or directory on the host machine that is + directly exposed to the container. This is generally + used for system agents or other privileged things + that are allowed to see the host machine. Most + containers will NOT need this. More info: https://kubernetes.' + properties: + path: + description: 'path of the directory on the + host. If the path is a symlink, it will + follow the link to the real path. More info: + https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'type for HostPath Volume Defaults + to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'iscsi represents an ISCSI Disk resource + that is attached to a kubelet''s host machine + and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: chapAuthDiscovery defines whether + support iSCSI Discovery CHAP authentication + type: boolean + chapAuthSession: + description: chapAuthSession defines whether + support iSCSI Session CHAP authentication + type: boolean + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + initiatorName: + description: initiatorName is the custom iSCSI + Initiator Name. If initiatorName is specified + with iscsiInterface simultaneously, new + iSCSI interface : will be created for the connection. + type: string + iqn: + description: iqn is the target iSCSI Qualified + Name. + type: string + iscsiInterface: + description: iscsiInterface is the interface + Name that uses an iSCSI transport. Defaults + to 'default' (tcp). + type: string + lun: + description: lun represents iSCSI Target Lun + number. + format: int32 + type: integer + portals: + description: portals is the iSCSI Target Portal + List. The portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. + type: boolean + secretRef: + description: secretRef is the CHAP Secret + for iSCSI target and initiator authentication + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + description: targetPortal is iSCSI Target + Portal. The Portal is either an IP or ip_addr:port + if the port is other than default (typically + TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'name of the volume. Must be a DNS_LABEL + and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'nfs represents an NFS mount on the + host that shares a pod''s lifetime More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'path that is exported by the + NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'readOnly here will force the + NFS export to be mounted with read-only + permissions. Defaults to false. More info: + https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'server is the hostname or IP + address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'persistentVolumeClaimVolumeSource + represents a reference to a PersistentVolumeClaim + in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'claimName is the name of a PersistentVolumeClaim + in the same namespace as the pod using this + volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: readOnly Will force the ReadOnly + setting in VolumeMounts. Default false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: photonPersistentDisk represents a + PhotonController persistent disk attached and + mounted on kubelets host machine + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + pdID: + description: pdID is the ID that identifies + Photon Controller persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: portworxVolume represents a portworx + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fSType represents the filesystem + type to mount Must be a filesystem type + supported by the host operating system. + Ex. "ext4", "xfs". Implicitly inferred to + be "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + volumeID: + description: volumeID uniquely identifies + a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: projected items for all in one resources + secrets, configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits + used to set permissions on created files + by default. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. Directories within the path are + not affected by this setting. + format: int32 + type: integer + sources: + description: sources is the list of volume + projections + items: + description: Projection that may be projected + along with other supported volume types + properties: + configMap: + description: configMap information about + the configMap data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced ConfigMap + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional specify whether + the ConfigMap or its keys must + be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information + about the downwardAPI data to project + properties: + items: + description: Items is a list of + DownwardAPIVolume file + items: + description: DownwardAPIVolumeFile + represents information to create + the file containing the pod + field + properties: + fieldRef: + description: 'Required: Selects + a field of the pod: only + annotations, labels, name + and namespace are supported.' + properties: + apiVersion: + description: Version of + the schema the FieldPath + is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the + field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode + bits used to set permissions + on this file, must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: 'Required: Path + is the relative path name + of the file to be created. + Must not be absolute or + contain the ''..'' path. + Must be utf-8 encoded. The + first item of the relative + path must not start with + ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource + of the container: only resources + limits and requests (limits.cpu, + limits.memory, requests.cpu + and requests.memory) are + currently supported.' + properties: + containerName: + description: 'Container + name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies + the output format of + the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: + resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about + the secret data to project + properties: + items: + description: items if unspecified, + each key-value pair in the Data + field of the referenced Secret + will be projected into the volume + as a file whose name is the key + and content is the value. If specified, + the listed keys will be projected + into the specified paths, and + unlisted keys will not be present. + items: + description: Maps a string key + to a path within a volume. + properties: + key: + description: key is the key + to project. + type: string + mode: + description: 'mode is Optional: + mode bits used to set permissions + on this file. Must be an + octal value between 0000 + and 0777 or a decimal value + between 0 and 511. YAML + accepts both octal and decimal + values, JSON requires decimal + values for mode bits. If + not specified, the volume + defaultMode will be used.' + format: int32 + type: integer + path: + description: path is the relative + path of the file to map + the key to. May not be an + absolute path. May not contain + the path element '..'. May + not start with the string + '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. + apiVersion, kind, uid?' + type: string + optional: + description: optional field specify + whether the Secret or its key + must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is + information about the serviceAccountToken + data to project + properties: + audience: + description: audience is the intended + audience of the token. A recipient + of a token must identify itself + with an identifier specified in + the audience of the token, and + otherwise should reject the token. + The audience defaults to the identifier + of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is + the requested duration of validity + of the service account token. + As the token approaches expiration, + the kubelet volume plugin will + proactively rotate the service + account token. The kubelet will + start trying to rotate the token + if the token is older than 80 + percent of its time to live or + if the token is older than 24 + hours.Defaults to 1 hour and must + be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative + to the mount point of the file + to project the token into. + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + description: quobyte represents a Quobyte mount + on the host that shares a pod's lifetime + properties: + group: + description: group to map volume access to + Default is no group + type: string + readOnly: + description: readOnly here will force the + Quobyte volume to be mounted with read-only + permissions. Defaults to false. + type: boolean + registry: + description: registry represents a single + or multiple Quobyte Registry services specified + as a string as host:port pair (multiple + entries are separated with commas) which + acts as the central registry for volumes + type: string + tenant: + description: tenant owning the given Quobyte + volume in the Backend Used with dynamically + provisioned Quobyte volumes, value is set + by the plugin + type: string + user: + description: user to map volume access to + Defaults to serivceaccount user + type: string + volume: + description: volume is a string that references + an already created Quobyte volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'rbd represents a Rados Block Device + mount on the host that shares a pod''s lifetime. + More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type + of the volume that you want to mount. Tip: + Ensure that the filesystem type is supported + by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred + to be "ext4" if unspecified. More info: + https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in the filesystem + from compromising the machine' + type: string + image: + description: 'image is the rados image name. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'keyring is the path to key ring + for RBDUser. Default is /etc/ceph/keyring. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'monitors is a collection of + Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'pool is the rados pool name. + Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'readOnly here will force the + ReadOnly setting in VolumeMounts. Defaults + to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'secretRef is name of the authentication + secret for RBDUser. If provided overrides + keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is the rados user name. + Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: scaleIO represents a ScaleIO persistent + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: gateway is the host address of + the ScaleIO API Gateway. + type: string + protectionDomain: + description: protectionDomain is the name + of the ScaleIO Protection Domain for the + configured storage. + type: string + readOnly: + description: readOnly Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef references to the secret + for ScaleIO user and other sensitive information. + If this is not provided, Login operation + will fail. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + description: sslEnabled Flag enable/disable + SSL communication with Gateway, default + false + type: boolean + storageMode: + description: storageMode indicates whether + the storage for a volume should be ThickProvisioned + or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: storagePool is the ScaleIO Storage + Pool associated with the protection domain. + type: string + system: + description: system is the name of the storage + system as configured in ScaleIO. + type: string + volumeName: + description: volumeName is the name of a volume + already created in the ScaleIO system that + is associated with this volume source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'secret represents a secret that + should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode + bits used to set permissions on created + files by default. Must be an octal value + between 0000 and 0777 or a decimal value + between 0 and 511. YAML accepts both octal + and decimal values, JSON requires decimal + values for mode bits. Defaults to 0644. + Directories within the path are not affected + by this setting.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value + pair in the Data field of the referenced + Secret will be projected into the volume + as a file whose name is the key and content + is the value. If specified, the listed keys + will be projected into the specified paths, + and unlisted keys will not be present. + items: + description: Maps a string key to a path + within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode + bits used to set permissions on this + file. Must be an octal value between + 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal + and decimal values, JSON requires + decimal values for mode bits. If not + specified, the volume defaultMode + will be used.' + format: int32 + type: integer + path: + description: path is the relative path + of the file to map the key to. May + not be an absolute path. May not contain + the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether + the Secret or its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the + secret in the pod''s namespace to use. More + info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: storageOS represents a StorageOS + volume attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type + to mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). + ReadOnly here will force the ReadOnly setting + in VolumeMounts. + type: boolean + secretRef: + description: secretRef specifies the secret + to use for obtaining the StorageOS API credentials. If + not specified, default values will be attempted. + properties: + name: + description: 'Name of the referent. More + info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, + kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + description: volumeName is the human-readable + name of the StorageOS volume. Volume names + are only unique within a namespace. + type: string + volumeNamespace: + description: volumeNamespace specifies the + scope of the volume within StorageOS. If + no namespace is specified then the Pod's + namespace will be used. This allows the + Kubernetes name scoping to be mirrored within + StorageOS for tighter integration. Set VolumeName + to any name to override the default behaviour. + Set to "default" if you are not using namespaces + within StorageOS. + type: string + type: object + vsphereVolume: + description: vsphereVolume represents a vSphere + volume attached and mounted on kubelets host + machine + properties: + fsType: + description: fsType is filesystem type to + mount. Must be a filesystem type supported + by the host operating system. Ex. "ext4", + "xfs", "ntfs". Implicitly inferred to be + "ext4" if unspecified. + type: string + storagePolicyID: + description: storagePolicyID is the storage + Policy Based Management (SPBM) profile ID + associated with the StoragePolicyName. + type: string + storagePolicyName: + description: storagePolicyName is the storage + Policy Based Management (SPBM) profile name. + type: string + volumePath: + description: volumePath is the path that identifies + vSphere volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + type: object + type: object + required: + - xgbReplicaSpecs + type: object + status: + description: JobStatus represents the current observed state of the training + Job. + properties: + completionTime: + description: Represents time when the job was completed. It is not + guaranteed to be set in happens-before order across separate operations. + It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + conditions: + description: Conditions is an array of current observed job conditions. + items: + description: JobCondition describes the state of the job at a certain + point. + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + lastUpdateTime: + description: The last time this condition was updated. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of job condition. + type: string + required: + - status + - type + type: object + type: array + lastReconcileTime: + description: Represents last time when the job was reconciled. It + is not guaranteed to be set in happens-before order across separate + operations. It is represented in RFC3339 form and is in UTC. + format: date-time + type: string + replicaStatuses: + additionalProperties: + description: ReplicaStatus represents the current observed state + of the replica. + properties: + active: + description: The number of actively running pods. + format: int32 + type: integer + failed: + description: The number of pods which reached phase Failed. + format: int32 + type: integer + labelSelector: + description: 'Deprecated: Use Selector instead' + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. This + array is replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + selector: + description: A Selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. + An empty Selector matches all objects. A null Selector matches + no objects. + type: string + succeeded: + description: The number of pods which reached phase Succeeded. + format: int32 + type: integer + type: object + description: ReplicaStatuses is map of ReplicaType and ReplicaStatus, + specifies the status of each replica. + type: object + startTime: + description: Represents time when the job was acknowledged by the + job controller. It is not guaranteed to be set in happens-before + order across separate operations. It is represented in RFC3339 form + and is in UTC. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: kubeflow/admission-webhook-cert + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + name: admission-webhook-mutating-webhook-configuration +webhooks: +- admissionReviewVersions: + - v1beta1 + - v1 + clientConfig: + caBundle: "" + service: + name: admission-webhook-service + namespace: kubeflow + path: /apply-poddefault + failurePolicy: Fail + name: admission-webhook-deployment.kubeflow.org + namespaceSelector: + matchLabels: + app.kubernetes.io/part-of: kubeflow-profile + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + resources: + - pods + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: kubeflow/kfp-cache-cert + labels: + app: cache-server-cert-manager + name: cache-webhook-kubeflow +webhooks: +- admissionReviewVersions: + - v1beta1 + clientConfig: + service: + name: cache-server + namespace: kubeflow + path: /mutate + failurePolicy: Ignore + name: cache-server.kubeflow.svc + objectSelector: + matchLabels: + pipelines.kubeflow.org/cache_enabled: "true" + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + resources: + - pods + sideEffects: None + timeoutSeconds: 5 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from-secret: cert-manager/cert-manager-webhook-ca + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: cert-manager-webhook + namespace: cert-manager + path: /mutate + failurePolicy: Fail + matchPolicy: Equivalent + name: webhook.cert-manager.io + rules: + - apiGroups: + - cert-manager.io + - acme.cert-manager.io + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + resources: + - '*/*' + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: kubeflow/serving-cert + labels: + app: kserve + app.kubernetes.io/name: kserve + name: inferenceservice.serving.kserve.io +webhooks: +- admissionReviewVersions: + - v1beta1 + clientConfig: + caBundle: Cg== + service: + name: kserve-webhook-server-service + namespace: kubeflow + path: /mutate-serving-kserve-io-v1beta1-inferenceservice + failurePolicy: Fail + name: inferenceservice.kserve-webhook-server.defaulter + rules: + - apiGroups: + - serving.kserve.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - inferenceservices + sideEffects: None +- admissionReviewVersions: + - v1beta1 + clientConfig: + caBundle: Cg== + service: + name: kserve-webhook-server-service + namespace: kubeflow + path: /mutate-pods + failurePolicy: Fail + name: inferenceservice.kserve-webhook-server.pod-mutator + namespaceSelector: + matchExpressions: + - key: control-plane + operator: DoesNotExist + objectSelector: + matchExpressions: + - key: serving.kserve.io/inferenceservice + operator: Exists + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + resources: + - pods + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + labels: + app: sidecar-injector + install.operator.istio.io/owning-resource: unknown + istio.io/rev: default + operator.istio.io/component: Pilot + release: istio + name: istio-sidecar-injector +webhooks: +- admissionReviewVersions: + - v1beta1 + - v1 + clientConfig: + service: + name: istiod + namespace: istio-system + path: /inject + port: 443 + failurePolicy: Fail + name: rev.namespace.sidecar-injector.istio.io + namespaceSelector: + matchExpressions: + - key: istio.io/rev + operator: In + values: + - default + - key: istio-injection + operator: DoesNotExist + objectSelector: + matchExpressions: + - key: sidecar.istio.io/inject + operator: NotIn + values: + - "false" + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + resources: + - pods + sideEffects: None +- admissionReviewVersions: + - v1beta1 + - v1 + clientConfig: + service: + name: istiod + namespace: istio-system + path: /inject + port: 443 + failurePolicy: Fail + name: rev.object.sidecar-injector.istio.io + namespaceSelector: + matchExpressions: + - key: istio.io/rev + operator: DoesNotExist + - key: istio-injection + operator: DoesNotExist + objectSelector: + matchExpressions: + - key: sidecar.istio.io/inject + operator: NotIn + values: + - "false" + - key: istio.io/rev + operator: In + values: + - default + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + resources: + - pods + sideEffects: None +- admissionReviewVersions: + - v1beta1 + - v1 + clientConfig: + service: + name: istiod + namespace: istio-system + path: /inject + port: 443 + failurePolicy: Fail + name: namespace.sidecar-injector.istio.io + namespaceSelector: + matchExpressions: + - key: istio-injection + operator: In + values: + - enabled + objectSelector: + matchExpressions: + - key: sidecar.istio.io/inject + operator: NotIn + values: + - "false" + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + resources: + - pods + sideEffects: None +- admissionReviewVersions: + - v1beta1 + - v1 + clientConfig: + service: + name: istiod + namespace: istio-system + path: /inject + port: 443 + failurePolicy: Fail + name: object.sidecar-injector.istio.io + namespaceSelector: + matchExpressions: + - key: istio-injection + operator: DoesNotExist + - key: istio.io/rev + operator: DoesNotExist + objectSelector: + matchExpressions: + - key: sidecar.istio.io/inject + operator: In + values: + - "true" + - key: istio.io/rev + operator: DoesNotExist + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + resources: + - pods + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: kubeflow/katib-webhook-cert + name: katib.kubeflow.org +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + caBundle: Cg== + service: + name: katib-controller + namespace: kubeflow + path: /mutate-experiment + name: defaulter.experiment.katib.kubeflow.org + rules: + - apiGroups: + - kubeflow.org + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - experiments + sideEffects: None +- admissionReviewVersions: + - v1 + clientConfig: + caBundle: Cg== + service: + name: katib-controller + namespace: kubeflow + path: /mutate-pod + name: mutator.pod.katib.kubeflow.org + namespaceSelector: + matchLabels: + katib.kubeflow.org/metrics-collector-injection: enabled + objectSelector: + matchExpressions: + - key: katib.kubeflow.org/metrics-collector-injection + operator: NotIn + values: + - disabled + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + resources: + - pods + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: sinkbindings.webhook.sources.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: eventing-webhook + namespace: knative-eventing + failurePolicy: Fail + name: sinkbindings.webhook.sources.knative.dev + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: domain-mapping + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: webhook.domainmapping.serving.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: domainmapping-webhook + namespace: knative-serving + failurePolicy: Fail + name: webhook.domainmapping.serving.knative.dev + rules: + - apiGroups: + - serving.knative.dev + apiVersions: + - '*' + operations: + - CREATE + - UPDATE + resources: + - domainmappings + - domainmappings/status + scope: '*' + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: webhook.eventing.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: eventing-webhook + namespace: knative-eventing + failurePolicy: Fail + name: webhook.eventing.knative.dev + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: webhook.istio.networking.internal.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: net-istio-webhook + namespace: knative-serving + failurePolicy: Fail + name: webhook.istio.networking.internal.knative.dev + objectSelector: + matchExpressions: + - key: serving.knative.dev/configuration + operator: Exists + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: webhook + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: webhook.serving.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: webhook + namespace: knative-serving + failurePolicy: Fail + name: webhook.serving.knative.dev + rules: + - apiGroups: + - autoscaling.internal.knative.dev + - networking.internal.knative.dev + - serving.knative.dev + apiVersions: + - '*' + operations: + - CREATE + - UPDATE + resources: + - metrics + - podautoscalers + - certificates + - ingresses + - serverlessservices + - configurations + - revisions + - routes + - services + scope: '*' + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: dex + namespace: auth +--- +apiVersion: v1 +automountServiceAccountToken: true +kind: ServiceAccount +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager + namespace: cert-manager +--- +apiVersion: v1 +automountServiceAccountToken: true +kind: ServiceAccount +metadata: + labels: + app: cainjector + app.kubernetes.io/component: cainjector + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cainjector + app.kubernetes.io/version: v1.12.2 + name: cert-manager-cainjector + namespace: cert-manager +--- +apiVersion: v1 +automountServiceAccountToken: true +kind: ServiceAccount +metadata: + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook + namespace: cert-manager +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: authservice + namespace: istio-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: cluster-local-gateway + install.operator.istio.io/owning-resource: unknown + istio: cluster-local-gateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: cluster-local-gateway-service-account + namespace: istio-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: istio-ingressgateway + install.operator.istio.io/owning-resource: unknown + istio: ingressgateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: istio-ingressgateway-service-account + namespace: istio-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: istio-reader + release: istio + name: istio-reader-service-account + namespace: istio-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: istiod + release: istio + name: istiod + namespace: istio-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: istiod + release: istio + name: istiod-service-account + namespace: istio-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-controller + namespace: knative-eventing +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-webhook + namespace: knative-eventing +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: pingsource-mt-adapter + namespace: knative-eventing +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: controller + namespace: knative-serving +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + name: admission-webhook-service-account + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: argo + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-service-account + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: katib-controller + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: katib-ui + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: kserve + app.kubernetes.io/instance: kserve-controller-manager + app.kubernetes.io/managed-by: kserve-controller-manager + app.kubernetes.io/name: kserve + name: kserve-controller-manager + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + name: kserve-models-web-app + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-cache + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-container-builder + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-metadata-writer + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-viewer + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + application-crd-id: kubeflow-pipelines + kustomize.component: metacontroller + name: meta-controller-service + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: metadata-grpc-server + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-persistenceagent + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-scheduledworkflow + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-viewer-crd-service-account + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-visualizationserver + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: mysql + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + name: notebook-controller-service-account + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: pipeline-runner + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + kustomize.component: profiles + name: profiles-controller-service-account + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: tensorboard-controller + kustomize.component: tensorboard-controller + name: tensorboard-controller-controller-manager + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + name: tensorboards-web-app-service-account + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: training-operator + name: training-operator + namespace: kubeflow +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + name: volumes-web-app-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook:dynamic-serving + namespace: cert-manager +rules: +- apiGroups: + - "" + resourceNames: + - cert-manager-webhook-ca + resources: + - secrets + verbs: + - get + - list + - watch + - update +- apiGroups: + - "" + resources: + - secrets + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + install.operator.istio.io/owning-resource: unknown + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: cluster-local-gateway-sds + namespace: istio-system +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + install.operator.istio.io/owning-resource: unknown + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: istio-ingressgateway-sds + namespace: istio-system +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: istiod + release: istio + name: istiod + namespace: istio-system +rules: +- apiGroups: + - networking.istio.io + resources: + - gateways + verbs: + - create +- apiGroups: + - "" + resources: + - secrets + verbs: + - create + - get + - watch + - list + - update + - delete +- apiGroups: + - "" + resources: + - configmaps + verbs: + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: istiod + release: istio + name: istiod-istio-system + namespace: istio-system +rules: +- apiGroups: + - networking.istio.io + resources: + - gateways + verbs: + - create +- apiGroups: + - "" + resources: + - secrets + verbs: + - create + - get + - watch + - list + - update + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: knative-eventing-webhook + namespace: knative-eventing +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - create + - update + - list + - watch + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: cainjector + app.kubernetes.io/component: cainjector + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cainjector + app.kubernetes.io/version: v1.12.2 + name: cert-manager-cainjector:leaderelection + namespace: kube-system +rules: +- apiGroups: + - coordination.k8s.io + resourceNames: + - cert-manager-cainjector-leader-election + - cert-manager-cainjector-leader-election-core + resources: + - leases + verbs: + - get + - update + - patch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager:leaderelection + namespace: kube-system +rules: +- apiGroups: + - coordination.k8s.io + resourceNames: + - cert-manager-controller + resources: + - leases + verbs: + - get + - update + - patch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: argo-role + namespace: kubeflow +rules: +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - update +- apiGroups: + - "" + resources: + - secrets + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard + namespace: kubeflow +rules: +- apiGroups: + - "" + - app.k8s.io + resources: + - applications + - pods + - pods/exec + - pods/log + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - secrets + - configmaps + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-jupyter-notebook-role + namespace: kubeflow +rules: +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - kubeflow.org + resources: + - notebooks + - notebooks/finalizers + - poddefaults + verbs: + - get + - list + - create + - delete + - patch + - update +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get + - list +- apiGroups: + - "" + resources: + - events + - nodes + verbs: + - list +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: kserve-leader-election-role + namespace: kubeflow +rules: +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - list + - update +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - configmaps/status + verbs: + - get + - update + - patch +- apiGroups: + - "" + resources: + - events + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-cache-role + namespace: kubeflow +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch + - update + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: kubeflow-pipelines-metadata-writer-role + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-metadata-writer-role + namespace: kubeflow +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch + - update + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: ml-pipeline + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline + namespace: kubeflow +rules: +- apiGroups: + - "" + resources: + - pods + - pods/log + verbs: + - get + - list + - delete +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + verbs: + - create + - get + - list + - update + - patch + - delete +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-persistenceagent-role + namespace: kubeflow +rules: +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch +- apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: ml-pipeline-scheduledworkflow-role + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-scheduledworkflow-role + namespace: kubeflow +rules: +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + - scheduledworkflows/finalizers + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: ml-pipeline-ui + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui + namespace: kubeflow +rules: +- apiGroups: + - "" + resources: + - pods + - pods/log + verbs: + - get +- apiGroups: + - "" + resources: + - events + verbs: + - list +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list +- apiGroups: + - kubeflow.org + resources: + - viewers + verbs: + - create + - get + - list + - watch + - delete +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-viewer-controller-role + namespace: kubeflow +rules: +- apiGroups: + - '*' + resources: + - deployments + - services + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - kubeflow.org + resources: + - viewers + - viewers/finalizers + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + name: notebook-controller-leader-election-role + namespace: kubeflow +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - configmaps/status + verbs: + - get + - update + - patch +- apiGroups: + - "" + resources: + - events + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: pipeline-runner + namespace: kubeflow +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - get +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - watch + - list +- apiGroups: + - "" + resources: + - persistentvolumes + - persistentvolumeclaims + verbs: + - '*' +- apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - create + - delete + - get +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - "" + resources: + - pods + - pods/exec + - pods/log + - services + verbs: + - '*' +- apiGroups: + - "" + - apps + - extensions + resources: + - deployments + - replicasets + verbs: + - '*' +- apiGroups: + - kubeflow.org + resources: + - '*' + verbs: + - '*' +- apiGroups: + - batch + resources: + - jobs + verbs: + - '*' +- apiGroups: + - machinelearning.seldon.io + resources: + - seldondeployments + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + kustomize.component: profiles + name: profiles-leader-election-role + namespace: kubeflow +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - configmaps/status + verbs: + - get + - update + - patch +- apiGroups: + - "" + resources: + - events + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: tensorboard-controller + kustomize.component: tensorboard-controller + name: tensorboard-controller-leader-election-role + namespace: kubeflow +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + duck.knative.dev/addressable: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: addressable-resolver +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + name: admission-webhook-cluster-role +rules: +- apiGroups: + - kubeflow.org + resources: + - poddefaults + verbs: + - get + - watch + - list + - update + - create + - patch + - delete +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-poddefaults-admin: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: admission-webhook-kubeflow-poddefaults-admin +rules: [] +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-poddefaults-edit: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + name: admission-webhook-kubeflow-poddefaults-edit +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-poddefaults-admin: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-poddefaults-edit: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: admission-webhook-kubeflow-poddefaults-view +rules: +- apiGroups: + - kubeflow.org + resources: + - poddefaults + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-pipelines-edit: "true" + name: aggregate-to-kubeflow-pipelines-edit +rules: +- apiGroups: + - pipelines.kubeflow.org + resources: + - pipelines + - pipelines/versions + verbs: + - create + - delete + - update +- apiGroups: + - pipelines.kubeflow.org + resources: + - experiments + verbs: + - archive + - create + - delete + - unarchive +- apiGroups: + - pipelines.kubeflow.org + resources: + - runs + verbs: + - archive + - create + - delete + - retry + - terminate + - unarchive + - reportMetrics + - readArtifact +- apiGroups: + - pipelines.kubeflow.org + resources: + - jobs + verbs: + - create + - delete + - disable + - enable +- apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + verbs: + - '*' +- apiGroups: + - argoproj.io + resources: + - cronworkflows + - cronworkflows/finalizers + - workflows + - workflows/finalizers + - workfloweventbindings + - workflowtemplates + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-pipelines-view: "true" + name: aggregate-to-kubeflow-pipelines-view +rules: +- apiGroups: + - pipelines.kubeflow.org + resources: + - pipelines + - pipelines/versions + - experiments + - jobs + verbs: + - get + - list +- apiGroups: + - pipelines.kubeflow.org + resources: + - runs + verbs: + - get + - list + - readArtifact +- apiGroups: + - kubeflow.org + resources: + - viewers + verbs: + - create + - get + - delete +- apiGroups: + - pipelines.kubeflow.org + resources: + - visualizations + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + application-crd-id: kubeflow-pipelines + rbac.authorization.k8s.io/aggregate-to-admin: "true" + name: argo-aggregate-to-admin +rules: +- apiGroups: + - argoproj.io + resources: + - workflows + - workflows/finalizers + - workfloweventbindings + - workfloweventbindings/finalizers + - workflowtemplates + - workflowtemplates/finalizers + - cronworkflows + - cronworkflows/finalizers + - clusterworkflowtemplates + - clusterworkflowtemplates/finalizers + - workflowtasksets + - workflowtasksets/finalizers + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + application-crd-id: kubeflow-pipelines + rbac.authorization.k8s.io/aggregate-to-edit: "true" + name: argo-aggregate-to-edit +rules: +- apiGroups: + - argoproj.io + resources: + - workflows + - workflows/finalizers + - workfloweventbindings + - workfloweventbindings/finalizers + - workflowtemplates + - workflowtemplates/finalizers + - cronworkflows + - cronworkflows/finalizers + - clusterworkflowtemplates + - clusterworkflowtemplates/finalizers + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + application-crd-id: kubeflow-pipelines + rbac.authorization.k8s.io/aggregate-to-view: "true" + name: argo-aggregate-to-view +rules: +- apiGroups: + - argoproj.io + resources: + - workflows + - workflows/finalizers + - workfloweventbindings + - workfloweventbindings/finalizers + - workflowtemplates + - workflowtemplates/finalizers + - cronworkflows + - cronworkflows/finalizers + - clusterworkflowtemplates + - clusterworkflowtemplates/finalizers + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: argo-cluster-role +rules: +- apiGroups: + - "" + resources: + - pods + - pods/exec + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - watch + - list +- apiGroups: + - "" + resources: + - persistentvolumeclaims + - persistentvolumeclaims/finalizers + verbs: + - create + - update + - delete + - get +- apiGroups: + - argoproj.io + resources: + - workflows + - workflows/finalizers + - workflowtasksets + - workflowtasksets/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete + - create +- apiGroups: + - argoproj.io + resources: + - workflowtemplates + - workflowtemplates/finalizers + - clusterworkflowtemplates + - clusterworkflowtemplates/finalizers + verbs: + - get + - list + - watch +- apiGroups: + - argoproj.io + resources: + - workflowtaskresults + verbs: + - list + - watch + - deletecollection +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - get + - list +- apiGroups: + - argoproj.io + resources: + - cronworkflows + - cronworkflows/finalizers + verbs: + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - get + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: authn-delegator +rules: +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/addressable: "true" + kustomize.component: knative + name: broker-addressable-resolver +rules: +- apiGroups: + - eventing.knative.dev + resources: + - brokers + - brokers/status + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/podspecable: "true" + kustomize.component: knative + name: builtin-podspecable-binding +rules: +- apiGroups: + - apps + resources: + - deployments + - daemonsets + - statefulsets + - replicasets + verbs: + - list + - watch + - patch +- apiGroups: + - batch + resources: + - jobs + verbs: + - list + - watch + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard +rules: +- apiGroups: + - "" + resources: + - events + - namespaces + - nodes + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cainjector + app.kubernetes.io/component: cainjector + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cainjector + app.kubernetes.io/version: v1.12.2 + name: cert-manager-cainjector +rules: +- apiGroups: + - cert-manager.io + resources: + - certificates + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - get + - create + - update + - patch +- apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + - mutatingwebhookconfigurations + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - apiregistration.k8s.io + resources: + - apiservices + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - update + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-approve:cert-manager-io +rules: +- apiGroups: + - cert-manager.io + resourceNames: + - issuers.cert-manager.io/* + - clusterissuers.cert-manager.io/* + resources: + - signers + verbs: + - approve +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-certificates +rules: +- apiGroups: + - cert-manager.io + resources: + - certificates + - certificates/status + - certificaterequests + - certificaterequests/status + verbs: + - update + - patch +- apiGroups: + - cert-manager.io + resources: + - certificates + - certificaterequests + - clusterissuers + - issuers + verbs: + - get + - list + - watch +- apiGroups: + - cert-manager.io + resources: + - certificates/finalizers + - certificaterequests/finalizers + verbs: + - update +- apiGroups: + - acme.cert-manager.io + resources: + - orders + verbs: + - create + - delete + - get + - list + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch + - create + - update + - delete + - patch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-certificatesigningrequests +rules: +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - get + - list + - watch + - update +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests/status + verbs: + - update + - patch +- apiGroups: + - certificates.k8s.io + resourceNames: + - issuers.cert-manager.io/* + - clusterissuers.cert-manager.io/* + resources: + - signers + verbs: + - sign +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-challenges +rules: +- apiGroups: + - acme.cert-manager.io + resources: + - challenges + - challenges/status + verbs: + - update + - patch +- apiGroups: + - acme.cert-manager.io + resources: + - challenges + verbs: + - get + - list + - watch +- apiGroups: + - cert-manager.io + resources: + - issuers + - clusterissuers + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - "" + resources: + - pods + - services + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - watch + - create + - delete + - update +- apiGroups: + - gateway.networking.k8s.io + resources: + - httproutes + verbs: + - get + - list + - watch + - create + - delete + - update +- apiGroups: + - route.openshift.io + resources: + - routes/custom-host + verbs: + - create +- apiGroups: + - acme.cert-manager.io + resources: + - challenges/finalizers + verbs: + - update +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-clusterissuers +rules: +- apiGroups: + - cert-manager.io + resources: + - clusterissuers + - clusterissuers/status + verbs: + - update + - patch +- apiGroups: + - cert-manager.io + resources: + - clusterissuers + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch + - create + - update + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-ingress-shim +rules: +- apiGroups: + - cert-manager.io + resources: + - certificates + - certificaterequests + verbs: + - create + - update + - delete +- apiGroups: + - cert-manager.io + resources: + - certificates + - certificaterequests + - issuers + - clusterissuers + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses/finalizers + verbs: + - update +- apiGroups: + - gateway.networking.k8s.io + resources: + - gateways + - httproutes + verbs: + - get + - list + - watch +- apiGroups: + - gateway.networking.k8s.io + resources: + - gateways/finalizers + - httproutes/finalizers + verbs: + - update +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-issuers +rules: +- apiGroups: + - cert-manager.io + resources: + - issuers + - issuers/status + verbs: + - update + - patch +- apiGroups: + - cert-manager.io + resources: + - issuers + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch + - create + - update + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-orders +rules: +- apiGroups: + - acme.cert-manager.io + resources: + - orders + - orders/status + verbs: + - update + - patch +- apiGroups: + - acme.cert-manager.io + resources: + - orders + - challenges + verbs: + - get + - list + - watch +- apiGroups: + - cert-manager.io + resources: + - clusterissuers + - issuers + verbs: + - get + - list + - watch +- apiGroups: + - acme.cert-manager.io + resources: + - challenges + verbs: + - create + - delete +- apiGroups: + - acme.cert-manager.io + resources: + - orders/finalizers + verbs: + - update +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + name: cert-manager-edit +rules: +- apiGroups: + - cert-manager.io + resources: + - certificates + - certificaterequests + - issuers + verbs: + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - cert-manager.io + resources: + - certificates/status + verbs: + - update +- apiGroups: + - acme.cert-manager.io + resources: + - challenges + - orders + verbs: + - create + - delete + - deletecollection + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.k8s.io/aggregate-to-view: "true" + name: cert-manager-view +rules: +- apiGroups: + - cert-manager.io + resources: + - certificates + - certificaterequests + - issuers + verbs: + - get + - list + - watch +- apiGroups: + - acme.cert-manager.io + resources: + - challenges + - orders + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook:subjectaccessreviews +rules: +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/addressable: "true" + kustomize.component: knative + name: channel-addressable-resolver +rules: +- apiGroups: + - messaging.knative.dev + resources: + - channels + - channels/status + verbs: + - get + - list + - watch +- apiGroups: + - messaging.knative.dev + resources: + - channels/finalizers + verbs: + - update +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + duck.knative.dev/channelable: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: channelable-manipulator +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: dex +rules: +- apiGroups: + - dex.coreos.com + resources: + - '*' + verbs: + - '*' +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-broker-filter +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - eventing.knative.dev + resources: + - triggers + - triggers/status + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-broker-ingress +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-config-reader +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/source: "true" + kustomize.component: knative + name: eventing-sources-source-observer +rules: +- apiGroups: + - sources.knative.dev + resources: + - apiserversources + - pingsources + - sinkbindings + - containersources + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/addressable: "true" + kustomize.component: knative + name: flows-addressable-resolver +rules: +- apiGroups: + - flows.knative.dev + resources: + - sequences + - sequences/status + - parallels + - parallels/status + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: istio-reader + release: istio + name: istio-reader-clusterrole-istio-system +rules: +- apiGroups: + - config.istio.io + - security.istio.io + - networking.istio.io + - authentication.istio.io + - rbac.istio.io + resources: + - '*' + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - endpoints + - pods + - services + - nodes + - replicationcontrollers + - namespaces + - secrets + verbs: + - get + - list + - watch +- apiGroups: + - networking.istio.io + resources: + - workloadentries + verbs: + - get + - watch + - list +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - get + - list + - watch +- apiGroups: + - multicluster.x-k8s.io + resources: + - serviceexports + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - multicluster.x-k8s.io + resources: + - serviceimports + verbs: + - get + - list + - watch +- apiGroups: + - apps + resources: + - replicasets + verbs: + - get + - list + - watch +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: istio-reader + release: istio + name: istio-reader-istio-system +rules: +- apiGroups: + - config.istio.io + - security.istio.io + - networking.istio.io + - authentication.istio.io + - rbac.istio.io + resources: + - '*' + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - endpoints + - pods + - services + - nodes + - replicationcontrollers + - namespaces + - secrets + verbs: + - get + - list + - watch +- apiGroups: + - networking.istio.io + resources: + - workloadentries + verbs: + - get + - watch + - list +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - get + - list + - watch +- apiGroups: + - apps + resources: + - replicasets + verbs: + - get + - list + - watch +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - multicluster.x-k8s.io + resources: + - serviceexports + verbs: + - get + - watch + - list +- apiGroups: + - multicluster.x-k8s.io + resources: + - serviceimports + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: istiod + release: istio + name: istiod-clusterrole-istio-system +rules: +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + verbs: + - get + - list + - watch + - update +- apiGroups: + - config.istio.io + - security.istio.io + - networking.istio.io + - authentication.istio.io + - rbac.istio.io + - telemetry.istio.io + - extensions.istio.io + resources: + - '*' + verbs: + - get + - watch + - list +- apiGroups: + - networking.istio.io + resources: + - workloadentries + verbs: + - get + - watch + - list + - update + - patch + - create + - delete +- apiGroups: + - networking.istio.io + resources: + - workloadentries/status + verbs: + - get + - watch + - list + - update + - patch + - create + - delete +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - pods + - nodes + - services + - namespaces + - endpoints + verbs: + - get + - list + - watch +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + - ingressclasses + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses/status + verbs: + - '*' +- apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - get + - list + - watch + - update +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - watch +- apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + resources: + - signers + verbs: + - approve +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - networking.x-k8s.io + - gateway.networking.k8s.io + resources: + - '*' + verbs: + - get + - watch + - list +- apiGroups: + - networking.x-k8s.io + - gateway.networking.k8s.io + resources: + - '*' + verbs: + - update + - patch +- apiGroups: + - gateway.networking.k8s.io + resources: + - gatewayclasses + verbs: + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - list +- apiGroups: + - multicluster.x-k8s.io + resources: + - serviceexports + verbs: + - get + - watch + - list + - create + - delete +- apiGroups: + - multicluster.x-k8s.io + resources: + - serviceimports + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: istiod + release: istio + name: istiod-gateway-controller-istio-system +rules: +- apiGroups: + - apps + resources: + - deployments + verbs: + - get + - watch + - list + - update + - patch + - create + - delete +- apiGroups: + - "" + resources: + - services + verbs: + - get + - watch + - list + - update + - patch + - create + - delete +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - get + - watch + - list + - update + - patch + - create + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: istiod + release: istio + name: istiod-istio-system +rules: +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + verbs: + - get + - list + - watch + - update +- apiGroups: + - config.istio.io + - security.istio.io + - networking.istio.io + - authentication.istio.io + - rbac.istio.io + - telemetry.istio.io + resources: + - '*' + verbs: + - get + - watch + - list +- apiGroups: + - networking.istio.io + resources: + - workloadentries + verbs: + - get + - watch + - list + - update + - patch + - create + - delete +- apiGroups: + - networking.istio.io + resources: + - workloadentries/status + verbs: + - get + - watch + - list + - update + - patch + - create + - delete +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - pods + - nodes + - services + - namespaces + - endpoints + verbs: + - get + - list + - watch +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + - ingressclasses + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses/status + verbs: + - '*' +- apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - get + - list + - watch + - update +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + - certificatesigningrequests/approval + - certificatesigningrequests/status + verbs: + - update + - create + - get + - delete + - watch +- apiGroups: + - certificates.k8s.io + resourceNames: + - kubernetes.io/legacy-unknown + resources: + - signers + verbs: + - approve +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - networking.x-k8s.io + - gateway.networking.k8s.io + resources: + - '*' + verbs: + - get + - watch + - list +- apiGroups: + - networking.x-k8s.io + - gateway.networking.k8s.io + resources: + - '*' + verbs: + - update +- apiGroups: + - gateway.networking.k8s.io + resources: + - gatewayclasses + verbs: + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - watch + - list +- apiGroups: + - multicluster.x-k8s.io + resources: + - serviceexports + verbs: + - get + - watch + - list + - create + - delete +- apiGroups: + - multicluster.x-k8s.io + resources: + - serviceimports + verbs: + - get + - watch + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-cluster-role +rules: +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - kubeflow.org + resources: + - notebooks + - notebooks/finalizers + - poddefaults + verbs: + - get + - list + - create + - delete + - patch + - update +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get + - list +- apiGroups: + - "" + resources: + - events + - nodes + verbs: + - list +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - pods + - pods/log + verbs: + - list + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: jupyter-web-app-kubeflow-notebook-ui-admin +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + name: jupyter-web-app-kubeflow-notebook-ui-edit +rules: +- apiGroups: + - kubeflow.org + resources: + - notebooks + - notebooks/finalizers + - poddefaults + verbs: + - get + - list + - create + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: jupyter-web-app-kubeflow-notebook-ui-view +rules: +- apiGroups: + - kubeflow.org + resources: + - notebooks + - notebooks/finalizers + - poddefaults + verbs: + - get + - list +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: katib-controller +rules: +- apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - update +- apiGroups: + - "" + resources: + - serviceaccounts + - persistentvolumes + - persistentvolumeclaims + verbs: + - get + - list + - watch + - create +- apiGroups: + - "" + resources: + - namespaces + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - pods + - pods/status + verbs: + - get +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch + - patch +- apiGroups: + - apps + resources: + - deployments + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - get + - create + - list + - watch +- apiGroups: + - batch + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - kubeflow.org + resources: + - tfjobs + - pytorchjobs + - mpijobs + - xgboostjobs + - mxjobs + verbs: + - get + - list + - watch + - create + - delete +- apiGroups: + - kubeflow.org + resources: + - experiments + - experiments/status + - experiments/finalizers + - trials + - trials/status + - trials/finalizers + - suggestions + - suggestions/status + - suggestions/finalizers + verbs: + - '*' +- apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + - mutatingwebhookconfigurations + verbs: + - get + - watch + - list + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: katib-ui +rules: +- apiGroups: + - "" + resources: + - configmaps + - namespaces + verbs: + - '*' +- apiGroups: + - kubeflow.org + resources: + - experiments + - trials + - suggestions + verbs: + - '*' +- apiGroups: + - "" + resources: + - pods + verbs: + - list +- apiGroups: + - "" + resources: + - pods/log + verbs: + - get +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: knative-bindings-namespaced-admin +rules: +- apiGroups: + - bindings.knative.dev + resources: + - '*' + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: knative-eventing-controller +rules: +- apiGroups: + - "" + resources: + - namespaces + - secrets + - configmaps + - services + - endpoints + - events + - serviceaccounts + - pods + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - apps + resources: + - deployments + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - apps + resources: + - deployments/finalizers + verbs: + - update +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - eventing.knative.dev + resources: + - brokers + - brokers/status + - triggers + - triggers/status + - eventtypes + - eventtypes/status + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - eventing.knative.dev + resources: + - brokers/finalizers + - triggers/finalizers + verbs: + - update +- apiGroups: + - messaging.knative.dev + resources: + - sequences + - sequences/status + - channels + - channels/status + - parallels + - parallels/status + - subscriptions + - subscriptions/status + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - flows.knative.dev + resources: + - sequences + - sequences/status + - parallels + - parallels/status + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - messaging.knative.dev + resources: + - sequences/finalizers + - parallels/finalizers + - channels/finalizers + verbs: + - update +- apiGroups: + - flows.knative.dev + resources: + - sequences/finalizers + - parallels/finalizers + verbs: + - update +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: knative-eventing-namespaced-admin +rules: +- apiGroups: + - eventing.knative.dev + resources: + - '*' + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + rbac.authorization.k8s.io/aggregate-to-view: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + name: knative-eventing-namespaced-edit +rules: +- apiGroups: + - eventing.knative.dev + - messaging.knative.dev + - sources.knative.dev + - flows.knative.dev + - bindings.knative.dev + resources: + - '*' + verbs: + - create + - update + - patch + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + rbac.authorization.k8s.io/aggregate-to-view: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: knative-eventing-namespaced-view +rules: +- apiGroups: + - eventing.knative.dev + - messaging.knative.dev + - sources.knative.dev + - flows.knative.dev + - bindings.knative.dev + resources: + - '*' + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: knative-eventing-pingsource-mt-adapter +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - sources.knative.dev + resources: + - pingsources + - pingsources/status + verbs: + - get + - list + - watch + - patch +- apiGroups: + - sources.knative.dev + resources: + - pingsources/finalizers + verbs: + - patch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: knative-eventing-sources-controller +rules: +- apiGroups: + - "" + resources: + - secrets + - configmaps + - services + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - apps + resources: + - deployments + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - sources.knative.dev + resources: + - sinkbindings + - sinkbindings/status + - sinkbindings/finalizers + - apiserversources + - apiserversources/status + - apiserversources/finalizers + - pingsources + - pingsources/status + - pingsources/finalizers + - containersources + - containersources/status + - containersources/finalizers + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - serving.knative.dev + resources: + - services + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - eventing.knative.dev + resources: + - eventtypes + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: knative-eventing-webhook +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - create + - update + - list + - watch + - patch +- apiGroups: + - "" + resources: + - namespaces/finalizers + verbs: + - update +- apiGroups: + - apps + resources: + - deployments + verbs: + - get +- apiGroups: + - apps + resources: + - deployments/finalizers + verbs: + - update +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - sources.knative.dev + resources: + - sinkbindings + - sinkbindings/status + - sinkbindings/finalizers + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - "" + - events.k8s.io + resources: + - events + verbs: + - get + - list + - create + - patch +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: knative-flows-namespaced-admin +rules: +- apiGroups: + - flows.knative.dev + resources: + - '*' + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: knative-messaging-namespaced-admin +rules: +- apiGroups: + - messaging.knative.dev + resources: + - '*' + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + duck.knative.dev/addressable: "true" + name: knative-serving-addressable-resolver +rules: +- apiGroups: + - serving.knative.dev + resources: + - routes + - routes/status + - services + - services/status + verbs: + - get + - list + - watch +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + serving.knative.dev/controller: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: knative-serving-admin +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + duck.knative.dev/addressable: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: knative-serving-aggregated-addressable-resolver +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + serving.knative.dev/controller: "true" + name: knative-serving-core +rules: +- apiGroups: + - "" + resources: + - pods + - namespaces + - secrets + - configmaps + - endpoints + - services + - events + - serviceaccounts + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - "" + resources: + - endpoints/restricted + verbs: + - create +- apiGroups: + - "" + resources: + - namespaces/finalizers + verbs: + - update +- apiGroups: + - apps + resources: + - deployments + - deployments/finalizers + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + - customresourcedefinitions/status + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +- apiGroups: + - serving.knative.dev + - autoscaling.internal.knative.dev + - networking.internal.knative.dev + resources: + - '*' + - '*/status' + - '*/finalizers' + verbs: + - get + - list + - create + - update + - delete + - deletecollection + - patch + - watch +- apiGroups: + - caching.internal.knative.dev + resources: + - images + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + serving.knative.dev/controller: "true" + name: knative-serving-istio +rules: +- apiGroups: + - networking.istio.io + resources: + - virtualservices + - gateways + - destinationrules + verbs: + - get + - list + - create + - update + - delete + - patch + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: knative-serving-namespaced-admin +rules: +- apiGroups: + - serving.knative.dev + resources: + - '*' + verbs: + - '*' +- apiGroups: + - networking.internal.knative.dev + - autoscaling.internal.knative.dev + - caching.internal.knative.dev + resources: + - '*' + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + name: knative-serving-namespaced-edit +rules: +- apiGroups: + - serving.knative.dev + resources: + - '*' + verbs: + - create + - update + - patch + - delete +- apiGroups: + - networking.internal.knative.dev + - autoscaling.internal.knative.dev + - caching.internal.knative.dev + resources: + - '*' + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + rbac.authorization.k8s.io/aggregate-to-view: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: knative-serving-namespaced-view +rules: +- apiGroups: + - serving.knative.dev + - networking.internal.knative.dev + - autoscaling.internal.knative.dev + - caching.internal.knative.dev + resources: + - '*' + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + duck.knative.dev/podspecable: "true" + name: knative-serving-podspecable-binding +rules: +- apiGroups: + - serving.knative.dev + resources: + - configurations + - services + verbs: + - list + - watch + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: knative-sources-namespaced-admin +rules: +- apiGroups: + - sources.knative.dev + resources: + - '*' + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + labels: + app: kserve + app.kubernetes.io/name: kserve + name: kserve-manager-role +rules: +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + resources: + - deployments + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - get + - list + - update + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.istio.io + resources: + - virtualservices + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.istio.io + resources: + - virtualservices/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.istio.io + resources: + - virtualservices/status + verbs: + - get + - patch + - update +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - serving.knative.dev + resources: + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - serving.knative.dev + resources: + - services/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - serving.knative.dev + resources: + - services/status + verbs: + - get + - patch + - update +- apiGroups: + - serving.kserve.io + resources: + - clusterservingruntimes + - clusterservingruntimes/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - serving.kserve.io + resources: + - clusterservingruntimes/status + verbs: + - get + - patch + - update +- apiGroups: + - serving.kserve.io + resources: + - inferencegraphs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - serving.kserve.io + resources: + - inferencegraphs/status + verbs: + - get + - patch + - update +- apiGroups: + - serving.kserve.io + resources: + - inferenceservices + - inferenceservices/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - serving.kserve.io + resources: + - inferenceservices/status + verbs: + - get + - patch + - update +- apiGroups: + - serving.kserve.io + resources: + - servingruntimes + - servingruntimes/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - serving.kserve.io + resources: + - servingruntimes/status + verbs: + - get + - patch + - update +- apiGroups: + - serving.kserve.io + resources: + - trainedmodels + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - serving.kserve.io + resources: + - trainedmodels/status + verbs: + - get + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + name: kserve-models-web-app-cluster-role +rules: +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - "" + resources: + - namespaces + - pods + - pods/log + - events + verbs: + - get + - list +- apiGroups: + - serving.kserve.io + resources: + - inferenceservices + - inferenceservices/status + verbs: + - get + - list + - watch + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - serving.knative.dev + resources: + - services + - services/status + - routes + - routes/status + - configurations + - configurations/status + - revisions + - revisions/status + verbs: + - get + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: kserve-proxy-role +rules: +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: kubeflow-admin +rules: [] +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: kubeflow-edit +rules: [] +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-istio-admin: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: kubeflow-istio-admin +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-istio-admin: "true" + name: kubeflow-istio-edit +rules: +- apiGroups: + - istio.io + - networking.istio.io + resources: + - '*' + verbs: + - get + - list + - watch + - create + - delete + - deletecollection + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: kubeflow-istio-view +rules: +- apiGroups: + - istio.io + - networking.istio.io + resources: + - '*' + verbs: + - get + - list + - watch +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-katib-admin: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: kubeflow-katib-admin +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-katib-admin: "true" + name: kubeflow-katib-edit +rules: +- apiGroups: + - kubeflow.org + resources: + - experiments + - trials + - suggestions + verbs: + - get + - list + - watch + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - "" + resources: + - pods + verbs: + - list +- apiGroups: + - "" + resources: + - pods/log + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: kubeflow-katib-view +rules: +- apiGroups: + - kubeflow.org + resources: + - experiments + - trials + - suggestions + verbs: + - get + - list + - watch +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-kserve-admin: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: kubeflow-kserve-admin +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-kserve-admin: "true" + name: kubeflow-kserve-edit +rules: +- apiGroups: + - serving.kserve.io + resources: + - inferenceservices + - servingruntimes + verbs: + - get + - list + - watch + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - serving.knative.dev + resources: + - services + - services/status + - routes + - routes/status + - configurations + - configurations/status + - revisions + - revisions/status + verbs: + - get + - list + - watch + - create + - delete + - deletecollection + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: kubeflow-kserve-view +rules: +- apiGroups: + - serving.kserve.io + resources: + - inferenceservices + - servingruntimes + verbs: + - get + - list + - watch +- apiGroups: + - serving.knative.dev + resources: + - services + - services/status + - routes + - routes/status + - configurations + - configurations/status + - revisions + - revisions/status + verbs: + - get + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: kubeflow-kubernetes-admin +rules: +- apiGroups: + - authorization.k8s.io + resources: + - localsubjectaccessreviews + verbs: + - create +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + - roles + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + name: kubeflow-kubernetes-edit +rules: +- apiGroups: + - "" + resources: + - pods/attach + - pods/exec + - pods/portforward + - pods/proxy + - secrets + - services/proxy + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - impersonate +- apiGroups: + - "" + resources: + - pods + - pods/attach + - pods/exec + - pods/portforward + - pods/proxy + verbs: + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - "" + resources: + - configmaps + - endpoints + - persistentvolumeclaims + - replicationcontrollers + - replicationcontrollers/scale + - secrets + - serviceaccounts + - services + - services/proxy + verbs: + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - apps + resources: + - daemonsets + - deployments + - deployments/rollback + - deployments/scale + - replicasets + - replicasets/scale + - statefulsets + - statefulsets/scale + verbs: + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - batch + resources: + - cronjobs + - jobs + verbs: + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - extensions + resources: + - daemonsets + - deployments + - deployments/rollback + - deployments/scale + - ingresses + - networkpolicies + - replicasets + - replicasets/scale + - replicationcontrollers/scale + verbs: + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - deletecollection + - patch + - update +- apiGroups: + - networking.k8s.io + resources: + - ingresses + - networkpolicies + verbs: + - create + - delete + - deletecollection + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: kubeflow-kubernetes-view +rules: +- apiGroups: + - "" + resources: + - configmaps + - endpoints + - persistentvolumeclaims + - persistentvolumeclaims/status + - pods + - replicationcontrollers + - replicationcontrollers/scale + - serviceaccounts + - services + - services/status + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - bindings + - events + - limitranges + - namespaces/status + - pods/log + - pods/status + - replicationcontrollers/status + - resourcequotas + - resourcequotas/status + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch +- apiGroups: + - apps + resources: + - controllerrevisions + - daemonsets + - daemonsets/status + - deployments + - deployments/scale + - deployments/status + - replicasets + - replicasets/scale + - replicasets/status + - statefulsets + - statefulsets/scale + - statefulsets/status + verbs: + - get + - list + - watch +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + - horizontalpodautoscalers/status + verbs: + - get + - list + - watch +- apiGroups: + - batch + resources: + - cronjobs + - cronjobs/status + - jobs + - jobs/status + verbs: + - get + - list + - watch +- apiGroups: + - extensions + resources: + - daemonsets + - daemonsets/status + - deployments + - deployments/scale + - deployments/status + - ingresses + - ingresses/status + - networkpolicies + - replicasets + - replicasets/scale + - replicasets/status + - replicationcontrollers/scale + verbs: + - get + - list + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + - poddisruptionbudgets/status + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + - ingresses/status + - networkpolicies + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-cache-role +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch + - update + - patch +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-pipelines-edit: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + name: kubeflow-pipelines-edit +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-metadata-writer-role +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - update + - patch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch + - update + - patch +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-pipelines-view: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-pipelines-edit: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: kubeflow-pipelines-view +rules: [] +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-training-admin: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: kubeflow-training-admin +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-training-admin: "true" + name: kubeflow-training-edit +rules: +- apiGroups: + - kubeflow.org + resources: + - mpijobs + - tfjobs + - pytorchjobs + - mxjobs + - xgboostjobs + - paddlejobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - kubeflow.org + resources: + - mpijobs/status + - tfjobs/status + - pytorchjobs/status + - mxjobs/status + - xgboostjobs/status + - paddlejobs/status + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: kubeflow-training-view +rules: +- apiGroups: + - kubeflow.org + resources: + - mpijobs + - tfjobs + - pytorchjobs + - mxjobs + - xgboostjobs + - paddlejobs + verbs: + - get + - list + - watch +- apiGroups: + - kubeflow.org + resources: + - mpijobs/status + - tfjobs/status + - pytorchjobs/status + - mxjobs/status + - xgboostjobs/status + - paddlejobs/status + verbs: + - get +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + name: kubeflow-view +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/channelable: "true" + kustomize.component: knative + name: meta-channelable-manipulator +rules: +- apiGroups: + - messaging.knative.dev + resources: + - channels + - channels/status + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline +rules: +- apiGroups: + - "" + resources: + - pods + - pods/log + verbs: + - get + - list + - delete +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + verbs: + - create + - get + - list + - update + - patch + - delete +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-persistenceagent-role +rules: +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list + - watch +- apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-scheduledworkflow-role +rules: +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - kubeflow.org + resources: + - scheduledworkflows + - scheduledworkflows/finalizers + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: ml-pipeline-ui + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui +rules: +- apiGroups: + - "" + resources: + - pods + - pods/log + verbs: + - get +- apiGroups: + - "" + resources: + - events + verbs: + - list +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list +- apiGroups: + - kubeflow.org + resources: + - viewers + verbs: + - create + - get + - list + - watch + - delete +- apiGroups: + - argoproj.io + resources: + - workflows + verbs: + - get + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-viewer-controller-role +rules: +- apiGroups: + - '*' + resources: + - deployments + - services + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - kubeflow.org + resources: + - viewers + - viewers/finalizers + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-notebooks-admin: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: notebook-controller-kubeflow-notebooks-admin +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-notebooks-admin: "true" + name: notebook-controller-kubeflow-notebooks-edit +rules: +- apiGroups: + - kubeflow.org + resources: + - notebooks + - notebooks/status + verbs: + - get + - list + - watch + - create + - delete + - deletecollection + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: notebook-controller-kubeflow-notebooks-view +rules: +- apiGroups: + - kubeflow.org + resources: + - notebooks + - notebooks/status + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + labels: + app: notebook-controller + kustomize.component: notebook-controller + name: notebook-controller-role +rules: +- apiGroups: + - apps + resources: + - statefulsets + verbs: + - '*' +- apiGroups: + - "" + resources: + - events + verbs: + - create + - get + - list + - patch + - watch +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - services + verbs: + - '*' +- apiGroups: + - kubeflow.org + resources: + - notebooks + - notebooks/finalizers + - notebooks/status + verbs: + - '*' +- apiGroups: + - networking.istio.io + resources: + - virtualservices + verbs: + - '*' +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + duck.knative.dev/podspecable: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: podspecable-binding +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/addressable: "true" + kustomize.component: knative + name: service-addressable-resolver +rules: +- apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + duck.knative.dev/addressable: "true" + kustomize.component: knative + name: serving-addressable-resolver +rules: +- apiGroups: + - serving.knative.dev + resources: + - routes + - routes/status + - services + - services/status + verbs: + - get + - list + - watch +--- +aggregationRule: + clusterRoleSelectors: + - matchLabels: + duck.knative.dev/source: "true" +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: source-observer +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + labels: + app: tensorboard-controller + kustomize.component: tensorboard-controller + name: tensorboard-controller-manager-role +rules: +- apiGroups: + - apps + resources: + - deployments + verbs: + - create + - get + - list + - update + - watch +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - services + verbs: + - create + - get + - list + - update + - watch +- apiGroups: + - networking.istio.io + resources: + - virtualservices + verbs: + - create + - get + - list + - update + - watch +- apiGroups: + - tensorboard.kubeflow.org + resources: + - tensorboards + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - tensorboard.kubeflow.org + resources: + - tensorboards/finalizers + verbs: + - update +- apiGroups: + - tensorboard.kubeflow.org + resources: + - tensorboards/status + verbs: + - get + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: tensorboard-controller + kustomize.component: tensorboard-controller + name: tensorboard-controller-metrics-reader +rules: +- nonResourceURLs: + - /metrics + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: tensorboard-controller + kustomize.component: tensorboard-controller + name: tensorboard-controller-proxy-role +rules: +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + name: tensorboards-web-app-cluster-role +rules: +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - tensorboard.kubeflow.org + resources: + - tensorboards + - tensorboards/finalizers + verbs: + - get + - list + - create + - delete +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get + - list +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: tensorboards-web-app-kubeflow-tensorboard-ui-admin +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + name: tensorboards-web-app-kubeflow-tensorboard-ui-edit +rules: +- apiGroups: + - tensorboard.kubeflow.org + resources: + - tensorboards + - tensorboards/finalizers + verbs: + - get + - list + - create + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: tensorboards-web-app-kubeflow-tensorboard-ui-view +rules: +- apiGroups: + - tensorboard.kubeflow.org + resources: + - tensorboards + - tensorboards/finalizers + verbs: + - get + - list +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: training-operator +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - list + - update + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - pods/exec + verbs: + - create +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - get + - list + - watch +- apiGroups: + - "" + resources: + - services + verbs: + - create + - delete + - get + - list + - watch +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - kubeflow.org + resources: + - mpijobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - kubeflow.org + resources: + - mpijobs/finalizers + verbs: + - update +- apiGroups: + - kubeflow.org + resources: + - mpijobs/status + verbs: + - get + - patch + - update +- apiGroups: + - kubeflow.org + resources: + - mxjobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - kubeflow.org + resources: + - mxjobs/finalizers + verbs: + - update +- apiGroups: + - kubeflow.org + resources: + - mxjobs/status + verbs: + - get + - patch + - update +- apiGroups: + - kubeflow.org + resources: + - paddlejobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - kubeflow.org + resources: + - paddlejobs/finalizers + verbs: + - update +- apiGroups: + - kubeflow.org + resources: + - paddlejobs/status + verbs: + - get + - patch + - update +- apiGroups: + - kubeflow.org + resources: + - pytorchjobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - kubeflow.org + resources: + - pytorchjobs/finalizers + verbs: + - update +- apiGroups: + - kubeflow.org + resources: + - pytorchjobs/status + verbs: + - get + - patch + - update +- apiGroups: + - kubeflow.org + resources: + - tfjobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - kubeflow.org + resources: + - tfjobs/finalizers + verbs: + - update +- apiGroups: + - kubeflow.org + resources: + - tfjobs/status + verbs: + - get + - patch + - update +- apiGroups: + - kubeflow.org + resources: + - xgboostjobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - kubeflow.org + resources: + - xgboostjobs/finalizers + verbs: + - update +- apiGroups: + - kubeflow.org + resources: + - xgboostjobs/status + verbs: + - get + - patch + - update +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + verbs: + - create + - list + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + verbs: + - create + - list + - update + - watch +- apiGroups: + - scheduling.volcano.sh + resources: + - podgroups + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - scheduling.x-k8s.io + resources: + - podgroups + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + name: volumes-web-app-cluster-role +rules: +- apiGroups: + - "" + resources: + - namespaces + - pods + verbs: + - get + - list +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get + - list + - watch + - update + - patch +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - list +- apiGroups: + - kubeflow.org + resources: + - notebooks + verbs: + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-admin: "true" + name: volumes-web-app-kubeflow-volume-ui-admin +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-edit: "true" + name: volumes-web-app-kubeflow-volume-ui-edit +rules: +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get + - list + - watch + - update + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + rbac.authorization.kubeflow.org/aggregate-to-kubeflow-view: "true" + name: volumes-web-app-kubeflow-volume-ui-view +rules: +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook:dynamic-serving + namespace: cert-manager +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: cert-manager-webhook:dynamic-serving +subjects: +- apiGroup: "" + kind: ServiceAccount + name: cert-manager-webhook + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + install.operator.istio.io/owning-resource: unknown + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: cluster-local-gateway-sds + namespace: istio-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: cluster-local-gateway-sds +subjects: +- kind: ServiceAccount + name: cluster-local-gateway-service-account + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + install.operator.istio.io/owning-resource: unknown + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: istio-ingressgateway-sds + namespace: istio-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: istio-ingressgateway-sds +subjects: +- kind: ServiceAccount + name: istio-ingressgateway-service-account + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: istiod + release: istio + name: istiod + namespace: istio-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: istiod +subjects: +- kind: ServiceAccount + name: istiod + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: istiod + release: istio + name: istiod-istio-system + namespace: istio-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: istiod-istio-system +subjects: +- kind: ServiceAccount + name: istiod-service-account + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-webhook + namespace: knative-eventing +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: knative-eventing-webhook +subjects: +- kind: ServiceAccount + name: eventing-webhook + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: cainjector + app.kubernetes.io/component: cainjector + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cainjector + app.kubernetes.io/version: v1.12.2 + name: cert-manager-cainjector:leaderelection + namespace: kube-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: cert-manager-cainjector:leaderelection +subjects: +- kind: ServiceAccount + name: cert-manager-cainjector + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager:leaderelection + namespace: kube-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: cert-manager:leaderelection +subjects: +- apiGroup: "" + kind: ServiceAccount + name: cert-manager + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: argo-binding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: argo-role +subjects: +- kind: ServiceAccount + name: argo + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: centraldashboard +subjects: +- kind: ServiceAccount + name: centraldashboard + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-jupyter-notebook-role-binding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: jupyter-web-app-jupyter-notebook-role +subjects: +- kind: ServiceAccount + name: jupyter-notebook +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: kserve-leader-election-rolebinding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kserve-leader-election-role +subjects: +- kind: ServiceAccount + name: kserve-controller-manager + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-cache-binding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubeflow-pipelines-cache-role +subjects: +- kind: ServiceAccount + name: kubeflow-pipelines-cache + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-metadata-writer-binding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubeflow-pipelines-metadata-writer-role +subjects: +- kind: ServiceAccount + name: kubeflow-pipelines-metadata-writer + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: ml-pipeline + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline +subjects: +- kind: ServiceAccount + name: ml-pipeline + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-persistenceagent-binding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline-persistenceagent-role +subjects: +- kind: ServiceAccount + name: ml-pipeline-persistenceagent + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-scheduledworkflow-binding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline-scheduledworkflow-role +subjects: +- kind: ServiceAccount + name: ml-pipeline-scheduledworkflow + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: ml-pipeline-ui + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline-ui +subjects: +- kind: ServiceAccount + name: ml-pipeline-ui + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-viewer-crd-binding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: ml-pipeline-viewer-controller-role +subjects: +- kind: ServiceAccount + name: ml-pipeline-viewer-crd-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + name: notebook-controller-leader-election-rolebinding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: notebook-controller-leader-election-role +subjects: +- kind: ServiceAccount + name: notebook-controller-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: pipeline-runner-binding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: pipeline-runner +subjects: +- kind: ServiceAccount + name: pipeline-runner + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + kustomize.component: profiles + name: profiles-leader-election-rolebinding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: profiles-leader-election-role +subjects: +- kind: ServiceAccount + name: profiles-controller-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: tensorboard-controller + kustomize.component: tensorboard-controller + name: tensorboard-controller-leader-election-rolebinding + namespace: kubeflow +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: tensorboard-controller-leader-election-role +subjects: +- kind: ServiceAccount + name: tensorboard-controller-controller-manager + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + name: admission-webhook-cluster-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: admission-webhook-cluster-role +subjects: +- kind: ServiceAccount + name: admission-webhook-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: argo-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: argo-cluster-role +subjects: +- kind: ServiceAccount + name: argo + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: authn-delegators +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: authn-delegator +subjects: +- kind: ServiceAccount + name: authservice + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: centraldashboard +subjects: +- kind: ServiceAccount + name: centraldashboard + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cainjector + app.kubernetes.io/component: cainjector + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cainjector + app.kubernetes.io/version: v1.12.2 + name: cert-manager-cainjector +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-cainjector +subjects: +- kind: ServiceAccount + name: cert-manager-cainjector + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-approve:cert-manager-io +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-controller-approve:cert-manager-io +subjects: +- kind: ServiceAccount + name: cert-manager + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-certificates +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-controller-certificates +subjects: +- kind: ServiceAccount + name: cert-manager + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: cert-manager + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-certificatesigningrequests +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-controller-certificatesigningrequests +subjects: +- kind: ServiceAccount + name: cert-manager + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-challenges +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-controller-challenges +subjects: +- kind: ServiceAccount + name: cert-manager + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-clusterissuers +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-controller-clusterissuers +subjects: +- kind: ServiceAccount + name: cert-manager + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-ingress-shim +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-controller-ingress-shim +subjects: +- kind: ServiceAccount + name: cert-manager + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-issuers +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-controller-issuers +subjects: +- kind: ServiceAccount + name: cert-manager + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager-controller-orders +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-controller-orders +subjects: +- kind: ServiceAccount + name: cert-manager + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook:subjectaccessreviews +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cert-manager-webhook:subjectaccessreviews +subjects: +- apiGroup: "" + kind: ServiceAccount + name: cert-manager-webhook + namespace: cert-manager +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: dex +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: dex +subjects: +- kind: ServiceAccount + name: dex + namespace: auth +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-controller +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: knative-eventing-controller +subjects: +- kind: ServiceAccount + name: eventing-controller + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-controller-manipulator +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: channelable-manipulator +subjects: +- kind: ServiceAccount + name: eventing-controller + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-controller-resolver +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: addressable-resolver +subjects: +- kind: ServiceAccount + name: eventing-controller + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-controller-source-observer +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: source-observer +subjects: +- kind: ServiceAccount + name: eventing-controller + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-controller-sources-controller +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: knative-eventing-sources-controller +subjects: +- kind: ServiceAccount + name: eventing-controller + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-webhook +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: knative-eventing-webhook +subjects: +- kind: ServiceAccount + name: eventing-webhook + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-webhook-podspecable-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: podspecable-binding +subjects: +- kind: ServiceAccount + name: eventing-webhook + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-webhook-resolver +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: addressable-resolver +subjects: +- kind: ServiceAccount + name: eventing-webhook + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: istio-reader + release: istio + name: istio-reader-clusterrole-istio-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: istio-reader-clusterrole-istio-system +subjects: +- kind: ServiceAccount + name: istio-reader-service-account + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: istio-reader + release: istio + name: istio-reader-istio-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: istio-reader-istio-system +subjects: +- kind: ServiceAccount + name: istio-reader-service-account + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: istiod + release: istio + name: istiod-clusterrole-istio-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: istiod-clusterrole-istio-system +subjects: +- kind: ServiceAccount + name: istiod + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: istiod + release: istio + name: istiod-gateway-controller-istio-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: istiod-gateway-controller-istio-system +subjects: +- kind: ServiceAccount + name: istiod + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: istiod + release: istio + name: istiod-istio-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: istiod-istio-system +subjects: +- kind: ServiceAccount + name: istiod-service-account + namespace: istio-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-cluster-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: jupyter-web-app-cluster-role +subjects: +- kind: ServiceAccount + name: jupyter-web-app-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: katib-controller +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: katib-controller +subjects: +- kind: ServiceAccount + name: katib-controller + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: katib-ui +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: katib-ui +subjects: +- kind: ServiceAccount + name: katib-ui + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: knative-eventing-pingsource-mt-adapter +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: knative-eventing-pingsource-mt-adapter +subjects: +- kind: ServiceAccount + name: pingsource-mt-adapter + namespace: knative-eventing +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: knative-serving-controller-addressable-resolver +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: knative-serving-aggregated-addressable-resolver +subjects: +- kind: ServiceAccount + name: controller + namespace: knative-serving +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: knative-serving-controller-admin +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: knative-serving-admin +subjects: +- kind: ServiceAccount + name: controller + namespace: knative-serving +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: kserve-manager-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kserve-manager-role +subjects: +- kind: ServiceAccount + name: kserve-controller-manager + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + name: kserve-models-web-app-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kserve-models-web-app-cluster-role +subjects: +- kind: ServiceAccount + name: kserve-models-web-app + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: kserve-proxy-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kserve-proxy-role +subjects: +- kind: ServiceAccount + name: kserve-controller-manager + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-cache-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kubeflow-pipelines-cache-role +subjects: +- kind: ServiceAccount + name: kubeflow-pipelines-cache + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-metadata-writer-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kubeflow-pipelines-metadata-writer-role +subjects: +- kind: ServiceAccount + name: kubeflow-pipelines-metadata-writer + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + application-crd-id: kubeflow-pipelines + kustomize.component: metacontroller + name: meta-controller-cluster-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- kind: ServiceAccount + name: meta-controller-service + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ml-pipeline +subjects: +- kind: ServiceAccount + name: ml-pipeline + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-persistenceagent-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ml-pipeline-persistenceagent-role +subjects: +- kind: ServiceAccount + name: ml-pipeline-persistenceagent + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-scheduledworkflow-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ml-pipeline-scheduledworkflow-role +subjects: +- kind: ServiceAccount + name: ml-pipeline-scheduledworkflow + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: ml-pipeline-ui + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ml-pipeline-ui +subjects: +- kind: ServiceAccount + name: ml-pipeline-ui + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-viewer-crd-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: ml-pipeline-viewer-controller-role +subjects: +- kind: ServiceAccount + name: ml-pipeline-viewer-crd-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + name: notebook-controller-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: notebook-controller-role +subjects: +- kind: ServiceAccount + name: notebook-controller-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + kustomize.component: profiles + name: profiles-cluster-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- kind: ServiceAccount + name: profiles-controller-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: tensorboard-controller + kustomize.component: tensorboard-controller + name: tensorboard-controller-manager-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: tensorboard-controller-manager-role +subjects: +- kind: ServiceAccount + name: tensorboard-controller-controller-manager + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: tensorboard-controller + kustomize.component: tensorboard-controller + name: tensorboard-controller-proxy-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: tensorboard-controller-proxy-role +subjects: +- kind: ServiceAccount + name: tensorboard-controller-controller-manager + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + name: tensorboards-web-app-cluster-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: tensorboards-web-app-cluster-role +subjects: +- kind: ServiceAccount + name: tensorboards-web-app-service-account + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: training-operator + name: training-operator +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: training-operator +subjects: +- kind: ServiceAccount + name: training-operator + namespace: kubeflow +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + name: volumes-web-app-cluster-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: volumes-web-app-cluster-role +subjects: +- kind: ServiceAccount + name: volumes-web-app-service-account + namespace: kubeflow +--- +apiVersion: v1 +data: + config.yaml: | + issuer: http://dex.auth.svc.cluster.local:5556/dex + storage: + type: kubernetes + config: + inCluster: true + web: + http: 0.0.0.0:5556 + logger: + level: "debug" + format: text + oauth2: + skipApprovalScreen: true + enablePasswordDB: true + staticPasswords: + - email: user@example.com + hash: $2y$12$4K/VkmDd1q1Orb3xAt82zu8gk7Ad6ReFR4LCP9UeYE90NLiN9Df72 + # https://github.com/dexidp/dex/pull/1601/commits + # FIXME: Use hashFromEnv instead + username: user + userID: "15841185641784" + staticClients: + # https://github.com/dexidp/dex/pull/1664 + - idEnv: OIDC_CLIENT_ID + redirectURIs: ["/authservice/oidc/callback"] + name: 'Dex Login Application' + secretEnv: OIDC_CLIENT_SECRET +kind: ConfigMap +metadata: + name: dex + namespace: auth +--- +apiVersion: v1 +data: null +kind: ConfigMap +metadata: + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook + namespace: cert-manager +--- +apiVersion: v1 +data: + mesh: |- + accessLogFile: /dev/stdout + defaultConfig: + discoveryAddress: istiod.istio-system.svc:15012 + proxyMetadata: {} + tracing: {} + enablePrometheusMerge: true + rootNamespace: istio-system + tcpKeepalive: + interval: 5s + probes: 3 + time: 10s + trustDomain: cluster.local + meshNetworks: 'networks: {}' +kind: ConfigMap +metadata: + labels: + install.operator.istio.io/owning-resource: unknown + istio.io/rev: default + operator.istio.io/component: Pilot + release: istio + name: istio + namespace: istio-system +--- +apiVersion: v1 +data: + config: |- + # defaultTemplates defines the default template to use for pods that do not explicitly specify a template + defaultTemplates: [sidecar] + policy: enabled + alwaysInjectSelector: + [] + neverInjectSelector: + [] + injectedAnnotations: + template: "{{ "{{" }} Template_Version_And_Istio_Version_Mismatched_Check_Installation }}" + templates: + sidecar: | + {{ "{{" }}- define "resources" }} + {{ "{{" }}- if or (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPU`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemory`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPULimit`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemoryLimit`) }} + {{ "{{" }}- if or (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPU`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemory`) }} + requests: + {{ "{{" }} if (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPU`) -}} + cpu: "{{ "{{" }} index .ObjectMeta.Annotations `sidecar.istio.io/proxyCPU` }}" + {{ "{{" }} end }} + {{ "{{" }} if (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemory`) -}} + memory: "{{ "{{" }} index .ObjectMeta.Annotations `sidecar.istio.io/proxyMemory` }}" + {{ "{{" }} end }} + {{ "{{" }}- end }} + {{ "{{" }}- if or (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPULimit`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemoryLimit`) }} + limits: + {{ "{{" }} if (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPULimit`) -}} + cpu: "{{ "{{" }} index .ObjectMeta.Annotations `sidecar.istio.io/proxyCPULimit` }}" + {{ "{{" }} end }} + {{ "{{" }} if (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemoryLimit`) -}} + memory: "{{ "{{" }} index .ObjectMeta.Annotations `sidecar.istio.io/proxyMemoryLimit` }}" + {{ "{{" }} end }} + {{ "{{" }}- end }} + {{ "{{" }}- else }} + {{ "{{" }}- if .Values.global.proxy.resources }} + {{ "{{" }} toYaml .Values.global.proxy.resources | indent 6 }} + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- $containers := list }} + {{ "{{" }}- range $index, $container := .Spec.Containers }}{{ "{{" }} if not (eq $container.Name "istio-proxy") }}{{ "{{" }} $containers = append $containers $container.Name }}{{ "{{" }}end}}{{ "{{" }}- end}} + metadata: + labels: + security.istio.io/tlsMode: {{ "{{" }} index .ObjectMeta.Labels `security.istio.io/tlsMode` | default "istio" | quote }} + {{ "{{" }}- if eq (index .ProxyConfig.ProxyMetadata "ISTIO_META_ENABLE_HBONE") "true" }} + networking.istio.io/tunnel: {{ "{{" }} index .ObjectMeta.Labels `networking.istio.io/tunnel` | default "http" | quote }} + {{ "{{" }}- end }} + service.istio.io/canonical-name: {{ "{{" }} index .ObjectMeta.Labels `service.istio.io/canonical-name` | default (index .ObjectMeta.Labels `app.kubernetes.io/name`) | default (index .ObjectMeta.Labels `app`) | default .DeploymentMeta.Name | quote }} + service.istio.io/canonical-revision: {{ "{{" }} index .ObjectMeta.Labels `service.istio.io/canonical-revision` | default (index .ObjectMeta.Labels `app.kubernetes.io/version`) | default (index .ObjectMeta.Labels `version`) | default "latest" | quote }} + annotations: { + {{ "{{" }}- if ge (len $containers) 1 }} + {{ "{{" }}- if not (isset .ObjectMeta.Annotations `kubectl.kubernetes.io/default-logs-container`) }} + kubectl.kubernetes.io/default-logs-container: "{{ "{{" }} index $containers 0 }}", + {{ "{{" }}- end }} + {{ "{{" }}- if not (isset .ObjectMeta.Annotations `kubectl.kubernetes.io/default-container`) }} + kubectl.kubernetes.io/default-container: "{{ "{{" }} index $containers 0 }}", + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.istio_cni.enabled }} + {{ "{{" }}- if not .Values.istio_cni.chained }} + k8s.v1.cni.cncf.io/networks: '{{ "{{" }} appendMultusNetwork (index .ObjectMeta.Annotations `k8s.v1.cni.cncf.io/networks`) `istio-cni` }}', + {{ "{{" }}- end }} + sidecar.istio.io/interceptionMode: "{{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/interceptionMode` .ProxyConfig.InterceptionMode }}", + {{ "{{" }} with annotation .ObjectMeta `traffic.sidecar.istio.io/includeOutboundIPRanges` .Values.global.proxy.includeIPRanges }}traffic.sidecar.istio.io/includeOutboundIPRanges: "{{ "{{" }}.}}",{{ "{{" }} end }} + {{ "{{" }} with annotation .ObjectMeta `traffic.sidecar.istio.io/excludeOutboundIPRanges` .Values.global.proxy.excludeIPRanges }}traffic.sidecar.istio.io/excludeOutboundIPRanges: "{{ "{{" }}.}}",{{ "{{" }} end }} + {{ "{{" }} with annotation .ObjectMeta `traffic.sidecar.istio.io/includeInboundPorts` .Values.global.proxy.includeInboundPorts }}traffic.sidecar.istio.io/includeInboundPorts: "{{ "{{" }}.}}",{{ "{{" }} end }} + traffic.sidecar.istio.io/excludeInboundPorts: "{{ "{{" }} excludeInboundPort (annotation .ObjectMeta `status.sidecar.istio.io/port` .Values.global.proxy.statusPort) (annotation .ObjectMeta `traffic.sidecar.istio.io/excludeInboundPorts` .Values.global.proxy.excludeInboundPorts) }}", + {{ "{{" }} if or (isset .ObjectMeta.Annotations `traffic.sidecar.istio.io/includeOutboundPorts`) (ne (valueOrDefault .Values.global.proxy.includeOutboundPorts "") "") }} + traffic.sidecar.istio.io/includeOutboundPorts: "{{ "{{" }} annotation .ObjectMeta `traffic.sidecar.istio.io/includeOutboundPorts` .Values.global.proxy.includeOutboundPorts }}", + {{ "{{" }}- end }} + {{ "{{" }} if or (isset .ObjectMeta.Annotations `traffic.sidecar.istio.io/excludeOutboundPorts`) (ne .Values.global.proxy.excludeOutboundPorts "") }} + traffic.sidecar.istio.io/excludeOutboundPorts: "{{ "{{" }} annotation .ObjectMeta `traffic.sidecar.istio.io/excludeOutboundPorts` .Values.global.proxy.excludeOutboundPorts }}", + {{ "{{" }}- end }} + {{ "{{" }} with index .ObjectMeta.Annotations `traffic.sidecar.istio.io/kubevirtInterfaces` }}traffic.sidecar.istio.io/kubevirtInterfaces: "{{ "{{" }}.}}",{{ "{{" }} end }} + {{ "{{" }} with index .ObjectMeta.Annotations `traffic.sidecar.istio.io/excludeInterfaces` }}traffic.sidecar.istio.io/excludeInterfaces: "{{ "{{" }}.}}",{{ "{{" }} end }} + {{ "{{" }}- end }} + } + spec: + {{ "{{" }}- $holdProxy := or .ProxyConfig.HoldApplicationUntilProxyStarts.GetValue .Values.global.proxy.holdApplicationUntilProxyStarts }} + initContainers: + {{ "{{" }} if ne (annotation .ObjectMeta `sidecar.istio.io/interceptionMode` .ProxyConfig.InterceptionMode) `NONE` }} + {{ "{{" }} if .Values.istio_cni.enabled -}} + - name: istio-validation + {{ "{{" }} else -}} + - name: istio-init + {{ "{{" }} end -}} + {{ "{{" }}- if contains "/" (annotation .ObjectMeta `sidecar.istio.io/proxyImage` .Values.global.proxy_init.image) }} + image: "{{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/proxyImage` .Values.global.proxy_init.image }}" + {{ "{{" }}- else }} + image: "{{ "{{" }} .ProxyImage }}" + {{ "{{" }}- end }} + args: + - istio-iptables + - "-p" + - {{ "{{" }} .MeshConfig.ProxyListenPort | default "15001" | quote }} + - "-z" + - "15006" + - "-u" + - "1337" + - "-m" + - "{{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/interceptionMode` .ProxyConfig.InterceptionMode }}" + - "-i" + - "{{ "{{" }} annotation .ObjectMeta `traffic.sidecar.istio.io/includeOutboundIPRanges` .Values.global.proxy.includeIPRanges }}" + - "-x" + - "{{ "{{" }} annotation .ObjectMeta `traffic.sidecar.istio.io/excludeOutboundIPRanges` .Values.global.proxy.excludeIPRanges }}" + - "-b" + - "{{ "{{" }} annotation .ObjectMeta `traffic.sidecar.istio.io/includeInboundPorts` .Values.global.proxy.includeInboundPorts }}" + - "-d" + {{ "{{" }}- if excludeInboundPort (annotation .ObjectMeta `status.sidecar.istio.io/port` .Values.global.proxy.statusPort) (annotation .ObjectMeta `traffic.sidecar.istio.io/excludeInboundPorts` .Values.global.proxy.excludeInboundPorts) }} + - "15090,15021,{{ "{{" }} excludeInboundPort (annotation .ObjectMeta `status.sidecar.istio.io/port` .Values.global.proxy.statusPort) (annotation .ObjectMeta `traffic.sidecar.istio.io/excludeInboundPorts` .Values.global.proxy.excludeInboundPorts) }}" + {{ "{{" }}- else }} + - "15090,15021" + {{ "{{" }}- end }} + {{ "{{" }} if or (isset .ObjectMeta.Annotations `traffic.sidecar.istio.io/includeOutboundPorts`) (ne (valueOrDefault .Values.global.proxy.includeOutboundPorts "") "") -}} + - "-q" + - "{{ "{{" }} annotation .ObjectMeta `traffic.sidecar.istio.io/includeOutboundPorts` .Values.global.proxy.includeOutboundPorts }}" + {{ "{{" }} end -}} + {{ "{{" }} if or (isset .ObjectMeta.Annotations `traffic.sidecar.istio.io/excludeOutboundPorts`) (ne (valueOrDefault .Values.global.proxy.excludeOutboundPorts "") "") -}} + - "-o" + - "{{ "{{" }} annotation .ObjectMeta `traffic.sidecar.istio.io/excludeOutboundPorts` .Values.global.proxy.excludeOutboundPorts }}" + {{ "{{" }} end -}} + {{ "{{" }} if (isset .ObjectMeta.Annotations `traffic.sidecar.istio.io/kubevirtInterfaces`) -}} + - "-k" + - "{{ "{{" }} index .ObjectMeta.Annotations `traffic.sidecar.istio.io/kubevirtInterfaces` }}" + {{ "{{" }} end -}} + {{ "{{" }} if (isset .ObjectMeta.Annotations `traffic.sidecar.istio.io/excludeInterfaces`) -}} + - "-c" + - "{{ "{{" }} index .ObjectMeta.Annotations `traffic.sidecar.istio.io/excludeInterfaces` }}" + {{ "{{" }} end -}} + - "--log_output_level={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/agentLogLevel` .Values.global.logging.level }}" + {{ "{{" }} if .Values.global.logAsJson -}} + - "--log_as_json" + {{ "{{" }} end -}} + {{ "{{" }} if .Values.istio_cni.enabled -}} + - "--run-validation" + - "--skip-rule-apply" + {{ "{{" }} end -}} + {{ "{{" }}with .Values.global.imagePullPolicy }}imagePullPolicy: "{{ "{{" }}.}}"{{ "{{" }}end}} + {{ "{{" }}- if .ProxyConfig.ProxyMetadata }} + env: + {{ "{{" }}- range $key, $value := .ProxyConfig.ProxyMetadata }} + - name: {{ "{{" }} $key }} + value: "{{ "{{" }} $value }}" + {{ "{{" }}- end }} + {{ "{{" }}- end }} + resources: + {{ "{{" }} template "resources" . }} + securityContext: + allowPrivilegeEscalation: {{ "{{" }} .Values.global.proxy.privileged }} + privileged: {{ "{{" }} .Values.global.proxy.privileged }} + capabilities: + {{ "{{" }}- if not .Values.istio_cni.enabled }} + add: + - NET_ADMIN + - NET_RAW + {{ "{{" }}- end }} + drop: + - ALL + {{ "{{" }}- if not .Values.istio_cni.enabled }} + readOnlyRootFilesystem: false + runAsGroup: 0 + runAsNonRoot: false + runAsUser: 0 + {{ "{{" }}- else }} + readOnlyRootFilesystem: true + runAsGroup: 1337 + runAsUser: 1337 + runAsNonRoot: true + {{ "{{" }}- end }} + {{ "{{" }} end -}} + {{ "{{" }}- if eq (annotation .ObjectMeta `sidecar.istio.io/enableCoreDump` .Values.global.proxy.enableCoreDump) "true" }} + - name: enable-core-dump + args: + - -c + - sysctl -w kernel.core_pattern=/var/lib/istio/data/core.proxy && ulimit -c unlimited + command: + - /bin/sh + {{ "{{" }}- if contains "/" (annotation .ObjectMeta `sidecar.istio.io/proxyImage` .Values.global.proxy_init.image) }} + image: "{{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/proxyImage` .Values.global.proxy_init.image }}" + {{ "{{" }}- else }} + image: "{{ "{{" }} .ProxyImage }}" + {{ "{{" }}- end }} + {{ "{{" }}with .Values.global.imagePullPolicy }}imagePullPolicy: "{{ "{{" }}.}}"{{ "{{" }}end}} + resources: + {{ "{{" }} template "resources" . }} + securityContext: + allowPrivilegeEscalation: true + capabilities: + add: + - SYS_ADMIN + drop: + - ALL + privileged: true + readOnlyRootFilesystem: false + runAsGroup: 0 + runAsNonRoot: false + runAsUser: 0 + {{ "{{" }} end }} + containers: + - name: istio-proxy + {{ "{{" }}- if contains "/" (annotation .ObjectMeta `sidecar.istio.io/proxyImage` .Values.global.proxy.image) }} + image: "{{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/proxyImage` .Values.global.proxy.image }}" + {{ "{{" }}- else }} + image: "{{ "{{" }} .ProxyImage }}" + {{ "{{" }}- end }} + ports: + - containerPort: 15090 + protocol: TCP + name: http-envoy-prom + args: + - proxy + - sidecar + - --domain + - $(POD_NAMESPACE).svc.{{ "{{" }} .Values.global.proxy.clusterDomain }} + - --proxyLogLevel={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/logLevel` .Values.global.proxy.logLevel }} + - --proxyComponentLogLevel={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/componentLogLevel` .Values.global.proxy.componentLogLevel }} + - --log_output_level={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/agentLogLevel` .Values.global.logging.level }} + {{ "{{" }}- if .Values.global.sts.servicePort }} + - --stsPort={{ "{{" }} .Values.global.sts.servicePort }} + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.logAsJson }} + - --log_as_json + {{ "{{" }}- end }} + {{ "{{" }}- if gt .EstimatedConcurrency 0 }} + - --concurrency + - "{{ "{{" }} .EstimatedConcurrency }}" + {{ "{{" }}- end -}} + {{ "{{" }}- if .Values.global.proxy.lifecycle }} + lifecycle: + {{ "{{" }} toYaml .Values.global.proxy.lifecycle | indent 6 }} + {{ "{{" }}- else if $holdProxy }} + lifecycle: + postStart: + exec: + command: + - pilot-agent + - wait + {{ "{{" }}- end }} + env: + {{ "{{" }}- if eq (env "PILOT_ENABLE_INBOUND_PASSTHROUGH" "true") "false" }} + - name: REWRITE_PROBE_LEGACY_LOCALHOST_DESTINATION + value: "true" + {{ "{{" }}- end }} + - name: JWT_POLICY + value: {{ "{{" }} .Values.global.jwtPolicy }} + - name: PILOT_CERT_PROVIDER + value: {{ "{{" }} .Values.global.pilotCertProvider }} + - name: CA_ADDR + {{ "{{" }}- if .Values.global.caAddress }} + value: {{ "{{" }} .Values.global.caAddress }} + {{ "{{" }}- else }} + value: istiod{{ "{{" }}- if not (eq .Values.revision "") }}-{{ "{{" }} .Values.revision }}{{ "{{" }}- end }}.{{ "{{" }} .Values.global.istioNamespace }}.svc:15012 + {{ "{{" }}- end }} + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: INSTANCE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: PROXY_CONFIG + value: | + {{ "{{" }} protoToJSON .ProxyConfig }} + - name: ISTIO_META_POD_PORTS + value: |- + [ + {{ "{{" }}- $first := true }} + {{ "{{" }}- range $index1, $c := .Spec.Containers }} + {{ "{{" }}- range $index2, $p := $c.Ports }} + {{ "{{" }}- if (structToJSON $p) }} + {{ "{{" }}if not $first}},{{ "{{" }}end}}{{ "{{" }} structToJSON $p }} + {{ "{{" }}- $first = false }} + {{ "{{" }}- end }} + {{ "{{" }}- end}} + {{ "{{" }}- end}} + ] + - name: ISTIO_META_APP_CONTAINERS + value: "{{ "{{" }} $containers | join "," }}" + - name: ISTIO_META_CLUSTER_ID + value: "{{ "{{" }} valueOrDefault .Values.global.multiCluster.clusterName `Kubernetes` }}" + - name: ISTIO_META_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: ISTIO_META_INTERCEPTION_MODE + value: "{{ "{{" }} or (index .ObjectMeta.Annotations `sidecar.istio.io/interceptionMode`) .ProxyConfig.InterceptionMode.String }}" + {{ "{{" }}- if .Values.global.network }} + - name: ISTIO_META_NETWORK + value: "{{ "{{" }} .Values.global.network }}" + {{ "{{" }}- end }} + {{ "{{" }}- if .DeploymentMeta.Name }} + - name: ISTIO_META_WORKLOAD_NAME + value: "{{ "{{" }} .DeploymentMeta.Name }}" + {{ "{{" }} end }} + {{ "{{" }}- if and .TypeMeta.APIVersion .DeploymentMeta.Name }} + - name: ISTIO_META_OWNER + value: kubernetes://apis/{{ "{{" }} .TypeMeta.APIVersion }}/namespaces/{{ "{{" }} valueOrDefault .DeploymentMeta.Namespace `default` }}/{{ "{{" }} toLower .TypeMeta.Kind}}s/{{ "{{" }} .DeploymentMeta.Name }} + {{ "{{" }}- end}} + {{ "{{" }}- if (isset .ObjectMeta.Annotations `sidecar.istio.io/bootstrapOverride`) }} + - name: ISTIO_BOOTSTRAP_OVERRIDE + value: "/etc/istio/custom-bootstrap/custom_bootstrap.json" + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.meshID }} + - name: ISTIO_META_MESH_ID + value: "{{ "{{" }} .Values.global.meshID }}" + {{ "{{" }}- else if (valueOrDefault .MeshConfig.TrustDomain .Values.global.trustDomain) }} + - name: ISTIO_META_MESH_ID + value: "{{ "{{" }} (valueOrDefault .MeshConfig.TrustDomain .Values.global.trustDomain) }}" + {{ "{{" }}- end }} + {{ "{{" }}- with (valueOrDefault .MeshConfig.TrustDomain .Values.global.trustDomain) }} + - name: TRUST_DOMAIN + value: "{{ "{{" }} . }}" + {{ "{{" }}- end }} + {{ "{{" }}- if and (eq .Values.global.proxy.tracer "datadog") (isset .ObjectMeta.Annotations `apm.datadoghq.com/env`) }} + {{ "{{" }}- range $key, $value := fromJSON (index .ObjectMeta.Annotations `apm.datadoghq.com/env`) }} + - name: {{ "{{" }} $key }} + value: "{{ "{{" }} $value }}" + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- range $key, $value := .ProxyConfig.ProxyMetadata }} + - name: {{ "{{" }} $key }} + value: "{{ "{{" }} $value }}" + {{ "{{" }}- end }} + {{ "{{" }}with .Values.global.imagePullPolicy }}imagePullPolicy: "{{ "{{" }}.}}"{{ "{{" }}end}} + {{ "{{" }} if ne (annotation .ObjectMeta `status.sidecar.istio.io/port` .Values.global.proxy.statusPort) `0` }} + readinessProbe: + httpGet: + path: /healthz/ready + port: 15021 + initialDelaySeconds: {{ "{{" }} annotation .ObjectMeta `readiness.status.sidecar.istio.io/initialDelaySeconds` .Values.global.proxy.readinessInitialDelaySeconds }} + periodSeconds: {{ "{{" }} annotation .ObjectMeta `readiness.status.sidecar.istio.io/periodSeconds` .Values.global.proxy.readinessPeriodSeconds }} + timeoutSeconds: 3 + failureThreshold: {{ "{{" }} annotation .ObjectMeta `readiness.status.sidecar.istio.io/failureThreshold` .Values.global.proxy.readinessFailureThreshold }} + {{ "{{" }} end -}} + securityContext: + {{ "{{" }}- if eq (index .ProxyConfig.ProxyMetadata "IPTABLES_TRACE_LOGGING") "true" }} + allowPrivilegeEscalation: true + capabilities: + add: + - NET_ADMIN + drop: + - ALL + privileged: true + readOnlyRootFilesystem: {{ "{{" }} ne (annotation .ObjectMeta `sidecar.istio.io/enableCoreDump` .Values.global.proxy.enableCoreDump) "true" }} + runAsGroup: 1337 + runAsNonRoot: false + runAsUser: 0 + {{ "{{" }}- else }} + allowPrivilegeEscalation: {{ "{{" }} .Values.global.proxy.privileged }} + capabilities: + {{ "{{" }} if or (eq (annotation .ObjectMeta `sidecar.istio.io/interceptionMode` .ProxyConfig.InterceptionMode) `TPROXY`) (eq (annotation .ObjectMeta `sidecar.istio.io/capNetBindService` .Values.global.proxy.capNetBindService) `true`) -}} + add: + {{ "{{" }} if eq (annotation .ObjectMeta `sidecar.istio.io/interceptionMode` .ProxyConfig.InterceptionMode) `TPROXY` -}} + - NET_ADMIN + {{ "{{" }}- end }} + {{ "{{" }} if eq (annotation .ObjectMeta `sidecar.istio.io/capNetBindService` .Values.global.proxy.capNetBindService) `true` -}} + - NET_BIND_SERVICE + {{ "{{" }}- end }} + {{ "{{" }}- end }} + drop: + - ALL + privileged: {{ "{{" }} .Values.global.proxy.privileged }} + readOnlyRootFilesystem: {{ "{{" }} ne (annotation .ObjectMeta `sidecar.istio.io/enableCoreDump` .Values.global.proxy.enableCoreDump) "true" }} + runAsGroup: 1337 + {{ "{{" }} if or (eq (annotation .ObjectMeta `sidecar.istio.io/interceptionMode` .ProxyConfig.InterceptionMode) `TPROXY`) (eq (annotation .ObjectMeta `sidecar.istio.io/capNetBindService` .Values.global.proxy.capNetBindService) `true`) -}} + runAsNonRoot: false + runAsUser: 0 + {{ "{{" }}- else -}} + runAsNonRoot: true + runAsUser: 1337 + {{ "{{" }}- end }} + {{ "{{" }}- end }} + resources: + {{ "{{" }} template "resources" . }} + volumeMounts: + - name: workload-socket + mountPath: /var/run/secrets/workload-spiffe-uds + - name: credential-socket + mountPath: /var/run/secrets/credential-uds + {{ "{{" }}- if eq .Values.global.caName "GkeWorkloadCertificate" }} + - name: gke-workload-certificate + mountPath: /var/run/secrets/workload-spiffe-credentials + readOnly: true + {{ "{{" }}- else }} + - name: workload-certs + mountPath: /var/run/secrets/workload-spiffe-credentials + {{ "{{" }}- end }} + {{ "{{" }}- if eq .Values.global.pilotCertProvider "istiod" }} + - mountPath: /var/run/secrets/istio + name: istiod-ca-cert + {{ "{{" }}- end }} + {{ "{{" }}- if eq .Values.global.pilotCertProvider "kubernetes" }} + - mountPath: /var/run/secrets/istio/kubernetes + name: kube-ca-cert + {{ "{{" }}- end }} + - mountPath: /var/lib/istio/data + name: istio-data + {{ "{{" }} if (isset .ObjectMeta.Annotations `sidecar.istio.io/bootstrapOverride`) }} + - mountPath: /etc/istio/custom-bootstrap + name: custom-bootstrap-volume + {{ "{{" }}- end }} + # SDS channel between istioagent and Envoy + - mountPath: /etc/istio/proxy + name: istio-envoy + {{ "{{" }}- if eq .Values.global.jwtPolicy "third-party-jwt" }} + - mountPath: /var/run/secrets/tokens + name: istio-token + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.mountMtlsCerts }} + # Use the key and cert mounted to /etc/certs/ for the in-cluster mTLS communications. + - mountPath: /etc/certs/ + name: istio-certs + readOnly: true + {{ "{{" }}- end }} + - name: istio-podinfo + mountPath: /etc/istio/pod + {{ "{{" }}- if and (eq .Values.global.proxy.tracer "lightstep") .ProxyConfig.GetTracing.GetTlsSettings }} + - mountPath: {{ "{{" }} directory .ProxyConfig.GetTracing.GetTlsSettings.GetCaCertificates }} + name: lightstep-certs + readOnly: true + {{ "{{" }}- end }} + {{ "{{" }}- if isset .ObjectMeta.Annotations `sidecar.istio.io/userVolumeMount` }} + {{ "{{" }} range $index, $value := fromJSON (index .ObjectMeta.Annotations `sidecar.istio.io/userVolumeMount`) }} + - name: "{{ "{{" }} $index }}" + {{ "{{" }} toYaml $value | indent 6 }} + {{ "{{" }} end }} + {{ "{{" }}- end }} + volumes: + - emptyDir: + name: workload-socket + - emptyDir: + name: credential-socket + {{ "{{" }}- if eq .Values.global.caName "GkeWorkloadCertificate" }} + - name: gke-workload-certificate + csi: + driver: workloadcertificates.security.cloud.google.com + {{ "{{" }}- else }} + - emptyDir: + name: workload-certs + {{ "{{" }}- end }} + {{ "{{" }}- if (isset .ObjectMeta.Annotations `sidecar.istio.io/bootstrapOverride`) }} + - name: custom-bootstrap-volume + configMap: + name: {{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/bootstrapOverride` "" }} + {{ "{{" }}- end }} + # SDS channel between istioagent and Envoy + - emptyDir: + medium: Memory + name: istio-envoy + - name: istio-data + emptyDir: {} + - name: istio-podinfo + downwardAPI: + items: + - path: "labels" + fieldRef: + fieldPath: metadata.labels + - path: "annotations" + fieldRef: + fieldPath: metadata.annotations + {{ "{{" }}- if eq .Values.global.jwtPolicy "third-party-jwt" }} + - name: istio-token + projected: + sources: + - serviceAccountToken: + path: istio-token + expirationSeconds: 43200 + audience: {{ "{{" }} .Values.global.sds.token.aud }} + {{ "{{" }}- end }} + {{ "{{" }}- if eq .Values.global.pilotCertProvider "istiod" }} + - name: istiod-ca-cert + configMap: + name: istio-ca-root-cert + {{ "{{" }}- end }} + {{ "{{" }}- if eq .Values.global.pilotCertProvider "kubernetes" }} + - name: kube-ca-cert + configMap: + name: kube-root-ca.crt + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.mountMtlsCerts }} + # Use the key and cert mounted to /etc/certs/ for the in-cluster mTLS communications. + - name: istio-certs + secret: + optional: true + {{ "{{" }} if eq .Spec.ServiceAccountName "" }} + secretName: istio.default + {{ "{{" }} else -}} + secretName: {{ "{{" }} printf "istio.%s" .Spec.ServiceAccountName }} + {{ "{{" }} end -}} + {{ "{{" }}- end }} + {{ "{{" }}- if isset .ObjectMeta.Annotations `sidecar.istio.io/userVolume` }} + {{ "{{" }}range $index, $value := fromJSON (index .ObjectMeta.Annotations `sidecar.istio.io/userVolume`) }} + - name: "{{ "{{" }} $index }}" + {{ "{{" }} toYaml $value | indent 4 }} + {{ "{{" }} end }} + {{ "{{" }} end }} + {{ "{{" }}- if and (eq .Values.global.proxy.tracer "lightstep") .ProxyConfig.GetTracing.GetTlsSettings }} + - name: lightstep-certs + secret: + optional: true + secretName: lightstep.cacert + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.imagePullSecrets }} + imagePullSecrets: + {{ "{{" }}- range .Values.global.imagePullSecrets }} + - name: {{ "{{" }} . }} + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- if eq (env "ENABLE_LEGACY_FSGROUP_INJECTION" "false") "true" }} + securityContext: + fsGroup: 1337 + {{ "{{" }}- end }} + gateway: | + {{ "{{" }}- $containers := list }} + {{ "{{" }}- range $index, $container := .Spec.Containers }}{{ "{{" }} if not (eq $container.Name "istio-proxy") }}{{ "{{" }} $containers = append $containers $container.Name }}{{ "{{" }}end}}{{ "{{" }}- end}} + metadata: + labels: + service.istio.io/canonical-name: {{ "{{" }} index .ObjectMeta.Labels `service.istio.io/canonical-name` | default (index .ObjectMeta.Labels `app.kubernetes.io/name`) | default (index .ObjectMeta.Labels `app`) | default .DeploymentMeta.Name | quote }} + service.istio.io/canonical-revision: {{ "{{" }} index .ObjectMeta.Labels `service.istio.io/canonical-revision` | default (index .ObjectMeta.Labels `app.kubernetes.io/version`) | default (index .ObjectMeta.Labels `version`) | default "latest" | quote }} + istio.io/rev: {{ "{{" }} index .ObjectMeta.Labels `istio.io/rev` | default .Revision | default "default" | quote }} + annotations: { + {{ "{{" }}- if eq (len $containers) 1 }} + kubectl.kubernetes.io/default-logs-container: "{{ "{{" }} index $containers 0 }}", + kubectl.kubernetes.io/default-container: "{{ "{{" }} index $containers 0 }}", + {{ "{{" }} end }} + } + spec: + containers: + - name: istio-proxy + {{ "{{" }}- if contains "/" .Values.global.proxy.image }} + image: "{{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/proxyImage` .Values.global.proxy.image }}" + {{ "{{" }}- else }} + image: "{{ "{{" }} .ProxyImage }}" + {{ "{{" }}- end }} + ports: + - containerPort: 15090 + protocol: TCP + name: http-envoy-prom + args: + - proxy + - router + - --domain + - $(POD_NAMESPACE).svc.{{ "{{" }} .Values.global.proxy.clusterDomain }} + - --proxyLogLevel={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/logLevel` .Values.global.proxy.logLevel }} + - --proxyComponentLogLevel={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/componentLogLevel` .Values.global.proxy.componentLogLevel }} + - --log_output_level={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/agentLogLevel` .Values.global.logging.level }} + {{ "{{" }}- if .Values.global.sts.servicePort }} + - --stsPort={{ "{{" }} .Values.global.sts.servicePort }} + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.logAsJson }} + - --log_as_json + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.proxy.lifecycle }} + lifecycle: + {{ "{{" }} toYaml .Values.global.proxy.lifecycle | indent 6 }} + {{ "{{" }}- end }} + env: + - name: JWT_POLICY + value: {{ "{{" }} .Values.global.jwtPolicy }} + - name: PILOT_CERT_PROVIDER + value: {{ "{{" }} .Values.global.pilotCertProvider }} + - name: CA_ADDR + {{ "{{" }}- if .Values.global.caAddress }} + value: {{ "{{" }} .Values.global.caAddress }} + {{ "{{" }}- else }} + value: istiod{{ "{{" }}- if not (eq .Values.revision "") }}-{{ "{{" }} .Values.revision }}{{ "{{" }}- end }}.{{ "{{" }} .Values.global.istioNamespace }}.svc:15012 + {{ "{{" }}- end }} + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: INSTANCE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: PROXY_CONFIG + value: | + {{ "{{" }} protoToJSON .ProxyConfig }} + - name: ISTIO_META_POD_PORTS + value: |- + [ + {{ "{{" }}- $first := true }} + {{ "{{" }}- range $index1, $c := .Spec.Containers }} + {{ "{{" }}- range $index2, $p := $c.Ports }} + {{ "{{" }}- if (structToJSON $p) }} + {{ "{{" }}if not $first}},{{ "{{" }}end}}{{ "{{" }} structToJSON $p }} + {{ "{{" }}- $first = false }} + {{ "{{" }}- end }} + {{ "{{" }}- end}} + {{ "{{" }}- end}} + ] + - name: ISTIO_META_APP_CONTAINERS + value: "{{ "{{" }} $containers | join "," }}" + - name: ISTIO_META_CLUSTER_ID + value: "{{ "{{" }} valueOrDefault .Values.global.multiCluster.clusterName `Kubernetes` }}" + - name: ISTIO_META_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: ISTIO_META_INTERCEPTION_MODE + value: "{{ "{{" }} .ProxyConfig.InterceptionMode.String }}" + {{ "{{" }}- if .Values.global.network }} + - name: ISTIO_META_NETWORK + value: "{{ "{{" }} .Values.global.network }}" + {{ "{{" }}- end }} + {{ "{{" }}- if .DeploymentMeta.Name }} + - name: ISTIO_META_WORKLOAD_NAME + value: "{{ "{{" }} .DeploymentMeta.Name }}" + {{ "{{" }} end }} + {{ "{{" }}- if and .TypeMeta.APIVersion .DeploymentMeta.Name }} + - name: ISTIO_META_OWNER + value: kubernetes://apis/{{ "{{" }} .TypeMeta.APIVersion }}/namespaces/{{ "{{" }} valueOrDefault .DeploymentMeta.Namespace `default` }}/{{ "{{" }} toLower .TypeMeta.Kind}}s/{{ "{{" }} .DeploymentMeta.Name }} + {{ "{{" }}- end}} + {{ "{{" }}- if .Values.global.meshID }} + - name: ISTIO_META_MESH_ID + value: "{{ "{{" }} .Values.global.meshID }}" + {{ "{{" }}- else if (valueOrDefault .MeshConfig.TrustDomain .Values.global.trustDomain) }} + - name: ISTIO_META_MESH_ID + value: "{{ "{{" }} (valueOrDefault .MeshConfig.TrustDomain .Values.global.trustDomain) }}" + {{ "{{" }}- end }} + {{ "{{" }}- with (valueOrDefault .MeshConfig.TrustDomain .Values.global.trustDomain) }} + - name: TRUST_DOMAIN + value: "{{ "{{" }} . }}" + {{ "{{" }}- end }} + {{ "{{" }}- range $key, $value := .ProxyConfig.ProxyMetadata }} + - name: {{ "{{" }} $key }} + value: "{{ "{{" }} $value }}" + {{ "{{" }}- end }} + {{ "{{" }}with .Values.global.imagePullPolicy }}imagePullPolicy: "{{ "{{" }}.}}"{{ "{{" }}end}} + readinessProbe: + httpGet: + path: /healthz/ready + port: 15021 + initialDelaySeconds: {{ "{{" }}.Values.global.proxy.readinessInitialDelaySeconds }} + periodSeconds: {{ "{{" }} .Values.global.proxy.readinessPeriodSeconds }} + timeoutSeconds: 3 + failureThreshold: {{ "{{" }} .Values.global.proxy.readinessFailureThreshold }} + volumeMounts: + - name: workload-socket + mountPath: /var/run/secrets/workload-spiffe-uds + - name: credential-socket + mountPath: /var/run/secrets/credential-uds + {{ "{{" }}- if eq .Values.global.caName "GkeWorkloadCertificate" }} + - name: gke-workload-certificate + mountPath: /var/run/secrets/workload-spiffe-credentials + readOnly: true + {{ "{{" }}- else }} + - name: workload-certs + mountPath: /var/run/secrets/workload-spiffe-credentials + {{ "{{" }}- end }} + {{ "{{" }}- if eq .Values.global.pilotCertProvider "istiod" }} + - mountPath: /var/run/secrets/istio + name: istiod-ca-cert + {{ "{{" }}- end }} + - mountPath: /var/lib/istio/data + name: istio-data + # SDS channel between istioagent and Envoy + - mountPath: /etc/istio/proxy + name: istio-envoy + {{ "{{" }}- if eq .Values.global.jwtPolicy "third-party-jwt" }} + - mountPath: /var/run/secrets/tokens + name: istio-token + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.mountMtlsCerts }} + # Use the key and cert mounted to /etc/certs/ for the in-cluster mTLS communications. + - mountPath: /etc/certs/ + name: istio-certs + readOnly: true + {{ "{{" }}- end }} + - name: istio-podinfo + mountPath: /etc/istio/pod + volumes: + - emptyDir: {} + name: workload-socket + - emptyDir: {} + name: credential-socket + {{ "{{" }}- if eq .Values.global.caName "GkeWorkloadCertificate" }} + - name: gke-workload-certificate + csi: + driver: workloadcertificates.security.cloud.google.com + {{ "{{" }}- else}} + - emptyDir: {} + name: workload-certs + {{ "{{" }}- end }} + # SDS channel between istioagent and Envoy + - emptyDir: + medium: Memory + name: istio-envoy + - name: istio-data + emptyDir: {} + - name: istio-podinfo + downwardAPI: + items: + - path: "labels" + fieldRef: + fieldPath: metadata.labels + - path: "annotations" + fieldRef: + fieldPath: metadata.annotations + {{ "{{" }}- if eq .Values.global.jwtPolicy "third-party-jwt" }} + - name: istio-token + projected: + sources: + - serviceAccountToken: + path: istio-token + expirationSeconds: 43200 + audience: {{ "{{" }} .Values.global.sds.token.aud }} + {{ "{{" }}- end }} + {{ "{{" }}- if eq .Values.global.pilotCertProvider "istiod" }} + - name: istiod-ca-cert + configMap: + name: istio-ca-root-cert + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.mountMtlsCerts }} + # Use the key and cert mounted to /etc/certs/ for the in-cluster mTLS communications. + - name: istio-certs + secret: + optional: true + {{ "{{" }} if eq .Spec.ServiceAccountName "" }} + secretName: istio.default + {{ "{{" }} else -}} + secretName: {{ "{{" }} printf "istio.%s" .Spec.ServiceAccountName }} + {{ "{{" }} end -}} + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.imagePullSecrets }} + imagePullSecrets: + {{ "{{" }}- range .Values.global.imagePullSecrets }} + - name: {{ "{{" }} . }} + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- if eq (env "ENABLE_LEGACY_FSGROUP_INJECTION" "false") "true" }} + securityContext: + fsGroup: 1337 + {{ "{{" }}- end }} + grpc-simple: | + metadata: + annotations: + sidecar.istio.io/rewriteAppHTTPProbers: "false" + spec: + initContainers: + - name: grpc-bootstrap-init + image: busybox:1.28 + volumeMounts: + - mountPath: /var/lib/grpc/data/ + name: grpc-io-proxyless-bootstrap + env: + - name: INSTANCE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: ISTIO_NAMESPACE + value: | + {{ "{{" }} .Values.global.istioNamespace }} + command: + - sh + - "-c" + - |- + NODE_ID="sidecar~${INSTANCE_IP}~${POD_NAME}.${POD_NAMESPACE}~cluster.local" + SERVER_URI="dns:///istiod.${ISTIO_NAMESPACE}.svc:15010" + echo ' + { + "xds_servers": [ + { + "server_uri": "'${SERVER_URI}'", + "channel_creds": [{"type": "insecure"}], + "server_features" : ["xds_v3"] + } + ], + "node": { + "id": "'${NODE_ID}'", + "metadata": { + "GENERATOR": "grpc" + } + } + }' > /var/lib/grpc/data/bootstrap.json + containers: + {{ "{{" }}- range $index, $container := .Spec.Containers }} + - name: {{ "{{" }} $container.Name }} + env: + - name: GRPC_XDS_BOOTSTRAP + value: /var/lib/grpc/data/bootstrap.json + - name: GRPC_GO_LOG_VERBOSITY_LEVEL + value: "99" + - name: GRPC_GO_LOG_SEVERITY_LEVEL + value: info + volumeMounts: + - mountPath: /var/lib/grpc/data/ + name: grpc-io-proxyless-bootstrap + {{ "{{" }}- end }} + volumes: + - name: grpc-io-proxyless-bootstrap + emptyDir: {} + grpc-agent: | + {{ "{{" }}- define "resources" }} + {{ "{{" }}- if or (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPU`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemory`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPULimit`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemoryLimit`) }} + {{ "{{" }}- if or (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPU`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemory`) }} + requests: + {{ "{{" }} if (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPU`) -}} + cpu: "{{ "{{" }} index .ObjectMeta.Annotations `sidecar.istio.io/proxyCPU` }}" + {{ "{{" }} end }} + {{ "{{" }} if (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemory`) -}} + memory: "{{ "{{" }} index .ObjectMeta.Annotations `sidecar.istio.io/proxyMemory` }}" + {{ "{{" }} end }} + {{ "{{" }}- end }} + {{ "{{" }}- if or (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPULimit`) (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemoryLimit`) }} + limits: + {{ "{{" }} if (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyCPULimit`) -}} + cpu: "{{ "{{" }} index .ObjectMeta.Annotations `sidecar.istio.io/proxyCPULimit` }}" + {{ "{{" }} end }} + {{ "{{" }} if (isset .ObjectMeta.Annotations `sidecar.istio.io/proxyMemoryLimit`) -}} + memory: "{{ "{{" }} index .ObjectMeta.Annotations `sidecar.istio.io/proxyMemoryLimit` }}" + {{ "{{" }} end }} + {{ "{{" }}- end }} + {{ "{{" }}- else }} + {{ "{{" }}- if .Values.global.proxy.resources }} + {{ "{{" }} toYaml .Values.global.proxy.resources | indent 6 }} + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- $containers := list }} + {{ "{{" }}- range $index, $container := .Spec.Containers }}{{ "{{" }} if not (eq $container.Name "istio-proxy") }}{{ "{{" }} $containers = append $containers $container.Name }}{{ "{{" }}end}}{{ "{{" }}- end}} + metadata: + labels: + {{ "{{" }}/* security.istio.io/tlsMode: istio must be set by user, if gRPC is using mTLS initialization code. We can't set it automatically. */}} + service.istio.io/canonical-name: {{ "{{" }} index .ObjectMeta.Labels `service.istio.io/canonical-name` | default (index .ObjectMeta.Labels `app.kubernetes.io/name`) | default (index .ObjectMeta.Labels `app`) | default .DeploymentMeta.Name | quote }} + service.istio.io/canonical-revision: {{ "{{" }} index .ObjectMeta.Labels `service.istio.io/canonical-revision` | default (index .ObjectMeta.Labels `app.kubernetes.io/version`) | default (index .ObjectMeta.Labels `version`) | default "latest" | quote }} + annotations: { + {{ "{{" }}- if ge (len $containers) 1 }} + {{ "{{" }}- if not (isset .ObjectMeta.Annotations `kubectl.kubernetes.io/default-logs-container`) }} + kubectl.kubernetes.io/default-logs-container: "{{ "{{" }} index $containers 0 }}", + {{ "{{" }}- end }} + {{ "{{" }}- if not (isset .ObjectMeta.Annotations `kubectl.kubernetes.io/default-container`) }} + kubectl.kubernetes.io/default-container: "{{ "{{" }} index $containers 0 }}", + {{ "{{" }}- end }} + {{ "{{" }}- end }} + sidecar.istio.io/rewriteAppHTTPProbers: "false", + } + spec: + containers: + - name: istio-proxy + {{ "{{" }}- if contains "/" (annotation .ObjectMeta `sidecar.istio.io/proxyImage` .Values.global.proxy.image) }} + image: "{{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/proxyImage` .Values.global.proxy.image }}" + {{ "{{" }}- else }} + image: "{{ "{{" }} .ProxyImage }}" + {{ "{{" }}- end }} + ports: + - containerPort: 15020 + protocol: TCP + name: mesh-metrics + args: + - proxy + - sidecar + - --domain + - $(POD_NAMESPACE).svc.{{ "{{" }} .Values.global.proxy.clusterDomain }} + - --proxyLogLevel={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/logLevel` .Values.global.proxy.logLevel }} + - --proxyComponentLogLevel={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/componentLogLevel` .Values.global.proxy.componentLogLevel }} + - --log_output_level={{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/agentLogLevel` .Values.global.logging.level }} + {{ "{{" }}- if .Values.global.sts.servicePort }} + - --stsPort={{ "{{" }} .Values.global.sts.servicePort }} + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.logAsJson }} + - --log_as_json + {{ "{{" }}- end }} + lifecycle: + postStart: + exec: + command: + - pilot-agent + - wait + - --url=http://localhost:15020/healthz/ready + env: + - name: ISTIO_META_GENERATOR + value: grpc + - name: OUTPUT_CERTS + value: /var/lib/istio/data + {{ "{{" }}- if eq (env "PILOT_ENABLE_INBOUND_PASSTHROUGH" "true") "false" }} + - name: REWRITE_PROBE_LEGACY_LOCALHOST_DESTINATION + value: "true" + {{ "{{" }}- end }} + - name: JWT_POLICY + value: {{ "{{" }} .Values.global.jwtPolicy }} + - name: PILOT_CERT_PROVIDER + value: {{ "{{" }} .Values.global.pilotCertProvider }} + - name: CA_ADDR + {{ "{{" }}- if .Values.global.caAddress }} + value: {{ "{{" }} .Values.global.caAddress }} + {{ "{{" }}- else }} + value: istiod{{ "{{" }}- if not (eq .Values.revision "") }}-{{ "{{" }} .Values.revision }}{{ "{{" }}- end }}.{{ "{{" }} .Values.global.istioNamespace }}.svc:15012 + {{ "{{" }}- end }} + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: INSTANCE_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: PROXY_CONFIG + value: | + {{ "{{" }} protoToJSON .ProxyConfig }} + - name: ISTIO_META_POD_PORTS + value: |- + [ + {{ "{{" }}- $first := true }} + {{ "{{" }}- range $index1, $c := .Spec.Containers }} + {{ "{{" }}- range $index2, $p := $c.Ports }} + {{ "{{" }}- if (structToJSON $p) }} + {{ "{{" }}if not $first}},{{ "{{" }}end}}{{ "{{" }} structToJSON $p }} + {{ "{{" }}- $first = false }} + {{ "{{" }}- end }} + {{ "{{" }}- end}} + {{ "{{" }}- end}} + ] + - name: ISTIO_META_APP_CONTAINERS + value: "{{ "{{" }} $containers | join "," }}" + - name: ISTIO_META_CLUSTER_ID + value: "{{ "{{" }} valueOrDefault .Values.global.multiCluster.clusterName `Kubernetes` }}" + - name: ISTIO_META_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + {{ "{{" }}- if .Values.global.network }} + - name: ISTIO_META_NETWORK + value: "{{ "{{" }} .Values.global.network }}" + {{ "{{" }}- end }} + {{ "{{" }}- if .DeploymentMeta.Name }} + - name: ISTIO_META_WORKLOAD_NAME + value: "{{ "{{" }} .DeploymentMeta.Name }}" + {{ "{{" }} end }} + {{ "{{" }}- if and .TypeMeta.APIVersion .DeploymentMeta.Name }} + - name: ISTIO_META_OWNER + value: kubernetes://apis/{{ "{{" }} .TypeMeta.APIVersion }}/namespaces/{{ "{{" }} valueOrDefault .DeploymentMeta.Namespace `default` }}/{{ "{{" }} toLower .TypeMeta.Kind}}s/{{ "{{" }} .DeploymentMeta.Name }} + {{ "{{" }}- end}} + {{ "{{" }}- if .Values.global.meshID }} + - name: ISTIO_META_MESH_ID + value: "{{ "{{" }} .Values.global.meshID }}" + {{ "{{" }}- else if (valueOrDefault .MeshConfig.TrustDomain .Values.global.trustDomain) }} + - name: ISTIO_META_MESH_ID + value: "{{ "{{" }} (valueOrDefault .MeshConfig.TrustDomain .Values.global.trustDomain) }}" + {{ "{{" }}- end }} + {{ "{{" }}- with (valueOrDefault .MeshConfig.TrustDomain .Values.global.trustDomain) }} + - name: TRUST_DOMAIN + value: "{{ "{{" }} . }}" + {{ "{{" }}- end }} + {{ "{{" }}- range $key, $value := .ProxyConfig.ProxyMetadata }} + - name: {{ "{{" }} $key }} + value: "{{ "{{" }} $value }}" + {{ "{{" }}- end }} + # grpc uses xds:/// to resolve – no need to resolve VIP + - name: ISTIO_META_DNS_CAPTURE + value: "false" + - name: DISABLE_ENVOY + value: "true" + {{ "{{" }}with .Values.global.imagePullPolicy }}imagePullPolicy: "{{ "{{" }}.}}"{{ "{{" }}end}} + {{ "{{" }} if ne (annotation .ObjectMeta `status.sidecar.istio.io/port` .Values.global.proxy.statusPort) `0` }} + readinessProbe: + httpGet: + path: /healthz/ready + port: 15020 + initialDelaySeconds: {{ "{{" }} annotation .ObjectMeta `readiness.status.sidecar.istio.io/initialDelaySeconds` .Values.global.proxy.readinessInitialDelaySeconds }} + periodSeconds: {{ "{{" }} annotation .ObjectMeta `readiness.status.sidecar.istio.io/periodSeconds` .Values.global.proxy.readinessPeriodSeconds }} + timeoutSeconds: 3 + failureThreshold: {{ "{{" }} annotation .ObjectMeta `readiness.status.sidecar.istio.io/failureThreshold` .Values.global.proxy.readinessFailureThreshold }} + resources: + {{ "{{" }} template "resources" . }} + volumeMounts: + - name: workload-socket + mountPath: /var/run/secrets/workload-spiffe-uds + {{ "{{" }}- if eq .Values.global.caName "GkeWorkloadCertificate" }} + - name: gke-workload-certificate + mountPath: /var/run/secrets/workload-spiffe-credentials + readOnly: true + {{ "{{" }}- else }} + - name: workload-certs + mountPath: /var/run/secrets/workload-spiffe-credentials + {{ "{{" }}- end }} + {{ "{{" }}- if eq .Values.global.pilotCertProvider "istiod" }} + - mountPath: /var/run/secrets/istio + name: istiod-ca-cert + {{ "{{" }}- end }} + - mountPath: /var/lib/istio/data + name: istio-data + # UDS channel between istioagent and gRPC client for XDS/SDS + - mountPath: /etc/istio/proxy + name: istio-xds + {{ "{{" }}- if eq .Values.global.jwtPolicy "third-party-jwt" }} + - mountPath: /var/run/secrets/tokens + name: istio-token + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.mountMtlsCerts }} + # Use the key and cert mounted to /etc/certs/ for the in-cluster mTLS communications. + - mountPath: /etc/certs/ + name: istio-certs + readOnly: true + {{ "{{" }}- end }} + - name: istio-podinfo + mountPath: /etc/istio/pod + {{ "{{" }}- end }} + {{ "{{" }}- if isset .ObjectMeta.Annotations `sidecar.istio.io/userVolumeMount` }} + {{ "{{" }} range $index, $value := fromJSON (index .ObjectMeta.Annotations `sidecar.istio.io/userVolumeMount`) }} + - name: "{{ "{{" }} $index }}" + {{ "{{" }} toYaml $value | indent 6 }} + {{ "{{" }} end }} + {{ "{{" }}- end }} + {{ "{{" }}- range $index, $container := .Spec.Containers }} + {{ "{{" }} if not (eq $container.Name "istio-proxy") }} + - name: {{ "{{" }} $container.Name }} + env: + - name: "GRPC_XDS_EXPERIMENTAL_SECURITY_SUPPORT" + value: "true" + - name: "GRPC_XDS_BOOTSTRAP" + value: "/etc/istio/proxy/grpc-bootstrap.json" + volumeMounts: + - mountPath: /var/lib/istio/data + name: istio-data + # UDS channel between istioagent and gRPC client for XDS/SDS + - mountPath: /etc/istio/proxy + name: istio-xds + {{ "{{" }}- if eq $.Values.global.caName "GkeWorkloadCertificate" }} + - name: gke-workload-certificate + mountPath: /var/run/secrets/workload-spiffe-credentials + readOnly: true + {{ "{{" }}- else }} + - name: workload-certs + mountPath: /var/run/secrets/workload-spiffe-credentials + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- end }} + volumes: + - emptyDir: + name: workload-socket + {{ "{{" }}- if eq .Values.global.caName "GkeWorkloadCertificate" }} + - name: gke-workload-certificate + csi: + driver: workloadcertificates.security.cloud.google.com + {{ "{{" }}- else }} + - emptyDir: + name: workload-certs + {{ "{{" }}- end }} + {{ "{{" }}- if (isset .ObjectMeta.Annotations `sidecar.istio.io/bootstrapOverride`) }} + - name: custom-bootstrap-volume + configMap: + name: {{ "{{" }} annotation .ObjectMeta `sidecar.istio.io/bootstrapOverride` "" }} + {{ "{{" }}- end }} + # SDS channel between istioagent and Envoy + - emptyDir: + medium: Memory + name: istio-xds + - name: istio-data + emptyDir: {} + - name: istio-podinfo + downwardAPI: + items: + - path: "labels" + fieldRef: + fieldPath: metadata.labels + - path: "annotations" + fieldRef: + fieldPath: metadata.annotations + {{ "{{" }}- if eq .Values.global.jwtPolicy "third-party-jwt" }} + - name: istio-token + projected: + sources: + - serviceAccountToken: + path: istio-token + expirationSeconds: 43200 + audience: {{ "{{" }} .Values.global.sds.token.aud }} + {{ "{{" }}- end }} + {{ "{{" }}- if eq .Values.global.pilotCertProvider "istiod" }} + - name: istiod-ca-cert + configMap: + name: istio-ca-root-cert + {{ "{{" }}- end }} + {{ "{{" }}- if .Values.global.mountMtlsCerts }} + # Use the key and cert mounted to /etc/certs/ for the in-cluster mTLS communications. + - name: istio-certs + secret: + optional: true + {{ "{{" }} if eq .Spec.ServiceAccountName "" }} + secretName: istio.default + {{ "{{" }} else -}} + secretName: {{ "{{" }} printf "istio.%s" .Spec.ServiceAccountName }} + {{ "{{" }} end -}} + {{ "{{" }}- end }} + {{ "{{" }}- if isset .ObjectMeta.Annotations `sidecar.istio.io/userVolume` }} + {{ "{{" }}range $index, $value := fromJSON (index .ObjectMeta.Annotations `sidecar.istio.io/userVolume`) }} + - name: "{{ "{{" }} $index }}" + {{ "{{" }} toYaml $value | indent 4 }} + {{ "{{" }} end }} + {{ "{{" }} end }} + {{ "{{" }}- if .Values.global.imagePullSecrets }} + imagePullSecrets: + {{ "{{" }}- range .Values.global.imagePullSecrets }} + - name: {{ "{{" }} . }} + {{ "{{" }}- end }} + {{ "{{" }}- end }} + {{ "{{" }}- if eq (env "ENABLE_LEGACY_FSGROUP_INJECTION" "false") "true" }} + securityContext: + fsGroup: 1337 + {{ "{{" }}- end }} + values: |- + { + "global": { + "autoscalingv2API": true, + "caAddress": "", + "caName": "", + "certSigners": [], + "configCluster": false, + "configValidation": true, + "defaultNodeSelector": {}, + "defaultPodDisruptionBudget": { + "enabled": true + }, + "defaultResources": { + "requests": { + "cpu": "10m" + } + }, + "enabled": true, + "externalIstiod": false, + "hub": "docker.io/istio", + "imagePullPolicy": "", + "imagePullSecrets": [], + "istioNamespace": "istio-system", + "istiod": { + "enableAnalysis": false + }, + "jwtPolicy": "third-party-jwt", + "logAsJson": false, + "logging": { + "level": "default:info" + }, + "meshID": "", + "meshNetworks": {}, + "mountMtlsCerts": false, + "multiCluster": { + "clusterName": "", + "enabled": false + }, + "namespace": "istio-system", + "network": "", + "omitSidecarInjectorConfigMap": false, + "oneNamespace": false, + "operatorManageWebhooks": false, + "pilotCertProvider": "istiod", + "priorityClassName": "", + "proxy": { + "autoInject": "enabled", + "clusterDomain": "cluster.local", + "componentLogLevel": "misc:error", + "enableCoreDump": false, + "excludeIPRanges": "", + "excludeInboundPorts": "", + "excludeOutboundPorts": "", + "holdApplicationUntilProxyStarts": false, + "image": "proxyv2", + "includeIPRanges": "*", + "includeInboundPorts": "*", + "includeOutboundPorts": "", + "logLevel": "warning", + "privileged": false, + "readinessFailureThreshold": 30, + "readinessInitialDelaySeconds": 1, + "readinessPeriodSeconds": 2, + "resources": { + "limits": { + "cpu": "2000m", + "memory": "1024Mi" + }, + "requests": { + "cpu": "100m", + "memory": "128Mi" + } + }, + "statusPort": 15020, + "tracer": "zipkin" + }, + "proxy_init": { + "image": "proxyv2", + "resources": { + "limits": { + "cpu": "2000m", + "memory": "1024Mi" + }, + "requests": { + "cpu": "10m", + "memory": "10Mi" + } + } + }, + "remotePilotAddress": "", + "sds": { + "token": { + "aud": "istio-ca" + } + }, + "sts": { + "servicePort": 0 + }, + "tag": "1.17.3", + "tracer": { + "datadog": { + "address": "$(HOST_IP):8126" + }, + "lightstep": { + "accessToken": "", + "address": "" + }, + "stackdriver": { + "debug": false, + "maxNumberOfAnnotations": 200, + "maxNumberOfAttributes": 200, + "maxNumberOfMessageEvents": 200 + }, + "zipkin": { + "address": "" + } + }, + "useMCP": false, + "variant": "" + }, + "istio_cni": { + "enabled": false + }, + "revision": "", + "sidecarInjectorWebhook": { + "alwaysInjectSelector": [], + "defaultTemplates": [], + "enableNamespacesByDefault": false, + "injectedAnnotations": {}, + "neverInjectSelector": [], + "rewriteAppHTTPProbe": true, + "templates": {} + } + } +kind: ConfigMap +metadata: + labels: + install.operator.istio.io/owning-resource: unknown + istio.io/rev: default + operator.istio.io/component: Pilot + release: istio + name: istio-sidecar-injector + namespace: istio-system +--- +apiVersion: v1 +data: + AFTER_LOGOUT_URL: / + AUTHSERVICE_URL_PREFIX: /authservice/ + OIDC_AUTH_URL: /dex/auth + OIDC_PROVIDER: http://dex.auth.svc.cluster.local:5556/dex + OIDC_SCOPES: profile email groups + PORT: '"8080"' + SKIP_AUTH_URLS: /dex + STORE_PATH: /var/lib/authservice/data.db + USERID_CLAIM: email + USERID_HEADER: kubeflow-userid + USERID_PREFIX: "" +kind: ConfigMap +metadata: + name: oidc-authservice-parameters + namespace: istio-system +--- +apiVersion: v1 +data: + channel-template-spec: | + apiVersion: messaging.knative.dev/v1 + kind: InMemoryChannel +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: config-br-default-channel + namespace: knative-eventing +--- +apiVersion: v1 +data: + default-br-config: | + clusterDefault: + brokerClass: MTChannelBasedBroker + apiVersion: v1 + kind: ConfigMap + name: config-br-default-channel + namespace: knative-eventing + delivery: + retry: 10 + backoffPolicy: exponential + backoffDelay: PT0.2S +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: config-br-defaults + namespace: knative-eventing +--- +apiVersion: v1 +data: + delivery-retryafter: disabled + delivery-timeout: enabled + kreference-group: disabled + kreference-mapping: disabled + new-trigger-filters: disabled + transport-encryption: disabled +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + knative.dev/config-category: eventing + knative.dev/config-propagation: original + kustomize.component: knative + name: config-features + namespace: knative-eventing +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + + # this is an example of mapping from pod to addressable-pod service + # the data key must be of the form "kind.version.group" + # the data value must be a valid URL. Valid template data are: + # - Name: reference name + # - Namespace: reference namespace + # - SystemNamespace: knative namespace + # - UID: reference UID + # + # Pod.v1: https://addressable-pod.{{ "{{" }} .SystemNamespace }}.svc.cluster.local/{{ "{{" }} .Name }} +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: 7375dbe1 + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + knative.dev/config-category: eventing + knative.dev/config-propagation: original + kustomize.component: knative + name: config-kreference-mapping + namespace: knative-eventing +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # lease-duration is how long non-leaders will wait to try to acquire the + # lock; 15 seconds is the value used by core kubernetes controllers. + lease-duration: "15s" + + # renew-deadline is how long a leader will try to renew the lease before + # giving up; 10 seconds is the value used by core kubernetes controllers. + renew-deadline: "10s" + + # retry-period is how long the leader election client waits between tries of + # actions; 2 seconds is the value used by core kubernetes controllers. + retry-period: "2s" + + # buckets is the number of buckets used to partition key space of each + # Reconciler. If this number is M and the replica number of the controller + # is N, the N replicas will compete for the M buckets. The owner of a + # bucket will take care of the reconciling for the keys partitioned into + # that bucket. + buckets: "1" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: f7948630 + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: config-leader-election + namespace: knative-eventing +--- +apiVersion: v1 +data: + loglevel.controller: info + loglevel.webhook: info + zap-logger-config: | + { + "level": "info", + "development": false, + "outputPaths": ["stdout"], + "errorOutputPaths": ["stderr"], + "encoding": "json", + "encoderConfig": { + "timeKey": "ts", + "levelKey": "level", + "nameKey": "logger", + "callerKey": "caller", + "messageKey": "msg", + "stacktraceKey": "stacktrace", + "lineEnding": "", + "levelEncoder": "", + "timeEncoder": "iso8601", + "durationEncoder": "", + "callerEncoder": "" + } + } +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + knative.dev/config-category: eventing + knative.dev/config-propagation: original + kustomize.component: knative + name: config-logging + namespace: knative-eventing +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # metrics.backend-destination field specifies the system metrics destination. + # It supports either prometheus (the default) or stackdriver. + # Note: Using stackdriver will incur additional charges + metrics.backend-destination: prometheus + + # metrics.request-metrics-backend-destination specifies the request metrics + # destination. If non-empty, it enables queue proxy to send request metrics. + # Currently supported values: prometheus, stackdriver. + metrics.request-metrics-backend-destination: prometheus + + # metrics.stackdriver-project-id field specifies the stackdriver project ID. This + # field is optional. When running on GCE, application default credentials will be + # used if this field is not provided. + metrics.stackdriver-project-id: "" + + # metrics.allow-stackdriver-custom-metrics indicates whether it is allowed to send metrics to + # Stackdriver using "global" resource type and custom metric type if the + # metrics are not supported by "knative_broker", "knative_trigger", and "knative_source" resource types. + # Setting this flag to "true" could cause extra Stackdriver charge. + # If metrics.backend-destination is not Stackdriver, this is ignored. + metrics.allow-stackdriver-custom-metrics: "false" + + # profiling.enable indicates whether it is allowed to retrieve runtime profiling data from + # the pods via an HTTP server in the format expected by the pprof visualization tool. When + # enabled, the Knative Eventing pods expose the profiling data on an alternate HTTP port 8008. + # The HTTP context root for profiling is then /debug/pprof/. + profiling.enable: "false" + + # sink-event-error-reporting.enable whether the adapter reports a kube event to the CRD indicating + # a failure to send a cloud event to the sink. + sink-event-error-reporting.enable: "false" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: f46cf09d + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + knative.dev/config-category: eventing + knative.dev/config-propagation: original + kustomize.component: knative + name: config-observability + namespace: knative-eventing +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # Max number of bytes allowed to be sent for message excluding any + # base64 decoding. Default is no limit set for data + data-max-size: -1 +kind: ConfigMap +metadata: + annotations: + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + knative.dev/example-checksum: 9185c153 + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + kustomize.component: knative + name: config-ping-defaults + namespace: knative-eventing +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # namespace-selector specifies a LabelSelector which + # determines which namespaces the Sugar Controller should operate upon + # Use an empty value to disable the feature (this is the default): + namespace-selector: "" + + # Use an empty object as a string to enable for all namespaces + namespace-selector: "{}" + + # trigger-selector specifies a LabelSelector which + # determines which triggers the Sugar Controller should operate upon + # Use an empty value to disable the feature (this is the default): + trigger-selector: "" + + # Use an empty object as string to enable for all triggers + trigger-selector: "{}" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: 62dfac6f + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: config-sugar + namespace: knative-eventing +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + # + # This may be "zipkin" or "none". the default is "none" + backend: "none" + + # URL to zipkin collector where traces are sent. + # This must be specified when backend is "zipkin" + zipkin-endpoint: "http://zipkin.istio-system.svc.cluster.local:9411/api/v2/spans" + + # Enable zipkin debug mode. This allows all spans to be sent to the server + # bypassing sampling. + debug: "false" + + # Percentage (0-1) of requests to trace + sample-rate: "0.1" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: 0492ceb0 + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + knative.dev/config-category: eventing + knative.dev/config-propagation: original + kustomize.component: knative + name: config-tracing + namespace: knative-eventing +--- +apiVersion: v1 +data: + default-ch-config: | + clusterDefault: + apiVersion: messaging.knative.dev/v1 + kind: InMemoryChannel + namespaceDefaults: + some-namespace: + apiVersion: messaging.knative.dev/v1 + kind: InMemoryChannel +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: default-ch-webhook + namespace: knative-eventing +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # The Revision ContainerConcurrency field specifies the maximum number + # of requests the Container can handle at once. Container concurrency + # target percentage is how much of that maximum to use in a stable + # state. E.g. if a Revision specifies ContainerConcurrency of 10, then + # the Autoscaler will try to maintain 7 concurrent connections per pod + # on average. + # Note: this limit will be applied to container concurrency set at every + # level (ConfigMap, Revision Spec or Annotation). + # For legacy and backwards compatibility reasons, this value also accepts + # fractional values in (0, 1] interval (i.e. 0.7 ⇒ 70%). + # Thus minimal percentage value must be greater than 1.0, or it will be + # treated as a fraction. + # NOTE: that this value does not affect actual number of concurrent requests + # the user container may receive, but only the average number of requests + # that the revision pods will receive. + container-concurrency-target-percentage: "70" + + # The container concurrency target default is what the Autoscaler will + # try to maintain when concurrency is used as the scaling metric for the + # Revision and the Revision specifies unlimited concurrency. + # When revision explicitly specifies container concurrency, that value + # will be used as a scaling target for autoscaler. + # When specifying unlimited concurrency, the autoscaler will + # horizontally scale the application based on this target concurrency. + # This is what we call "soft limit" in the documentation, i.e. it only + # affects number of pods and does not affect the number of requests + # individual pod processes. + # The value must be a positive number such that the value multiplied + # by container-concurrency-target-percentage is greater than 0.01. + # NOTE: that this value will be adjusted by application of + # container-concurrency-target-percentage, i.e. by default + # the system will target on average 70 concurrent requests + # per revision pod. + # NOTE: Only one metric can be used for autoscaling a Revision. + container-concurrency-target-default: "100" + + # The requests per second (RPS) target default is what the Autoscaler will + # try to maintain when RPS is used as the scaling metric for a Revision and + # the Revision specifies unlimited RPS. Even when specifying unlimited RPS, + # the autoscaler will horizontally scale the application based on this + # target RPS. + # Must be greater than 1.0. + # NOTE: Only one metric can be used for autoscaling a Revision. + requests-per-second-target-default: "200" + + # The target burst capacity specifies the size of burst in concurrent + # requests that the system operator expects the system will receive. + # Autoscaler will try to protect the system from queueing by introducing + # Activator in the request path if the current spare capacity of the + # service is less than this setting. + # If this setting is 0, then Activator will be in the request path only + # when the revision is scaled to 0. + # If this setting is > 0 and container-concurrency-target-percentage is + # 100% or 1.0, then activator will always be in the request path. + # -1 denotes unlimited target-burst-capacity and activator will always + # be in the request path. + # Other negative values are invalid. + target-burst-capacity: "211" + + # When operating in a stable mode, the autoscaler operates on the + # average concurrency over the stable window. + # Stable window must be in whole seconds. + stable-window: "60s" + + # When observed average concurrency during the panic window reaches + # panic-threshold-percentage the target concurrency, the autoscaler + # enters panic mode. When operating in panic mode, the autoscaler + # scales on the average concurrency over the panic window which is + # panic-window-percentage of the stable-window. + # Must be in the [1, 100] range. + # When computing the panic window it will be rounded to the closest + # whole second, at least 1s. + panic-window-percentage: "10.0" + + # The percentage of the container concurrency target at which to + # enter panic mode when reached within the panic window. + panic-threshold-percentage: "200.0" + + # Max scale up rate limits the rate at which the autoscaler will + # increase pod count. It is the maximum ratio of desired pods versus + # observed pods. + # Cannot be less or equal to 1. + # I.e with value of 2.0 the number of pods can at most go N to 2N + # over single Autoscaler period (2s), but at least N to + # N+1, if Autoscaler needs to scale up. + max-scale-up-rate: "1000.0" + + # Max scale down rate limits the rate at which the autoscaler will + # decrease pod count. It is the maximum ratio of observed pods versus + # desired pods. + # Cannot be less or equal to 1. + # I.e. with value of 2.0 the number of pods can at most go N to N/2 + # over single Autoscaler evaluation period (2s), but at + # least N to N-1, if Autoscaler needs to scale down. + max-scale-down-rate: "2.0" + + # Scale to zero feature flag. + enable-scale-to-zero: "true" + + # Scale to zero grace period is the time an inactive revision is left + # running before it is scaled to zero (must be positive, but recommended + # at least a few seconds if running with mesh networking). + # This is the upper limit and is provided not to enforce timeout after + # the revision stopped receiving requests for stable window, but to + # ensure network reprogramming to put activator in the path has completed. + # If the system determines that a shorter period is satisfactory, + # then the system will only wait that amount of time before scaling to 0. + # NOTE: this period might actually be 0, if activator has been + # in the request path sufficiently long. + # If there is necessity for the last pod to linger longer use + # scale-to-zero-pod-retention-period flag. + scale-to-zero-grace-period: "30s" + + # Scale to zero pod retention period defines the minimum amount + # of time the last pod will remain after Autoscaler has decided to + # scale to zero. + # This flag is for the situations where the pod startup is very expensive + # and the traffic is bursty (requiring smaller windows for fast action), + # but patchy. + # The larger of this flag and `scale-to-zero-grace-period` will effectively + # determine how the last pod will hang around. + scale-to-zero-pod-retention-period: "0s" + + # pod-autoscaler-class specifies the default pod autoscaler class + # that should be used if none is specified. If omitted, + # the Knative Pod Autoscaler (KPA) is used by default. + pod-autoscaler-class: "kpa.autoscaling.knative.dev" + + # The capacity of a single activator task. + # The `unit` is one concurrent request proxied by the activator. + # activator-capacity must be at least 1. + # This value is used for computation of the Activator subset size. + # See the algorithm here: http://bit.ly/38XiCZ3. + # TODO(vagababov): tune after actual benchmarking. + activator-capacity: "100.0" + + # initial-scale is the cluster-wide default value for the initial target + # scale of a revision after creation, unless overridden by the + # "autoscaling.knative.dev/initialScale" annotation. + # This value must be greater than 0 unless allow-zero-initial-scale is true. + initial-scale: "1" + + # allow-zero-initial-scale controls whether either the cluster-wide initial-scale flag, + # or the "autoscaling.knative.dev/initialScale" annotation, can be set to 0. + allow-zero-initial-scale: "false" + + # min-scale is the cluster-wide default value for the min scale of a revision, + # unless overridden by the "autoscaling.knative.dev/minScale" annotation. + min-scale: "0" + + # max-scale is the cluster-wide default value for the max scale of a revision, + # unless overridden by the "autoscaling.knative.dev/maxScale" annotation. + # If set to 0, the revision has no maximum scale. + max-scale: "0" + + # scale-down-delay is the amount of time that must pass at reduced + # concurrency before a scale down decision is applied. This can be useful, + # for example, to maintain replica count and avoid a cold start penalty if + # more requests come in within the scale down delay period. + # The default, 0s, imposes no delay at all. + scale-down-delay: "0s" + + # max-scale-limit sets the maximum permitted value for the max scale of a revision. + # When this is set to a positive value, a revision with a maxScale above that value + # (including a maxScale of "0" = unlimited) is disallowed. + # A value of zero (the default) allows any limit, including unlimited. + max-scale-limit: "0" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: 47c2487f + labels: + app.kubernetes.io/component: autoscaler + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-autoscaler + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # revision-timeout-seconds contains the default number of + # seconds to use for the revision's per-request timeout, if + # none is specified. + revision-timeout-seconds: "300" # 5 minutes + + # max-revision-timeout-seconds contains the maximum number of + # seconds that can be used for revision-timeout-seconds. + # This value must be greater than or equal to revision-timeout-seconds. + # If omitted, the system default is used (600 seconds). + # + # If this value is increased, the activator's terminationGraceTimeSeconds + # should also be increased to prevent in-flight requests being disrupted. + max-revision-timeout-seconds: "600" # 10 minutes + + # revision-response-start-timeout-seconds contains the default number of + # seconds a request will be allowed to stay open while waiting to + # receive any bytes from the user's application, if none is specified. + # + # This defaults to 'revision-timeout-seconds' + revision-response-start-timeout-seconds: "300" + + # revision-idle-timeout-seconds contains the default number of + # seconds a request will be allowed to stay open while not receiving any + # bytes from the user's application, if none is specified. + revision-idle-timeout-seconds: "0" # infinite + + # revision-cpu-request contains the cpu allocation to assign + # to revisions by default. If omitted, no value is specified + # and the system default is used. + # Below is an example of setting revision-cpu-request. + # By default, it is not set by Knative. + revision-cpu-request: "400m" # 0.4 of a CPU (aka 400 milli-CPU) + + # revision-memory-request contains the memory allocation to assign + # to revisions by default. If omitted, no value is specified + # and the system default is used. + # Below is an example of setting revision-memory-request. + # By default, it is not set by Knative. + revision-memory-request: "100M" # 100 megabytes of memory + + # revision-ephemeral-storage-request contains the ephemeral storage + # allocation to assign to revisions by default. If omitted, no value is + # specified and the system default is used. + revision-ephemeral-storage-request: "500M" # 500 megabytes of storage + + # revision-cpu-limit contains the cpu allocation to limit + # revisions to by default. If omitted, no value is specified + # and the system default is used. + # Below is an example of setting revision-cpu-limit. + # By default, it is not set by Knative. + revision-cpu-limit: "1000m" # 1 CPU (aka 1000 milli-CPU) + + # revision-memory-limit contains the memory allocation to limit + # revisions to by default. If omitted, no value is specified + # and the system default is used. + # Below is an example of setting revision-memory-limit. + # By default, it is not set by Knative. + revision-memory-limit: "200M" # 200 megabytes of memory + + # revision-ephemeral-storage-limit contains the ephemeral storage + # allocation to limit revisions to by default. If omitted, no value is + # specified and the system default is used. + revision-ephemeral-storage-limit: "750M" # 750 megabytes of storage + + # container-name-template contains a template for the default + # container name, if none is specified. This field supports + # Go templating and is supplied with the ObjectMeta of the + # enclosing Service or Configuration, so values such as + # {{ "{{" }}.Name}} are also valid. + container-name-template: "user-container" + + # init-container-name-template contains a template for the default + # init container name, if none is specified. This field supports + # Go templating and is supplied with the ObjectMeta of the + # enclosing Service or Configuration, so values such as + # {{ "{{" }}.Name}} are also valid. + init-container-name-template: "init-container" + + # container-concurrency specifies the maximum number + # of requests the Container can handle at once, and requests + # above this threshold are queued. Setting a value of zero + # disables this throttling and lets through as many requests as + # the pod receives. + container-concurrency: "0" + + # The container concurrency max limit is an operator setting ensuring that + # the individual revisions cannot have arbitrary large concurrency + # values, or autoscaling targets. `container-concurrency` default setting + # must be at or below this value. + # + # Must be greater than 1. + # + # Note: even with this set, a user can choose a containerConcurrency + # of 0 (i.e. unbounded) unless allow-container-concurrency-zero is + # set to "false". + container-concurrency-max-limit: "1000" + + # allow-container-concurrency-zero controls whether users can + # specify 0 (i.e. unbounded) for containerConcurrency. + allow-container-concurrency-zero: "true" + + # enable-service-links specifies the default value used for the + # enableServiceLinks field of the PodSpec, when it is omitted by the user. + # See: https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#accessing-the-service + # + # This is a tri-state flag with possible values of (true|false|default). + # + # In environments with large number of services it is suggested + # to set this value to `false`. + # See https://github.com/knative/serving/issues/8498. + enable-service-links: "false" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: e7973912 + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-defaults + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: |- + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # List of repositories for which tag to digest resolving should be skipped + registries-skipping-tag-resolving: "kind.local,ko.local,dev.local" + + # Maximum time allowed for an image's digests to be resolved. + digest-resolution-timeout: "10s" + + # Duration we wait for the deployment to be ready before considering it failed. + progress-deadline: "600s" + + # Sets the queue proxy's CPU request. + # If omitted, a default value (currently "25m"), is used. + queue-sidecar-cpu-request: "25m" + + # Sets the queue proxy's CPU limit. + # If omitted, no value is specified and the system default is used. + queue-sidecar-cpu-limit: "1000m" + + # Sets the queue proxy's memory request. + # If omitted, no value is specified and the system default is used. + queue-sidecar-memory-request: "400Mi" + + # Sets the queue proxy's memory limit. + # If omitted, no value is specified and the system default is used. + queue-sidecar-memory-limit: "800Mi" + + # Sets the queue proxy's ephemeral storage request. + # If omitted, no value is specified and the system default is used. + queue-sidecar-ephemeral-storage-request: "512Mi" + + # Sets the queue proxy's ephemeral storage limit. + # If omitted, no value is specified and the system default is used. + queue-sidecar-ephemeral-storage-limit: "1024Mi" + + # Sets tokens associated with specific audiences for queue proxy - used by QPOptions + # + # For example, to add the `service-x` audience: + # queue-sidecar-token-audiences: "service-x" + # Also supports a list of audiences, for example: + # queue-sidecar-token-audiences: "service-x,service-y" + # If omitted, or empty, no tokens are created + queue-sidecar-token-audiences: "" + + # Sets rootCA for the queue proxy - used by QPOptions + # If omitted, or empty, no rootCA is added to the golang rootCAs + queue-sidecar-rootca: "" + progressDeadline: 600s + queue-sidecar-image: gcr.io/knative-releases/knative.dev/serving/cmd/queue@sha256:dabaecec38860ca4c972e6821d5dc825549faf50c6feb8feb4c04802f2338b8a +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: 410041a0 + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-deployment + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # Default value for domain. + # Routes having the cluster domain suffix (by default 'svc.cluster.local') + # will not be exposed through Ingress. You can define your own label + # selector to assign that domain suffix to your Route here, or you can set + # the label + # "networking.knative.dev/visibility=cluster-local" + # to achieve the same effect. This shows how to make routes having + # the label app=secret only exposed to the local cluster. + svc.cluster.local: | + selector: + app: secret + + # These are example settings of domain. + # example.com will be used for all routes, but it is the least-specific rule so it + # will only be used if no other domain matches. + example.com: | + + # example.org will be used for routes having app=nonprofit. + example.org: | + selector: + app: nonprofit +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: 26c09de5 + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-domain + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: |- + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # Default SecurityContext settings to secure-by-default values + # if unset. + # + # This value will default to "enabled" in a future release, + # probably Knative 1.10 + secure-pod-defaults: "disabled" + + # Indicates whether multi container support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#multi-containers + multi-container: "enabled" + + # Indicates whether Kubernetes affinity support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-node-affinity + kubernetes.podspec-affinity: "disabled" + + # Indicates whether Kubernetes topologySpreadConstraints support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-topology-spread-constraints + kubernetes.podspec-topologyspreadconstraints: "disabled" + + # Indicates whether Kubernetes hostAliases support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-host-aliases + kubernetes.podspec-hostaliases: "disabled" + + # Indicates whether Kubernetes nodeSelector support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-node-selector + kubernetes.podspec-nodeselector: "disabled" + + # Indicates whether Kubernetes tolerations support is enabled + # + # WARNING: Cannot safely be disabled once enabled + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-toleration + kubernetes.podspec-tolerations: "disabled" + + # Indicates whether Kubernetes FieldRef support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-fieldref + kubernetes.podspec-fieldref: "disabled" + + # Indicates whether Kubernetes RuntimeClassName support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-runtime-class + kubernetes.podspec-runtimeclassname: "disabled" + + # Indicates whether Kubernetes DNSPolicy support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-dnspolicy + kubernetes.podspec-dnspolicy: "disabled" + + # Indicates whether Kubernetes DNSConfig support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-dnsconfig + kubernetes.podspec-dnsconfig: "disabled" + + # This feature allows end-users to set a subset of fields on the Pod's SecurityContext + # + # When set to "enabled" or "allowed" it allows the following + # PodSecurityContext properties: + # - FSGroup + # - RunAsGroup + # - RunAsNonRoot + # - SupplementalGroups + # - RunAsUser + # - SeccompProfile + # + # This feature flag should be used with caution as the PodSecurityContext + # properties may have a side-effect on non-user sidecar containers that come + # from Knative or your service mesh + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-security-context + kubernetes.podspec-securitycontext: "disabled" + + # Indicates whether Kubernetes PriorityClassName support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-priority-class-name + kubernetes.podspec-priorityclassname: "disabled" + + # Indicates whether Kubernetes SchedulerName support is enabled + # + # WARNING: Cannot safely be disabled once enabled. + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-scheduler-name + kubernetes.podspec-schedulername: "disabled" + + # This feature flag allows end-users to add a subset of capabilities on the Pod's SecurityContext. + # + # When set to "enabled" or "allowed" it allows capabilities to be added to the container. + # For a list of possible capabilities, see https://man7.org/linux/man-pages/man7/capabilities.7.html + kubernetes.containerspec-addcapabilities: "disabled" + + # This feature validates PodSpecs from the validating webhook + # against the K8s API Server. + # + # When "enabled", the server will always run the extra validation. + # When "allowed", the server will not run the dry-run validation by default. + # However, clients may enable the behavior on an individual Service by + # attaching the following metadata annotation: "features.knative.dev/podspec-dryrun":"enabled". + # See: https://knative.dev/docs/serving/feature-flags/#kubernetes-dry-run + kubernetes.podspec-dryrun: "allowed" + + # Controls whether tag header based routing feature are enabled or not. + # 1. Enabled: enabling tag header based routing + # 2. Disabled: disabling tag header based routing + # See: https://knative.dev/docs/serving/feature-flags/#tag-header-based-routing + tag-header-based-routing: "disabled" + + # Controls whether http2 auto-detection should be enabled or not. + # 1. Enabled: http2 connection will be attempted via upgrade. + # 2. Disabled: http2 connection will only be attempted when port name is set to "h2c". + autodetect-http2: "disabled" + + # Controls whether volume support for EmptyDir is enabled or not. + # 1. Enabled: enabling EmptyDir volume support + # 2. Disabled: disabling EmptyDir volume support + kubernetes.podspec-volumes-emptydir: "enabled" + + # Controls whether init containers support is enabled or not. + # 1. Enabled: enabling init containers support + # 2. Disabled: disabling init containers support + kubernetes.podspec-init-containers: "disabled" + + # Controls whether persistent volume claim support is enabled or not. + # 1. Enabled: enabling persistent volume claim support + # 2. Disabled: disabling persistent volume claim support + kubernetes.podspec-persistent-volume-claim: "disabled" + + # Controls whether write access for persistent volumes is enabled or not. + # 1. Enabled: enabling write access for persistent volumes + # 2. Disabled: disabling write access for persistent volumes + kubernetes.podspec-persistent-volume-write: "disabled" + + # Controls if the queue proxy podInfo feature is enabled, allowed or disabled + # + # This feature should be enabled/allowed when using queue proxy Options (Extensions) + # Enabling will mount a podInfo volume to the queue proxy container. + # The volume will contains an 'annotations' file (from the pod's annotation field). + # The annotations in this file include the Service annotations set by the client creating the service. + # If mounted, the annotations can be accessed by queue proxy extensions at /etc/podinfo/annnotations + # + # 1. "enabled": always mount a podInfo volume + # 2. "disabled": never mount a podInfo volume + # 3. "allowed": by default, do not mount a podInfo volume + # However, a client may mount the podInfo volume on an individual Service by attaching + # the following metadata annotation to the Service: "features.knative.dev/queueproxy-podinfo":"enabled". + # + # NOTE THAT THIS IS AN EXPERIMENTAL / ALPHA FEATURE + queueproxy.mount-podinfo: "disabled" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: d3565159 + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-features + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # --------------------------------------- + # Garbage Collector Settings + # --------------------------------------- + # + # Active + # * Revisions which are referenced by a Route are considered active. + # * Individual revisions may be marked with the annotation + # "serving.knative.dev/no-gc":"true" to be permanently considered active. + # * Active revisions are not considered for GC. + # Retention + # * Revisions are retained if they are any of the following: + # 1. Active + # 2. Were created within "retain-since-create-time" + # 3. Were last referenced by a route within + # "retain-since-last-active-time" + # 4. There are fewer than "min-non-active-revisions" + # If none of these conditions are met, or if the count of revisions exceed + # "max-non-active-revisions", they will be deleted by GC. + # The special value "disabled" may be used to turn off these limits. + # + # Example config to immediately collect any inactive revision: + # min-non-active-revisions: "0" + # max-non-active-revisions: "0" + # retain-since-create-time: "disabled" + # retain-since-last-active-time: "disabled" + # + # Example config to always keep around the last ten non-active revisions: + # retain-since-create-time: "disabled" + # retain-since-last-active-time: "disabled" + # max-non-active-revisions: "10" + # + # Example config to disable all garbage collection: + # retain-since-create-time: "disabled" + # retain-since-last-active-time: "disabled" + # max-non-active-revisions: "disabled" + # + # Example config to keep recently deployed or active revisions, + # always maintain the last two in case of rollback, and prevent + # burst activity from exploding the count of old revisions: + # retain-since-create-time: "48h" + # retain-since-last-active-time: "15h" + # min-non-active-revisions: "2" + # max-non-active-revisions: "1000" + + # Duration since creation before considering a revision for GC or "disabled". + retain-since-create-time: "48h" + + # Duration since active before considering a revision for GC or "disabled". + retain-since-last-active-time: "15h" + + # Minimum number of non-active revisions to retain. + min-non-active-revisions: "20" + + # Maximum number of non-active revisions to retain + # or "disabled" to disable any maximum limit. + max-non-active-revisions: "1000" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: aa3813a8 + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-gc + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # A gateway and Istio service to serve external traffic. + # The configuration format should be + # `gateway.{{ "{{" }}gateway_namespace}}.{{ "{{" }}gateway_name}}: "{{ "{{" }}ingress_name}}.{{ "{{" }}ingress_namespace}}.svc.cluster.local"`. + # The {{ "{{" }}gateway_namespace}} is optional; when it is omitted, the system will search for + # the gateway in the serving system namespace `knative-serving` + gateway.knative-serving.knative-ingress-gateway: "istio-ingressgateway.istio-system.svc.cluster.local" + + # A cluster local gateway to allow pods outside of the mesh to access + # Services and Routes not exposing through an ingress. If the users + # do have a service mesh setup, this isn't required and can be removed. + # + # An example use case is when users want to use Istio without any + # sidecar injection (like Knative's istio-ci-no-mesh.yaml). Since every pod + # is outside of the service mesh in that case, a cluster-local service + # will need to be exposed to a cluster-local gateway to be accessible. + # The configuration format should be `local-gateway.{{ "{{" }}local_gateway_namespace}}. + # {{ "{{" }}local_gateway_name}}: "{{ "{{" }}cluster_local_gateway_name}}. + # {{ "{{" }}cluster_local_gateway_namespace}}.svc.cluster.local"`. The + # {{ "{{" }}local_gateway_namespace}} is optional; when it is omitted, the system + # will search for the local gateway in the serving system namespace + # `knative-serving` + local-gateway.knative-serving.knative-local-gateway: "knative-local-gateway.istio-system.svc.cluster.local" + + # If true, knative will use the Istio VirtualService's status to determine + # endpoint readiness. Otherwise, probe as usual. + # NOTE: This feature is currently experimental and should not be used in production. + enable-virtualservice-status: "false" + gateway.kubeflow.kubeflow-gateway: istio-ingressgateway.istio-system.svc.cluster.local +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: config-istio + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # lease-duration is how long non-leaders will wait to try to acquire the + # lock; 15 seconds is the value used by core kubernetes controllers. + lease-duration: "60s" + + # renew-deadline is how long a leader will try to renew the lease before + # giving up; 10 seconds is the value used by core kubernetes controllers. + renew-deadline: "40s" + + # retry-period is how long the leader election client waits between tries of + # actions; 2 seconds is the value used by core kubernetes controllers. + retry-period: "10s" + + # buckets is the number of buckets used to partition key space of each + # Reconciler. If this number is M and the replica number of the controller + # is N, the N replicas will compete for the M buckets. The owner of a + # bucket will take care of the reconciling for the keys partitioned into + # that bucket. + buckets: "1" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: f4b71f57 + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-leader-election + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # Common configuration for all Knative codebase + zap-logger-config: | + { + "level": "info", + "development": false, + "outputPaths": ["stdout"], + "errorOutputPaths": ["stderr"], + "encoding": "json", + "encoderConfig": { + "timeKey": "timestamp", + "levelKey": "severity", + "nameKey": "logger", + "callerKey": "caller", + "messageKey": "message", + "stacktraceKey": "stacktrace", + "lineEnding": "", + "levelEncoder": "", + "timeEncoder": "iso8601", + "durationEncoder": "", + "callerEncoder": "" + } + } + + # Log level overrides + # For all components except the queue proxy, + # changes are picked up immediately. + # For queue proxy, changes require recreation of the pods. + loglevel.controller: "info" + loglevel.autoscaler: "info" + loglevel.queueproxy: "info" + loglevel.webhook: "info" + loglevel.activator: "info" + loglevel.hpaautoscaler: "info" + loglevel.net-certmanager-controller: "info" + loglevel.net-istio-controller: "info" + loglevel.net-contour-controller: "info" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: b0f3c6f2 + labels: + app.kubernetes.io/component: logging + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-logging + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # ingress-class specifies the default ingress class + # to use when not dictated by Route annotation. + # + # If not specified, will use the Istio ingress. + # + # Note that changing the Ingress class of an existing Route + # will result in undefined behavior. Therefore it is best to only + # update this value during the setup of Knative, to avoid getting + # undefined behavior. + ingress-class: "istio.ingress.networking.knative.dev" + + # certificate-class specifies the default Certificate class + # to use when not dictated by Route annotation. + # + # If not specified, will use the Cert-Manager Certificate. + # + # Note that changing the Certificate class of an existing Route + # will result in undefined behavior. Therefore it is best to only + # update this value during the setup of Knative, to avoid getting + # undefined behavior. + certificate-class: "cert-manager.certificate.networking.knative.dev" + + # namespace-wildcard-cert-selector specifies a LabelSelector which + # determines which namespaces should have a wildcard certificate + # provisioned. + # + # Use an empty value to disable the feature (this is the default): + # namespace-wildcard-cert-selector: "" + # + # Use an empty object to enable for all namespaces + # namespace-wildcard-cert-selector: {} + # + # Useful labels include the "kubernetes.io/metadata.name" label to + # avoid provisioning a certifcate for the "kube-system" namespaces. + # Use the following selector to match pre-1.0 behavior of using + # "networking.knative.dev/disableWildcardCert" to exclude namespaces: + # + # matchExpressions: + # - key: "networking.knative.dev/disableWildcardCert" + # operator: "NotIn" + # values: ["true"] + namespace-wildcard-cert-selector: "" + + # domain-template specifies the golang text template string to use + # when constructing the Knative service's DNS name. The default + # value is "{{ "{{" }}.Name}}.{{ "{{" }}.Namespace}}.{{ "{{" }}.Domain}}". + # + # Valid variables defined in the template include Name, Namespace, Domain, + # Labels, and Annotations. Name will be the result of the tagTemplate + # below, if a tag is specified for the route. + # + # Changing this value might be necessary when the extra levels in + # the domain name generated is problematic for wildcard certificates + # that only support a single level of domain name added to the + # certificate's domain. In those cases you might consider using a value + # of "{{ "{{" }}.Name}}-{{ "{{" }}.Namespace}}.{{ "{{" }}.Domain}}", or removing the Namespace + # entirely from the template. When choosing a new value be thoughtful + # of the potential for conflicts - for example, when users choose to use + # characters such as `-` in their service, or namespace, names. + # {{ "{{" }}.Annotations}} or {{ "{{" }}.Labels}} can be used for any customization in the + # go template if needed. + # We strongly recommend keeping namespace part of the template to avoid + # domain name clashes: + # eg. '{{ "{{" }}.Name}}-{{ "{{" }}.Namespace}}.{{ "{{" }} index .Annotations "sub"}}.{{ "{{" }}.Domain}}' + # and you have an annotation {"sub":"foo"}, then the generated template + # would be {Name}-{Namespace}.foo.{Domain} + domain-template: "{{ "{{" }}.Name}}.{{ "{{" }}.Namespace}}.{{ "{{" }}.Domain}}" + + # tagTemplate specifies the golang text template string to use + # when constructing the DNS name for "tags" within the traffic blocks + # of Routes and Configuration. This is used in conjunction with the + # domainTemplate above to determine the full URL for the tag. + tag-template: "{{ "{{" }}.Tag}}-{{ "{{" }}.Name}}" + + # Controls whether TLS certificates are automatically provisioned and + # installed in the Knative ingress to terminate external TLS connection. + # 1. Enabled: enabling auto-TLS feature. + # 2. Disabled: disabling auto-TLS feature. + auto-tls: "Disabled" + + # Controls the behavior of the HTTP endpoint for the Knative ingress. + # It requires autoTLS to be enabled. + # 1. Enabled: The Knative ingress will be able to serve HTTP connection. + # 2. Redirected: The Knative ingress will send a 301 redirect for all + # http connections, asking the clients to use HTTPS. + # + # "Disabled" option is deprecated. + http-protocol: "Enabled" + + # rollout-duration contains the minimal duration in seconds over which the + # Configuration traffic targets are rolled out to the newest revision. + rollout-duration: "0" + + # autocreate-cluster-domain-claims controls whether ClusterDomainClaims should + # be automatically created (and deleted) as needed when DomainMappings are + # reconciled. + # + # If this is "false" (the default), the cluster administrator is + # responsible for creating ClusterDomainClaims and delegating them to + # namespaces via their spec.Namespace field. This setting should be used in + # multitenant environments which need to control which namespace can use a + # particular domain name in a domain mapping. + # + # If this is "true", users are able to associate arbitrary names with their + # services via the DomainMapping feature. + autocreate-cluster-domain-claims: "false" + + # If true, networking plugins can add additional information to deployed + # applications to make their pods directly accessible via their IPs even if mesh is + # enabled and thus direct-addressability is usually not possible. + # Consumers like Knative Serving can use this setting to adjust their behavior + # accordingly, i.e. to drop fallback solutions for non-pod-addressable systems. + # + # NOTE: This flag is in an alpha state and is mostly here to enable internal testing + # for now. Use with caution. + enable-mesh-pod-addressability: "false" + + # mesh-compatibility-mode indicates whether consumers of network plugins + # should directly contact Pod IPs (most efficient), or should use the + # Cluster IP (less efficient, needed when mesh is enabled unless + # `enable-mesh-pod-addressability`, above, is set). + # Permitted values are: + # - "auto" (default): automatically determine which mesh mode to use by trying Pod IP and falling back to Cluster IP as needed. + # - "enabled": always use Cluster IP and do not attempt to use Pod IPs. + # - "disabled": always use Pod IPs and do not fall back to Cluster IP on failure. + mesh-compatibility-mode: "auto" + + # Defines the scheme used for external URLs if autoTLS is not enabled. + # This can be used for making Knative report all URLs as "HTTPS" for example, if you're + # fronting Knative with an external loadbalancer that deals with TLS termination and + # Knative doesn't know about that otherwise. + default-external-scheme: "http" + + # internal-encryption indicates whether internal traffic is encrypted or not. + # If this is "true", the following traffic are encrypted: + # - ingress to activator + # - ingress to queue-proxy + # - activator to queue-proxy + # + # NOTE: This flag is in an alpha state and is mostly here to enable internal testing + # for now. Use with caution. + internal-encryption: "false" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: 73d96d1b + labels: + app.kubernetes.io/component: networking + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-network + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + + # logging.enable-var-log-collection defaults to false. + # The fluentd daemon set will be set up to collect /var/log if + # this flag is true. + logging.enable-var-log-collection: "false" + + # logging.revision-url-template provides a template to use for producing the + # logging URL that is injected into the status of each Revision. + logging.revision-url-template: "http://logging.example.com/?revisionUID=${REVISION_UID}" + + # If non-empty, this enables queue proxy writing user request logs to stdout, excluding probe + # requests. + # NB: after 0.18 release logging.enable-request-log must be explicitly set to true + # in order for request logging to be enabled. + # + # The value determines the shape of the request logs and it must be a valid go text/template. + # It is important to keep this as a single line. Multiple lines are parsed as separate entities + # by most collection agents and will split the request logs into multiple records. + # + # The following fields and functions are available to the template: + # + # Request: An http.Request (see https://golang.org/pkg/net/http/#Request) + # representing an HTTP request received by the server. + # + # Response: + # struct { + # Code int // HTTP status code (see https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) + # Size int // An int representing the size of the response. + # Latency float64 // A float64 representing the latency of the response in seconds. + # } + # + # Revision: + # struct { + # Name string // Knative revision name + # Namespace string // Knative revision namespace + # Service string // Knative service name + # Configuration string // Knative configuration name + # PodName string // Name of the pod hosting the revision + # PodIP string // IP of the pod hosting the revision + # } + # + logging.request-log-template: '{"httpRequest": {"requestMethod": "{{ "{{" }}.Request.Method}}", "requestUrl": "{{ "{{" }}js .Request.RequestURI}}", "requestSize": "{{ "{{" }}.Request.ContentLength}}", "status": {{ "{{" }}.Response.Code}}, "responseSize": "{{ "{{" }}.Response.Size}}", "userAgent": "{{ "{{" }}js .Request.UserAgent}}", "remoteIp": "{{ "{{" }}js .Request.RemoteAddr}}", "serverIp": "{{ "{{" }}.Revision.PodIP}}", "referer": "{{ "{{" }}js .Request.Referer}}", "latency": "{{ "{{" }}.Response.Latency}}s", "protocol": "{{ "{{" }}.Request.Proto}}"}, "traceId": "{{ "{{" }}index .Request.Header "X-B3-Traceid"}}"}' + + # If true, the request logging will be enabled. + # NB: up to and including Knative version 0.18 if logging.request-log-template is non-empty, this value + # will be ignored. + logging.enable-request-log: "false" + + # If true, this enables queue proxy writing request logs for probe requests to stdout. + # It uses the same template for user requests, i.e. logging.request-log-template. + logging.enable-probe-request-log: "false" + + # metrics.backend-destination field specifies the system metrics destination. + # It supports either prometheus (the default) or opencensus. + metrics.backend-destination: prometheus + + # metrics.request-metrics-backend-destination specifies the request metrics + # destination. It enables queue proxy to send request metrics. + # Currently supported values: prometheus (the default), opencensus. + metrics.request-metrics-backend-destination: prometheus + + # profiling.enable indicates whether it is allowed to retrieve runtime profiling data from + # the pods via an HTTP server in the format expected by the pprof visualization tool. When + # enabled, the Knative Serving pods expose the profiling data on an alternate HTTP port 8008. + # The HTTP context root for profiling is then /debug/pprof/. + profiling.enable: "false" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: fed4756e + labels: + app.kubernetes.io/component: observability + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-observability + namespace: knative-serving +--- +apiVersion: v1 +data: + _example: | + ################################ + # # + # EXAMPLE CONFIGURATION # + # # + ################################ + + # This block is not actually functional configuration, + # but serves to illustrate the available configuration + # options and document them in a way that is accessible + # to users that `kubectl edit` this config map. + # + # These sample configuration options may be copied out of + # this example block and unindented to be in the data block + # to actually change the configuration. + # + # This may be "zipkin" or "none" (default) + backend: "none" + + # URL to zipkin collector where traces are sent. + # This must be specified when backend is "zipkin" + zipkin-endpoint: "http://zipkin.istio-system.svc.cluster.local:9411/api/v2/spans" + + # Enable zipkin debug mode. This allows all spans to be sent to the server + # bypassing sampling. + debug: "false" + + # Percentage (0-1) of requests to trace + sample-rate: "0.1" +kind: ConfigMap +metadata: + annotations: + knative.dev/example-checksum: "26614636" + labels: + app.kubernetes.io/component: tracing + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config-tracing + namespace: knative-serving +--- +apiVersion: v1 +data: + links: |- + { + "menuLinks": [ + { + "type": "item", + "link": "/jupyter/", + "text": "Notebooks", + "icon": "book" + }, + { + "type": "item", + "link": "/tensorboards/", + "text": "Tensorboards", + "icon": "assessment" + }, + { + "type": "item", + "link": "/volumes/", + "text": "Volumes", + "icon": "device:storage" + }, + { + "type": "item", + "link": "/kserve-endpoints/", + "text": "Endpoints", + "icon": "kubeflow:models" + }, + { + "type": "item", + "link": "/katib/", + "text": "Experiments (AutoML)", + "icon": "kubeflow:katib" + }, + { + "type": "item", + "text": "Experiments (KFP)", + "link": "/pipeline/#/experiments", + "icon": "done-all" + }, + { + "type": "item", + "link": "/pipeline/#/pipelines", + "text": "Pipelines", + "icon": "kubeflow:pipeline-centered" + }, + { + "type": "item", + "link": "/pipeline/#/runs", + "text": "Runs", + "icon": "maps:directions-run" + }, + { + "type": "item", + "link": "/pipeline/#/recurringruns", + "text": "Recurring Runs", + "icon": "device:access-alarm" + }, + { + "type": "item", + "link": "/pipeline/#/artifacts", + "text": "Artifacts", + "icon": "editor:bubble-chart" + }, + { + "type": "item", + "link": "/pipeline/#/executions", + "text": "Executions", + "icon": "av:play-arrow" + } + ], + "externalLinks": [ ], + "quickLinks": [ + { + "text": "Upload a pipeline", + "desc": "Pipelines", + "link": "/pipeline/" + }, + { + "text": "View all pipeline runs", + "desc": "Pipelines", + "link": "/pipeline/#/runs" + }, + { + "text": "Create a new Notebook server", + "desc": "Notebook Servers", + "link": "/jupyter/new?namespace=kubeflow" + }, + { + "text": "View Katib Experiments", + "desc": "Katib", + "link": "/katib/" + } + ], + "documentationItems": [ + { + "text": "Getting Started with Kubeflow", + "desc": "Get your machine-learning workflow up and running on Kubeflow", + "link": "https://www.kubeflow.org/docs/started/getting-started/" + }, + { + "text": "MiniKF", + "desc": "A fast and easy way to deploy Kubeflow locally", + "link": "https://www.kubeflow.org/docs/distributions/minikf/" + }, + { + "text": "Microk8s for Kubeflow", + "desc": "Quickly get Kubeflow running locally on native hypervisors", + "link": "https://www.kubeflow.org/docs/distributions/microk8s/kubeflow-on-microk8s/" + }, + { + "text": "Kubeflow on GCP", + "desc": "Running Kubeflow on Kubernetes Engine and Google Cloud Platform", + "link": "https://www.kubeflow.org/docs/gke/" + }, + { + "text": "Kubeflow on AWS", + "desc": "Running Kubeflow on Elastic Container Service and Amazon Web Services", + "link": "https://www.kubeflow.org/docs/aws/" + }, + { + "text": "Requirements for Kubeflow", + "desc": "Get more detailed information about using Kubeflow and its components", + "link": "https://www.kubeflow.org/docs/started/requirements/" + } + ] + } + settings: |- + { + "DASHBOARD_FORCE_IFRAME": true + } +kind: ConfigMap +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard-config + namespace: kubeflow +--- +apiVersion: v1 +data: + CD_CLUSTER_DOMAIN: cluster.local + CD_REGISTRATION_FLOW: "false" + CD_USERID_HEADER: kubeflow-userid + CD_USERID_PREFIX: "" +kind: ConfigMap +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard-parameters + namespace: kubeflow +--- +apiVersion: v1 +data: + agent: |- + { + "image" : "kserve/agent:v0.10.0", + "memoryRequest": "100Mi", + "memoryLimit": "1Gi", + "cpuRequest": "100m", + "cpuLimit": "1" + } + batcher: |- + { + "image" : "kserve/agent:v0.10.0", + "memoryRequest": "1Gi", + "memoryLimit": "1Gi", + "cpuRequest": "1", + "cpuLimit": "1" + } + credentials: |- + { + "gcs": { + "gcsCredentialFileName": "gcloud-application-credentials.json" + }, + "s3": { + "s3AccessKeyIDName": "AWS_ACCESS_KEY_ID", + "s3SecretAccessKeyName": "AWS_SECRET_ACCESS_KEY", + "s3Endpoint": "", + "s3UseHttps": "", + "s3Region": "", + "s3VerifySSL": "", + "s3UseVirtualBucket": "", + "s3UseAnonymousCredential": "", + "s3CABundle": "" + } + } + deploy: |- + { + "defaultDeploymentMode": "Serverless" + } + explainers: |- + { + "alibi": { + "image" : "kserve/alibi-explainer", + "defaultImageVersion": "latest" + }, + "aix": { + "image" : "kserve/aix-explainer", + "defaultImageVersion": "latest" + }, + "art": { + "image" : "kserve/art-explainer", + "defaultImageVersion": "latest" + } + } + ingress: |- + { + "ingressGateway": "kubeflow/kubeflow-gateway", + "ingressService": "istio-ingressgateway.istio-system.svc.cluster.local", + "localGateway": "knative-serving/knative-local-gateway", + "localGatewayService": "knative-local-gateway.istio-system.svc.cluster.local", + "ingressDomain": "example.com", + "ingressClassName": "istio", + "domainTemplate": "{{ "{{" }} .Name }}-{{ "{{" }} .Namespace }}.{{ "{{" }} .IngressDomain }}", + "urlScheme": "http", + "disableIstioVirtualHost": false + } + logger: |- + { + "image" : "kserve/agent:v0.10.0", + "memoryRequest": "100Mi", + "memoryLimit": "1Gi", + "cpuRequest": "100m", + "cpuLimit": "1", + "defaultUrl": "http://default-broker" + } + metricsAggregator: |- + { + "enableMetricAggregation": "false", + "enablePrometheusScraping" : "false" + } + router: |- + { + "image" : "kserve/router:v0.10.0", + "memoryRequest": "100Mi", + "memoryLimit": "1Gi", + "cpuRequest": "100m", + "cpuLimit": "1" + } + storageInitializer: |- + { + "image" : "kserve/storage-initializer:v0.10.0", + "memoryRequest": "100Mi", + "memoryLimit": "1Gi", + "cpuRequest": "100m", + "cpuLimit": "1", + "storageSpecSecretName": "storage-config" + } +kind: ConfigMap +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: inferenceservice-config + namespace: kubeflow +--- +apiVersion: v1 +data: + spawner_ui_config.yaml: | + # Configuration file for the Jupyter UI. + # + # Each Jupyter UI option is configured by two keys: 'value' and 'readOnly' + # - The 'value' key contains the default value + # - The 'readOnly' key determines if the option will be available to users + # + # If the 'readOnly' key is present and set to 'true', the respective option + # will be disabled for users and only set by the admin. Also when a + # Notebook is POSTED to the API if a necessary field is not present then + # the value from the config will be used. + # + # If the 'readOnly' key is missing (defaults to 'false'), the respective option + # will be available for users to edit. + # + # Note that some values can be templated. Such values are the names of the + # Volumes as well as their StorageClass + spawnerFormDefaults: + image: + # The container Image for the user's Jupyter Notebook + value: kubeflownotebookswg/jupyter-scipy:v1.8.0 + # The list of available standard container Images + options: + - kubeflownotebookswg/jupyter-scipy:v1.8.0 + - kubeflownotebookswg/jupyter-pytorch-full:v1.8.0 + - kubeflownotebookswg/jupyter-pytorch-cuda-full:v1.8.0 + - kubeflownotebookswg/jupyter-tensorflow-full:v1.8.0 + - kubeflownotebookswg/jupyter-tensorflow-cuda-full:v1.8.0 + imageGroupOne: + # The container Image for the user's Group One Server + # The annotation `notebooks.kubeflow.org/http-rewrite-uri: /` + # is applied to notebook in this group, configuring + # the Istio rewrite for containers that host their web UI at `/` + value: kubeflownotebookswg/codeserver-python:v1.8.0 + # The list of available standard container Images + options: + - kubeflownotebookswg/codeserver-python:v1.8.0 + imageGroupTwo: + # The container Image for the user's Group Two Server + # The annotation `notebooks.kubeflow.org/http-rewrite-uri: /` + # is applied to notebook in this group, configuring + # the Istio rewrite for containers that host their web UI at `/` + # The annotation `notebooks.kubeflow.org/http-headers-request-set` + # is applied to notebook in this group, configuring Istio + # to add the `X-RStudio-Root-Path` header to requests + value: kubeflownotebookswg/rstudio-tidyverse:v1.8.0 + # The list of available standard container Images + options: + - kubeflownotebookswg/rstudio-tidyverse:v1.8.0 + # If true, hide registry and/or tag name in the image selection dropdown + hideRegistry: true + hideTag: false + allowCustomImage: true + # If true, users can input custom images + # If false, users can only select from the images in this config + imagePullPolicy: + # Supported values: Always, IfNotPresent, Never + value: IfNotPresent + readOnly: false + cpu: + # CPU for user's Notebook + value: '0.5' + # Factor by with to multiply request to calculate limit + # if no limit is set, to disable set "none" + limitFactor: "1.2" + readOnly: false + memory: + # Memory for user's Notebook + value: 1.0Gi + # Factor by with to multiply request to calculate limit + # if no limit is set, to disable set "none" + limitFactor: "1.2" + readOnly: false + environment: + value: {} + readOnly: false + workspaceVolume: + # Workspace Volume to be attached to user's Notebook + # If you don't want a workspace volume then delete the 'value' key + value: + mount: /home/jovyan + newPvc: + metadata: + name: '{notebook-name}-workspace' + spec: + resources: + requests: + storage: 10Gi + accessModes: + - ReadWriteOnce + readOnly: false + dataVolumes: + # List of additional Data Volumes to be attached to the user's Notebook + value: [] + # For example, a list with 2 Data Volumes: + # value: + # - mount: /home/jovyan/datavol-1 + # newPvc: + # metadata: + # name: '{notebook-name}-datavol-1' + # spec: + # resources: + # requests: + # storage: 5Gi + # accessModes: + # - ReadWriteOnce + # - mount: /home/jovyan/datavol-1 + # existingSource: + # persistentVolumeClaim: + # claimName: test-pvc + readOnly: false + gpus: + # Number of GPUs to be assigned to the Notebook Container + value: + # values: "none", "1", "2", "4", "8" + num: "none" + # Determines what the UI will show and send to the backend + vendors: + - limitsKey: "nvidia.com/gpu" + uiName: "NVIDIA" + - limitsKey: "amd.com/gpu" + uiName: "AMD" + # Values: "" or a `limits-key` from the vendors list + vendor: "" + readOnly: false + affinityConfig: + # If readonly, the default value will be the only option + # value is a list of `configKey`s that we want to be selected by default + value: "" + # The list of available affinity configs + options: [] + #options: + # - configKey: "exclusive__n1-standard-2" + # displayName: "Exclusive: n1-standard-2" + # affinity: + # # (Require) Node having label: `node_pool=notebook-n1-standard-2` + # nodeAffinity: + # requiredDuringSchedulingIgnoredDuringExecution: + # nodeSelectorTerms: + # - matchExpressions: + # - key: "node_pool" + # operator: "In" + # values: + # - "notebook-n1-standard-2" + # # (Require) Node WITHOUT existing Pod having label: `notebook-name` + # podAntiAffinity: + # requiredDuringSchedulingIgnoredDuringExecution: + # - labelSelector: + # matchExpressions: + # - key: "notebook-name" + # operator: "Exists" + # namespaces: [] + # topologyKey: "kubernetes.io/hostname" + #readOnly: false + tolerationGroup: + # The default `groupKey` from the options list + # If readonly, the default value will be the only option + value: "" + # The list of available tolerationGroup configs + options: [] + #options: + # - groupKey: "group_1" + # displayName: "Group 1: description" + # tolerations: + # - key: "key1" + # operator: "Equal" + # value: "value1" + # effect: "NoSchedule" + # - key: "key2" + # operator: "Equal" + # value: "value2" + # effect: "NoSchedule" + readOnly: false + shm: + value: true + readOnly: false + configurations: + # List of labels to be selected, these are the labels from PodDefaults + # value: + # - add-gcp-secret + # - default-editor + value: [] + readOnly: false +kind: ConfigMap +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-config-92bgck72t2 + namespace: kubeflow +--- +apiVersion: v1 +data: + group-one-icon.svg: |- + + + + + + + + + group-one-logo.svg: |- + + + + + + + + + group-two-icon.svg: |- + + + + + + + + + group-two-logo.svg: |- + + + + + + + + + jupyter-icon.svg: | + + Created using Figma 0.90 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jupyterlab-logo.svg: | + + + + + +kind: ConfigMap +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-logos + namespace: kubeflow +--- +apiVersion: v1 +data: + JWA_APP_SECURE_COOKIES: "true" + JWA_CLUSTER_DOMAIN: cluster.local + JWA_PREFIX: /jupyter + JWA_UI: default + JWA_USERID_HEADER: kubeflow-userid + JWA_USERID_PREFIX: "" +kind: ConfigMap +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-parameters-42k97gcbmb + namespace: kubeflow +--- +apiVersion: v1 +data: + katib-config.yaml: | + --- + apiVersion: config.kubeflow.org/v1beta1 + kind: KatibConfig + init: + controller: + webhookPort: 8443 + trialResources: + - Job.v1.batch + - TFJob.v1.kubeflow.org + - PyTorchJob.v1.kubeflow.org + - MPIJob.v1.kubeflow.org + - XGBoostJob.v1.kubeflow.org + - MXJob.v1.kubeflow.org + runtime: + metricsCollectors: + - kind: StdOut + image: docker.io/kubeflowkatib/file-metrics-collector:v0.16.0-rc.1 + - kind: File + image: docker.io/kubeflowkatib/file-metrics-collector:v0.16.0-rc.1 + - kind: TensorFlowEvent + image: docker.io/kubeflowkatib/tfevent-metrics-collector:v0.16.0-rc.1 + resources: + limits: + memory: 1Gi + suggestions: + - algorithmName: random + image: docker.io/kubeflowkatib/suggestion-hyperopt:v0.16.0-rc.1 + - algorithmName: tpe + image: docker.io/kubeflowkatib/suggestion-hyperopt:v0.16.0-rc.1 + - algorithmName: grid + image: docker.io/kubeflowkatib/suggestion-optuna:v0.16.0-rc.1 + - algorithmName: hyperband + image: docker.io/kubeflowkatib/suggestion-hyperband:v0.16.0-rc.1 + - algorithmName: bayesianoptimization + image: docker.io/kubeflowkatib/suggestion-skopt:v0.16.0-rc.1 + - algorithmName: cmaes + image: docker.io/kubeflowkatib/suggestion-goptuna:v0.16.0-rc.1 + - algorithmName: sobol + image: docker.io/kubeflowkatib/suggestion-goptuna:v0.16.0-rc.1 + - algorithmName: multivariate-tpe + image: docker.io/kubeflowkatib/suggestion-optuna:v0.16.0-rc.1 + - algorithmName: enas + image: docker.io/kubeflowkatib/suggestion-enas:v0.16.0-rc.1 + resources: + limits: + memory: 200Mi + - algorithmName: darts + image: docker.io/kubeflowkatib/suggestion-darts:v0.16.0-rc.1 + - algorithmName: pbt + image: docker.io/kubeflowkatib/suggestion-pbt:v0.16.0-rc.1 + persistentVolumeClaimSpec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 5Gi + earlyStoppings: + - algorithmName: medianstop + image: docker.io/kubeflowkatib/earlystopping-medianstop:v0.16.0-rc.1 +kind: ConfigMap +metadata: + name: katib-config + namespace: kubeflow +--- +apiVersion: v1 +data: + defaultPipelineRoot: "" +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kfp-launcher + namespace: kubeflow +--- +apiVersion: v1 +data: + APP_PREFIX: /kserve-endpoints + USERID_HEADER: kubeflow-userid +kind: ConfigMap +metadata: + labels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + name: kserve-models-web-app-config + namespace: kubeflow +--- +apiVersion: v1 +data: + sync.py: | + # Copyright 2020-2021 The Kubeflow Authors + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + + from http.server import BaseHTTPRequestHandler, HTTPServer + import json + import os + import base64 + + + def main(): + settings = get_settings_from_env() + server = server_factory(**settings) + server.serve_forever() + + + def get_settings_from_env(controller_port=None, + visualization_server_image=None, frontend_image=None, + visualization_server_tag=None, frontend_tag=None, disable_istio_sidecar=None, + minio_access_key=None, minio_secret_key=None, kfp_default_pipeline_root=None): + """ + Returns a dict of settings from environment variables relevant to the controller + + Environment settings can be overridden by passing them here as arguments. + + Settings are pulled from the all-caps version of the setting name. The + following defaults are used if those environment variables are not set + to enable backwards compatibility with previous versions of this script: + visualization_server_image: gcr.io/ml-pipeline/visualization-server + visualization_server_tag: value of KFP_VERSION environment variable + frontend_image: gcr.io/ml-pipeline/frontend + frontend_tag: value of KFP_VERSION environment variable + disable_istio_sidecar: Required (no default) + minio_access_key: Required (no default) + minio_secret_key: Required (no default) + """ + settings = dict() + settings["controller_port"] = \ + controller_port or \ + os.environ.get("CONTROLLER_PORT", "8080") + + settings["visualization_server_image"] = \ + visualization_server_image or \ + os.environ.get("VISUALIZATION_SERVER_IMAGE", "gcr.io/ml-pipeline/visualization-server") + + settings["frontend_image"] = \ + frontend_image or \ + os.environ.get("FRONTEND_IMAGE", "gcr.io/ml-pipeline/frontend") + + # Look for specific tags for each image first, falling back to + # previously used KFP_VERSION environment variable for backwards + # compatibility + settings["visualization_server_tag"] = \ + visualization_server_tag or \ + os.environ.get("VISUALIZATION_SERVER_TAG") or \ + os.environ["KFP_VERSION"] + + settings["frontend_tag"] = \ + frontend_tag or \ + os.environ.get("FRONTEND_TAG") or \ + os.environ["KFP_VERSION"] + + settings["disable_istio_sidecar"] = \ + disable_istio_sidecar if disable_istio_sidecar is not None \ + else os.environ.get("DISABLE_ISTIO_SIDECAR") == "true" + + settings["minio_access_key"] = \ + minio_access_key or \ + base64.b64encode(bytes(os.environ.get("MINIO_ACCESS_KEY"), 'utf-8')).decode('utf-8') + + settings["minio_secret_key"] = \ + minio_secret_key or \ + base64.b64encode(bytes(os.environ.get("MINIO_SECRET_KEY"), 'utf-8')).decode('utf-8') + + # KFP_DEFAULT_PIPELINE_ROOT is optional + settings["kfp_default_pipeline_root"] = \ + kfp_default_pipeline_root or \ + os.environ.get("KFP_DEFAULT_PIPELINE_ROOT") + + return settings + + + def server_factory(visualization_server_image, + visualization_server_tag, frontend_image, frontend_tag, + disable_istio_sidecar, minio_access_key, + minio_secret_key, kfp_default_pipeline_root=None, + url="", controller_port=8080): + """ + Returns an HTTPServer populated with Handler with customized settings + """ + class Controller(BaseHTTPRequestHandler): + def sync(self, parent, children): + # parent is a namespace + namespace = parent.get("metadata", {}).get("name") + + pipeline_enabled = parent.get("metadata", {}).get( + "labels", {}).get("pipelines.kubeflow.org/enabled") + + if pipeline_enabled != "true": + return {"status": {}, "children": []} + + desired_configmap_count = 1 + desired_resources = [] + if kfp_default_pipeline_root: + desired_configmap_count = 2 + desired_resources += [{ + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "kfp-launcher", + "namespace": namespace, + }, + "data": { + "defaultPipelineRoot": kfp_default_pipeline_root, + }, + }] + + + # Compute status based on observed state. + desired_status = { + "kubeflow-pipelines-ready": + len(children["Secret.v1"]) == 1 and + len(children["ConfigMap.v1"]) == desired_configmap_count and + len(children["Deployment.apps/v1"]) == 2 and + len(children["Service.v1"]) == 2 and + len(children["DestinationRule.networking.istio.io/v1alpha3"]) == 1 and + len(children["AuthorizationPolicy.security.istio.io/v1beta1"]) == 1 and + "True" or "False" + } + + # Generate the desired child object(s). + desired_resources += [ + { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "metadata-grpc-configmap", + "namespace": namespace, + }, + "data": { + "METADATA_GRPC_SERVICE_HOST": + "metadata-grpc-service.kubeflow", + "METADATA_GRPC_SERVICE_PORT": "8080", + }, + }, + # Visualization server related manifests below + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "labels": { + "app": "ml-pipeline-visualizationserver" + }, + "name": "ml-pipeline-visualizationserver", + "namespace": namespace, + }, + "spec": { + "selector": { + "matchLabels": { + "app": "ml-pipeline-visualizationserver" + }, + }, + "template": { + "metadata": { + "labels": { + "app": "ml-pipeline-visualizationserver" + }, + "annotations": disable_istio_sidecar and { + "sidecar.istio.io/inject": "false" + } or {}, + }, + "spec": { + "containers": [{ + "image": f"{visualization_server_image}:{visualization_server_tag}", + "imagePullPolicy": + "IfNotPresent", + "name": + "ml-pipeline-visualizationserver", + "ports": [{ + "containerPort": 8888 + }], + "resources": { + "requests": { + "cpu": "50m", + "memory": "200Mi" + }, + "limits": { + "cpu": "500m", + "memory": "1Gi" + }, + } + }], + "serviceAccountName": + "default-editor", + }, + }, + }, + }, + { + "apiVersion": "networking.istio.io/v1alpha3", + "kind": "DestinationRule", + "metadata": { + "name": "ml-pipeline-visualizationserver", + "namespace": namespace, + }, + "spec": { + "host": "ml-pipeline-visualizationserver", + "trafficPolicy": { + "tls": { + "mode": "ISTIO_MUTUAL" + } + } + } + }, + { + "apiVersion": "security.istio.io/v1beta1", + "kind": "AuthorizationPolicy", + "metadata": { + "name": "ml-pipeline-visualizationserver", + "namespace": namespace, + }, + "spec": { + "selector": { + "matchLabels": { + "app": "ml-pipeline-visualizationserver" + } + }, + "rules": [{ + "from": [{ + "source": { + "principals": ["cluster.local/ns/kubeflow/sa/ml-pipeline"] + } + }] + }] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "ml-pipeline-visualizationserver", + "namespace": namespace, + }, + "spec": { + "ports": [{ + "name": "http", + "port": 8888, + "protocol": "TCP", + "targetPort": 8888, + }], + "selector": { + "app": "ml-pipeline-visualizationserver", + }, + }, + }, + # Artifact fetcher related resources below. + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "labels": { + "app": "ml-pipeline-ui-artifact" + }, + "name": "ml-pipeline-ui-artifact", + "namespace": namespace, + }, + "spec": { + "selector": { + "matchLabels": { + "app": "ml-pipeline-ui-artifact" + } + }, + "template": { + "metadata": { + "labels": { + "app": "ml-pipeline-ui-artifact" + }, + "annotations": disable_istio_sidecar and { + "sidecar.istio.io/inject": "false" + } or {}, + }, + "spec": { + "containers": [{ + "name": + "ml-pipeline-ui-artifact", + "image": f"{frontend_image}:{frontend_tag}", + "imagePullPolicy": + "IfNotPresent", + "ports": [{ + "containerPort": 3000 + }], + "env": [ + { + "name": "MINIO_ACCESS_KEY", + "valueFrom": { + "secretKeyRef": { + "key": "accesskey", + "name": "mlpipeline-minio-artifact" + } + } + }, + { + "name": "MINIO_SECRET_KEY", + "valueFrom": { + "secretKeyRef": { + "key": "secretkey", + "name": "mlpipeline-minio-artifact" + } + } + } + ], + "resources": { + "requests": { + "cpu": "10m", + "memory": "70Mi" + }, + "limits": { + "cpu": "100m", + "memory": "500Mi" + }, + } + }], + "serviceAccountName": + "default-editor" + } + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "ml-pipeline-ui-artifact", + "namespace": namespace, + "labels": { + "app": "ml-pipeline-ui-artifact" + } + }, + "spec": { + "ports": [{ + "name": + "http", # name is required to let istio understand request protocol + "port": 80, + "protocol": "TCP", + "targetPort": 3000 + }], + "selector": { + "app": "ml-pipeline-ui-artifact" + } + } + }, + ] + print('Received request:\n', json.dumps(parent, sort_keys=True)) + print('Desired resources except secrets:\n', json.dumps(desired_resources, sort_keys=True)) + # Moved after the print argument because this is sensitive data. + desired_resources.append({ + "apiVersion": "v1", + "kind": "Secret", + "metadata": { + "name": "mlpipeline-minio-artifact", + "namespace": namespace, + }, + "data": { + "accesskey": minio_access_key, + "secretkey": minio_secret_key, + }, + }) + + return {"status": desired_status, "children": desired_resources} + + def do_POST(self): + # Serve the sync() function as a JSON webhook. + observed = json.loads( + self.rfile.read(int(self.headers.get("content-length")))) + desired = self.sync(observed["parent"], observed["children"]) + + self.send_response(200) + self.send_header("Content-type", "application/json") + self.end_headers() + self.wfile.write(bytes(json.dumps(desired), 'utf-8')) + + return HTTPServer((url, int(controller_port)), Controller) + + + if __name__ == "__main__": + main() +kind: ConfigMap +metadata: + labels: + app: kubeflow-pipelines-profile-controller + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-profile-controller-code-hdk828hd6c + namespace: kubeflow +--- +apiVersion: v1 +data: + DISABLE_ISTIO_SIDECAR: "false" +kind: ConfigMap +metadata: + labels: + app: kubeflow-pipelines-profile-controller + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-profile-controller-env-5252m69c4c + namespace: kubeflow +--- +apiVersion: v1 +data: + METADATA_GRPC_SERVICE_HOST: metadata-grpc-service + METADATA_GRPC_SERVICE_PORT: "8080" +kind: ConfigMap +metadata: + labels: + application-crd-id: kubeflow-pipelines + component: metadata-grpc-server + name: metadata-grpc-configmap + namespace: kubeflow +--- +apiVersion: v1 +data: + viewer-pod-template.json: |- + { + "spec": { + "serviceAccountName": "default-editor" + } + } +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui-configmap + namespace: kubeflow +--- +apiVersion: v1 +data: + namespace-labels.yaml: | + # Below is a list of labels to be set by default. + # + # To add a namespace label, use `key: 'value'`, for example: + # istio.io/rev: 'asm-191-1' + # + # To remove a namespace label, use `key: ''`. For example: + # istio-injection: '' + # + # Profile controller will not replace a namespace label if its key already + # exists. If you want to override the value of a previously applied label, you + # need to: + # 1. Remove the label by using `key: ''` and deploy. + # 2. Add the label by using `key: 'value'` and deploy. + # + katib.kubeflow.org/metrics-collector-injection: "enabled" + serving.kubeflow.org/inferenceservice: "enabled" + pipelines.kubeflow.org/enabled: "true" + app.kubernetes.io/part-of: "kubeflow-profile" +kind: ConfigMap +metadata: + labels: + kustomize.component: profiles + name: namespace-labels-data-4df5t8mdgf + namespace: kubeflow +--- +apiVersion: v1 +data: + CLUSTER_DOMAIN: cluster.local + CULL_IDLE_TIME: "1440" + ENABLE_CULLING: "false" + IDLENESS_CHECK_PERIOD: "1" + ISTIO_GATEWAY: kubeflow/kubeflow-gateway + USE_ISTIO: "true" +kind: ConfigMap +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + name: notebook-controller-config-dm5b6dd458 + namespace: kubeflow +--- +apiVersion: v1 +data: + MULTIUSER: "true" +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: persistenceagent-config-hkgkmd64bh + namespace: kubeflow +--- +apiVersion: v1 +data: + DEFAULTPIPELINERUNNERSERVICEACCOUNT: default-editor + MULTIUSER: "true" + VISUALIZATIONSERVICE_NAME: ml-pipeline-visualizationserver + VISUALIZATIONSERVICE_PORT: "8888" +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: pipeline-api-server-config-dc9hkg52h6 + namespace: kubeflow +--- +apiVersion: v1 +data: + ConMaxLifeTime: 120s + DEFAULT_CACHE_STALENESS: "" + MAXIMUM_CACHE_STALENESS: "" + appName: pipeline + appVersion: 2.0.0-alpha.7 + autoUpdatePipelineDefaultVersion: "true" + bucketName: mlpipeline + cacheDb: cachedb + cacheImage: registry.k8s.io/busybox + cacheNodeRestrictions: "false" + cronScheduleTimezone: UTC + dbHost: mysql + dbPort: "3306" + defaultPipelineRoot: "" + mlmdDb: metadb + pipelineDb: mlpipeline + warning: | + 1. Do not use kubectl to edit this configmap, because some values are used + during kustomize build. Instead, change the configmap and apply the entire + kustomize manifests again. + 2. After updating the configmap, some deployments may need to be restarted + until the changes take effect. A quick way to restart all deployments in a + namespace: `kubectl rollout restart deployment -n `. +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: pipeline-install-config + namespace: kubeflow +--- +apiVersion: v1 +data: + ADMIN: "" + USERID_HEADER: kubeflow-userid + USERID_PREFIX: "" + WORKLOAD_IDENTITY: "" +kind: ConfigMap +metadata: + labels: + kustomize.component: profiles + name: profiles-config-46c7tgh6fd + namespace: kubeflow +--- +apiVersion: v1 +data: + ISTIO_GATEWAY: kubeflow/kubeflow-gateway + RWO_PVC_SCHEDULING: "True" + TENSORBOARD_IMAGE: tensorflow/tensorflow:2.5.1 +kind: ConfigMap +metadata: + name: tensorboard-controller-config-b98cb9gk9k + namespace: kubeflow +--- +apiVersion: v1 +data: + TWA_APP_SECURE_COOKIES: 'true ' + TWA_CLUSTER_DOMAIN: cluster.local + TWA_PREFIX: /tensorboards + TWA_USERID_HEADER: kubeflow-userid + TWA_USERID_PREFIX: "" +kind: ConfigMap +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + name: tensorboards-web-app-parameters-642bbg7t66 + namespace: kubeflow +--- +apiVersion: v1 +data: + defaultTrialTemplate.yaml: |- + apiVersion: batch/v1 + kind: Job + spec: + template: + spec: + containers: + - name: training-container + image: docker.io/kubeflowkatib/mxnet-mnist:v0.16.0-rc.1 + command: + - "python3" + - "/opt/mxnet-mnist/mnist.py" + - "--batch-size=64" + - "--lr=${trialParameters.learningRate}" + - "--num-layers=${trialParameters.numberLayers}" + - "--optimizer=${trialParameters.optimizer}" + restartPolicy: Never + enasCPUTemplate: |- + apiVersion: batch/v1 + kind: Job + spec: + template: + spec: + containers: + - name: training-container + image: docker.io/kubeflowkatib/enas-cnn-cifar10-cpu:v0.16.0-rc.1 + command: + - python3 + - -u + - RunTrial.py + - --num_epochs=1 + - "--architecture=\"${trialParameters.neuralNetworkArchitecture}\"" + - "--nn_config=\"${trialParameters.neuralNetworkConfig}\"" + restartPolicy: Never + pytorchJobTemplate: |- + apiVersion: kubeflow.org/v1 + kind: PyTorchJob + spec: + pytorchReplicaSpecs: + Master: + replicas: 1 + restartPolicy: OnFailure + template: + spec: + containers: + - name: pytorch + image: docker.io/kubeflowkatib/pytorch-mnist-cpu:v0.16.0-rc.1 + command: + - "python3" + - "/opt/pytorch-mnist/mnist.py" + - "--epochs=1" + - "--lr=${trialParameters.learningRate}" + - "--momentum=${trialParameters.momentum}" + Worker: + replicas: 2 + restartPolicy: OnFailure + template: + spec: + containers: + - name: pytorch + image: docker.io/kubeflowkatib/pytorch-mnist-cpu:v0.16.0-rc.1 + command: + - "python3" + - "/opt/pytorch-mnist/mnist.py" + - "--epochs=1" + - "--lr=${trialParameters.learningRate}" + - "--momentum=${trialParameters.momentum}" +kind: ConfigMap +metadata: + labels: + katib.kubeflow.org/component: trial-templates + name: trial-templates + namespace: kubeflow +--- +apiVersion: v1 +data: + VWA_APP_SECURE_COOKIES: "true" + VWA_CLUSTER_DOMAIN: cluster.local + VWA_PREFIX: /volumes + VWA_USERID_HEADER: kubeflow-userid + VWA_USERID_PREFIX: "" +kind: ConfigMap +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + name: volumes-web-app-parameters-57h65c44mg + namespace: kubeflow +--- +apiVersion: v1 +data: + artifactRepository: | + archiveLogs: true + s3: + endpoint: "minio-service.kubeflow:9000" + bucket: "mlpipeline" + # keyFormat is a format pattern to define how artifacts will be organized in a bucket. + # It can reference workflow metadata variables such as workflow.namespace, workflow.name, + # pod.name. Can also use strftime formating of workflow.creationTimestamp so that workflow + # artifacts can be organized by date. If omitted, will use `{{ "{{" }}workflow.name}}/{{ "{{" }}pod.name}}`, + # which has potential for have collisions, because names do not guarantee they are unique + # over the lifetime of the cluster. + # Refer to https://kubernetes.io/docs/concepts/overview/working-with-objects/names/. + # + # The following format looks like: + # artifacts/my-workflow-abc123/2018/08/23/my-workflow-abc123-1234567890 + # Adding date into the path greatly reduces the chance of {{ "{{" }}pod.name}} collision. + keyFormat: "artifacts/{{ "{{" }}workflow.name}}/{{ "{{" }}workflow.creationTimestamp.Y}}/{{ "{{" }}workflow.creationTimestamp.m}}/{{ "{{" }}workflow.creationTimestamp.d}}/{{ "{{" }}pod.name}}" + # insecure will disable TLS. Primarily used for minio installs not configured with TLS + insecure: true + accessKeySecret: + name: mlpipeline-minio-artifact + key: accesskey + secretKeySecret: + name: mlpipeline-minio-artifact + key: secretkey + containerRuntimeExecutor: emissary + executor: | + imagePullPolicy: IfNotPresent + resources: + requests: + cpu: 0.01 + memory: 32Mi + limits: + cpu: 0.5 + memory: 512Mi +kind: ConfigMap +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: workflow-controller-configmap + namespace: kubeflow +--- +apiVersion: v1 +data: + profile-name: kubeflow-user-example-com + user: user@example.com +kind: ConfigMap +metadata: + name: default-install-config-9h2h2b6hbk +--- +apiVersion: v1 +data: + OIDC_CLIENT_ID: a3ViZWZsb3ctb2lkYy1hdXRoc2VydmljZQ== + OIDC_CLIENT_SECRET: cFVCbkJPWTgwU25YZ2ppYlRZTTlaV056WTJ4cmVOR1Fvaw== +kind: Secret +metadata: + name: dex-oidc-client + namespace: auth +type: Opaque +--- +apiVersion: v1 +data: + CLIENT_ID: a3ViZWZsb3ctb2lkYy1hdXRoc2VydmljZQ== + CLIENT_SECRET: cFVCbkJPWTgwU25YZ2ppYlRZTTlaV056WTJ4cmVOR1Fvaw== +kind: Secret +metadata: + name: oidc-authservice-client + namespace: istio-system +type: Opaque +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-webhook-certs + namespace: knative-eventing +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + networking.internal.knative.dev/certificate-uid: serving-certs + serving-certs-ctrl: control-plane + name: control-serving-certs + namespace: knative-serving +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/component: domain-mapping + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: domainmapping-webhook-certs + namespace: knative-serving +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + networking.internal.knative.dev/certificate-uid: serving-certs + serving-certs-ctrl: data-plane + name: knative-serving-certs + namespace: knative-serving +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: net-istio-webhook-certs + namespace: knative-serving +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + networking.internal.knative.dev/certificate-uid: serving-certs + routing-id: "0" + serving-certs-ctrl: data-plane-routing + name: routing-serving-certs + namespace: knative-serving +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + networking.internal.knative.dev/certificate-uid: serving-certs + serving-certs-ctrl: data-plane + name: serving-certs-ctrl-ca + namespace: knative-serving +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/component: webhook + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: webhook-certs + namespace: knative-serving +--- +apiVersion: v1 +data: + MYSQL_ROOT_PASSWORD: dGVzdA== +kind: Secret +metadata: + name: katib-mysql-secrets + namespace: kubeflow +type: Opaque +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: kserve-webhook-server-secret + namespace: kubeflow +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: mlpipeline-minio-artifact + namespace: kubeflow +stringData: + accesskey: minio + secretkey: minio123 +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: mysql-secret + namespace: kubeflow +stringData: + password: "" + username: root +--- +apiVersion: v1 +kind: Service +metadata: + name: dex + namespace: auth +spec: + ports: + - name: dex + port: 5556 + protocol: TCP + targetPort: 5556 + selector: + app: dex + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager + namespace: cert-manager +spec: + ports: + - name: tcp-prometheus-servicemonitor + port: 9402 + protocol: TCP + targetPort: 9402 + selector: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook + namespace: cert-manager +spec: + ports: + - name: https + port: 443 + protocol: TCP + targetPort: https + selector: + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + name: authservice + namespace: istio-system +spec: + ports: + - name: http-authservice + port: 8080 + targetPort: http-api + publishNotReadyAddresses: true + selector: + app: authservice + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: cluster-local-gateway + install.operator.istio.io/owning-resource: unknown + istio: cluster-local-gateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: cluster-local-gateway + namespace: istio-system +spec: + ports: + - name: status-port + port: 15020 + protocol: TCP + targetPort: 15020 + - name: http2 + port: 80 + protocol: TCP + targetPort: 8080 + selector: + app: cluster-local-gateway + istio: cluster-local-gateway + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: istio-ingressgateway + install.operator.istio.io/owning-resource: unknown + istio: ingressgateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: istio-ingressgateway + namespace: istio-system +spec: + ports: + - name: status-port + port: 15021 + protocol: TCP + targetPort: 15021 + - name: http2 + port: 80 + protocol: TCP + targetPort: 8080 + - name: https + port: 443 + protocol: TCP + targetPort: 8443 + selector: + app: istio-ingressgateway + istio: ingressgateway + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: istiod + install.operator.istio.io/owning-resource: unknown + istio: pilot + istio.io/rev: default + operator.istio.io/component: Pilot + release: istio + name: istiod + namespace: istio-system +spec: + ports: + - name: grpc-xds + port: 15010 + protocol: TCP + - name: https-dns + port: 15012 + protocol: TCP + - name: https-webhook + port: 443 + protocol: TCP + targetPort: 15017 + - name: http-monitoring + port: 15014 + protocol: TCP + selector: + app: istiod + istio: pilot +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + experimental.istio.io/disable-gateway-port-translation: "true" + networking.knative.dev/ingress-provider: istio + name: knative-local-gateway + namespace: istio-system +spec: + ports: + - name: http2 + port: 80 + targetPort: 8081 + selector: + app: cluster-local-gateway + istio: cluster-local-gateway + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + role: eventing-webhook + name: eventing-webhook + namespace: knative-eventing +spec: + ports: + - name: https-webhook + port: 443 + targetPort: 8443 + selector: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + kustomize.component: knative + role: eventing-webhook +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: activator + app.kubernetes.io/component: activator + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: activator-service + namespace: knative-serving +spec: + ports: + - name: http-metrics + port: 9090 + targetPort: 9090 + - name: http-profiling + port: 8008 + targetPort: 8008 + - name: http + port: 80 + targetPort: 8012 + - name: http2 + port: 81 + targetPort: 8013 + - name: https + port: 443 + targetPort: 8112 + selector: + app: activator + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: autoscaler + app.kubernetes.io/component: autoscaler + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: autoscaler + namespace: knative-serving +spec: + ports: + - name: http-metrics + port: 9090 + targetPort: 9090 + - name: http-profiling + port: 8008 + targetPort: 8008 + - name: http + port: 8080 + targetPort: 8080 + selector: + app: autoscaler +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: controller + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: controller + namespace: knative-serving +spec: + ports: + - name: http-metrics + port: 9090 + targetPort: 9090 + - name: http-profiling + port: 8008 + targetPort: 8008 + selector: + app: controller +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: domain-mapping + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + role: domainmapping-webhook + name: domainmapping-webhook + namespace: knative-serving +spec: + ports: + - name: http-metrics + port: 9090 + targetPort: 9090 + - name: http-profiling + port: 8008 + targetPort: 8008 + - name: https-webhook + port: 443 + targetPort: 8443 + selector: + app: domainmapping-webhook + role: domainmapping-webhook +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + role: net-istio-webhook + name: net-istio-webhook + namespace: knative-serving +spec: + ports: + - name: http-metrics + port: 9090 + targetPort: metrics + - name: http-profiling + port: 8008 + targetPort: profiling + - name: https-webhook + port: 443 + targetPort: https-webhook + selector: + app: net-istio-webhook +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: webhook + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + role: webhook + name: webhook + namespace: knative-serving +spec: + ports: + - name: http-metrics + port: 9090 + targetPort: 9090 + - name: http-profiling + port: 8008 + targetPort: 8008 + - name: https-webhook + port: 443 + targetPort: 8443 + selector: + app: webhook + role: webhook +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + name: admission-webhook-service + namespace: kubeflow +spec: + ports: + - name: https-webhook + port: 443 + targetPort: https-webhook + selector: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: cache-server + namespace: kubeflow +spec: + ports: + - port: 443 + targetPort: webhook-api + selector: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard + namespace: kubeflow +spec: + ports: + - port: 80 + protocol: TCP + targetPort: 8082 + selector: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + sessionAffinity: None + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + run: jupyter-web-app + name: jupyter-web-app-service + namespace: kubeflow +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: 5000 + selector: + app: jupyter-web-app + kustomize.component: jupyter-web-app + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + prometheus.io/port: "8080" + prometheus.io/scheme: http + prometheus.io/scrape: "true" + labels: + katib.kubeflow.org/component: controller + name: katib-controller + namespace: kubeflow +spec: + ports: + - name: webhook + port: 443 + protocol: TCP + targetPort: 8443 + - name: metrics + port: 8080 + targetPort: 8080 + - name: healthz + port: 18080 + targetPort: 18080 + selector: + katib.kubeflow.org/component: controller +--- +apiVersion: v1 +kind: Service +metadata: + labels: + katib.kubeflow.org/component: db-manager + name: katib-db-manager + namespace: kubeflow +spec: + ports: + - name: api + port: 6789 + protocol: TCP + selector: + katib.kubeflow.org/component: db-manager + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + katib.kubeflow.org/component: mysql + name: katib-mysql + namespace: kubeflow +spec: + ports: + - name: dbapi + port: 3306 + protocol: TCP + selector: + katib.kubeflow.org/component: mysql + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + katib.kubeflow.org/component: ui + name: katib-ui + namespace: kubeflow +spec: + ports: + - name: ui + port: 80 + protocol: TCP + targetPort: 8080 + selector: + katib.kubeflow.org/component: ui + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + prometheus.io/port: "8443" + prometheus.io/scheme: https + prometheus.io/scrape: "true" + labels: + app: kserve + app.kubernetes.io/name: kserve + control-plane: kserve-controller-manager + controller-tools.k8s.io: "1.0" + name: kserve-controller-manager-metrics-service + namespace: kubeflow +spec: + ports: + - name: https + port: 8443 + targetPort: https + selector: + app: kserve + app.kubernetes.io/name: kserve + control-plane: kserve-controller-manager + controller-tools.k8s.io: "1.0" +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + control-plane: kserve-controller-manager + controller-tools.k8s.io: "1.0" + name: kserve-controller-manager-service + namespace: kubeflow +spec: + ports: + - port: 8443 + protocol: TCP + targetPort: https + selector: + app: kserve + app.kubernetes.io/name: kserve + control-plane: kserve-controller-manager + controller-tools.k8s.io: "1.0" +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + name: kserve-models-web-app + namespace: kubeflow +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: 5000 + selector: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: kserve-webhook-server-service + namespace: kubeflow +spec: + ports: + - port: 443 + targetPort: webhook-server + selector: + app: kserve + app.kubernetes.io/name: kserve + control-plane: kserve-controller-manager +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: kubeflow-pipelines-profile-controller + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-profile-controller + namespace: kubeflow +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: 8080 + selector: + app: kubeflow-pipelines-profile-controller + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: metadata-envoy + application-crd-id: kubeflow-pipelines + name: metadata-envoy-service + namespace: kubeflow +spec: + ports: + - name: md-envoy + port: 9090 + protocol: TCP + selector: + application-crd-id: kubeflow-pipelines + component: metadata-envoy + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: metadata + application-crd-id: kubeflow-pipelines + name: metadata-grpc-service + namespace: kubeflow +spec: + ports: + - name: grpc-api + port: 8080 + protocol: TCP + selector: + application-crd-id: kubeflow-pipelines + component: metadata-grpc-server + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: minio-service + namespace: kubeflow +spec: + ports: + - name: http + port: 9000 + protocol: TCP + targetPort: 9000 + selector: + app: minio + application-crd-id: kubeflow-pipelines +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + prometheus.io/port: "8888" + prometheus.io/scheme: http + prometheus.io/scrape: "true" + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline + namespace: kubeflow +spec: + ports: + - name: http + port: 8888 + protocol: TCP + targetPort: 8888 + - name: grpc + port: 8887 + protocol: TCP + targetPort: 8887 + selector: + app: ml-pipeline + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: ml-pipeline-ui + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui + namespace: kubeflow +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: 3000 + selector: + app: ml-pipeline-ui + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-visualizationserver + namespace: kubeflow +spec: + ports: + - name: http + port: 8888 + protocol: TCP + targetPort: 8888 + selector: + app: ml-pipeline-visualizationserver + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines +--- +apiVersion: v1 +kind: Service +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: mysql + namespace: kubeflow +spec: + ports: + - port: 3306 + protocol: TCP + targetPort: 3306 + selector: + app: mysql + application-crd-id: kubeflow-pipelines +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + name: notebook-controller-service + namespace: kubeflow +spec: + ports: + - port: 443 + selector: + app: notebook-controller + kustomize.component: notebook-controller +--- +apiVersion: v1 +kind: Service +metadata: + labels: + kustomize.component: profiles + name: profiles-kfam + namespace: kubeflow +spec: + ports: + - port: 8081 + selector: + kustomize.component: profiles +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: tensorboard-controller + control-plane: controller-manager + kustomize.component: tensorboard-controller + name: tensorboard-controller-controller-manager-metrics-service + namespace: kubeflow +spec: + ports: + - name: https + port: 8443 + protocol: TCP + targetPort: https + selector: + app: tensorboard-controller + control-plane: controller-manager + kustomize.component: tensorboard-controller +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + run: tensorboards-web-app + name: tensorboards-web-app-service + namespace: kubeflow +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: 5000 + selector: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + prometheus.io/path: /metrics + prometheus.io/port: "8080" + prometheus.io/scrape: "true" + labels: + app: training-operator + name: training-operator + namespace: kubeflow +spec: + ports: + - name: monitoring-port + port: 8080 + targetPort: 8080 + selector: + control-plane: kubeflow-training-operator + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + run: volumes-web-app + name: volumes-web-app-service + namespace: kubeflow +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: 5000 + selector: + app: volumes-web-app + kustomize.component: volumes-web-app + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + workflows.argoproj.io/description: | + This service is deprecated. It will be removed in v3.4. + + https://github.com/argoproj/argo-workflows/issues/8441 + labels: + app: workflow-controller + application-crd-id: kubeflow-pipelines + name: workflow-controller-metrics + namespace: kubeflow +spec: + ports: + - name: metrics + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + app: workflow-controller + application-crd-id: kubeflow-pipelines +--- +apiVersion: scheduling.k8s.io/v1 +kind: PriorityClass +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: workflow-controller +value: 1000000 +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: authservice-pvc + namespace: istio-system +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: katib-mysql + namespace: kubeflow +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: minio-pvc + namespace: kubeflow +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: mysql-pv-claim + namespace: kubeflow +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: dex + name: dex + namespace: auth +spec: + replicas: 1 + selector: + matchLabels: + app: dex + template: + metadata: + labels: + app: dex + spec: + containers: + - command: + - dex + - serve + - /etc/dex/cfg/config.yaml + env: + - name: KUBERNETES_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + envFrom: + - secretRef: + name: dex-oidc-client + image: ghcr.io/dexidp/dex:v2.36.0 + name: dex + ports: + - containerPort: 5556 + name: http + volumeMounts: + - mountPath: /etc/dex/cfg + name: config + serviceAccountName: dex + volumes: + - configMap: + items: + - key: config.yaml + path: config.yaml + name: dex + name: config +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + name: cert-manager + namespace: cert-manager +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + template: + metadata: + annotations: + prometheus.io/path: /metrics + prometheus.io/port: "9402" + prometheus.io/scrape: "true" + labels: + app: cert-manager + app.kubernetes.io/component: controller + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cert-manager + app.kubernetes.io/version: v1.12.2 + spec: + containers: + - args: + - --v=2 + - --cluster-resource-namespace=$(POD_NAMESPACE) + - --leader-election-namespace=kube-system + - --acme-http01-solver-image=quay.io/jetstack/cert-manager-acmesolver:v1.12.2 + - --max-concurrent-challenges=60 + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: quay.io/jetstack/cert-manager-controller:v1.12.2 + imagePullPolicy: IfNotPresent + name: cert-manager-controller + ports: + - containerPort: 9402 + name: http-metrics + protocol: TCP + - containerPort: 9403 + name: http-healthz + protocol: TCP + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + nodeSelector: + kubernetes.io/os: linux + securityContext: + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: cert-manager +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: cainjector + app.kubernetes.io/component: cainjector + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cainjector + app.kubernetes.io/version: v1.12.2 + name: cert-manager-cainjector + namespace: cert-manager +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: cainjector + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cainjector + template: + metadata: + labels: + app: cainjector + app.kubernetes.io/component: cainjector + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: cainjector + app.kubernetes.io/version: v1.12.2 + spec: + containers: + - args: + - --v=2 + - --leader-election-namespace=kube-system + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: quay.io/jetstack/cert-manager-cainjector:v1.12.2 + imagePullPolicy: IfNotPresent + name: cert-manager-cainjector + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + nodeSelector: + kubernetes.io/os: linux + securityContext: + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: cert-manager-cainjector +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook + namespace: cert-manager +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + template: + metadata: + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + spec: + containers: + - args: + - --v=2 + - --secure-port=10250 + - --dynamic-serving-ca-secret-namespace=$(POD_NAMESPACE) + - --dynamic-serving-ca-secret-name=cert-manager-webhook-ca + - --dynamic-serving-dns-names=cert-manager-webhook + - --dynamic-serving-dns-names=cert-manager-webhook.$(POD_NAMESPACE) + - --dynamic-serving-dns-names=cert-manager-webhook.$(POD_NAMESPACE).svc + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: quay.io/jetstack/cert-manager-webhook:v1.12.2 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 3 + httpGet: + path: /livez + port: 6080 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: cert-manager-webhook + ports: + - containerPort: 10250 + name: https + protocol: TCP + - containerPort: 6080 + name: healthcheck + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: 6080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 5 + successThreshold: 1 + timeoutSeconds: 1 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + nodeSelector: + kubernetes.io/os: linux + securityContext: + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: cert-manager-webhook +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: cluster-local-gateway + install.operator.istio.io/owning-resource: unknown + istio: cluster-local-gateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: cluster-local-gateway + namespace: istio-system +spec: + selector: + matchLabels: + app: cluster-local-gateway + istio: cluster-local-gateway + strategy: + rollingUpdate: + maxSurge: 100% + maxUnavailable: 25% + template: + metadata: + annotations: + prometheus.io/path: /stats/prometheus + prometheus.io/port: "15020" + prometheus.io/scrape: "true" + sidecar.istio.io/inject: "false" + labels: + app: cluster-local-gateway + chart: gateways + heritage: Tiller + install.operator.istio.io/owning-resource: unknown + istio: cluster-local-gateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + service.istio.io/canonical-name: cluster-local-gateway + service.istio.io/canonical-revision: latest + sidecar.istio.io/inject: "false" + spec: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: null + requiredDuringSchedulingIgnoredDuringExecution: null + containers: + - args: + - proxy + - router + - --domain + - $(POD_NAMESPACE).svc.cluster.local + - --proxyLogLevel=warning + - --proxyComponentLogLevel=misc:error + - --log_output_level=default:info + env: + - name: ISTIO_META_ROUTER_MODE + value: sni-dnat + - name: JWT_POLICY + value: third-party-jwt + - name: PILOT_CERT_PROVIDER + value: istiod + - name: CA_ADDR + value: istiod.istio-system.svc:15012 + - name: NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: INSTANCE_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: HOST_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.hostIP + - name: SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + - name: ISTIO_META_WORKLOAD_NAME + value: cluster-local-gateway + - name: ISTIO_META_OWNER + value: kubernetes://apis/apps/v1/namespaces/istio-system/deployments/cluster-local-gateway + - name: ISTIO_META_MESH_ID + value: cluster.local + - name: TRUST_DOMAIN + value: cluster.local + - name: ISTIO_META_UNPRIVILEGED_POD + value: "true" + - name: ISTIO_META_CLUSTER_ID + value: Kubernetes + - name: ISTIO_META_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + image: docker.io/istio/proxyv2:1.17.3 + name: istio-proxy + ports: + - containerPort: 15020 + protocol: TCP + - containerPort: 8080 + protocol: TCP + - containerPort: 15090 + name: http-envoy-prom + protocol: TCP + readinessProbe: + failureThreshold: 30 + httpGet: + path: /healthz/ready + port: 15021 + scheme: HTTP + initialDelaySeconds: 1 + periodSeconds: 2 + successThreshold: 1 + timeoutSeconds: 1 + resources: + limits: + cpu: 2000m + memory: 1024Mi + requests: + cpu: 100m + memory: 128Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + privileged: false + readOnlyRootFilesystem: true + volumeMounts: + - mountPath: /var/run/secrets/workload-spiffe-uds + name: workload-socket + - mountPath: /var/run/secrets/credential-uds + name: credential-socket + - mountPath: /var/run/secrets/workload-spiffe-credentials + name: workload-certs + - mountPath: /etc/istio/proxy + name: istio-envoy + - mountPath: /etc/istio/config + name: config-volume + - mountPath: /var/run/secrets/istio + name: istiod-ca-cert + - mountPath: /var/run/secrets/tokens + name: istio-token + readOnly: true + - mountPath: /var/lib/istio/data + name: istio-data + - mountPath: /etc/istio/pod + name: podinfo + - mountPath: /etc/istio/ingressgateway-certs + name: ingressgateway-certs + readOnly: true + - mountPath: /etc/istio/ingressgateway-ca-certs + name: ingressgateway-ca-certs + readOnly: true + securityContext: + fsGroup: 1337 + runAsGroup: 1337 + runAsNonRoot: true + runAsUser: 1337 + serviceAccountName: cluster-local-gateway-service-account + volumes: + - emptyDir: {} + name: workload-socket + - emptyDir: {} + name: credential-socket + - emptyDir: {} + name: workload-certs + - configMap: + name: istio-ca-root-cert + name: istiod-ca-cert + - downwardAPI: + items: + - fieldRef: + fieldPath: metadata.labels + path: labels + - fieldRef: + fieldPath: metadata.annotations + path: annotations + name: podinfo + - emptyDir: {} + name: istio-envoy + - emptyDir: {} + name: istio-data + - name: istio-token + projected: + sources: + - serviceAccountToken: + audience: istio-ca + expirationSeconds: 43200 + path: istio-token + - configMap: + name: istio + optional: true + name: config-volume + - name: ingressgateway-certs + secret: + optional: true + secretName: istio-ingressgateway-certs + - name: ingressgateway-ca-certs + secret: + optional: true + secretName: istio-ingressgateway-ca-certs +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: istio-ingressgateway + install.operator.istio.io/owning-resource: unknown + istio: ingressgateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: istio-ingressgateway + namespace: istio-system +spec: + selector: + matchLabels: + app: istio-ingressgateway + istio: ingressgateway + strategy: + rollingUpdate: + maxSurge: 100% + maxUnavailable: 25% + template: + metadata: + annotations: + prometheus.io/path: /stats/prometheus + prometheus.io/port: "15020" + prometheus.io/scrape: "true" + sidecar.istio.io/inject: "false" + labels: + app: istio-ingressgateway + chart: gateways + heritage: Tiller + install.operator.istio.io/owning-resource: unknown + istio: ingressgateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + service.istio.io/canonical-name: istio-ingressgateway + service.istio.io/canonical-revision: latest + sidecar.istio.io/inject: "false" + spec: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: null + requiredDuringSchedulingIgnoredDuringExecution: null + containers: + - args: + - proxy + - router + - --domain + - $(POD_NAMESPACE).svc.cluster.local + - --proxyLogLevel=warning + - --proxyComponentLogLevel=misc:error + - --log_output_level=default:info + env: + - name: JWT_POLICY + value: third-party-jwt + - name: PILOT_CERT_PROVIDER + value: istiod + - name: CA_ADDR + value: istiod.istio-system.svc:15012 + - name: NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: INSTANCE_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: HOST_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.hostIP + - name: SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + - name: ISTIO_META_WORKLOAD_NAME + value: istio-ingressgateway + - name: ISTIO_META_OWNER + value: kubernetes://apis/apps/v1/namespaces/istio-system/deployments/istio-ingressgateway + - name: ISTIO_META_MESH_ID + value: cluster.local + - name: TRUST_DOMAIN + value: cluster.local + - name: ISTIO_META_UNPRIVILEGED_POD + value: "true" + - name: ISTIO_META_CLUSTER_ID + value: Kubernetes + - name: ISTIO_META_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + image: docker.io/istio/proxyv2:1.17.3 + name: istio-proxy + ports: + - containerPort: 15021 + protocol: TCP + - containerPort: 8080 + protocol: TCP + - containerPort: 8443 + protocol: TCP + - containerPort: 15090 + name: http-envoy-prom + protocol: TCP + readinessProbe: + failureThreshold: 30 + httpGet: + path: /healthz/ready + port: 15021 + scheme: HTTP + initialDelaySeconds: 1 + periodSeconds: 2 + successThreshold: 1 + timeoutSeconds: 1 + resources: + limits: + cpu: 2000m + memory: 1024Mi + requests: + cpu: 100m + memory: 128Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + privileged: false + readOnlyRootFilesystem: true + volumeMounts: + - mountPath: /var/run/secrets/workload-spiffe-uds + name: workload-socket + - mountPath: /var/run/secrets/credential-uds + name: credential-socket + - mountPath: /var/run/secrets/workload-spiffe-credentials + name: workload-certs + - mountPath: /etc/istio/proxy + name: istio-envoy + - mountPath: /etc/istio/config + name: config-volume + - mountPath: /var/run/secrets/istio + name: istiod-ca-cert + - mountPath: /var/run/secrets/tokens + name: istio-token + readOnly: true + - mountPath: /var/lib/istio/data + name: istio-data + - mountPath: /etc/istio/pod + name: podinfo + - mountPath: /etc/istio/ingressgateway-certs + name: ingressgateway-certs + readOnly: true + - mountPath: /etc/istio/ingressgateway-ca-certs + name: ingressgateway-ca-certs + readOnly: true + securityContext: + fsGroup: 1337 + runAsGroup: 1337 + runAsNonRoot: true + runAsUser: 1337 + serviceAccountName: istio-ingressgateway-service-account + volumes: + - emptyDir: {} + name: workload-socket + - emptyDir: {} + name: credential-socket + - emptyDir: {} + name: workload-certs + - configMap: + name: istio-ca-root-cert + name: istiod-ca-cert + - downwardAPI: + items: + - fieldRef: + fieldPath: metadata.labels + path: labels + - fieldRef: + fieldPath: metadata.annotations + path: annotations + name: podinfo + - emptyDir: {} + name: istio-envoy + - emptyDir: {} + name: istio-data + - name: istio-token + projected: + sources: + - serviceAccountToken: + audience: istio-ca + expirationSeconds: 43200 + path: istio-token + - configMap: + name: istio + optional: true + name: config-volume + - name: ingressgateway-certs + secret: + optional: true + secretName: istio-ingressgateway-certs + - name: ingressgateway-ca-certs + secret: + optional: true + secretName: istio-ingressgateway-ca-certs +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: istiod + install.operator.istio.io/owning-resource: unknown + istio: pilot + istio.io/rev: default + operator.istio.io/component: Pilot + release: istio + name: istiod + namespace: istio-system +spec: + selector: + matchLabels: + istio: pilot + strategy: + rollingUpdate: + maxSurge: 100% + maxUnavailable: 25% + template: + metadata: + annotations: + prometheus.io/port: "15014" + prometheus.io/scrape: "true" + sidecar.istio.io/inject: "false" + labels: + app: istiod + install.operator.istio.io/owning-resource: unknown + istio: pilot + istio.io/rev: default + operator.istio.io/component: Pilot + sidecar.istio.io/inject: "false" + spec: + containers: + - args: + - discovery + - --monitoringAddr=:15014 + - --log_output_level=default:info + - --domain + - cluster.local + - --keepaliveMaxServerConnectionAge + - 30m + env: + - name: ENABLE_DEBUG_ON_HTTP + - name: REVISION + value: default + - name: JWT_POLICY + value: third-party-jwt + - name: PILOT_CERT_PROVIDER + value: istiod + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: SERVICE_ACCOUNT + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.serviceAccountName + - name: KUBECONFIG + value: /var/run/secrets/remote/config + - name: PILOT_TRACE_SAMPLING + value: "1" + - name: PILOT_ENABLE_PROTOCOL_SNIFFING_FOR_OUTBOUND + value: "true" + - name: PILOT_ENABLE_PROTOCOL_SNIFFING_FOR_INBOUND + value: "true" + - name: ISTIOD_ADDR + value: istiod.istio-system.svc:15012 + - name: PILOT_ENABLE_ANALYSIS + value: "false" + - name: CLUSTER_ID + value: Kubernetes + image: docker.io/istio/pilot:1.17.3 + name: discovery + ports: + - containerPort: 8080 + protocol: TCP + - containerPort: 15010 + protocol: TCP + - containerPort: 15017 + protocol: TCP + readinessProbe: + httpGet: + path: /ready + port: 8080 + initialDelaySeconds: 1 + periodSeconds: 3 + timeoutSeconds: 5 + resources: + requests: + cpu: 500m + memory: 2048Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsGroup: 1337 + runAsNonRoot: true + runAsUser: 1337 + volumeMounts: + - mountPath: /var/run/secrets/tokens + name: istio-token + readOnly: true + - mountPath: /var/run/secrets/istio-dns + name: local-certs + - mountPath: /etc/cacerts + name: cacerts + readOnly: true + - mountPath: /var/run/secrets/remote + name: istio-kubeconfig + readOnly: true + - mountPath: /var/run/secrets/istiod/tls + name: istio-csr-dns-cert + readOnly: true + - mountPath: /var/run/secrets/istiod/ca + name: istio-csr-ca-configmap + readOnly: true + securityContext: + fsGroup: 1337 + serviceAccountName: istiod + volumes: + - emptyDir: + medium: Memory + name: local-certs + - name: istio-token + projected: + sources: + - serviceAccountToken: + audience: istio-ca + expirationSeconds: 43200 + path: istio-token + - name: cacerts + secret: + optional: true + secretName: cacerts + - name: istio-kubeconfig + secret: + optional: true + secretName: istio-kubeconfig + - name: istio-csr-dns-cert + secret: + optional: true + secretName: istiod-tls + - configMap: + defaultMode: 420 + name: istio-ca-root-cert + optional: true + name: istio-csr-ca-configmap +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + knative.dev/high-availability: "true" + kustomize.component: knative + name: eventing-controller + namespace: knative-eventing +spec: + selector: + matchLabels: + app: eventing-controller + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + kustomize.component: knative + template: + metadata: + labels: + app: eventing-controller + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app: eventing-controller + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + kustomize.component: knative + topologyKey: kubernetes.io/hostname + weight: 100 + containers: + - env: + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + - name: METRICS_DOMAIN + value: knative.dev/eventing + - name: APISERVER_RA_IMAGE + value: gcr.io/knative-releases/knative.dev/eventing/cmd/apiserver_receive_adapter@sha256:828db8155996e40c13b77c1d039dba98153dcfcbe272248e92866bd7b6d6a17d + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: gcr.io/knative-releases/knative.dev/eventing/cmd/controller@sha256:92967bab4ad8f7d55ce3a77ba8868f3f2ce173c010958c28b9a690964ad6ee9b + livenessProbe: + httpGet: + path: /health + port: probes + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + timeoutSeconds: 5 + name: eventing-controller + ports: + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + - containerPort: 8080 + name: probes + readinessProbe: + httpGet: + path: /readiness + port: probes + scheme: HTTP + initialDelaySeconds: 20 + periodSeconds: 10 + timeoutSeconds: 5 + resources: + requests: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + terminationMessagePolicy: FallbackToLogsOnError + enableServiceLinks: false + serviceAccountName: eventing-controller +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-webhook + namespace: knative-eventing +spec: + selector: + matchLabels: + app: eventing-webhook + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + kustomize.component: knative + role: eventing-webhook + template: + metadata: + labels: + app: eventing-webhook + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + role: eventing-webhook + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app: eventing-webhook + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + kustomize.component: knative + topologyKey: kubernetes.io/hostname + weight: 100 + containers: + - env: + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: METRICS_DOMAIN + value: knative.dev/eventing + - name: WEBHOOK_NAME + value: eventing-webhook + - name: WEBHOOK_PORT + value: "8443" + - name: SINK_BINDING_SELECTION_MODE + value: exclusion + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: gcr.io/knative-releases/knative.dev/eventing/cmd/webhook@sha256:ebf93652f0254ac56600bedf4a7d81611b3e1e7f6526c6998da5dd24cdc67ee1 + livenessProbe: + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: webhook + port: 8443 + scheme: HTTPS + initialDelaySeconds: 120 + periodSeconds: 1 + name: eventing-webhook + ports: + - containerPort: 8443 + name: https-webhook + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + readinessProbe: + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: webhook + port: 8443 + scheme: HTTPS + periodSeconds: 1 + resources: + limits: + cpu: 200m + memory: 200Mi + requests: + cpu: 100m + memory: 50Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + terminationMessagePolicy: FallbackToLogsOnError + enableServiceLinks: false + serviceAccountName: eventing-webhook + terminationGracePeriodSeconds: 300 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: pingsource-mt-adapter + namespace: knative-eventing +spec: + replicas: 0 + selector: + matchLabels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + eventing.knative.dev/source: ping-source-controller + kustomize.component: knative + sources.knative.dev/role: adapter + template: + metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + eventing.knative.dev/source: ping-source-controller + kustomize.component: knative + sources.knative.dev/role: adapter + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + eventing.knative.dev/source: ping-source-controller + kustomize.component: knative + sources.knative.dev/role: adapter + topologyKey: kubernetes.io/hostname + weight: 100 + containers: + - env: + - name: SYSTEM_NAMESPACE + value: "" + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: NAMESPACE + value: "" + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: K_METRICS_CONFIG + value: "" + - name: K_LOGGING_CONFIG + value: "" + - name: K_LEADER_ELECTION_CONFIG + value: "" + - name: K_NO_SHUTDOWN_AFTER + value: "" + - name: K_SINK_TIMEOUT + value: "-1" + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: gcr.io/knative-releases/knative.dev/eventing/cmd/mtping@sha256:6d35cc98baa098fc0c5b4290859e363a8350a9dadc31d1191b0b5c9796958223 + name: dispatcher + ports: + - containerPort: 9090 + name: metrics + protocol: TCP + resources: + limits: + cpu: 1000m + memory: 2048Mi + requests: + cpu: 125m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + enableServiceLinks: false + serviceAccountName: pingsource-mt-adapter +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: activator + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: activator + namespace: knative-serving +spec: + selector: + matchLabels: + app: activator + role: activator + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: activator + app.kubernetes.io/component: activator + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + role: activator + spec: + containers: + - env: + - name: GOGC + value: "500" + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + - name: METRICS_DOMAIN + value: knative.dev/internal/serving + image: gcr.io/knative-releases/knative.dev/serving/cmd/activator@sha256:c2994c2b6c2c7f38ad1b85c71789bf1753cc8979926423c83231e62258837cb9 + livenessProbe: + failureThreshold: 12 + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: activator + port: 8012 + initialDelaySeconds: 15 + periodSeconds: 10 + name: activator + ports: + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + - containerPort: 8012 + name: http1 + - containerPort: 8013 + name: h2c + readinessProbe: + failureThreshold: 5 + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: activator + port: 8012 + periodSeconds: 5 + resources: + limits: + cpu: 1000m + memory: 600Mi + requests: + cpu: 300m + memory: 60Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: controller + terminationGracePeriodSeconds: 600 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: autoscaler + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: autoscaler + namespace: knative-serving +spec: + replicas: 1 + selector: + matchLabels: + app: autoscaler + strategy: + rollingUpdate: + maxUnavailable: 0 + type: RollingUpdate + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: autoscaler + app.kubernetes.io/component: autoscaler + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app: autoscaler + topologyKey: kubernetes.io/hostname + weight: 100 + containers: + - env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + - name: METRICS_DOMAIN + value: knative.dev/serving + image: gcr.io/knative-releases/knative.dev/serving/cmd/autoscaler@sha256:8319aa662b4912e8175018bd7cc90c63838562a27515197b803bdcd5634c7007 + livenessProbe: + failureThreshold: 6 + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: autoscaler + port: 8080 + name: autoscaler + ports: + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + - containerPort: 8080 + name: websocket + readinessProbe: + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: autoscaler + port: 8080 + resources: + limits: + cpu: 1000m + memory: 1000Mi + requests: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: controller +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: controller + namespace: knative-serving +spec: + selector: + matchLabels: + app: controller + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: controller + app.kubernetes.io/component: controller + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app: controller + topologyKey: kubernetes.io/hostname + weight: 100 + containers: + - env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + - name: METRICS_DOMAIN + value: knative.dev/internal/serving + image: gcr.io/knative-releases/knative.dev/serving/cmd/controller@sha256:98a2cc7fd62ee95e137116504e7166c32c65efef42c3d1454630780410abf943 + livenessProbe: + failureThreshold: 6 + httpGet: + path: /health + port: probes + scheme: HTTP + periodSeconds: 5 + name: controller + ports: + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + - containerPort: 8080 + name: probes + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readiness + port: probes + scheme: HTTP + periodSeconds: 5 + resources: + limits: + cpu: 1000m + memory: 1000Mi + requests: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: controller +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: domain-mapping + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: domain-mapping + namespace: knative-serving +spec: + selector: + matchLabels: + app: domain-mapping + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: domain-mapping + app.kubernetes.io/component: domain-mapping + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app: domain-mapping + topologyKey: kubernetes.io/hostname + weight: 100 + containers: + - env: + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + - name: METRICS_DOMAIN + value: knative.dev/serving + image: gcr.io/knative-releases/knative.dev/serving/cmd/domain-mapping@sha256:f66c41ad7a73f5d4f4bdfec4294d5459c477f09f3ce52934d1a215e32316b59b + livenessProbe: + failureThreshold: 6 + httpGet: + path: /health + port: probes + scheme: HTTP + periodSeconds: 5 + name: domain-mapping + ports: + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + - containerPort: 8080 + name: probes + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readiness + port: probes + scheme: HTTP + periodSeconds: 5 + resources: + limits: + cpu: 300m + memory: 400Mi + requests: + cpu: 30m + memory: 40Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: controller +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: domain-mapping + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: domainmapping-webhook + namespace: knative-serving +spec: + selector: + matchLabels: + app: domainmapping-webhook + role: domainmapping-webhook + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: domainmapping-webhook + app.kubernetes.io/component: domain-mapping + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + role: domainmapping-webhook + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app: domainmapping-webhook + topologyKey: kubernetes.io/hostname + weight: 100 + containers: + - env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + - name: WEBHOOK_PORT + value: "8443" + - name: METRICS_DOMAIN + value: knative.dev/serving + image: gcr.io/knative-releases/knative.dev/serving/cmd/domain-mapping-webhook@sha256:7368aaddf2be8d8784dc7195f5bc272ecfe49d429697f48de0ddc44f278167aa + livenessProbe: + failureThreshold: 6 + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: webhook + port: 8443 + scheme: HTTPS + initialDelaySeconds: 20 + periodSeconds: 1 + name: domainmapping-webhook + ports: + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + - containerPort: 8443 + name: https-webhook + readinessProbe: + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: webhook + port: 8443 + scheme: HTTPS + periodSeconds: 1 + resources: + limits: + cpu: 500m + memory: 500Mi + requests: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: controller + terminationGracePeriodSeconds: 300 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: net-istio-controller + namespace: knative-serving +spec: + selector: + matchLabels: + app: net-istio-controller + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: net-istio-controller + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + spec: + containers: + - env: + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID + value: "false" + - name: METRICS_DOMAIN + value: knative.dev/net-istio + image: gcr.io/knative-releases/knative.dev/net-istio/cmd/controller@sha256:421aa67057240fa0c56ebf2c6e5b482a12842005805c46e067129402d1751220 + livenessProbe: + failureThreshold: 6 + httpGet: + path: /health + port: probes + scheme: HTTP + periodSeconds: 5 + name: controller + ports: + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + - containerPort: 8080 + name: probes + readinessProbe: + failureThreshold: 3 + httpGet: + path: /readiness + port: probes + scheme: HTTP + periodSeconds: 5 + resources: + limits: + cpu: 300m + memory: 400Mi + requests: + cpu: 30m + memory: 40Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: controller +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: net-istio-webhook + namespace: knative-serving +spec: + selector: + matchLabels: + app: net-istio-webhook + role: net-istio-webhook + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: net-istio-webhook + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + role: net-istio-webhook + spec: + containers: + - env: + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + - name: METRICS_DOMAIN + value: knative.dev/net-istio + - name: WEBHOOK_NAME + value: net-istio-webhook + - name: WEBHOOK_PORT + value: "8443" + image: gcr.io/knative-releases/knative.dev/net-istio/cmd/webhook@sha256:bfa1dfea77aff6dfa7959f4822d8e61c4f7933053874cd3f27352323e6ecd985 + livenessProbe: + failureThreshold: 6 + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: webhook + port: 8443 + scheme: HTTPS + initialDelaySeconds: 20 + periodSeconds: 1 + name: webhook + ports: + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + - containerPort: 8443 + name: https-webhook + readinessProbe: + failureThreshold: 3 + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: webhook + port: 8443 + scheme: HTTPS + periodSeconds: 1 + resources: + limits: + cpu: 200m + memory: 200Mi + requests: + cpu: 20m + memory: 20Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: controller +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: webhook + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: webhook + namespace: knative-serving +spec: + selector: + matchLabels: + app: webhook + role: webhook + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + role: webhook + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app: webhook + topologyKey: kubernetes.io/hostname + weight: 100 + containers: + - env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + - name: WEBHOOK_NAME + value: webhook + - name: WEBHOOK_PORT + value: "8443" + - name: METRICS_DOMAIN + value: knative.dev/internal/serving + image: gcr.io/knative-releases/knative.dev/serving/cmd/webhook@sha256:4305209ce498caf783f39c8f3e85dfa635ece6947033bf50b0b627983fd65953 + livenessProbe: + failureThreshold: 6 + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: webhook + port: 8443 + scheme: HTTPS + initialDelaySeconds: 20 + periodSeconds: 1 + name: webhook + ports: + - containerPort: 9090 + name: metrics + - containerPort: 8008 + name: profiling + - containerPort: 8443 + name: https-webhook + readinessProbe: + httpGet: + httpHeaders: + - name: k-kubelet-probe + value: webhook + port: 8443 + scheme: HTTPS + periodSeconds: 1 + resources: + limits: + cpu: 500m + memory: 500Mi + requests: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: controller + terminationGracePeriodSeconds: 300 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + name: admission-webhook-deployment + namespace: kubeflow +spec: + selector: + matchLabels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + spec: + containers: + - args: + - --tlsCertFile=/etc/webhook/certs/tls.crt + - --tlsKeyFile=/etc/webhook/certs/tls.key + image: docker.io/kubeflownotebookswg/poddefaults-webhook:v1.8.0 + name: admission-webhook + ports: + - containerPort: 4443 + name: https-webhook + volumeMounts: + - mountPath: /etc/webhook/certs + name: webhook-cert + readOnly: true + serviceAccountName: admission-webhook-service-account + volumes: + - name: webhook-cert + secret: + secretName: webhook-certs +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: cache-server + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + template: + metadata: + labels: + app: cache-server + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + spec: + containers: + - args: + - --db_driver=$(DBCONFIG_DRIVER) + - --db_host=$(DBCONFIG_HOST_NAME) + - --db_port=$(DBCONFIG_PORT) + - --db_name=$(DBCONFIG_DB_NAME) + - --db_user=$(DBCONFIG_USER) + - --db_password=$(DBCONFIG_PASSWORD) + - --namespace_to_watch=$(NAMESPACE_TO_WATCH) + - --tls_cert_filename=tls.crt + - --tls_key_filename=tls.key + env: + - name: NAMESPACE_TO_WATCH + value: "" + - name: DEFAULT_CACHE_STALENESS + valueFrom: + configMapKeyRef: + key: DEFAULT_CACHE_STALENESS + name: pipeline-install-config + - name: MAXIMUM_CACHE_STALENESS + valueFrom: + configMapKeyRef: + key: MAXIMUM_CACHE_STALENESS + name: pipeline-install-config + - name: CACHE_IMAGE + valueFrom: + configMapKeyRef: + key: cacheImage + name: pipeline-install-config + - name: CACHE_NODE_RESTRICTIONS + valueFrom: + configMapKeyRef: + key: cacheNodeRestrictions + name: pipeline-install-config + - name: DBCONFIG_DRIVER + value: mysql + - name: DBCONFIG_DB_NAME + valueFrom: + configMapKeyRef: + key: cacheDb + name: pipeline-install-config + - name: DBCONFIG_HOST_NAME + valueFrom: + configMapKeyRef: + key: dbHost + name: pipeline-install-config + - name: DBCONFIG_PORT + valueFrom: + configMapKeyRef: + key: dbPort + name: pipeline-install-config + - name: DBCONFIG_USER + valueFrom: + secretKeyRef: + key: username + name: mysql-secret + - name: DBCONFIG_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: mysql-secret + image: gcr.io/ml-pipeline/cache-server:2.0.0-alpha.7 + imagePullPolicy: Always + name: server + ports: + - containerPort: 8443 + name: webhook-api + volumeMounts: + - mountPath: /etc/webhook/certs + name: webhook-tls-certs + readOnly: true + serviceAccountName: kubeflow-pipelines-cache + volumes: + - name: webhook-tls-certs + secret: + secretName: webhook-server-tls +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + spec: + containers: + - env: + - name: USERID_HEADER + value: kubeflow-userid + - name: USERID_PREFIX + value: "" + - name: PROFILES_KFAM_SERVICE_HOST + value: profiles-kfam.kubeflow + - name: REGISTRATION_FLOW + value: "false" + - name: DASHBOARD_LINKS_CONFIGMAP + value: centraldashboard-config + image: docker.io/kubeflownotebookswg/centraldashboard:v1.8.0 + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /healthz + port: 8082 + initialDelaySeconds: 30 + periodSeconds: 30 + name: centraldashboard + ports: + - containerPort: 8082 + protocol: TCP + serviceAccountName: centraldashboard +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-deployment + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + template: + metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + spec: + containers: + - env: + - name: APP_PREFIX + value: /jupyter + - name: UI + value: default + - name: USERID_HEADER + value: kubeflow-userid + - name: USERID_PREFIX + value: "" + - name: APP_SECURE_COOKIES + value: "true" + image: docker.io/kubeflownotebookswg/jupyter-web-app:v1.8.0 + name: jupyter-web-app + ports: + - containerPort: 5000 + volumeMounts: + - mountPath: /etc/config + name: config-volume + - mountPath: /src/apps/default/static/assets/logos + name: logos-volume + serviceAccountName: jupyter-web-app-service-account + volumes: + - configMap: + name: jupyter-web-app-config-92bgck72t2 + name: config-volume + - configMap: + name: jupyter-web-app-logos + name: logos-volume +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + katib.kubeflow.org/component: controller + name: katib-controller + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + katib.kubeflow.org/component: controller + template: + metadata: + annotations: + prometheus.io/port: "8080" + prometheus.io/scrape: "true" + sidecar.istio.io/inject: "false" + labels: + katib.kubeflow.org/component: controller + katib.kubeflow.org/metrics-collector-injection: disabled + spec: + containers: + - args: + - --katib-config=/katib-config.yaml + command: + - ./katib-controller + env: + - name: KATIB_CORE_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: docker.io/kubeflowkatib/katib-controller:v0.16.0-rc.1 + livenessProbe: + httpGet: + path: /healthz + port: healthz + name: katib-controller + ports: + - containerPort: 8443 + name: webhook + protocol: TCP + - containerPort: 8080 + name: metrics + protocol: TCP + - containerPort: 18080 + name: healthz + protocol: TCP + readinessProbe: + httpGet: + path: /readyz + port: healthz + volumeMounts: + - mountPath: /tmp/cert + name: cert + readOnly: true + - mountPath: /katib-config.yaml + name: katib-config + readOnly: true + subPath: katib-config.yaml + serviceAccountName: katib-controller + volumes: + - name: cert + secret: + defaultMode: 420 + secretName: katib-webhook-cert + - configMap: + name: katib-config + name: katib-config +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + katib.kubeflow.org/component: db-manager + name: katib-db-manager + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + katib.kubeflow.org/component: db-manager + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + labels: + katib.kubeflow.org/component: db-manager + spec: + containers: + - command: + - ./katib-db-manager + env: + - name: DB_NAME + value: mysql + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + key: MYSQL_ROOT_PASSWORD + name: katib-mysql-secrets + image: docker.io/kubeflowkatib/katib-db-manager:v0.16.0-rc.1 + livenessProbe: + failureThreshold: 5 + grpc: + port: 6789 + initialDelaySeconds: 10 + periodSeconds: 60 + name: katib-db-manager + ports: + - containerPort: 6789 + name: api +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + katib.kubeflow.org/component: mysql + name: katib-mysql + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + katib.kubeflow.org/component: mysql + strategy: + type: Recreate + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + labels: + katib.kubeflow.org/component: mysql + spec: + containers: + - args: + - --datadir + - /var/lib/mysql/datadir + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + key: MYSQL_ROOT_PASSWORD + name: katib-mysql-secrets + - name: MYSQL_ALLOW_EMPTY_PASSWORD + value: "true" + - name: MYSQL_DATABASE + value: katib + image: mysql:8.0.29 + livenessProbe: + exec: + command: + - /bin/bash + - -c + - mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD} + failureThreshold: 10 + initialDelaySeconds: 10 + periodSeconds: 5 + name: katib-mysql + ports: + - containerPort: 3306 + name: dbapi + readinessProbe: + exec: + command: + - /bin/bash + - -c + - mysql -D ${MYSQL_DATABASE} -u root -p${MYSQL_ROOT_PASSWORD} -e 'SELECT + 1' + failureThreshold: 10 + initialDelaySeconds: 10 + periodSeconds: 5 + startupProbe: + exec: + command: + - /bin/bash + - -c + - mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD} + failureThreshold: 60 + periodSeconds: 15 + volumeMounts: + - mountPath: /var/lib/mysql + name: katib-mysql + volumes: + - name: katib-mysql + persistentVolumeClaim: + claimName: katib-mysql +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + katib.kubeflow.org/component: ui + name: katib-ui + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + katib.kubeflow.org/component: ui + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + katib.kubeflow.org/component: ui + spec: + containers: + - args: + - --port=8080 + command: + - ./katib-ui + env: + - name: KATIB_CORE_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: APP_DISABLE_AUTH + value: "false" + image: docker.io/kubeflowkatib/katib-ui:v0.16.0-rc.1 + name: katib-ui + ports: + - containerPort: 8080 + name: ui + serviceAccountName: katib-ui +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + control-plane: kserve-controller-manager + controller-tools.k8s.io: "1.0" + name: kserve-controller-manager + namespace: kubeflow +spec: + selector: + matchLabels: + app: kserve + app.kubernetes.io/name: kserve + control-plane: kserve-controller-manager + controller-tools.k8s.io: "1.0" + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: manager + sidecar.istio.io/inject: "false" + labels: + app: kserve + app.kubernetes.io/name: kserve + control-plane: kserve-controller-manager + controller-tools.k8s.io: "1.0" + spec: + containers: + - args: + - --metrics-addr=127.0.0.1:8080 + - --leader-elect + command: + - /manager + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: SECRET_NAME + value: kserve-webhook-server-cert + image: kserve/kserve-controller:v0.10.0 + imagePullPolicy: Always + name: manager + ports: + - containerPort: 9443 + name: webhook-server + protocol: TCP + resources: + limits: + cpu: 100m + memory: 300Mi + requests: + cpu: 100m + memory: 200Mi + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cert + readOnly: true + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=10 + image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + securityContext: + runAsNonRoot: true + serviceAccountName: kserve-controller-manager + terminationGracePeriodSeconds: 10 + volumes: + - name: cert + secret: + defaultMode: 420 + secretName: kserve-webhook-server-cert +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + name: kserve-models-web-app + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + spec: + containers: + - envFrom: + - configMapRef: + name: kserve-models-web-app-config + image: kserve/models-web-app:v0.10.0 + imagePullPolicy: Always + livenessProbe: + failureThreshold: 3 + httpGet: + path: /healthz/liveness + port: http + initialDelaySeconds: 0 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: kserve-models-web-app + ports: + - containerPort: 5000 + name: http + readinessProbe: + failureThreshold: 3 + httpGet: + path: /healthz/readiness + port: http + initialDelaySeconds: 0 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + serviceAccountName: kserve-models-web-app +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: kubeflow-pipelines-profile-controller + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-profile-controller + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: kubeflow-pipelines-profile-controller + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + labels: + app: kubeflow-pipelines-profile-controller + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + spec: + containers: + - command: + - python + - /hooks/sync.py + env: + - name: KFP_VERSION + valueFrom: + configMapKeyRef: + key: appVersion + name: pipeline-install-config + - name: KFP_DEFAULT_PIPELINE_ROOT + valueFrom: + configMapKeyRef: + key: defaultPipelineRoot + name: pipeline-install-config + optional: true + - name: MINIO_ACCESS_KEY + valueFrom: + secretKeyRef: + key: accesskey + name: mlpipeline-minio-artifact + - name: MINIO_SECRET_KEY + valueFrom: + secretKeyRef: + key: secretkey + name: mlpipeline-minio-artifact + envFrom: + - configMapRef: + name: kubeflow-pipelines-profile-controller-env-5252m69c4c + image: python:3.7 + name: profile-controller + ports: + - containerPort: 8080 + volumeMounts: + - mountPath: /hooks + name: hooks + volumes: + - configMap: + name: kubeflow-pipelines-profile-controller-code-hdk828hd6c + name: hooks +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + application-crd-id: kubeflow-pipelines + component: metadata-envoy + name: metadata-envoy-deployment + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + application-crd-id: kubeflow-pipelines + component: metadata-envoy + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + labels: + application-crd-id: kubeflow-pipelines + component: metadata-envoy + spec: + containers: + - image: gcr.io/ml-pipeline/metadata-envoy:2.0.0-alpha.7 + name: container + ports: + - containerPort: 9090 + name: md-envoy + - containerPort: 9901 + name: envoy-admin +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + application-crd-id: kubeflow-pipelines + component: metadata-grpc-server + name: metadata-grpc-deployment + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + application-crd-id: kubeflow-pipelines + component: metadata-grpc-server + template: + metadata: + labels: + application-crd-id: kubeflow-pipelines + component: metadata-grpc-server + spec: + containers: + - args: + - --grpc_port=8080 + - --mysql_config_database=$(MYSQL_DATABASE) + - --mysql_config_host=$(MYSQL_HOST) + - --mysql_config_port=$(MYSQL_PORT) + - --mysql_config_user=$(DBCONFIG_USER) + - --mysql_config_password=$(DBCONFIG_PASSWORD) + - --enable_database_upgrade=true + command: + - /bin/metadata_store_server + env: + - name: DBCONFIG_USER + valueFrom: + secretKeyRef: + key: username + name: mysql-secret + - name: DBCONFIG_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: mysql-secret + - name: MYSQL_DATABASE + valueFrom: + configMapKeyRef: + key: mlmdDb + name: pipeline-install-config + - name: MYSQL_HOST + valueFrom: + configMapKeyRef: + key: dbHost + name: pipeline-install-config + - name: MYSQL_PORT + valueFrom: + configMapKeyRef: + key: dbPort + name: pipeline-install-config + image: gcr.io/tfx-oss-public/ml_metadata_store_server:1.5.0 + livenessProbe: + initialDelaySeconds: 3 + periodSeconds: 5 + tcpSocket: + port: grpc-api + timeoutSeconds: 2 + name: container + ports: + - containerPort: 8080 + name: grpc-api + readinessProbe: + initialDelaySeconds: 3 + periodSeconds: 5 + tcpSocket: + port: grpc-api + timeoutSeconds: 2 + serviceAccountName: metadata-grpc-server +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: metadata-writer + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: metadata-writer + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: metadata-writer + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + template: + metadata: + labels: + app: metadata-writer + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + spec: + containers: + - env: + - name: NAMESPACE_TO_WATCH + value: "" + image: gcr.io/ml-pipeline/metadata-writer:2.0.0-alpha.7 + name: main + serviceAccountName: kubeflow-pipelines-metadata-writer +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: minio + application-crd-id: kubeflow-pipelines + name: minio + namespace: kubeflow +spec: + selector: + matchLabels: + app: minio + application-crd-id: kubeflow-pipelines + strategy: + type: Recreate + template: + metadata: + labels: + app: minio + application-crd-id: kubeflow-pipelines + spec: + containers: + - args: + - server + - /data + env: + - name: MINIO_ACCESS_KEY + valueFrom: + secretKeyRef: + key: accesskey + name: mlpipeline-minio-artifact + - name: MINIO_SECRET_KEY + valueFrom: + secretKeyRef: + key: secretkey + name: mlpipeline-minio-artifact + image: gcr.io/ml-pipeline/minio:RELEASE.2019-08-14T20-37-41Z-license-compliance + name: minio + ports: + - containerPort: 9000 + resources: + requests: + cpu: 20m + memory: 100Mi + volumeMounts: + - mountPath: /data + name: data + subPath: minio + volumes: + - name: data + persistentVolumeClaim: + claimName: minio-pvc +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline + namespace: kubeflow +spec: + selector: + matchLabels: + app: ml-pipeline + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + template: + metadata: + annotations: + cluster-autoscaler.kubernetes.io/safe-to-evict: "true" + labels: + app: ml-pipeline + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + spec: + containers: + - env: + - name: KUBEFLOW_USERID_HEADER + value: kubeflow-userid + - name: KUBEFLOW_USERID_PREFIX + value: "" + - name: AUTO_UPDATE_PIPELINE_DEFAULT_VERSION + valueFrom: + configMapKeyRef: + key: autoUpdatePipelineDefaultVersion + name: pipeline-install-config + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: OBJECTSTORECONFIG_SECURE + value: "false" + - name: OBJECTSTORECONFIG_BUCKETNAME + valueFrom: + configMapKeyRef: + key: bucketName + name: pipeline-install-config + - name: DBCONFIG_USER + valueFrom: + secretKeyRef: + key: username + name: mysql-secret + - name: DBCONFIG_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: mysql-secret + - name: DBCONFIG_DBNAME + valueFrom: + configMapKeyRef: + key: pipelineDb + name: pipeline-install-config + - name: DBCONFIG_HOST + valueFrom: + configMapKeyRef: + key: dbHost + name: pipeline-install-config + - name: DBCONFIG_PORT + valueFrom: + configMapKeyRef: + key: dbPort + name: pipeline-install-config + - name: DBCONFIG_CONMAXLIFETIME + valueFrom: + configMapKeyRef: + key: ConMaxLifeTime + name: pipeline-install-config + - name: OBJECTSTORECONFIG_ACCESSKEY + valueFrom: + secretKeyRef: + key: accesskey + name: mlpipeline-minio-artifact + - name: OBJECTSTORECONFIG_SECRETACCESSKEY + valueFrom: + secretKeyRef: + key: secretkey + name: mlpipeline-minio-artifact + envFrom: + - configMapRef: + name: pipeline-api-server-config-dc9hkg52h6 + image: gcr.io/ml-pipeline/api-server:2.0.0-alpha.7 + imagePullPolicy: IfNotPresent + livenessProbe: + exec: + command: + - wget + - -q + - -S + - -O + - '-' + - http://localhost:8888/apis/v1beta1/healthz + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + name: ml-pipeline-api-server + ports: + - containerPort: 8888 + name: http + - containerPort: 8887 + name: grpc + readinessProbe: + exec: + command: + - wget + - -q + - -S + - -O + - '-' + - http://localhost:8888/apis/v1beta1/healthz + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + resources: + requests: + cpu: 250m + memory: 500Mi + startupProbe: + exec: + command: + - wget + - -q + - -S + - -O + - '-' + - http://localhost:8888/apis/v1beta1/healthz + failureThreshold: 12 + periodSeconds: 5 + timeoutSeconds: 2 + serviceAccountName: ml-pipeline +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-persistenceagent + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-persistenceagent + namespace: kubeflow +spec: + selector: + matchLabels: + app: ml-pipeline-persistenceagent + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + template: + metadata: + annotations: + cluster-autoscaler.kubernetes.io/safe-to-evict: "true" + labels: + app: ml-pipeline-persistenceagent + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + spec: + containers: + - env: + - name: NAMESPACE + value: "" + - name: KUBEFLOW_USERID_HEADER + value: kubeflow-userid + - name: KUBEFLOW_USERID_PREFIX + value: "" + - name: TTL_SECONDS_AFTER_WORKFLOW_FINISH + value: "86400" + - name: NUM_WORKERS + value: "2" + envFrom: + - configMapRef: + name: persistenceagent-config-hkgkmd64bh + image: gcr.io/ml-pipeline/persistenceagent:2.0.0-alpha.7 + imagePullPolicy: IfNotPresent + name: ml-pipeline-persistenceagent + resources: + requests: + cpu: 120m + memory: 500Mi + serviceAccountName: ml-pipeline-persistenceagent +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-scheduledworkflow + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-scheduledworkflow + namespace: kubeflow +spec: + selector: + matchLabels: + app: ml-pipeline-scheduledworkflow + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + template: + metadata: + annotations: + cluster-autoscaler.kubernetes.io/safe-to-evict: "true" + labels: + app: ml-pipeline-scheduledworkflow + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + spec: + containers: + - env: + - name: NAMESPACE + value: "" + - name: CRON_SCHEDULE_TIMEZONE + valueFrom: + configMapKeyRef: + key: cronScheduleTimezone + name: pipeline-install-config + image: gcr.io/ml-pipeline/scheduledworkflow:2.0.0-alpha.7 + imagePullPolicy: IfNotPresent + name: ml-pipeline-scheduledworkflow + serviceAccountName: ml-pipeline-scheduledworkflow +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-ui + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui + namespace: kubeflow +spec: + selector: + matchLabels: + app: ml-pipeline-ui + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + template: + metadata: + annotations: + cluster-autoscaler.kubernetes.io/safe-to-evict: "true" + labels: + app: ml-pipeline-ui + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + spec: + containers: + - env: + - name: VIEWER_TENSORBOARD_POD_TEMPLATE_SPEC_PATH + value: /etc/config/viewer-pod-template.json + - name: DEPLOYMENT + value: KUBEFLOW + - name: ARTIFACTS_SERVICE_PROXY_NAME + value: ml-pipeline-ui-artifact + - name: ARTIFACTS_SERVICE_PROXY_PORT + value: "80" + - name: ARTIFACTS_SERVICE_PROXY_ENABLED + value: "true" + - name: ENABLE_AUTHZ + value: "true" + - name: KUBEFLOW_USERID_HEADER + value: kubeflow-userid + - name: KUBEFLOW_USERID_PREFIX + value: "" + - name: MINIO_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MINIO_ACCESS_KEY + valueFrom: + secretKeyRef: + key: accesskey + name: mlpipeline-minio-artifact + - name: MINIO_SECRET_KEY + valueFrom: + secretKeyRef: + key: secretkey + name: mlpipeline-minio-artifact + - name: ALLOW_CUSTOM_VISUALIZATIONS + value: "true" + image: gcr.io/ml-pipeline/frontend:2.0.0-alpha.7 + imagePullPolicy: IfNotPresent + livenessProbe: + exec: + command: + - wget + - -q + - -S + - -O + - '-' + - http://localhost:3000/apis/v1beta1/healthz + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + name: ml-pipeline-ui + ports: + - containerPort: 3000 + readinessProbe: + exec: + command: + - wget + - -q + - -S + - -O + - '-' + - http://localhost:3000/apis/v1beta1/healthz + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + resources: + requests: + cpu: 10m + memory: 70Mi + volumeMounts: + - mountPath: /etc/config + name: config-volume + readOnly: true + serviceAccountName: ml-pipeline-ui + volumes: + - configMap: + name: ml-pipeline-ui-configmap + name: config-volume +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-viewer-crd + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-viewer-crd + namespace: kubeflow +spec: + selector: + matchLabels: + app: ml-pipeline-viewer-crd + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + template: + metadata: + annotations: + cluster-autoscaler.kubernetes.io/safe-to-evict: "true" + labels: + app: ml-pipeline-viewer-crd + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + spec: + containers: + - env: + - name: NAMESPACE + value: "" + - name: MAX_NUM_VIEWERS + value: "50" + - name: MINIO_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: gcr.io/ml-pipeline/viewer-crd-controller:2.0.0-alpha.7 + imagePullPolicy: Always + name: ml-pipeline-viewer-crd + serviceAccountName: ml-pipeline-viewer-crd-service-account +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: ml-pipeline-visualizationserver + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-visualizationserver + namespace: kubeflow +spec: + selector: + matchLabels: + app: ml-pipeline-visualizationserver + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + template: + metadata: + annotations: + cluster-autoscaler.kubernetes.io/safe-to-evict: "true" + labels: + app: ml-pipeline-visualizationserver + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + spec: + containers: + - image: gcr.io/ml-pipeline/visualization-server:2.0.0-alpha.7 + imagePullPolicy: IfNotPresent + livenessProbe: + exec: + command: + - wget + - -q + - -S + - -O + - '-' + - http://localhost:8888/ + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + name: ml-pipeline-visualizationserver + ports: + - containerPort: 8888 + name: http + readinessProbe: + exec: + command: + - wget + - -q + - -S + - -O + - '-' + - http://localhost:8888/ + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 2 + resources: + requests: + cpu: 30m + memory: 500Mi + serviceAccountName: ml-pipeline-visualizationserver +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: mysql + application-crd-id: kubeflow-pipelines + name: mysql + namespace: kubeflow +spec: + selector: + matchLabels: + app: mysql + application-crd-id: kubeflow-pipelines + strategy: + type: Recreate + template: + metadata: + labels: + app: mysql + application-crd-id: kubeflow-pipelines + spec: + containers: + - args: + - --datadir + - /var/lib/mysql + - --default-authentication-plugin=mysql_native_password + - --disable-log-bin + env: + - name: MYSQL_ALLOW_EMPTY_PASSWORD + value: "true" + image: gcr.io/ml-pipeline/mysql:8.0.26 + name: mysql + ports: + - containerPort: 3306 + name: mysql + resources: + requests: + cpu: 100m + memory: 800Mi + volumeMounts: + - mountPath: /var/lib/mysql + name: mysql-persistent-storage + serviceAccountName: mysql + volumes: + - name: mysql-persistent-storage + persistentVolumeClaim: + claimName: mysql-pv-claim +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + name: notebook-controller-deployment + namespace: kubeflow +spec: + selector: + matchLabels: + app: notebook-controller + kustomize.component: notebook-controller + template: + metadata: + labels: + app: notebook-controller + kustomize.component: notebook-controller + spec: + containers: + - command: + - /manager + env: + - name: USE_ISTIO + valueFrom: + configMapKeyRef: + key: USE_ISTIO + name: notebook-controller-config-dm5b6dd458 + - name: ISTIO_GATEWAY + valueFrom: + configMapKeyRef: + key: ISTIO_GATEWAY + name: notebook-controller-config-dm5b6dd458 + - name: CLUSTER_DOMAIN + valueFrom: + configMapKeyRef: + key: CLUSTER_DOMAIN + name: notebook-controller-config-dm5b6dd458 + - name: ENABLE_CULLING + valueFrom: + configMapKeyRef: + key: ENABLE_CULLING + name: notebook-controller-config-dm5b6dd458 + - name: CULL_IDLE_TIME + valueFrom: + configMapKeyRef: + key: CULL_IDLE_TIME + name: notebook-controller-config-dm5b6dd458 + - name: IDLENESS_CHECK_PERIOD + valueFrom: + configMapKeyRef: + key: IDLENESS_CHECK_PERIOD + name: notebook-controller-config-dm5b6dd458 + image: docker.io/kubeflownotebookswg/notebook-controller:v1.8.0 + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + serviceAccountName: notebook-controller-service-account +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + kustomize.component: profiles + name: profiles-deployment + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + kustomize.component: profiles + template: + metadata: + annotations: + sidecar.istio.io/inject: "true" + labels: + kustomize.component: profiles + spec: + containers: + - command: + - /access-management + - -cluster-admin + - $(ADMIN) + - -userid-header + - $(USERID_HEADER) + - -userid-prefix + - $(USERID_PREFIX) + envFrom: + - configMapRef: + name: profiles-config-46c7tgh6fd + image: docker.io/kubeflownotebookswg/kfam:v1.8.0 + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /metrics + port: 8081 + initialDelaySeconds: 30 + periodSeconds: 30 + name: kfam + ports: + - containerPort: 8081 + name: kfam-http + protocol: TCP + - command: + - /manager + - -userid-header + - $(USERID_HEADER) + - -userid-prefix + - $(USERID_PREFIX) + - -workload-identity + - $(WORKLOAD_IDENTITY) + envFrom: + - configMapRef: + name: profiles-config-46c7tgh6fd + image: docker.io/kubeflownotebookswg/profile-controller:v1.8.0 + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /healthz + port: 9876 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + ports: + - containerPort: 9876 + readinessProbe: + httpGet: + path: /readyz + port: 9876 + initialDelaySeconds: 5 + periodSeconds: 10 + volumeMounts: + - mountPath: /etc/profile-controller + name: namespace-labels + readOnly: true + serviceAccountName: profiles-controller-service-account + volumes: + - configMap: + name: namespace-labels-data-4df5t8mdgf + name: namespace-labels +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: tensorboard-controller + control-plane: controller-manager + kustomize.component: tensorboard-controller + name: tensorboard-controller-deployment + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: tensorboard-controller + control-plane: controller-manager + kustomize.component: tensorboard-controller + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: manager + labels: + app: tensorboard-controller + control-plane: controller-manager + kustomize.component: tensorboard-controller + spec: + containers: + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + command: + - /manager + envFrom: + - configMapRef: + name: tensorboard-controller-config-b98cb9gk9k + image: docker.io/kubeflownotebookswg/tensorboard-controller:v1.8.0 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + securityContext: + runAsNonRoot: true + runAsUser: 999 + serviceAccountName: tensorboard-controller-controller-manager + terminationGracePeriodSeconds: 10 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + name: tensorboards-web-app-deployment + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + template: + metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + spec: + containers: + - env: + - name: APP_PREFIX + value: /tensorboards + - name: USERID_HEADER + value: kubeflow-userid + - name: USERID_PREFIX + value: "" + - name: APP_SECURE_COOKIES + value: 'true ' + image: docker.io/kubeflownotebookswg/tensorboards-web-app:v1.8.0 + name: tensorboards-web-app + ports: + - containerPort: 5000 + serviceAccountName: tensorboards-web-app-service-account +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + control-plane: kubeflow-training-operator + name: training-operator + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + control-plane: kubeflow-training-operator + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + labels: + control-plane: kubeflow-training-operator + spec: + containers: + - command: + - /manager + env: + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + image: kubeflow/training-operator:v1-855e096 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + timeoutSeconds: 3 + name: training-operator + ports: + - containerPort: 8080 + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 10 + periodSeconds: 15 + timeoutSeconds: 3 + securityContext: + allowPrivilegeEscalation: false + serviceAccountName: training-operator + terminationGracePeriodSeconds: 10 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + name: volumes-web-app-deployment + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: volumes-web-app + kustomize.component: volumes-web-app + template: + metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + spec: + containers: + - env: + - name: APP_PREFIX + value: /volumes + - name: USERID_HEADER + value: kubeflow-userid + - name: USERID_PREFIX + value: "" + - name: APP_SECURE_COOKIES + value: "true" + image: docker.io/kubeflownotebookswg/volumes-web-app:v1.8.0 + name: volumes-web-app + ports: + - containerPort: 5000 + serviceAccountName: volumes-web-app-service-account +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: workflow-controller + namespace: kubeflow +spec: + selector: + matchLabels: + app: workflow-controller + application-crd-id: kubeflow-pipelines + template: + metadata: + labels: + app: workflow-controller + application-crd-id: kubeflow-pipelines + spec: + containers: + - args: + - --configmap + - workflow-controller-configmap + - --executor-image + - gcr.io/ml-pipeline/argoexec:v3.3.8-license-compliance + command: + - workflow-controller + env: + - name: LEADER_ELECTION_IDENTITY + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + image: gcr.io/ml-pipeline/workflow-controller:v3.3.8-license-compliance + livenessProbe: + failureThreshold: 3 + httpGet: + path: /healthz + port: 6060 + initialDelaySeconds: 90 + periodSeconds: 60 + timeoutSeconds: 30 + name: workflow-controller + ports: + - containerPort: 9090 + name: metrics + - containerPort: 6060 + resources: + requests: + cpu: 100m + memory: 500Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + nodeSelector: + kubernetes.io/os: linux + priorityClassName: workflow-controller + securityContext: + runAsNonRoot: true + serviceAccountName: argo +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: authservice + namespace: istio-system +spec: + replicas: 1 + selector: + matchLabels: + app: authservice + serviceName: authservice + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + labels: + app: authservice + spec: + containers: + - envFrom: + - secretRef: + name: oidc-authservice-client + - configMapRef: + name: oidc-authservice-parameters + image: gcr.io/arrikto/kubeflow/oidc-authservice:e236439 + imagePullPolicy: Always + name: authservice + ports: + - containerPort: 8080 + name: http-api + readinessProbe: + httpGet: + path: / + port: 8081 + volumeMounts: + - mountPath: /var/lib/authservice + name: data + securityContext: + fsGroup: 111 + serviceAccountName: authservice + volumes: + - name: data + persistentVolumeClaim: + claimName: authservice-pvc +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + app: metacontroller + application-crd-id: kubeflow-pipelines + kustomize.component: metacontroller + name: metacontroller + namespace: kubeflow +spec: + replicas: 1 + selector: + matchLabels: + app: metacontroller + application-crd-id: kubeflow-pipelines + kustomize.component: metacontroller + serviceName: "" + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + labels: + app: metacontroller + application-crd-id: kubeflow-pipelines + kustomize.component: metacontroller + spec: + containers: + - command: + - /usr/bin/metacontroller + - --zap-log-level=4 + - --discovery-interval=3600s + image: docker.io/metacontrollerio/metacontroller:v2.0.4 + name: metacontroller + resources: + limits: + cpu: "1" + memory: 1Gi + requests: + cpu: 100m + memory: 256Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + privileged: false + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 1000 + serviceAccountName: meta-controller-service + volumeClaimTemplates: [] +--- +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-webhook + namespace: knative-eventing +spec: + minAvailable: 80% + selector: + matchLabels: + app: eventing-webhook + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + kustomize.component: knative +--- +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app.kubernetes.io/component: activator + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: activator-pdb + namespace: knative-serving +spec: + minAvailable: 80% + selector: + matchLabels: + app: activator +--- +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app.kubernetes.io/component: webhook + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: webhook-pdb + namespace: knative-serving +spec: + minAvailable: 80% + selector: + matchLabels: + app: webhook +--- +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + labels: + app: cluster-local-gateway + install.operator.istio.io/owning-resource: unknown + istio: cluster-local-gateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: cluster-local-gateway + namespace: istio-system +spec: + maxReplicas: 5 + metrics: + - resource: + name: cpu + target: + averageUtilization: 80 + type: Utilization + type: Resource + minReplicas: 1 + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: cluster-local-gateway +--- +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + labels: + app: istio-ingressgateway + install.operator.istio.io/owning-resource: unknown + istio: ingressgateway + istio.io/rev: default + operator.istio.io/component: IngressGateways + release: istio + name: istio-ingressgateway + namespace: istio-system +spec: + maxReplicas: 5 + metrics: + - resource: + name: cpu + target: + averageUtilization: 80 + type: Utilization + type: Resource + minReplicas: 1 + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: istio-ingressgateway +--- +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + labels: + app: istiod + install.operator.istio.io/owning-resource: unknown + istio.io/rev: default + operator.istio.io/component: Pilot + release: istio + name: istiod + namespace: istio-system +spec: + maxReplicas: 5 + metrics: + - resource: + name: cpu + target: + averageUtilization: 80 + type: Utilization + type: Resource + minReplicas: 1 + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: istiod +--- +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: eventing-webhook + namespace: knative-eventing +spec: + maxReplicas: 5 + metrics: + - resource: + name: cpu + target: + averageUtilization: 100 + type: Utilization + type: Resource + minReplicas: 1 + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: eventing-webhook +--- +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + labels: + app.kubernetes.io/component: activator + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: activator + namespace: knative-serving +spec: + maxReplicas: 20 + metrics: + - resource: + name: cpu + target: + averageUtilization: 100 + type: Utilization + type: Resource + minReplicas: 1 + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: activator +--- +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + labels: + app.kubernetes.io/component: webhook + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: webhook + namespace: knative-serving +spec: + maxReplicas: 5 + metrics: + - resource: + name: cpu + target: + averageUtilization: 100 + type: Utilization + type: Resource + minReplicas: 1 + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: webhook +--- +apiVersion: caching.internal.knative.dev/v1alpha1 +kind: Image +metadata: + labels: + app.kubernetes.io/component: queue-proxy + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: queue-proxy + namespace: knative-serving +spec: + image: gcr.io/knative-releases/knative.dev/serving/cmd/queue@sha256:dabaecec38860ca4c972e6821d5dc825549faf50c6feb8feb4c04802f2338b8a +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + name: admission-webhook-cert + namespace: kubeflow +spec: + commonName: admission-webhook-service.kubeflow.svc + dnsNames: + - admission-webhook-service.kubeflow.svc + - admission-webhook-service.kubeflow.svc.cluster.local + isCA: true + issuerRef: + kind: Issuer + name: admission-webhook-selfsigned-issuer + secretName: webhook-certs +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: katib-webhook-cert + namespace: kubeflow +spec: + commonName: katib-controller.kubeflow.svc + dnsNames: + - katib-controller.kubeflow.svc + - katib-controller.kubeflow.svc.cluster.local + isCA: true + issuerRef: + kind: Issuer + name: katib-selfsigned-issuer + secretName: katib-webhook-cert +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + labels: + app: cache-server-cert-manager + name: kfp-cache-cert + namespace: kubeflow +spec: + commonName: kfp-cache-cert + dnsNames: + - cache-server + - cache-server.kubeflow + - cache-server.kubeflow.svc + isCA: true + issuerRef: + kind: Issuer + name: kfp-cache-selfsigned-issuer + secretName: webhook-server-tls +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: serving-cert + namespace: kubeflow +spec: + commonName: kserve-webhook-server-service.kubeflow.svc + dnsNames: + - kserve-webhook-server-service.kubeflow.svc + issuerRef: + kind: Issuer + name: admission-webhook-selfsigned-issuer + secretName: kserve-webhook-server-cert +--- +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + labels: + app.kubernetes.io/component: cert-manager + app.kubernetes.io/name: cert-manager + kustomize.component: cert-manager + name: kubeflow-self-signing-issuer + namespace: cert-manager +spec: + selfSigned: {} +--- +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + labels: + app: poddefaults + app.kubernetes.io/component: poddefaults + app.kubernetes.io/name: poddefaults + kustomize.component: poddefaults + name: admission-webhook-selfsigned-issuer + namespace: kubeflow +spec: + selfSigned: {} +--- +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: katib-selfsigned-issuer + namespace: kubeflow +spec: + selfSigned: {} +--- +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + labels: + app: cache-server-cert-manager + name: kfp-cache-selfsigned-issuer + namespace: kubeflow +spec: + selfSigned: {} +--- +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + labels: + app: kserve + app.kubernetes.io/name: kserve + name: selfsigned-issuer + namespace: kubeflow +spec: + selfSigned: {} +--- +apiVersion: kubeflow.org/v1beta1 +kind: Profile +metadata: + name: kubeflow-user-example-com +spec: + owner: + kind: User + name: user@example.com +--- +apiVersion: metacontroller.k8s.io/v1alpha1 +kind: CompositeController +metadata: + labels: + app: kubeflow-pipelines-profile-controller + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: kubeflow-pipelines-profile-controller + namespace: kubeflow +spec: + childResources: + - apiVersion: v1 + resource: secrets + updateStrategy: + method: OnDelete + - apiVersion: v1 + resource: configmaps + updateStrategy: + method: OnDelete + - apiVersion: apps/v1 + resource: deployments + updateStrategy: + method: InPlace + - apiVersion: v1 + resource: services + updateStrategy: + method: InPlace + - apiVersion: networking.istio.io/v1alpha3 + resource: destinationrules + updateStrategy: + method: InPlace + - apiVersion: security.istio.io/v1beta1 + resource: authorizationpolicies + updateStrategy: + method: InPlace + generateSelector: true + hooks: + sync: + webhook: + url: http://kubeflow-pipelines-profile-controller/sync + parentResource: + apiVersion: v1 + resource: namespaces + resyncPeriodSeconds: 3600 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + name: knative + namespace: knative-serving +spec: + host: '*.knative-serving.svc.cluster.local' + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app + namespace: kubeflow +spec: + host: jupyter-web-app-service.kubeflow.svc.cluster.local + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: metadata-grpc-service + namespace: kubeflow +spec: + host: metadata-grpc-service.kubeflow.svc.cluster.local + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline + namespace: kubeflow +spec: + host: ml-pipeline.kubeflow.svc.cluster.local + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: ml-pipeline-minio + namespace: kubeflow +spec: + host: minio-service.kubeflow.svc.cluster.local + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: ml-pipeline-mysql + namespace: kubeflow +spec: + host: mysql.kubeflow.svc.cluster.local + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui + namespace: kubeflow +spec: + host: ml-pipeline-ui.kubeflow.svc.cluster.local + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-visualizationserver + namespace: kubeflow +spec: + host: ml-pipeline-visualizationserver.kubeflow.svc.cluster.local + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + name: tensorboards-web-app + namespace: kubeflow +spec: + host: tensorboards-web-app-service.kubeflow.svc.cluster.local + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: DestinationRule +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + name: volumes-web-app + namespace: kubeflow +spec: + host: volumes-web-app-service.kubeflow.svc.cluster.local + trafficPolicy: + tls: + mode: ISTIO_MUTUAL +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + name: authn-filter + namespace: istio-system +spec: + configPatches: + - applyTo: HTTP_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.http_connection_manager + patch: + operation: INSERT_BEFORE + value: + name: envoy.filters.http.ext_authz + typed_config: + '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz + http_service: + authorization_request: + allowed_headers: + patterns: + - exact: authorization + - exact: cookie + - exact: x-auth-token + authorization_response: + allowed_upstream_headers: + patterns: + - exact: kubeflow-userid + server_uri: + cluster: outbound|8080||authservice.istio-system.svc.cluster.local + timeout: 10s + uri: http://authservice.istio-system.svc.cluster.local + workloadSelector: + labels: + istio: ingressgateway +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: stats-filter-1.13 + namespace: istio-system +spec: + configPatches: + - applyTo: HTTP_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.13.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_outbound + - applyTo: HTTP_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.13.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio", + "disable_host_header_fallback": true + } + root_id: stats_inbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_inbound + - applyTo: HTTP_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.13.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio", + "disable_host_header_fallback": true + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_outbound + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: stats-filter-1.14 + namespace: istio-system +spec: + configPatches: + - applyTo: HTTP_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.14.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_outbound + - applyTo: HTTP_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.14.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio", + "disable_host_header_fallback": true + } + root_id: stats_inbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_inbound + - applyTo: HTTP_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.14.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio", + "disable_host_header_fallback": true + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_outbound + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: stats-filter-1.15 + namespace: istio-system +spec: + configPatches: + - applyTo: HTTP_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.15.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_outbound + - applyTo: HTTP_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.15.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio", + "disable_host_header_fallback": true + } + root_id: stats_inbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_inbound + - applyTo: HTTP_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.15.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio", + "disable_host_header_fallback": true + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_outbound + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: stats-filter-1.16 + namespace: istio-system +spec: + configPatches: + - applyTo: HTTP_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.16.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_outbound + - applyTo: HTTP_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.16.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio", + "disable_host_header_fallback": true + } + root_id: stats_inbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_inbound + - applyTo: HTTP_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.16.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio", + "disable_host_header_fallback": true + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: stats_outbound + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: stats-filter-1.17 + namespace: istio-system +spec: + configPatches: + - applyTo: HTTP_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.17.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/stats.PluginConfig + value: {} + - applyTo: HTTP_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.17.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/stats.PluginConfig + value: + disable_host_header_fallback: true + - applyTo: HTTP_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.http_connection_manager + subFilter: + name: envoy.filters.http.router + proxy: + proxyVersion: ^1\.17.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/stats.PluginConfig + value: + disable_host_header_fallback: true + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: tcp-stats-filter-1.13 + namespace: istio-system +spec: + configPatches: + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.13.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_inbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_inbound + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.13.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_outbound + - applyTo: NETWORK_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.13.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_outbound + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: tcp-stats-filter-1.14 + namespace: istio-system +spec: + configPatches: + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.14.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_inbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_inbound + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.14.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_outbound + - applyTo: NETWORK_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.14.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_outbound + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: tcp-stats-filter-1.15 + namespace: istio-system +spec: + configPatches: + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.15.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_inbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_inbound + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.15.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_outbound + - applyTo: NETWORK_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.15.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_outbound + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: tcp-stats-filter-1.16 + namespace: istio-system +spec: + configPatches: + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.16.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_inbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_inbound + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.16.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_outbound + - applyTo: NETWORK_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.16.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm + value: + config: + configuration: + '@type': type.googleapis.com/google.protobuf.StringValue + value: | + { + "debug": "false", + "stat_prefix": "istio" + } + root_id: stats_outbound + vm_config: + code: + local: + inline_string: envoy.wasm.stats + runtime: envoy.wasm.runtime.null + vm_id: tcp_stats_outbound + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + labels: + istio.io/rev: default + name: tcp-stats-filter-1.17 + namespace: istio-system +spec: + configPatches: + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_INBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.17.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/stats.PluginConfig + value: {} + - applyTo: NETWORK_FILTER + match: + context: SIDECAR_OUTBOUND + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.17.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/stats.PluginConfig + value: {} + - applyTo: NETWORK_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.filters.network.tcp_proxy + proxy: + proxyVersion: ^1\.17.* + patch: + operation: INSERT_BEFORE + value: + name: istio.stats + typed_config: + '@type': type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/stats.PluginConfig + value: {} + priority: -1 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: EnvoyFilter +metadata: + name: x-forwarded-host + namespace: istio-system +spec: + configPatches: + - applyTo: HTTP_FILTER + match: + context: GATEWAY + listener: + filterChain: + filter: + name: envoy.http_connection_manager + subFilter: + name: envoy.router + patch: + operation: INSERT_BEFORE + value: + name: envoy.filters.http.lua + typed_config: + '@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua + inlineCode: | + function envoy_on_request(request_handle) + local host = request_handle:headers():get(":authority") + request_handle:headers():add("x-forwarded-host", host) + end + workloadSelector: + labels: + istio: ingressgateway +--- +apiVersion: networking.istio.io/v1alpha3 +kind: Gateway +metadata: + labels: + release: istio + name: cluster-local-gateway + namespace: istio-system +spec: + selector: + app: cluster-local-gateway + istio: cluster-local-gateway + servers: + - hosts: + - '*' + port: + name: http + number: 80 + protocol: HTTP +--- +apiVersion: networking.istio.io/v1alpha3 +kind: Gateway +metadata: + labels: + release: istio + name: istio-ingressgateway + namespace: istio-system +spec: + selector: + app: istio-ingressgateway + istio: ingressgateway + servers: + - hosts: + - '*' + port: + name: http + number: 80 + protocol: HTTP +--- +apiVersion: networking.istio.io/v1alpha3 +kind: Gateway +metadata: + name: kubeflow-gateway + namespace: kubeflow +spec: + selector: + istio: ingressgateway + servers: + - hosts: + - '*' + port: + name: http + number: 80 + protocol: HTTP +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: dex + namespace: auth +spec: + gateways: + - kubeflow/kubeflow-gateway + hosts: + - '*' + http: + - match: + - uri: + prefix: /dex/ + route: + - destination: + host: dex.auth.svc.cluster.local + port: + number: 5556 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: centraldashboard + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - match: + - uri: + prefix: / + rewrite: + uri: / + route: + - destination: + host: centraldashboard.kubeflow.svc.cluster.local + port: + number: 80 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app-jupyter-web-app + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - headers: + request: + add: + x-forwarded-prefix: /jupyter + match: + - uri: + prefix: /jupyter/ + rewrite: + uri: / + route: + - destination: + host: jupyter-web-app-service.kubeflow.svc.cluster.local + port: + number: 80 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: katib-ui + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - match: + - uri: + prefix: /katib/ + rewrite: + uri: /katib/ + route: + - destination: + host: katib-ui.kubeflow.svc.cluster.local + port: + number: 80 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: metadata-grpc + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - match: + - uri: + prefix: /ml_metadata + rewrite: + uri: /ml_metadata + route: + - destination: + host: metadata-envoy-service.kubeflow.svc.cluster.local + port: + number: 9090 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - match: + - uri: + prefix: /pipeline + rewrite: + uri: /pipeline + route: + - destination: + host: ml-pipeline-ui.kubeflow.svc.cluster.local + port: + number: 80 + timeout: 300s +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + labels: + kustomize.component: profiles + name: profiles-kfam + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - headers: + request: + add: + x-forwarded-prefix: /kfam + match: + - uri: + prefix: /kfam/ + rewrite: + uri: /kfam/ + route: + - destination: + host: profiles-kfam.kubeflow.svc.cluster.local + port: + number: 8081 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + name: tensorboards-web-app-tensorboards-web-app + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - headers: + request: + add: + x-forwarded-prefix: /tensorboards + match: + - uri: + prefix: /tensorboards/ + rewrite: + uri: / + route: + - destination: + host: tensorboards-web-app-service.kubeflow.svc.cluster.local + port: + number: 80 +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + name: volumes-web-app-volumes-web-app + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - headers: + request: + add: + x-forwarded-prefix: /volumes + match: + - uri: + prefix: /volumes/ + rewrite: + uri: / + route: + - destination: + host: volumes-web-app-service.kubeflow.svc.cluster.local + port: + number: 80 +--- +apiVersion: networking.istio.io/v1beta1 +kind: Gateway +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: knative-local-gateway + namespace: knative-serving +spec: + selector: + app: cluster-local-gateway + istio: cluster-local-gateway + servers: + - hosts: + - '*' + port: + name: http + number: 8081 + protocol: HTTP +--- +apiVersion: networking.istio.io/v1beta1 +kind: VirtualService +metadata: + labels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + name: kserve-models-web-app + namespace: kubeflow +spec: + gateways: + - kubeflow/kubeflow-gateway + hosts: + - '*' + http: + - match: + - uri: + prefix: /kserve-endpoints/ + rewrite: + uri: / + route: + - destination: + host: kserve-models-web-app.kubeflow.svc.cluster.local + port: + number: 80 +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + name: cluster-local-gateway + namespace: istio-system +spec: + action: ALLOW + rules: + - {} + selector: + matchLabels: + app: cluster-local-gateway + istio: cluster-local-gateway +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + name: global-deny-all + namespace: istio-system +spec: {} +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + name: istio-ingressgateway + namespace: istio-system +spec: + action: ALLOW + rules: + - {} + selector: + matchLabels: + app: istio-ingressgateway + istio: ingressgateway +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + name: activator-service + namespace: knative-serving +spec: + action: ALLOW + rules: + - {} + selector: + matchLabels: + app: activator +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + name: autoscaler + namespace: knative-serving +spec: + action: ALLOW + rules: + - {} + selector: + matchLabels: + app: autoscaler +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + name: controller + namespace: knative-serving +spec: + action: ALLOW + rules: + - {} + selector: + matchLabels: + app: controller +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + name: istio-webhook + namespace: knative-serving +spec: + action: ALLOW + rules: + - {} + selector: + matchLabels: + app: net-istio-webhook +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + name: webhook + namespace: knative-serving +spec: + action: ALLOW + rules: + - {} + selector: + matchLabels: + role: webhook +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + app: centraldashboard + app.kubernetes.io/component: centraldashboard + app.kubernetes.io/name: centraldashboard + kustomize.component: centraldashboard + name: central-dashboard + namespace: kubeflow +spec: + action: ALLOW + rules: + - from: + - source: + principals: + - cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account + selector: + matchLabels: + app: centraldashboard +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + app: jupyter-web-app + kustomize.component: jupyter-web-app + name: jupyter-web-app + namespace: kubeflow +spec: + action: ALLOW + rules: + - from: + - source: + principals: + - cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account + selector: + matchLabels: + app: jupyter-web-app +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + name: katib-ui + namespace: kubeflow +spec: + action: ALLOW + rules: + - from: + - source: + principals: + - cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account + selector: + matchLabels: + katib.kubeflow.org/component: ui +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app + name: kserve-models-web-app + namespace: kubeflow +spec: + action: ALLOW + rules: + - from: + - source: + principals: + - cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account + selector: + matchLabels: + app: kserve + app.kubernetes.io/component: kserve-models-web-app + app.kubernetes.io/name: kserve + kustomize.component: kserve-models-web-app +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: metadata-grpc-service + namespace: kubeflow +spec: + action: ALLOW + rules: + - {} + selector: + matchLabels: + component: metadata-grpc-server +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: minio-service + namespace: kubeflow +spec: + action: ALLOW + rules: + - from: + - source: + principals: + - cluster.local/ns/kubeflow/sa/ml-pipeline + - from: + - source: + principals: + - cluster.local/ns/kubeflow/sa/ml-pipeline-ui + - {} + selector: + matchLabels: + app: minio +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline + namespace: kubeflow +spec: + rules: + - from: + - source: + principals: + - cluster.local/ns/kubeflow/sa/ml-pipeline + - cluster.local/ns/kubeflow/sa/ml-pipeline-ui + - cluster.local/ns/kubeflow/sa/ml-pipeline-persistenceagent + - cluster.local/ns/kubeflow/sa/ml-pipeline-scheduledworkflow + - cluster.local/ns/kubeflow/sa/ml-pipeline-viewer-crd-service-account + - cluster.local/ns/kubeflow/sa/kubeflow-pipelines-cache + - when: + - key: request.headers[kubeflow-userid] + notValues: + - '*' + selector: + matchLabels: + app: ml-pipeline +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-ui + namespace: kubeflow +spec: + rules: + - from: + - source: + namespaces: + - istio-system + selector: + matchLabels: + app: ml-pipeline-ui +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: ml-pipeline-visualizationserver + namespace: kubeflow +spec: + rules: + - from: + - source: + principals: + - cluster.local/ns/kubeflow/sa/ml-pipeline + - cluster.local/ns/kubeflow/sa/ml-pipeline-ui + - cluster.local/ns/kubeflow/sa/ml-pipeline-persistenceagent + - cluster.local/ns/kubeflow/sa/ml-pipeline-scheduledworkflow + - cluster.local/ns/kubeflow/sa/ml-pipeline-viewer-crd-service-account + - cluster.local/ns/kubeflow/sa/kubeflow-pipelines-cache + selector: + matchLabels: + app: ml-pipeline-visualizationserver +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + application-crd-id: kubeflow-pipelines + name: mysql + namespace: kubeflow +spec: + rules: + - from: + - source: + principals: + - cluster.local/ns/kubeflow/sa/ml-pipeline + - cluster.local/ns/kubeflow/sa/ml-pipeline-ui + - cluster.local/ns/kubeflow/sa/ml-pipeline-persistenceagent + - cluster.local/ns/kubeflow/sa/ml-pipeline-scheduledworkflow + - cluster.local/ns/kubeflow/sa/ml-pipeline-viewer-crd-service-account + - cluster.local/ns/kubeflow/sa/kubeflow-pipelines-cache + - cluster.local/ns/kubeflow/sa/metadata-grpc-server + selector: + matchLabels: + app: mysql +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + kustomize.component: profiles + name: profiles-kfam + namespace: kubeflow +spec: + action: ALLOW + rules: + - from: + - source: + principals: + - cluster.local/ns/kubeflow/sa/centraldashboard + selector: + matchLabels: + kustomize.component: profiles +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + app.kubernetes.io/component: ml-pipeline + app.kubernetes.io/name: kubeflow-pipelines + application-crd-id: kubeflow-pipelines + name: service-cache-server + namespace: kubeflow +spec: + rules: + - {} + selector: + matchLabels: + app: cache-server +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + app: tensorboards-web-app + kustomize.component: tensorboards-web-app + name: tensorboards-web-app + namespace: kubeflow +spec: + action: ALLOW + rules: + - from: + - source: + principals: + - cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account + selector: + matchLabels: + app: tensorboards-web-app +--- +apiVersion: security.istio.io/v1beta1 +kind: AuthorizationPolicy +metadata: + labels: + app: volumes-web-app + kustomize.component: volumes-web-app + name: volumes-web-app + namespace: kubeflow +spec: + action: ALLOW + rules: + - from: + - source: + principals: + - cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account + selector: + matchLabels: + app: volumes-web-app +--- +apiVersion: security.istio.io/v1beta1 +kind: PeerAuthentication +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: domainmapping-webhook + namespace: knative-serving +spec: + portLevelMtls: + "8443": + mode: PERMISSIVE + selector: + matchLabels: + app: domainmapping-webhook +--- +apiVersion: security.istio.io/v1beta1 +kind: PeerAuthentication +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: net-istio-webhook + namespace: knative-serving +spec: + portLevelMtls: + "8443": + mode: PERMISSIVE + selector: + matchLabels: + app: net-istio-webhook +--- +apiVersion: security.istio.io/v1beta1 +kind: PeerAuthentication +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: webhook + namespace: knative-serving +spec: + portLevelMtls: + "8443": + mode: PERMISSIVE + selector: + matchLabels: + app: webhook +--- +apiVersion: serving.kserve.io/v1alpha1 +kind: ClusterServingRuntime +metadata: + name: kserve-lgbserver +spec: + annotations: + prometheus.kserve.io/path: /metrics + prometheus.kserve.io/port: "8080" + containers: + - args: + - --model_name={{ "{{" }}.Name}} + - --model_dir=/mnt/models + - --http_port=8080 + - --nthread=1 + image: kserve/lgbserver:v0.10.0 + name: kserve-container + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: "1" + memory: 2Gi + protocolVersions: + - v1 + supportedModelFormats: + - autoSelect: true + name: lightgbm + version: "3" +--- +apiVersion: serving.kserve.io/v1alpha1 +kind: ClusterServingRuntime +metadata: + name: kserve-mlserver +spec: + annotations: + prometheus.kserve.io/path: /metrics + prometheus.kserve.io/port: "8080" + containers: + - env: + - name: MLSERVER_MODEL_IMPLEMENTATION + value: '{{ "{{" }}.Labels.modelClass}}' + - name: MLSERVER_HTTP_PORT + value: "8080" + - name: MLSERVER_GRPC_PORT + value: "9000" + - name: MODELS_DIR + value: /mnt/models + image: docker.io/seldonio/mlserver:1.0.0 + name: kserve-container + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: "1" + memory: 2Gi + protocolVersions: + - v2 + supportedModelFormats: + - autoSelect: true + name: sklearn + version: "0" + - autoSelect: true + name: xgboost + version: "1" + - autoSelect: true + name: lightgbm + version: "3" + - autoSelect: true + name: mlflow + version: "1" +--- +apiVersion: serving.kserve.io/v1alpha1 +kind: ClusterServingRuntime +metadata: + name: kserve-paddleserver +spec: + annotations: + prometheus.kserve.io/path: /metrics + prometheus.kserve.io/port: "8080" + containers: + - args: + - --model_name={{ "{{" }}.Name}} + - --model_dir=/mnt/models + - --http_port=8080 + image: kserve/paddleserver:v0.10.0 + name: kserve-container + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: "1" + memory: 2Gi + protocolVersions: + - v1 + supportedModelFormats: + - autoSelect: true + name: paddle + version: "2" +--- +apiVersion: serving.kserve.io/v1alpha1 +kind: ClusterServingRuntime +metadata: + name: kserve-pmmlserver +spec: + annotations: + prometheus.kserve.io/path: /metrics + prometheus.kserve.io/port: "8080" + containers: + - args: + - --model_name={{ "{{" }}.Name}} + - --model_dir=/mnt/models + - --http_port=8080 + image: kserve/pmmlserver:v0.10.0 + name: kserve-container + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: "1" + memory: 2Gi + protocolVersions: + - v1 + supportedModelFormats: + - autoSelect: true + name: pmml + version: "3" + - autoSelect: true + name: pmml + version: "4" +--- +apiVersion: serving.kserve.io/v1alpha1 +kind: ClusterServingRuntime +metadata: + name: kserve-sklearnserver +spec: + annotations: + prometheus.kserve.io/path: /metrics + prometheus.kserve.io/port: "8080" + containers: + - args: + - --model_name={{ "{{" }}.Name}} + - --model_dir=/mnt/models + - --http_port=8080 + image: kserve/sklearnserver:v0.10.0 + name: kserve-container + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: "1" + memory: 2Gi + protocolVersions: + - v1 + supportedModelFormats: + - autoSelect: true + name: sklearn + version: "1" +--- +apiVersion: serving.kserve.io/v1alpha1 +kind: ClusterServingRuntime +metadata: + name: kserve-tensorflow-serving +spec: + annotations: + prometheus.kserve.io/path: /metrics + prometheus.kserve.io/port: "8080" + containers: + - args: + - --model_name={{ "{{" }}.Name}} + - --port=9000 + - --rest_api_port=8080 + - --model_base_path=/mnt/models + - --rest_api_timeout_in_ms=60000 + command: + - /usr/bin/tensorflow_model_server + image: tensorflow/serving:2.6.2 + name: kserve-container + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: "1" + memory: 2Gi + protocolVersions: + - v1 + - grpc-v1 + supportedModelFormats: + - autoSelect: true + name: tensorflow + version: "1" + - autoSelect: true + name: tensorflow + version: "2" +--- +apiVersion: serving.kserve.io/v1alpha1 +kind: ClusterServingRuntime +metadata: + name: kserve-torchserve +spec: + annotations: + prometheus.kserve.io/path: /metrics + prometheus.kserve.io/port: "8082" + containers: + - args: + - torchserve + - --start + - --model-store=/mnt/models/model-store + - --ts-config=/mnt/models/config/config.properties + env: + - name: TS_SERVICE_ENVELOPE + value: '{{ "{{" }}.Labels.serviceEnvelope}}' + image: pytorch/torchserve-kfs:0.7.0 + name: kserve-container + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: "1" + memory: 2Gi + protocolVersions: + - v1 + - v2 + - grpc-v1 + supportedModelFormats: + - autoSelect: true + name: pytorch + version: "1" +--- +apiVersion: serving.kserve.io/v1alpha1 +kind: ClusterServingRuntime +metadata: + name: kserve-tritonserver +spec: + annotations: + prometheus.kserve.io/path: /metrics + prometheus.kserve.io/port: "8002" + containers: + - args: + - tritonserver + - --model-store=/mnt/models + - --grpc-port=9000 + - --http-port=8080 + - --allow-grpc=true + - --allow-http=true + image: nvcr.io/nvidia/tritonserver:21.09-py3 + name: kserve-container + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: "1" + memory: 2Gi + protocolVersions: + - v2 + - grpc-v2 + supportedModelFormats: + - autoSelect: true + name: tensorrt + version: "8" + - autoSelect: true + name: tensorflow + version: "1" + - autoSelect: true + name: tensorflow + version: "2" + - autoSelect: true + name: onnx + version: "1" + - name: pytorch + version: "1" + - autoSelect: true + name: triton + version: "2" +--- +apiVersion: serving.kserve.io/v1alpha1 +kind: ClusterServingRuntime +metadata: + name: kserve-xgbserver +spec: + annotations: + prometheus.kserve.io/path: /metrics + prometheus.kserve.io/port: "8080" + containers: + - args: + - --model_name={{ "{{" }}.Name}} + - --model_dir=/mnt/models + - --http_port=8080 + - --nthread=1 + image: kserve/xgbserver:v0.10.0 + name: kserve-container + resources: + limits: + cpu: "1" + memory: 2Gi + requests: + cpu: "1" + memory: 2Gi + protocolVersions: + - v1 + supportedModelFormats: + - autoSelect: true + name: xgboost + version: "1" +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from-secret: cert-manager/cert-manager-webhook-ca + labels: + app: webhook + app.kubernetes.io/component: webhook + app.kubernetes.io/instance: cert-manager + app.kubernetes.io/name: webhook + app.kubernetes.io/version: v1.12.2 + name: cert-manager-webhook +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: cert-manager-webhook + namespace: cert-manager + path: /validate + failurePolicy: Fail + matchPolicy: Equivalent + name: webhook.cert-manager.io + namespaceSelector: + matchExpressions: + - key: cert-manager.io/disable-validation + operator: NotIn + values: + - "true" + - key: name + operator: NotIn + values: + - cert-manager + rules: + - apiGroups: + - cert-manager.io + - acme.cert-manager.io + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + resources: + - '*/*' + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: config.webhook.eventing.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: eventing-webhook + namespace: knative-eventing + failurePolicy: Ignore + name: config.webhook.eventing.knative.dev + namespaceSelector: + matchExpressions: null + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.1 + networking.knative.dev/ingress-provider: istio + name: config.webhook.istio.networking.internal.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: net-istio-webhook + namespace: knative-serving + failurePolicy: Fail + name: config.webhook.istio.networking.internal.knative.dev + objectSelector: + matchLabels: + app.kubernetes.io/component: net-istio + app.kubernetes.io/name: knative-serving + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: webhook + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: config.webhook.serving.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: webhook + namespace: knative-serving + failurePolicy: Fail + name: config.webhook.serving.knative.dev + objectSelector: + matchExpressions: + - key: app.kubernetes.io/name + operator: In + values: + - knative-serving + - key: app.kubernetes.io/component + operator: In + values: + - autoscaler + - controller + - logging + - networking + - observability + - tracing + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: kubeflow/serving-cert + labels: + app: kserve + app.kubernetes.io/name: kserve + name: inferencegraph.serving.kserve.io +webhooks: +- admissionReviewVersions: + - v1beta1 + clientConfig: + caBundle: Cg== + service: + name: kserve-webhook-server-service + namespace: kubeflow + path: /validate-serving-kserve-io-v1alpha1-inferencegraph + failurePolicy: Fail + name: inferencegraph.kserve-webhook-server.validator + rules: + - apiGroups: + - serving.kserve.io + apiVersions: + - v1alpha1 + operations: + - CREATE + - UPDATE + resources: + - inferencegraphs + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: kubeflow/serving-cert + labels: + app: kserve + app.kubernetes.io/name: kserve + name: inferenceservice.serving.kserve.io +webhooks: +- admissionReviewVersions: + - v1beta1 + clientConfig: + caBundle: Cg== + service: + name: kserve-webhook-server-service + namespace: kubeflow + path: /validate-serving-kserve-io-v1beta1-inferenceservice + failurePolicy: Fail + name: inferenceservice.kserve-webhook-server.validator + rules: + - apiGroups: + - serving.kserve.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - inferenceservices + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + labels: + app: istiod + istio: istiod + istio.io/rev: default + release: istio + name: istio-validator-istio-system +webhooks: +- admissionReviewVersions: + - v1beta1 + - v1 + clientConfig: + service: + name: istiod + namespace: istio-system + path: /validate + failurePolicy: Ignore + name: rev.validation.istio.io + objectSelector: + matchExpressions: + - key: istio.io/rev + operator: In + values: + - default + rules: + - apiGroups: + - security.istio.io + - networking.istio.io + - telemetry.istio.io + - extensions.istio.io + apiVersions: + - '*' + operations: + - CREATE + - UPDATE + resources: + - '*' + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: kubeflow/katib-webhook-cert + name: katib.kubeflow.org +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + caBundle: Cg== + service: + name: katib-controller + namespace: kubeflow + path: /validate-experiment + name: validator.experiment.katib.kubeflow.org + rules: + - apiGroups: + - kubeflow.org + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - experiments + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: kubeflow/serving-cert + labels: + app: kserve + app.kubernetes.io/name: kserve + name: trainedmodel.serving.kserve.io +webhooks: +- admissionReviewVersions: + - v1beta1 + clientConfig: + caBundle: Cg== + service: + name: kserve-webhook-server-service + namespace: kubeflow + path: /validate-serving-kserve-io-v1alpha1-trainedmodel + failurePolicy: Fail + name: trainedmodel.kserve-webhook-server.validator + rules: + - apiGroups: + - serving.kserve.io + apiVersions: + - v1alpha1 + operations: + - CREATE + - UPDATE + resources: + - trainedmodels + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: domain-mapping + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: validation.webhook.domainmapping.serving.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: domainmapping-webhook + namespace: knative-serving + failurePolicy: Fail + name: validation.webhook.domainmapping.serving.knative.dev + rules: + - apiGroups: + - serving.knative.dev + apiVersions: + - '*' + operations: + - CREATE + - UPDATE + - DELETE + resources: + - domainmappings + - domainmappings/status + scope: '*' + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: knative-eventing + app.kubernetes.io/name: knative-eventing + app.kubernetes.io/version: 1.10.1 + kustomize.component: knative + name: validation.webhook.eventing.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: eventing-webhook + namespace: knative-eventing + failurePolicy: Fail + name: validation.webhook.eventing.knative.dev + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + labels: + app.kubernetes.io/component: webhook + app.kubernetes.io/name: knative-serving + app.kubernetes.io/version: 1.10.2 + name: validation.webhook.serving.knative.dev +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: webhook + namespace: knative-serving + failurePolicy: Fail + name: validation.webhook.serving.knative.dev + rules: + - apiGroups: + - autoscaling.internal.knative.dev + - networking.internal.knative.dev + - serving.knative.dev + apiVersions: + - '*' + operations: + - CREATE + - UPDATE + - DELETE + resources: + - metrics + - podautoscalers + - certificates + - ingresses + - serverlessservices + - configurations + - revisions + - routes + - services + scope: '*' + sideEffects: None + timeoutSeconds: 10 diff --git a/deploy/addons/kubetail/kubetail-cli.yaml b/deploy/addons/kubetail/kubetail-cli.yaml new file mode 100644 index 000000000000..87df4910c485 --- /dev/null +++ b/deploy/addons/kubetail/kubetail-cli.yaml @@ -0,0 +1,54 @@ +kind: ServiceAccount +apiVersion: v1 +metadata: + name: kubetail-cli + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cli +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: kubetail-cli + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cli +rules: +- apiGroups: [""] + resources: [nodes] + verbs: [get, list, watch] +- apiGroups: ["", apps, batch] + resources: [cronjobs, daemonsets, deployments, jobs, pods, replicasets, statefulsets] + verbs: [get, list, watch] +- apiGroups: [""] + resources: [pods/log] + verbs: [list, watch] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: kubetail-cli + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cli +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kubetail-cli +subjects: +- kind: ServiceAccount + name: kubetail-cli + namespace: kubetail-system diff --git a/deploy/addons/kubetail/kubetail-cluster-agent.yaml.tmpl b/deploy/addons/kubetail/kubetail-cluster-agent.yaml.tmpl new file mode 100644 index 000000000000..7e56631c056b --- /dev/null +++ b/deploy/addons/kubetail/kubetail-cluster-agent.yaml.tmpl @@ -0,0 +1,175 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: kubetail-cluster-agent + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-agent +data: + config.yaml: | + cluster-agent: + addr: :50051 + logging: + enabled: true + format: json + level: info + tls: + cert-file: null + enabled: false + key-file: null +--- +kind: ServiceAccount +apiVersion: v1 +automountServiceAccountToken: true +metadata: + name: kubetail-cluster-agent + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-agent +--- +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: kubetail-cluster-agent + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-agent +spec: + selector: + matchLabels: + app.kubernetes.io/name: kubetail + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-agent + template: + metadata: + labels: + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-agent + spec: + automountServiceAccountToken: true + serviceAccountName: kubetail-cluster-agent + securityContext: + fsGroup: 0 + containers: + - name: kubetail-cluster-agent + image: {{.CustomRegistries.Kubetail | default .ImageRepository | default .Registries.Kubetail }}{{.Images.KubetailClusterAgent}} + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - DAC_READ_SEARCH + drop: + - ALL + readOnlyRootFilesystem: true + runAsGroup: 1000 + runAsUser: 1000 + imagePullPolicy: IfNotPresent + args: + - --config=/etc/kubetail/config.yaml + ports: + - name: grpc + protocol: TCP + containerPort: 50051 + livenessProbe: + grpc: + port: 50051 + initialDelaySeconds: 5 + timeoutSeconds: 30 + periodSeconds: 3 + failureThreshold: 3 + readinessProbe: + grpc: + port: 50051 + initialDelaySeconds: 5 + timeoutSeconds: 30 + periodSeconds: 3 + failureThreshold: 3 + volumeMounts: + - name: config + mountPath: /etc/kubetail + readOnly: true + - name: varlog + mountPath: /var/log + readOnly: true + - name: varlibdockercontainers + mountPath: /var/lib/docker/containers + readOnly: true + volumes: + - name: config + configMap: + name: kubetail-cluster-agent + - name: varlog + hostPath: + path: /var/log + - name: varlibdockercontainers + hostPath: + path: /var/lib/docker/containers + tolerations: + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Exists +--- +kind: Service +apiVersion: v1 +metadata: + name: kubetail-cluster-agent + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-agent +spec: + clusterIP: None + selector: + app.kubernetes.io/name: kubetail + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-agent +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: kubetail-cluster-agent + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-agent +spec: + podSelector: + matchLabels: + app.kubernetes.io/name: kubetail + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-agent + ingress: + - from: + - podSelector: + matchLabels: + app.kubernetes.io/name: kubetail + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api diff --git a/deploy/addons/kubetail/kubetail-cluster-api.yaml.tmpl b/deploy/addons/kubetail/kubetail-cluster-api.yaml.tmpl new file mode 100644 index 000000000000..2e240c4f6b96 --- /dev/null +++ b/deploy/addons/kubetail/kubetail-cluster-api.yaml.tmpl @@ -0,0 +1,226 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: kubetail-cluster-api + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api +data: + config.yaml: | + cluster-api: + addr: :8080 + base-path: / + cluster-agent: + dispatch-url: "kubernetes://kubetail-cluster-agent:50051" + csrf: + enabled: true + gin-mode: release + logging: + access-log: + enabled: true + hide-health-checks: true + enabled: true + format: json + level: info + tls: + cert-file: null + enabled: false + key-file: null +--- +kind: ServiceAccount +apiVersion: v1 +automountServiceAccountToken: true +metadata: + name: kubetail-cluster-api + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: "kubetail" + app.kubernetes.io/component: "cluster-api" +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: kubetail-cluster-api + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api +rules: +- apiGroups: [""] + resources: [nodes] + verbs: [get, list, watch] +- apiGroups: ["", apps, batch] + resources: [cronjobs, daemonsets, deployments, jobs, pods, replicasets, statefulsets] + verbs: [get, list, watch] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: kubetail-cluster-api + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kubetail-cluster-api +subjects: +- kind: ServiceAccount + name: kubetail-cluster-api + namespace: kubetail-system +--- +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + namespace: kubetail-system + name: kubetail-cluster-api + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api +rules: +- apiGroups: [discovery.k8s.io] + resources: [endpointslices] + verbs: [list, watch] +--- +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + namespace: kubetail-system + name: kubetail-cluster-api + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubetail-cluster-api +subjects: +- kind: ServiceAccount + name: kubetail-cluster-api + namespace: kubetail-system +--- +kind: Deployment +apiVersion: apps/v1 +metadata: + name: kubetail-cluster-api + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api +spec: + replicas: 1 + revisionHistoryLimit: 5 + selector: + matchLabels: + app.kubernetes.io/name: kubetail + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api + strategy: + type: RollingUpdate + template: + metadata: + labels: + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api + spec: + automountServiceAccountToken: true + serviceAccountName: kubetail-cluster-api + containers: + - name: kubetail-cluster-api + image: {{.CustomRegistries.Kubetail | default .ImageRepository | default .Registries.Kubetail }}{{.Images.KubetailClusterAPI}} + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsGroup: 1000 + runAsUser: 1000 + imagePullPolicy: IfNotPresent + args: + - --config=/etc/kubetail/config.yaml + ports: + - name: http + protocol: TCP + containerPort: 8080 + livenessProbe: + httpGet: + scheme: HTTP + path: /healthz + port: http + initialDelaySeconds: 30 + timeoutSeconds: 30 + periodSeconds: 10 + failureThreshold: 3 + readinessProbe: + httpGet: + scheme: HTTP + path: /healthz + port: http + initialDelaySeconds: 30 + timeoutSeconds: 30 + periodSeconds: 10 + failureThreshold: 3 + volumeMounts: + - name: config + mountPath: /etc/kubetail + readOnly: true + volumes: + - name: config + configMap: + name: kubetail-cluster-api +--- +kind: Service +apiVersion: v1 +metadata: + name: kubetail-cluster-api + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: kubetail + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: cluster-api + ports: + - name: http + protocol: TCP + port: 8080 + targetPort: http + appProtocol: http diff --git a/deploy/addons/kubetail/kubetail-dashboard.yaml.tmpl b/deploy/addons/kubetail/kubetail-dashboard.yaml.tmpl new file mode 100644 index 000000000000..117ca7ada0ed --- /dev/null +++ b/deploy/addons/kubetail/kubetail-dashboard.yaml.tmpl @@ -0,0 +1,239 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: kubetail-dashboard + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard +data: + config.yaml: | + dashboard: + addr: :8080 + auth-mode: auto + cluster-api-endpoint: "http://kubetail-cluster-api:8080" + environment: cluster + ui: + cluster-api-enabled: true + base-path: / + csrf: + enabled: true + gin-mode: release + logging: + access-log: + enabled: true + hide-health-checks: true + enabled: true + format: json + level: info + session: + cookie: + domain: null + http-only: true + max-age: 1092000 + name: kubetail_dashboard_session + path: / + same-site: lax + secure: false + secret: ${KUBETAIL_DASHBOARD_SESSION_SECRET} + tls: + cert-file: null + enabled: false + key-file: null +--- +kind: ServiceAccount +apiVersion: v1 +automountServiceAccountToken: true +metadata: + name: kubetail-dashboard + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: kubetail-dashboard + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard +rules: +- apiGroups: [""] + resources: [namespaces, nodes] + verbs: [get, list, watch] +- apiGroups: ["", apps, batch] + resources: [cronjobs, daemonsets, deployments, jobs, pods, pods/log, replicasets, statefulsets] + verbs: [get, list, watch] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: kubetail-dashboard + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kubetail-dashboard +subjects: +- kind: ServiceAccount + name: kubetail-dashboard + namespace: kubetail-system +--- +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + namespace: kubetail-system + name: kubetail-dashboard + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard +rules: +- apiGroups: [discovery.k8s.io] + resources: [endpointslices] + verbs: [list, watch] +--- +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + namespace: kubetail-system + name: kubetail-dashboard + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubetail-dashboard +subjects: +- kind: ServiceAccount + name: kubetail-dashboard + namespace: kubetail-system +--- +kind: Deployment +apiVersion: apps/v1 +metadata: + name: kubetail-dashboard + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard +spec: + replicas: 1 + revisionHistoryLimit: 5 + selector: + matchLabels: + app.kubernetes.io/name: kubetail + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard + strategy: + type: RollingUpdate + template: + metadata: + labels: + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard + spec: + automountServiceAccountToken: true + serviceAccountName: kubetail-dashboard + containers: + - name: kubetail-dashboard + image: {{.CustomRegistries.Kubetail | default .ImageRepository | default .Registries.Kubetail }}{{.Images.KubetailDashboard}} + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsGroup: 1000 + runAsUser: 1000 + imagePullPolicy: IfNotPresent + args: + - --config=/etc/kubetail/config.yaml + ports: + - name: http + protocol: TCP + containerPort: 8080 + livenessProbe: + httpGet: + scheme: HTTP + path: /healthz + port: http + initialDelaySeconds: 30 + timeoutSeconds: 30 + periodSeconds: 10 + failureThreshold: 3 + readinessProbe: + httpGet: + scheme: HTTP + path: /healthz + port: http + initialDelaySeconds: 30 + timeoutSeconds: 30 + periodSeconds: 10 + failureThreshold: 3 + volumeMounts: + - name: config + mountPath: /etc/kubetail + readOnly: true + volumes: + - name: config + configMap: + name: kubetail-dashboard +--- +kind: Service +apiVersion: v1 +metadata: + name: kubetail-dashboard + namespace: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile + app.kubernetes.io/name: kubetail + app.kubernetes.io/version: "0.13.3" + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: kubetail + app.kubernetes.io/instance: kubetail + app.kubernetes.io/component: dashboard + ports: + - name: http + protocol: TCP + port: 8080 + targetPort: http + appProtocol: http diff --git a/deploy/addons/kubetail/kubetail-namespace.yaml b/deploy/addons/kubetail/kubetail-namespace.yaml new file mode 100644 index 000000000000..296ce9846ada --- /dev/null +++ b/deploy/addons/kubetail/kubetail-namespace.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: kubetail-system + labels: + kubernetes.io/minikube-addons: kubetail + addonmanager.kubernetes.io/mode: Reconcile diff --git a/deploy/addons/kubevirt/README.md b/deploy/addons/kubevirt/README.md index f30e8c0206c8..69833f98480e 100644 --- a/deploy/addons/kubevirt/README.md +++ b/deploy/addons/kubevirt/README.md @@ -1,4 +1,4 @@ ## kubevirt Addon [kubevirt](https://kubevirt.io/) - KubeVirt technology addresses the needs of development teams that have adopted or want to adopt Kubernetes but possess existing Virtual Machine-based workloads that cannot be easily containerized. -More info can be found by reading the tutorial ["How to use KubeVirt with minikube"](https://minikube.sigs.k8s.io/docs/tutorials/kubevirt/) +More info can be found by reading the tutorial ["Labs - KubeVirt quickstart with Minikube"](https://kubevirt.io/quickstart_minikube/) diff --git a/deploy/addons/kubevirt/pod.yaml.tmpl b/deploy/addons/kubevirt/pod.yaml.tmpl index ae575b783ae7..d0f4ea06bddb 100644 --- a/deploy/addons/kubevirt/pod.yaml.tmpl +++ b/deploy/addons/kubevirt/pod.yaml.tmpl @@ -10,29 +10,47 @@ data: uninstall.sh: | #!/bin/bash - kubectl delete -f /manifests/kubevirt.yaml + kubectl delete kubevirt kubevirt -n kubevirt - kubectl delete -f /manifests/kubevirt-base.yaml + kubectl delete -f /manifests/kubevirt-operator.yaml install.sh: | #!/bin/bash export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases | grep tag_name | grep -v -- - | sort -V | tail -1 | awk -F':' '{print $2}' | sed 's/,//' | xargs) - echo $KUBEVIRT_VERSION + echo "Installing KubeVirt version: $KUBEVIRT_VERSION" - curl -Ls "https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml" -o /manifests/kubevirt-base.yaml + curl -Ls "https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml" -o /manifests/kubevirt-operator.yaml + kubectl create -f /manifests/kubevirt-operator.yaml - kubectl create -f /manifests/kubevirt-base.yaml + HARDWARE_EMULATION=$(grep -E 'svm|vmx' /proc/cpuinfo) + if [ -z "$HARDWARE_EMULATION" ]; then + echo "Using software emulation" - EMULATION=$(egrep 'svm|vmx' /proc/cpuinfo) - if [ -z "$EMULATION" ]; then - echo "use emulation" - kubectl create configmap kubevirt-config -n kubevirt --from-literal debug.useEmulation=true - fi; + echo " + apiVersion: kubevirt.io/v1 + kind: KubeVirt + metadata: + name: kubevirt + namespace: kubevirt + spec: + configuration: + developerConfiguration: + useEmulation: true + " | kubectl apply -f - - curl -sL "https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml" -o /manifests/kubevirt.yaml + else - kubectl create -f /manifests/kubevirt.yaml + echo " + apiVersion: kubevirt.io/v1 + kind: KubeVirt + metadata: + name: kubevirt + namespace: kubevirt + spec: {} + " | kubectl apply -f - + + fi sleep infinity --- diff --git a/deploy/addons/layouts/storage-provisioner-gluster/single.html b/deploy/addons/layouts/storage-provisioner-gluster/single.html deleted file mode 100644 index 620f9d82b608..000000000000 --- a/deploy/addons/layouts/storage-provisioner-gluster/single.html +++ /dev/null @@ -1,5 +0,0 @@ -{{ define "main" }} -
- {{ .Render "content" }} -
-{{ end }} \ No newline at end of file diff --git a/deploy/addons/logviewer/logviewer-rbac.yaml.tmpl b/deploy/addons/logviewer/logviewer-rbac.yaml similarity index 100% rename from deploy/addons/logviewer/logviewer-rbac.yaml.tmpl rename to deploy/addons/logviewer/logviewer-rbac.yaml diff --git a/deploy/addons/metallb/metallb.yaml.tmpl b/deploy/addons/metallb/metallb.yaml.tmpl index 7d033b69e7cf..db81a9a9a608 100644 --- a/deploy/addons/metallb/metallb.yaml.tmpl +++ b/deploy/addons/metallb/metallb.yaml.tmpl @@ -4,7 +4,7 @@ metadata: labels: app: metallb name: metallb-system ---- +---{{ if .LegacyPodSecurityPolicy }} apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: @@ -33,7 +33,7 @@ spec: rule: RunAsAny volumes: - '*' ---- +---{{ end }} apiVersion: v1 kind: ServiceAccount metadata: @@ -234,7 +234,7 @@ spec: readOnlyRootFilesystem: true hostNetwork: true nodeSelector: - beta.kubernetes.io/os: linux + kubernetes.io/os: linux serviceAccountName: speaker terminationGracePeriodSeconds: 0 tolerations: @@ -285,7 +285,7 @@ spec: - all readOnlyRootFilesystem: true nodeSelector: - beta.kubernetes.io/os: linux + kubernetes.io/os: linux securityContext: runAsNonRoot: true runAsUser: 65534 diff --git a/deploy/addons/metrics-server/metrics-apiservice.yaml.tmpl b/deploy/addons/metrics-server/metrics-apiservice.yaml similarity index 93% rename from deploy/addons/metrics-server/metrics-apiservice.yaml.tmpl rename to deploy/addons/metrics-server/metrics-apiservice.yaml index 324294329b48..31b5b8feaf70 100644 --- a/deploy/addons/metrics-server/metrics-apiservice.yaml.tmpl +++ b/deploy/addons/metrics-server/metrics-apiservice.yaml @@ -5,12 +5,13 @@ metadata: labels: kubernetes.io/minikube-addons: metrics-server addonmanager.kubernetes.io/mode: Reconcile + k8s-app: metrics-server spec: + group: metrics.k8s.io + groupPriorityMinimum: 100 + insecureSkipTLSVerify: true service: name: metrics-server namespace: kube-system - group: metrics.k8s.io version: v1beta1 - insecureSkipTLSVerify: true - groupPriorityMinimum: 100 versionPriority: 100 diff --git a/deploy/addons/metrics-server/metrics-server-deployment.yaml.tmpl b/deploy/addons/metrics-server/metrics-server-deployment.yaml.tmpl index f7b7cd3f0c35..5d81acd9e14b 100644 --- a/deploy/addons/metrics-server/metrics-server-deployment.yaml.tmpl +++ b/deploy/addons/metrics-server/metrics-server-deployment.yaml.tmpl @@ -35,26 +35,26 @@ spec: - --secure-port=4443 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname - --kubelet-use-node-status-port - - --metric-resolution=15s + - --metric-resolution=60s - --kubelet-insecure-tls resources: requests: cpu: 100m - memory: 300Mi + memory: 200Mi ports: - name: https containerPort: 4443 protocol: TCP readinessProbe: httpGet: - path: /readyz?exclude=livez + path: /readyz port: https scheme: HTTPS periodSeconds: 10 failureThreshold: 3 livenessProbe: httpGet: - path: /livez?exclude=readyz + path: /livez port: https scheme: HTTPS periodSeconds: 10 diff --git a/deploy/addons/metrics-server/metrics-server-rbac.yaml.tmpl b/deploy/addons/metrics-server/metrics-server-rbac.yaml similarity index 70% rename from deploy/addons/metrics-server/metrics-server-rbac.yaml.tmpl rename to deploy/addons/metrics-server/metrics-server-rbac.yaml index eb8ad76699bc..89668492009c 100644 --- a/deploy/addons/metrics-server/metrics-server-rbac.yaml.tmpl +++ b/deploy/addons/metrics-server/metrics-server-rbac.yaml @@ -1,87 +1,102 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + k8s-app: metrics-server + addonmanager.kubernetes.io/mode: Reconcile + name: metrics-server + namespace: kube-system +--- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:aggregated-metrics-reader labels: - rbac.authorization.k8s.io/aggregate-to-view: "true" - rbac.authorization.k8s.io/aggregate-to-edit: "true" + k8s-app: metrics-server rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.k8s.io/aggregate-to-view: "true" addonmanager.kubernetes.io/mode: Reconcile rules: -- apiGroups: ["metrics.k8s.io"] - resources: ["pods", "nodes"] - verbs: ["get", "list", "watch"] ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: metrics-server - namespace: kube-system - labels: - addonmanager.kubernetes.io/mode: Reconcile +- apiGroups: + - metrics.k8s.io + resources: + - pods + - nodes + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: - name: metrics-server-auth-reader - namespace: kube-system labels: + k8s-app: metrics-server addonmanager.kubernetes.io/mode: Reconcile + name: metrics-server-auth-reader + namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: extension-apiserver-authentication-reader subjects: - - kind: ServiceAccount - name: metrics-server - namespace: kube-system +- kind: ServiceAccount + name: metrics-server + namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: metrics-server:system:auth-delegator labels: + k8s-app: metrics-server addonmanager.kubernetes.io/mode: Reconcile roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegator subjects: - - kind: ServiceAccount - name: metrics-server - namespace: kube-system +- kind: ServiceAccount + name: metrics-server + namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:metrics-server labels: + k8s-app: metrics-server addonmanager.kubernetes.io/mode: Reconcile rules: - - apiGroups: - - "" - resources: - - pods - - nodes - - nodes/stats - - namespaces - - configmaps - verbs: - - get - - list - - watch +- apiGroups: + - "" + resources: + - nodes/metrics + verbs: + - get +- apiGroups: + - "" + resources: + - pods + - nodes + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - name: system:metrics-server labels: + k8s-app: metrics-server addonmanager.kubernetes.io/mode: Reconcile + name: system:metrics-server roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:metrics-server subjects: - - kind: ServiceAccount - name: metrics-server - namespace: kube-system +- kind: ServiceAccount + name: metrics-server + namespace: kube-system diff --git a/deploy/addons/metrics-server/metrics-server-service.yaml.tmpl b/deploy/addons/metrics-server/metrics-server-service.yaml similarity index 93% rename from deploy/addons/metrics-server/metrics-server-service.yaml.tmpl rename to deploy/addons/metrics-server/metrics-server-service.yaml index 84c4a570dbb3..6de750a8c028 100644 --- a/deploy/addons/metrics-server/metrics-server-service.yaml.tmpl +++ b/deploy/addons/metrics-server/metrics-server-service.yaml @@ -4,6 +4,7 @@ metadata: name: metrics-server namespace: kube-system labels: + k8s-app: metrics-server kubernetes.io/name: "Metrics-server" kubernetes.io/minikube-addons: metrics-server kubernetes.io/minikube-addons-endpoint: metrics-server diff --git a/deploy/addons/nvidia-device-plugin/nvidia-device-plugin.yaml.tmpl b/deploy/addons/nvidia-device-plugin/nvidia-device-plugin.yaml.tmpl new file mode 100644 index 000000000000..c05c586edcbe --- /dev/null +++ b/deploy/addons/nvidia-device-plugin/nvidia-device-plugin.yaml.tmpl @@ -0,0 +1,56 @@ +# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: nvidia-device-plugin-daemonset + namespace: kube-system +spec: + selector: + matchLabels: + name: nvidia-device-plugin-ds + updateStrategy: + type: RollingUpdate + template: + metadata: + labels: + name: nvidia-device-plugin-ds + spec: + tolerations: + - key: nvidia.com/gpu + operator: Exists + effect: NoSchedule + # Mark this pod as a critical add-on; when enabled, the critical add-on + # scheduler reserves resources for critical add-on pods so that they can + # be rescheduled after a failure. + # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ + priorityClassName: "system-node-critical" + containers: + - image: {{.CustomRegistries.NvidiaDevicePlugin | default .ImageRepository | default .Registries.NvidiaDevicePlugin}}{{.Images.NvidiaDevicePlugin}} + name: nvidia-device-plugin-ctr + env: + - name: FAIL_ON_INIT_ERROR + value: "false" + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: ["ALL"] + volumeMounts: + - name: device-plugin + mountPath: /var/lib/kubelet/device-plugins + volumes: + - name: device-plugin + hostPath: + path: /var/lib/kubelet/device-plugins diff --git a/deploy/addons/olm/crds.yaml b/deploy/addons/olm/crds.yaml new file mode 100644 index 000000000000..6c4a68171d63 --- /dev/null +++ b/deploy/addons/olm/crds.yaml @@ -0,0 +1,7296 @@ +# ref: https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.18.3/crds.yaml + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + creationTimestamp: null + name: catalogsources.operators.coreos.com +spec: + group: operators.coreos.com + names: + categories: + - olm + kind: CatalogSource + listKind: CatalogSourceList + plural: catalogsources + shortNames: + - catsrc + singular: catalogsource + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The pretty name of the catalog + jsonPath: .spec.displayName + name: Display + type: string + - description: The type of the catalog + jsonPath: .spec.sourceType + name: Type + type: string + - description: The publisher of the catalog + jsonPath: .spec.publisher + name: Publisher + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: CatalogSource is a repository of CSVs, CRDs, and operator packages. + type: object + required: + - metadata + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + type: object + required: + - sourceType + properties: + address: + description: 'Address is a host that OLM can use to connect to a pre-existing registry. Format: : Only used when SourceType = SourceTypeGrpc. Ignored when the Image field is set.' + type: string + configMap: + description: ConfigMap is the name of the ConfigMap to be used to back a configmap-server registry. Only used when SourceType = SourceTypeConfigmap or SourceTypeInternal. + type: string + description: + type: string + displayName: + description: Metadata + type: string + icon: + type: object + required: + - base64data + - mediatype + properties: + base64data: + type: string + mediatype: + type: string + image: + description: Image is an operator-registry container image to instantiate a registry-server with. Only used when SourceType = SourceTypeGrpc. If present, the address field is ignored. + type: string + priority: + description: 'Priority field assigns a weight to the catalog source to prioritize them so that it can be consumed by the dependency resolver. Usage: Higher weight indicates that this catalog source is preferred over lower weighted catalog sources during dependency resolution. The range of the priority value can go from positive to negative in the range of int32. The default value to a catalog source with unassigned priority would be 0. The catalog source with the same priority values will be ranked lexicographically based on its name.' + type: integer + publisher: + type: string + secrets: + description: Secrets represent set of secrets that can be used to access the contents of the catalog. It is best to keep this list small, since each will need to be tried for every catalog entry. + type: array + items: + type: string + sourceType: + description: SourceType is the type of source + type: string + updateStrategy: + description: UpdateStrategy defines how updated catalog source images can be discovered Consists of an interval that defines polling duration and an embedded strategy type + type: object + properties: + registryPoll: + type: object + properties: + interval: + description: Interval is used to determine the time interval between checks of the latest catalog source version. The catalog operator polls to see if a new version of the catalog source is available. If available, the latest image is pulled and gRPC traffic is directed to the latest catalog source. + type: string + status: + type: object + properties: + configMapReference: + type: object + required: + - name + - namespace + properties: + lastUpdateTime: + type: string + format: date-time + name: + type: string + namespace: + type: string + resourceVersion: + type: string + uid: + description: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated. + type: string + connectionState: + type: object + required: + - lastObservedState + properties: + address: + type: string + lastConnect: + type: string + format: date-time + lastObservedState: + type: string + latestImageRegistryPoll: + description: The last time the CatalogSource image registry has been polled to ensure the image is up-to-date + type: string + format: date-time + message: + description: A human readable message indicating details about why the CatalogSource is in this condition. + type: string + reason: + description: Reason is the reason the CatalogSource was transitioned to its current state. + type: string + registryService: + type: object + properties: + createdAt: + type: string + format: date-time + port: + type: string + protocol: + type: string + serviceName: + type: string + serviceNamespace: + type: string + served: true + storage: true + subresources: + status: {} + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + creationTimestamp: null + name: clusterserviceversions.operators.coreos.com +spec: + group: operators.coreos.com + names: + categories: + - olm + kind: ClusterServiceVersion + listKind: ClusterServiceVersionList + plural: clusterserviceversions + shortNames: + - csv + - csvs + singular: clusterserviceversion + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The name of the CSV + jsonPath: .spec.displayName + name: Display + type: string + - description: The version of the CSV + jsonPath: .spec.version + name: Version + type: string + - description: The name of a CSV that this one replaces + jsonPath: .spec.replaces + name: Replaces + type: string + - jsonPath: .status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: ClusterServiceVersion is a Custom Resource of type `ClusterServiceVersionSpec`. + type: object + required: + - metadata + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ClusterServiceVersionSpec declarations tell OLM how to install an operator that can manage apps for a given version. + type: object + required: + - displayName + - install + properties: + annotations: + description: Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. + type: object + additionalProperties: + type: string + apiservicedefinitions: + description: APIServiceDefinitions declares all of the extension apis managed or required by an operator being ran by ClusterServiceVersion. + type: object + properties: + owned: + type: array + items: + description: APIServiceDescription provides details to OLM about apis provided via aggregation + type: object + required: + - group + - kind + - name + - version + properties: + actionDescriptors: + type: array + items: + description: ActionDescriptor describes a declarative action that can be performed on a custom resource instance + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + containerPort: + type: integer + format: int32 + deploymentName: + type: string + description: + type: string + displayName: + type: string + group: + type: string + kind: + type: string + name: + type: string + resources: + type: array + items: + description: APIResourceReference is a Kubernetes resource type used by a custom resource + type: object + required: + - kind + - name + - version + properties: + kind: + type: string + name: + type: string + version: + type: string + specDescriptors: + type: array + items: + description: SpecDescriptor describes a field in a spec block of a CRD so that OLM can consume it + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + statusDescriptors: + type: array + items: + description: StatusDescriptor describes a field in a status block of a CRD so that OLM can consume it + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + version: + type: string + required: + type: array + items: + description: APIServiceDescription provides details to OLM about apis provided via aggregation + type: object + required: + - group + - kind + - name + - version + properties: + actionDescriptors: + type: array + items: + description: ActionDescriptor describes a declarative action that can be performed on a custom resource instance + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + containerPort: + type: integer + format: int32 + deploymentName: + type: string + description: + type: string + displayName: + type: string + group: + type: string + kind: + type: string + name: + type: string + resources: + type: array + items: + description: APIResourceReference is a Kubernetes resource type used by a custom resource + type: object + required: + - kind + - name + - version + properties: + kind: + type: string + name: + type: string + version: + type: string + specDescriptors: + type: array + items: + description: SpecDescriptor describes a field in a spec block of a CRD so that OLM can consume it + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + statusDescriptors: + type: array + items: + description: StatusDescriptor describes a field in a status block of a CRD so that OLM can consume it + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + version: + type: string + cleanup: + description: Cleanup specifies the cleanup behaviour when the CSV gets deleted + type: object + required: + - enabled + properties: + enabled: + type: boolean + customresourcedefinitions: + description: "CustomResourceDefinitions declares all of the CRDs managed or required by an operator being ran by ClusterServiceVersion. \n If the CRD is present in the Owned list, it is implicitly required." + type: object + properties: + owned: + type: array + items: + description: CRDDescription provides details to OLM about the CRDs + type: object + required: + - kind + - name + - version + properties: + actionDescriptors: + type: array + items: + description: ActionDescriptor describes a declarative action that can be performed on a custom resource instance + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + description: + type: string + displayName: + type: string + kind: + type: string + name: + type: string + resources: + type: array + items: + description: APIResourceReference is a Kubernetes resource type used by a custom resource + type: object + required: + - kind + - name + - version + properties: + kind: + type: string + name: + type: string + version: + type: string + specDescriptors: + type: array + items: + description: SpecDescriptor describes a field in a spec block of a CRD so that OLM can consume it + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + statusDescriptors: + type: array + items: + description: StatusDescriptor describes a field in a status block of a CRD so that OLM can consume it + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + version: + type: string + required: + type: array + items: + description: CRDDescription provides details to OLM about the CRDs + type: object + required: + - kind + - name + - version + properties: + actionDescriptors: + type: array + items: + description: ActionDescriptor describes a declarative action that can be performed on a custom resource instance + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + description: + type: string + displayName: + type: string + kind: + type: string + name: + type: string + resources: + type: array + items: + description: APIResourceReference is a Kubernetes resource type used by a custom resource + type: object + required: + - kind + - name + - version + properties: + kind: + type: string + name: + type: string + version: + type: string + specDescriptors: + type: array + items: + description: SpecDescriptor describes a field in a spec block of a CRD so that OLM can consume it + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + statusDescriptors: + type: array + items: + description: StatusDescriptor describes a field in a status block of a CRD so that OLM can consume it + type: object + required: + - path + properties: + description: + type: string + displayName: + type: string + path: + type: string + value: + description: RawMessage is a raw encoded JSON value. It implements Marshaler and Unmarshaler and can be used to delay JSON decoding or precompute a JSON encoding. + type: string + format: byte + x-descriptors: + type: array + items: + type: string + version: + type: string + description: + type: string + displayName: + type: string + icon: + type: array + items: + type: object + required: + - base64data + - mediatype + properties: + base64data: + type: string + mediatype: + type: string + install: + description: NamedInstallStrategy represents the block of an ClusterServiceVersion resource where the install strategy is specified. + type: object + required: + - strategy + properties: + spec: + description: StrategyDetailsDeployment represents the parsed details of a Deployment InstallStrategy. + type: object + required: + - deployments + properties: + clusterPermissions: + type: array + items: + description: StrategyDeploymentPermissions describe the rbac rules and service account needed by the install strategy + type: object + required: + - rules + - serviceAccountName + properties: + rules: + type: array + items: + description: PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to. + type: object + required: + - verbs + properties: + apiGroups: + description: APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. + type: array + items: + type: string + nonResourceURLs: + description: NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. + type: array + items: + type: string + resourceNames: + description: ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. + type: array + items: + type: string + resources: + description: Resources is a list of resources this rule applies to. ResourceAll represents all resources. + type: array + items: + type: string + verbs: + description: Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds. + type: array + items: + type: string + serviceAccountName: + type: string + deployments: + type: array + items: + description: StrategyDeploymentSpec contains the name, spec and labels for the deployment ALM should create + type: object + required: + - name + - spec + properties: + label: + description: Set is a map of label:value. It implements Labels. + type: object + additionalProperties: + type: string + name: + type: string + spec: + description: DeploymentSpec is the specification of the desired behavior of the Deployment. + type: object + required: + - selector + - template + properties: + minReadySeconds: + description: Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready) + type: integer + format: int32 + paused: + description: Indicates that the deployment is paused. + type: boolean + progressDeadlineSeconds: + description: The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s. + type: integer + format: int32 + replicas: + description: Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1. + type: integer + format: int32 + revisionHistoryLimit: + description: The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10. + type: integer + format: int32 + selector: + description: Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + strategy: + description: The deployment strategy to use to replace existing pods with new ones. + type: object + properties: + rollingUpdate: + description: 'Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate. --- TODO: Update this to follow our convention for oneOf, whatever we decide it to be.' + type: object + properties: + maxSurge: + description: 'The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.' + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxUnavailable: + description: 'The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.' + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: + description: Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. + type: string + template: + description: Template describes the pods that will be created. + type: object + properties: + metadata: + description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + x-kubernetes-preserve-unknown-fields: true + spec: + description: 'Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + type: object + required: + - containers + properties: + activeDeadlineSeconds: + description: Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer. + type: integer + format: int64 + affinity: + description: If specified, the pod's scheduling constraints + type: object + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for the pod. + type: object + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. + type: array + items: + description: An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). + type: object + required: + - preference + - weight + properties: + preference: + description: A node selector term, associated with the corresponding weight. + type: object + properties: + matchExpressions: + description: A list of node selector requirements by node's labels. + type: array + items: + description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: The label key that the selector applies to. + type: string + operator: + description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + type: string + values: + description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchFields: + description: A list of node selector requirements by node's fields. + type: array + items: + description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: The label key that the selector applies to. + type: string + operator: + description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + type: string + values: + description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. + type: array + items: + type: string + weight: + description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. + type: integer + format: int32 + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. + type: object + required: + - nodeSelectorTerms + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. The terms are ORed. + type: array + items: + description: A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm. + type: object + properties: + matchExpressions: + description: A list of node selector requirements by node's labels. + type: array + items: + description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: The label key that the selector applies to. + type: string + operator: + description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + type: string + values: + description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchFields: + description: A list of node selector requirements by node's fields. + type: array + items: + description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: The label key that the selector applies to. + type: string + operator: + description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + type: string + values: + description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. + type: array + items: + type: string + podAffinity: + description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). + type: object + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. + type: array + items: + description: The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) + type: object + required: + - podAffinityTerm + - weight + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated with the corresponding weight. + type: object + required: + - topologyKey + properties: + labelSelector: + description: A label query over a set of resources, in this case pods. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + namespaces: + description: namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace" + type: array + items: + type: string + topologyKey: + description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. + type: string + weight: + description: weight associated with matching the corresponding podAffinityTerm, in the range 1-100. + type: integer + format: int32 + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. + type: array + items: + description: Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running + type: object + required: + - topologyKey + properties: + labelSelector: + description: A label query over a set of resources, in this case pods. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + namespaces: + description: namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace" + type: array + items: + type: string + topologyKey: + description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. + type: string + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). + type: object + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. + type: array + items: + description: The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) + type: object + required: + - podAffinityTerm + - weight + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated with the corresponding weight. + type: object + required: + - topologyKey + properties: + labelSelector: + description: A label query over a set of resources, in this case pods. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + namespaces: + description: namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace" + type: array + items: + type: string + topologyKey: + description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. + type: string + weight: + description: weight associated with matching the corresponding podAffinityTerm, in the range 1-100. + type: integer + format: int32 + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. + type: array + items: + description: Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running + type: object + required: + - topologyKey + properties: + labelSelector: + description: A label query over a set of resources, in this case pods. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + namespaces: + description: namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace" + type: array + items: + type: string + topologyKey: + description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. + type: string + automountServiceAccountToken: + description: AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. + type: boolean + containers: + description: List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. + type: array + items: + description: A single application container that you want to run within a pod. + type: object + required: + - name + properties: + args: + description: 'Arguments to the entrypoint. The docker image''s CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container''s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + type: array + items: + type: string + command: + description: 'Entrypoint array. Not executed within a shell. The docker image''s ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container''s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + type: array + items: + type: string + env: + description: List of environment variables to set in the container. Cannot be updated. + type: array + items: + description: EnvVar represents an environment variable present in a Container. + type: object + required: + - name + properties: + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. Cannot be used if value is not empty. + type: object + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + type: object + required: + - key + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its key must be defined + type: boolean + fieldRef: + description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' + type: object + required: + - fieldPath + properties: + apiVersion: + description: Version of the schema the FieldPath is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API version. + type: string + resourceFieldRef: + description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' + type: object + required: + - resource + properties: + containerName: + description: 'Container name: required for volumes, optional for env vars' + type: string + divisor: + description: Specifies the output format of the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + type: object + required: + - key + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + envFrom: + description: List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated. + type: array + items: + description: EnvFromSource represents the source of a set of ConfigMaps + type: object + properties: + configMapRef: + description: The ConfigMap to select from + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap must be defined + type: boolean + prefix: + description: An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret must be defined + type: boolean + image: + description: 'Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system should take in response to container lifecycle events. Cannot be updated. + type: object + properties: + postStart: + description: 'PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + preStop: + description: 'PreStop is called immediately before a container is terminated due to an API request or management event such as liveness/startup probe failure, preemption, resource contention, etc. The handler is not called if the container crashes or exits. The reason for termination is passed to the handler. The Pod''s termination grace period countdown begins before the PreStop hooked is executed. Regardless of the outcome of the handler, the container will eventually terminate within the Pod''s termination grace period. Other management of the container blocks until the hook completes or until the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + livenessProbe: + description: 'Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + failureThreshold: + description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. + type: integer + format: int32 + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + initialDelaySeconds: + description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + periodSeconds: + description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. + type: integer + format: int32 + successThreshold: + description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + type: integer + format: int32 + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + name: + description: Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated. + type: array + items: + description: ContainerPort represents a network port in a single container. + type: object + required: + - containerPort + properties: + containerPort: + description: Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536. + type: integer + format: int32 + hostIP: + description: What host IP to bind the external port to. + type: string + hostPort: + description: Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this. + type: integer + format: int32 + name: + description: If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services. + type: string + protocol: + description: Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP". + type: string + default: TCP + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + failureThreshold: + description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. + type: integer + format: int32 + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + initialDelaySeconds: + description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + periodSeconds: + description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. + type: integer + format: int32 + successThreshold: + description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + type: integer + format: int32 + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + resources: + description: 'Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + properties: + limits: + description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + requests: + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + securityContext: + description: 'Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + type: object + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN' + type: boolean + capabilities: + description: The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime. + type: object + properties: + add: + description: Added capabilities + type: array + items: + description: Capability represent POSIX capabilities type + type: string + drop: + description: Removed capabilities + type: array + items: + description: Capability represent POSIX capabilities type + type: string + privileged: + description: Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false. + type: boolean + procMount: + description: procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root filesystem. Default is false. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: integer + format: int64 + runAsNonRoot: + description: Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: integer + format: int64 + seLinuxOptions: + description: The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: object + properties: + level: + description: Level is SELinux level label that applies to the container. + type: string + role: + description: Role is a SELinux role label that applies to the container. + type: string + type: + description: Type is a SELinux type label that applies to the container. + type: string + user: + description: User is a SELinux user label that applies to the container. + type: string + seccompProfile: + description: The seccomp options to use by this container. If seccomp options are provided at both the pod & container level, the container options override the pod options. + type: object + required: + - type + properties: + localhostProfile: + description: localhostProfile indicates a profile defined in a file on the node should be used. The profile must be preconfigured on the node to work. Must be a descending path, relative to the kubelet's configured seccomp profile location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp profile will be applied. Valid options are: \n Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied." + type: string + windowsOptions: + description: The Windows specific settings applied to all containers. If unspecified, the options from the PodSecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: object + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the GMSA credential spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint of the container process. Defaults to the user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: string + startupProbe: + description: 'StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. If this probe fails, the Pod will be restarted, just as if the livenessProbe failed. This can be used to provide different probe parameters at the beginning of a Pod''s lifecycle, when it might take a long time to load data or warm a cache, than during steady-state operation. This cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + failureThreshold: + description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. + type: integer + format: int32 + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + initialDelaySeconds: + description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + periodSeconds: + description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. + type: integer + format: int32 + successThreshold: + description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + type: integer + format: int32 + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + stdin: + description: Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false. + type: boolean + stdinOnce: + description: Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file to which the container''s termination message will be written is mounted into the container''s filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated. + type: string + tty: + description: Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block devices to be used by the container. + type: array + items: + description: volumeDevice describes a mapping of a raw block device within a container. + type: object + required: + - devicePath + - name + properties: + devicePath: + description: devicePath is the path inside of the container that the device will be mapped to. + type: string + name: + description: name must match the name of a persistentVolumeClaim in the pod + type: string + volumeMounts: + description: Pod volumes to mount into the container's filesystem. Cannot be updated. + type: array + items: + description: VolumeMount describes a mounting of a Volume within a container. + type: object + required: + - mountPath + - name + properties: + mountPath: + description: Path within the container at which the volume should be mounted. Must not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. + type: boolean + subPath: + description: Path within the volume from which the container's volume should be mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. + type: string + workingDir: + description: Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated. + type: string + dnsConfig: + description: Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy. + type: object + properties: + nameservers: + description: A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed. + type: array + items: + type: string + options: + description: A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy. + type: array + items: + description: PodDNSConfigOption defines DNS resolver options of a pod. + type: object + properties: + name: + description: Required. + type: string + value: + type: string + searches: + description: A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed. + type: array + items: + type: string + dnsPolicy: + description: Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. + type: string + enableServiceLinks: + description: 'EnableServiceLinks indicates whether information about services should be injected into pod''s environment variables, matching the syntax of Docker links. Optional: Defaults to true.' + type: boolean + ephemeralContainers: + description: List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing pod to perform user-initiated actions such as debugging. This list cannot be specified when creating a pod, and it cannot be modified by updating the pod spec. In order to add an ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource. This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature. + type: array + items: + description: An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag. + type: object + required: + - name + properties: + args: + description: 'Arguments to the entrypoint. The docker image''s CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container''s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + type: array + items: + type: string + command: + description: 'Entrypoint array. Not executed within a shell. The docker image''s ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container''s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + type: array + items: + type: string + env: + description: List of environment variables to set in the container. Cannot be updated. + type: array + items: + description: EnvVar represents an environment variable present in a Container. + type: object + required: + - name + properties: + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. Cannot be used if value is not empty. + type: object + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + type: object + required: + - key + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its key must be defined + type: boolean + fieldRef: + description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' + type: object + required: + - fieldPath + properties: + apiVersion: + description: Version of the schema the FieldPath is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API version. + type: string + resourceFieldRef: + description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' + type: object + required: + - resource + properties: + containerName: + description: 'Container name: required for volumes, optional for env vars' + type: string + divisor: + description: Specifies the output format of the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + type: object + required: + - key + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + envFrom: + description: List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated. + type: array + items: + description: EnvFromSource represents the source of a set of ConfigMaps + type: object + properties: + configMapRef: + description: The ConfigMap to select from + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap must be defined + type: boolean + prefix: + description: An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret must be defined + type: boolean + image: + description: 'Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Lifecycle is not allowed for ephemeral containers. + type: object + properties: + postStart: + description: 'PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + preStop: + description: 'PreStop is called immediately before a container is terminated due to an API request or management event such as liveness/startup probe failure, preemption, resource contention, etc. The handler is not called if the container crashes or exits. The reason for termination is passed to the handler. The Pod''s termination grace period countdown begins before the PreStop hooked is executed. Regardless of the outcome of the handler, the container will eventually terminate within the Pod''s termination grace period. Other management of the container blocks until the hook completes or until the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + livenessProbe: + description: Probes are not allowed for ephemeral containers. + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + failureThreshold: + description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. + type: integer + format: int32 + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + initialDelaySeconds: + description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + periodSeconds: + description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. + type: integer + format: int32 + successThreshold: + description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + type: integer + format: int32 + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + name: + description: Name of the ephemeral container specified as a DNS_LABEL. This name must be unique among all containers, init containers and ephemeral containers. + type: string + ports: + description: Ports are not allowed for ephemeral containers. + type: array + items: + description: ContainerPort represents a network port in a single container. + type: object + required: + - containerPort + properties: + containerPort: + description: Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536. + type: integer + format: int32 + hostIP: + description: What host IP to bind the external port to. + type: string + hostPort: + description: Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this. + type: integer + format: int32 + name: + description: If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services. + type: string + protocol: + description: Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP". + type: string + default: TCP + readinessProbe: + description: Probes are not allowed for ephemeral containers. + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + failureThreshold: + description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. + type: integer + format: int32 + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + initialDelaySeconds: + description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + periodSeconds: + description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. + type: integer + format: int32 + successThreshold: + description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + type: integer + format: int32 + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + resources: + description: Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources already allocated to the pod. + type: object + properties: + limits: + description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + requests: + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + securityContext: + description: SecurityContext is not allowed for ephemeral containers. + type: object + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN' + type: boolean + capabilities: + description: The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime. + type: object + properties: + add: + description: Added capabilities + type: array + items: + description: Capability represent POSIX capabilities type + type: string + drop: + description: Removed capabilities + type: array + items: + description: Capability represent POSIX capabilities type + type: string + privileged: + description: Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false. + type: boolean + procMount: + description: procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root filesystem. Default is false. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: integer + format: int64 + runAsNonRoot: + description: Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: integer + format: int64 + seLinuxOptions: + description: The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: object + properties: + level: + description: Level is SELinux level label that applies to the container. + type: string + role: + description: Role is a SELinux role label that applies to the container. + type: string + type: + description: Type is a SELinux type label that applies to the container. + type: string + user: + description: User is a SELinux user label that applies to the container. + type: string + seccompProfile: + description: The seccomp options to use by this container. If seccomp options are provided at both the pod & container level, the container options override the pod options. + type: object + required: + - type + properties: + localhostProfile: + description: localhostProfile indicates a profile defined in a file on the node should be used. The profile must be preconfigured on the node to work. Must be a descending path, relative to the kubelet's configured seccomp profile location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp profile will be applied. Valid options are: \n Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied." + type: string + windowsOptions: + description: The Windows specific settings applied to all containers. If unspecified, the options from the PodSecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: object + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the GMSA credential spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint of the container process. Defaults to the user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: string + startupProbe: + description: Probes are not allowed for ephemeral containers. + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + failureThreshold: + description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. + type: integer + format: int32 + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + initialDelaySeconds: + description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + periodSeconds: + description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. + type: integer + format: int32 + successThreshold: + description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + type: integer + format: int32 + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + stdin: + description: Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false. + type: boolean + stdinOnce: + description: Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false + type: boolean + targetContainerName: + description: If set, the name of the container from PodSpec that this ephemeral container targets. The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container. If not set then the ephemeral container is run in whatever namespaces are shared for the pod. Note that the container runtime must support this feature. + type: string + terminationMessagePath: + description: 'Optional: Path at which the file to which the container''s termination message will be written is mounted into the container''s filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated. + type: string + tty: + description: Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block devices to be used by the container. + type: array + items: + description: volumeDevice describes a mapping of a raw block device within a container. + type: object + required: + - devicePath + - name + properties: + devicePath: + description: devicePath is the path inside of the container that the device will be mapped to. + type: string + name: + description: name must match the name of a persistentVolumeClaim in the pod + type: string + volumeMounts: + description: Pod volumes to mount into the container's filesystem. Cannot be updated. + type: array + items: + description: VolumeMount describes a mounting of a Volume within a container. + type: object + required: + - mountPath + - name + properties: + mountPath: + description: Path within the container at which the volume should be mounted. Must not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. + type: boolean + subPath: + description: Path within the volume from which the container's volume should be mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. + type: string + workingDir: + description: Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated. + type: string + hostAliases: + description: HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods. + type: array + items: + description: HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file. + type: object + properties: + hostnames: + description: Hostnames for the above IP address. + type: array + items: + type: string + ip: + description: IP address of the host file entry. + type: string + hostIPC: + description: 'Use the host''s ipc namespace. Optional: Default to false.' + type: boolean + hostNetwork: + description: Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false. + type: boolean + hostPID: + description: 'Use the host''s pid namespace. Optional: Default to false.' + type: boolean + hostname: + description: Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value. + type: string + imagePullSecrets: + description: 'ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' + type: array + items: + description: LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + initContainers: + description: 'List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/' + type: array + items: + description: A single application container that you want to run within a pod. + type: object + required: + - name + properties: + args: + description: 'Arguments to the entrypoint. The docker image''s CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container''s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + type: array + items: + type: string + command: + description: 'Entrypoint array. Not executed within a shell. The docker image''s ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container''s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + type: array + items: + type: string + env: + description: List of environment variables to set in the container. Cannot be updated. + type: array + items: + description: EnvVar represents an environment variable present in a Container. + type: object + required: + - name + properties: + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. Cannot be used if value is not empty. + type: object + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + type: object + required: + - key + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its key must be defined + type: boolean + fieldRef: + description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' + type: object + required: + - fieldPath + properties: + apiVersion: + description: Version of the schema the FieldPath is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API version. + type: string + resourceFieldRef: + description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' + type: object + required: + - resource + properties: + containerName: + description: 'Container name: required for volumes, optional for env vars' + type: string + divisor: + description: Specifies the output format of the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + type: object + required: + - key + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + envFrom: + description: List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated. + type: array + items: + description: EnvFromSource represents the source of a set of ConfigMaps + type: object + properties: + configMapRef: + description: The ConfigMap to select from + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap must be defined + type: boolean + prefix: + description: An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret must be defined + type: boolean + image: + description: 'Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system should take in response to container lifecycle events. Cannot be updated. + type: object + properties: + postStart: + description: 'PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + preStop: + description: 'PreStop is called immediately before a container is terminated due to an API request or management event such as liveness/startup probe failure, preemption, resource contention, etc. The handler is not called if the container crashes or exits. The reason for termination is passed to the handler. The Pod''s termination grace period countdown begins before the PreStop hooked is executed. Regardless of the outcome of the handler, the container will eventually terminate within the Pod''s termination grace period. Other management of the container blocks until the hook completes or until the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + livenessProbe: + description: 'Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + failureThreshold: + description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. + type: integer + format: int32 + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + initialDelaySeconds: + description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + periodSeconds: + description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. + type: integer + format: int32 + successThreshold: + description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + type: integer + format: int32 + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + name: + description: Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated. + type: string + ports: + description: List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated. + type: array + items: + description: ContainerPort represents a network port in a single container. + type: object + required: + - containerPort + properties: + containerPort: + description: Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536. + type: integer + format: int32 + hostIP: + description: What host IP to bind the external port to. + type: string + hostPort: + description: Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this. + type: integer + format: int32 + name: + description: If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services. + type: string + protocol: + description: Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP". + type: string + default: TCP + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + failureThreshold: + description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. + type: integer + format: int32 + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + initialDelaySeconds: + description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + periodSeconds: + description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. + type: integer + format: int32 + successThreshold: + description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + type: integer + format: int32 + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + resources: + description: 'Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + properties: + limits: + description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + requests: + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + securityContext: + description: 'Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + type: object + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN' + type: boolean + capabilities: + description: The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime. + type: object + properties: + add: + description: Added capabilities + type: array + items: + description: Capability represent POSIX capabilities type + type: string + drop: + description: Removed capabilities + type: array + items: + description: Capability represent POSIX capabilities type + type: string + privileged: + description: Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false. + type: boolean + procMount: + description: procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root filesystem. Default is false. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: integer + format: int64 + runAsNonRoot: + description: Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: integer + format: int64 + seLinuxOptions: + description: The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: object + properties: + level: + description: Level is SELinux level label that applies to the container. + type: string + role: + description: Role is a SELinux role label that applies to the container. + type: string + type: + description: Type is a SELinux type label that applies to the container. + type: string + user: + description: User is a SELinux user label that applies to the container. + type: string + seccompProfile: + description: The seccomp options to use by this container. If seccomp options are provided at both the pod & container level, the container options override the pod options. + type: object + required: + - type + properties: + localhostProfile: + description: localhostProfile indicates a profile defined in a file on the node should be used. The profile must be preconfigured on the node to work. Must be a descending path, relative to the kubelet's configured seccomp profile location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp profile will be applied. Valid options are: \n Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied." + type: string + windowsOptions: + description: The Windows specific settings applied to all containers. If unspecified, the options from the PodSecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: object + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the GMSA credential spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint of the container process. Defaults to the user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: string + startupProbe: + description: 'StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. If this probe fails, the Pod will be restarted, just as if the livenessProbe failed. This can be used to provide different probe parameters at the beginning of a Pod''s lifecycle, when it might take a long time to load data or warm a cache, than during steady-state operation. This cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: object + properties: + exec: + description: One and only one of the following should be specified. Exec specifies the action to take. + type: object + properties: + command: + description: Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + type: array + items: + type: string + failureThreshold: + description: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. + type: integer + format: int32 + httpGet: + description: HTTPGet specifies the http request to perform. + type: object + required: + - port + properties: + host: + description: Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP allows repeated headers. + type: array + items: + description: HTTPHeader describes a custom header to be used in HTTP probes + type: object + required: + - name + - value + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + path: + description: Path to access on the HTTP server. + type: string + port: + description: Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. Defaults to HTTP. + type: string + initialDelaySeconds: + description: 'Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + periodSeconds: + description: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. + type: integer + format: int32 + successThreshold: + description: Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. + type: integer + format: int32 + tcpSocket: + description: 'TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported TODO: implement a realistic TCP lifecycle hook' + type: object + required: + - port + properties: + host: + description: 'Optional: Host name to connect to, defaults to the pod IP.' + type: string + port: + description: Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + description: 'Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + type: integer + format: int32 + stdin: + description: Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false. + type: boolean + stdinOnce: + description: Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file to which the container''s termination message will be written is mounted into the container''s filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated. + type: string + tty: + description: Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block devices to be used by the container. + type: array + items: + description: volumeDevice describes a mapping of a raw block device within a container. + type: object + required: + - devicePath + - name + properties: + devicePath: + description: devicePath is the path inside of the container that the device will be mapped to. + type: string + name: + description: name must match the name of a persistentVolumeClaim in the pod + type: string + volumeMounts: + description: Pod volumes to mount into the container's filesystem. Cannot be updated. + type: array + items: + description: VolumeMount describes a mounting of a Volume within a container. + type: object + required: + - mountPath + - name + properties: + mountPath: + description: Path within the container at which the volume should be mounted. Must not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. + type: boolean + subPath: + description: Path within the volume from which the container's volume should be mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. + type: string + workingDir: + description: Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated. + type: string + nodeName: + description: NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements. + type: string + nodeSelector: + description: 'NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node''s labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + additionalProperties: + type: string + overhead: + description: 'Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. This field will be autopopulated at admission time by the RuntimeClass admission controller. If the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. The RuntimeClass admission controller will reject Pod create requests which have the overhead already set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + preemptionPolicy: + description: PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is beta-level, gated by the NonPreemptingPriority feature-gate. + type: string + priority: + description: The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority. + type: integer + format: int32 + priorityClassName: + description: If specified, indicates the pod's priority. "system-node-critical" and "system-cluster-critical" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default. + type: string + readinessGates: + description: 'If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to "True" More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md' + type: array + items: + description: PodReadinessGate contains the reference to a pod condition + type: object + required: + - conditionType + properties: + conditionType: + description: ConditionType refers to a condition in the pod's condition list with matching type. + type: string + restartPolicy: + description: 'Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' + type: string + runtimeClassName: + description: 'RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md This is a beta feature as of Kubernetes v1.14.' + type: string + schedulerName: + description: If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. + type: string + securityContext: + description: 'SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.' + type: object + properties: + fsGroup: + description: "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod: \n 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw---- \n If unset, the Kubelet will not modify the ownership and permissions of any volume." + type: integer + format: int64 + fsGroupChangePolicy: + description: 'fsGroupChangePolicy defines behavior of changing ownership and permission of the volume before being exposed inside Pod. This field will only apply to volume types which support fsGroup based ownership(and permissions). It will have no effect on ephemeral volume types such as: secret, configmaps and emptydir. Valid values are "OnRootMismatch" and "Always". If not specified, "Always" is used.' + type: string + runAsGroup: + description: The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. + type: integer + format: int64 + runAsNonRoot: + description: Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. + type: integer + format: int64 + seLinuxOptions: + description: The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container. + type: object + properties: + level: + description: Level is SELinux level label that applies to the container. + type: string + role: + description: Role is a SELinux role label that applies to the container. + type: string + type: + description: Type is a SELinux type label that applies to the container. + type: string + user: + description: User is a SELinux user label that applies to the container. + type: string + seccompProfile: + description: The seccomp options to use by the containers in this pod. + type: object + required: + - type + properties: + localhostProfile: + description: localhostProfile indicates a profile defined in a file on the node should be used. The profile must be preconfigured on the node to work. Must be a descending path, relative to the kubelet's configured seccomp profile location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp profile will be applied. Valid options are: \n Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied." + type: string + supplementalGroups: + description: A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container. + type: array + items: + type: integer + format: int64 + sysctls: + description: Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch. + type: array + items: + description: Sysctl defines a kernel parameter to be set + type: object + required: + - name + - value + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + windowsOptions: + description: The Windows specific settings applied to all containers. If unspecified, the options within a container's SecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: object + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the GMSA credential spec named by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint of the container process. Defaults to the user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. + type: string + serviceAccount: + description: 'DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.' + type: string + serviceAccountName: + description: 'ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' + type: string + setHostnameAsFQDN: + description: If true the pod's hostname will be configured as the pod's FQDN, rather than the leaf name (the default). In Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname). In Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters to FQDN. If a pod does not have FQDN, this has no effect. Default to false. + type: boolean + shareProcessNamespace: + description: 'Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false.' + type: boolean + subdomain: + description: If specified, the fully qualified Pod hostname will be "...svc.". If not specified, the pod will not have a domainname at all. + type: string + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds. + type: integer + format: int64 + tolerations: + description: If specified, the pod's tolerations. + type: array + items: + description: The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . + type: object + properties: + effect: + description: Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. + type: string + operator: + description: Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. + type: integer + format: int64 + value: + description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + topologySpreadConstraints: + description: TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed. + type: array + items: + description: TopologySpreadConstraint specifies how to spread matching pods among the given topology. + type: object + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + properties: + labelSelector: + description: LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + maxSkew: + description: 'MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It''s a required field. Default value is 1 and 0 is not allowed.' + type: integer + format: int32 + topologyKey: + description: TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each as a "bucket", and try to put balanced number of pods into each bucket. It's a required field. + type: string + whenUnsatisfiable: + description: 'WhenUnsatisfiable indicates how to deal with a pod if it doesn''t satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location, but giving higher precedence to topologies that would help reduce the skew. A constraint is considered "Unsatisfiable" for an incoming pod if and only if every possible node assignment for that pod would violate "MaxSkew" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won''t make it *more* imbalanced. It''s a required field.' + type: string + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + description: 'List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' + type: array + items: + description: Volume represents a named volume in a pod that may be accessed by any container in the pod. + type: object + required: + - name + properties: + awsElasticBlockStore: + description: 'AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet''s host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: object + required: + - volumeID + properties: + fsType: + description: 'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + partition: + description: 'The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).' + type: integer + format: int32 + readOnly: + description: 'Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + azureDisk: + description: AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + type: object + required: + - diskName + - diskURI + properties: + cachingMode: + description: 'Host Caching mode: None, Read Only, Read Write.' + type: string + diskName: + description: The Name of the data disk in the blob storage + type: string + diskURI: + description: The URI the data disk in the blob storage + type: string + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + type: string + kind: + description: 'Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared' + type: string + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + azureFile: + description: AzureFile represents an Azure File Service mount on the host and bind mount to the pod. + type: object + required: + - secretName + - shareName + properties: + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretName: + description: the name of secret that contains Azure Storage Account Name and Key + type: string + shareName: + description: Share Name + type: string + cephfs: + description: CephFS represents a Ceph FS mount on the host that shares a pod's lifetime + type: object + required: + - monitors + properties: + monitors: + description: 'Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: array + items: + type: string + path: + description: 'Optional: Used as the mounted root, rather than the full Ceph tree, default is /' + type: string + readOnly: + description: 'Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + user: + description: 'Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + cinder: + description: 'Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: object + required: + - volumeID + properties: + fsType: + description: 'Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'Optional: points to a secret object containing parameters used to connect to OpenStack.' + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + volumeID: + description: 'volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + configMap: + description: ConfigMap represents a configMap that should populate this volume + type: object + properties: + defaultMode: + description: 'Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + items: + description: If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. + type: array + items: + description: Maps a string key to a path within a volume. + type: object + required: + - key + - path + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its keys must be defined + type: boolean + csi: + description: CSI (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature). + type: object + required: + - driver + properties: + driver: + description: Driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster. + type: string + fsType: + description: Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply. + type: string + nodePublishSecretRef: + description: NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed. + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + readOnly: + description: Specifies a read-only configuration for the volume. Defaults to false (read/write). + type: boolean + volumeAttributes: + description: VolumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values. + type: object + additionalProperties: + type: string + downwardAPI: + description: DownwardAPI represents downward API about the pod that should populate this volume + type: object + properties: + defaultMode: + description: 'Optional: mode bits to use on created files by default. Must be a Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + items: + description: Items is a list of downward API volume file + type: array + items: + description: DownwardAPIVolumeFile represents information to create the file containing the pod field + type: object + required: + - path + properties: + fieldRef: + description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + type: object + required: + - fieldPath + properties: + apiVersion: + description: Version of the schema the FieldPath is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API version. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: 'Required: Path is the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.' + type: object + required: + - resource + properties: + containerName: + description: 'Container name: required for volumes, optional for env vars' + type: string + divisor: + description: Specifies the output format of the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + emptyDir: + description: 'EmptyDir represents a temporary directory that shares a pod''s lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: object + properties: + medium: + description: 'What type of storage medium should back this directory. The default is "" which means to use the node''s default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + description: 'Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + ephemeral: + description: "Ephemeral represents a volume that is handled by a cluster storage driver (Alpha feature). The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed. \n Use this if: a) the volume is only needed while the pod runs, b) features of normal volumes like restoring from snapshot or capacity tracking are needed, c) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning through a PersistentVolumeClaim (see EphemeralVolumeSource for more information on the connection between this volume type and PersistentVolumeClaim). \n Use PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod. \n Use CSI for light-weight local ephemeral volumes if the CSI driver is meant to be used that way - see the documentation of the driver for more information. \n A pod can use both types of ephemeral volumes and persistent volumes at the same time." + type: object + properties: + readOnly: + description: Specifies a read-only configuration for the volume. Defaults to false (read/write). + type: boolean + volumeClaimTemplate: + description: "Will be used to create a stand-alone PVC to provision the volume. The pod in which this EphemeralVolumeSource is embedded will be the owner of the PVC, i.e. the PVC will be deleted together with the pod. The name of the PVC will be `-` where `` is the name from the `PodSpec.Volumes` array entry. Pod validation will reject the pod if the concatenated name is not valid for a PVC (for example, too long). \n An existing PVC with that name that is not owned by the pod will *not* be used for the pod to avoid using an unrelated volume by mistake. Starting the pod is then blocked until the unrelated PVC is removed. If such a pre-created PVC is meant to be used by the pod, the PVC has to updated with an owner reference to the pod once the pod exists. Normally this should not be necessary, but it may be useful when manually reconstructing a broken cluster. \n This field is read-only and no changes will be made by Kubernetes to the PVC after it has been created. \n Required, must not be nil." + type: object + required: + - spec + properties: + metadata: + description: May contain labels and annotations that will be copied into the PVC when creating it. No other fields are allowed and will be rejected during validation. + type: object + spec: + description: The specification for the PersistentVolumeClaim. The entire content is copied unchanged into the PVC that gets created from this template. The same fields as in a PersistentVolumeClaim are also valid here. + type: object + properties: + accessModes: + description: 'AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + type: array + items: + type: string + dataSource: + description: 'This field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) * An existing custom resource that implements data population (Alpha) In order to use custom resource types that implement data population, the AnyVolumeDataSource feature gate must be enabled. If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source.' + type: object + required: + - kind + - name + properties: + apiGroup: + description: APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + resources: + description: 'Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + type: object + properties: + limits: + description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + requests: + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + selector: + description: A label query over volumes to consider for binding. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + storageClassName: + description: 'Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. + type: string + volumeName: + description: VolumeName is the binding reference to the PersistentVolume backing this claim. + type: string + fc: + description: FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. + type: object + properties: + fsType: + description: 'Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + lun: + description: 'Optional: FC target lun number' + type: integer + format: int32 + readOnly: + description: 'Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'Optional: FC target worldwide names (WWNs)' + type: array + items: + type: string + wwids: + description: 'Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.' + type: array + items: + type: string + flexVolume: + description: FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. + type: object + required: + - driver + properties: + driver: + description: Driver is the name of the driver to use for this volume. + type: string + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. + type: string + options: + description: 'Optional: Extra command options if any.' + type: object + additionalProperties: + type: string + readOnly: + description: 'Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.' + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + flocker: + description: Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running + type: object + properties: + datasetName: + description: Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated + type: string + datasetUUID: + description: UUID of the dataset. This is unique identifier of a Flocker dataset + type: string + gcePersistentDisk: + description: 'GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet''s host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: object + required: + - pdName + properties: + fsType: + description: 'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + partition: + description: 'The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: integer + format: int32 + pdName: + description: 'Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + gitRepo: + description: 'GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod''s container.' + type: object + required: + - repository + properties: + directory: + description: Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name. + type: string + repository: + description: Repository URL + type: string + revision: + description: Commit hash for the specified revision. + type: string + glusterfs: + description: 'Glusterfs represents a Glusterfs mount on the host that shares a pod''s lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md' + type: object + required: + - endpoints + - path + properties: + endpoints: + description: 'EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + hostPath: + description: 'HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath --- TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not mount host directories as read/write.' + type: object + required: + - path + properties: + path: + description: 'Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + iscsi: + description: 'ISCSI represents an ISCSI Disk resource that is attached to a kubelet''s host machine and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + type: object + required: + - iqn + - lun + - targetPortal + properties: + chapAuthDiscovery: + description: whether support iSCSI Discovery CHAP authentication + type: boolean + chapAuthSession: + description: whether support iSCSI Session CHAP authentication + type: boolean + fsType: + description: 'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + initiatorName: + description: Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection. + type: string + iqn: + description: Target iSCSI Qualified Name. + type: string + iscsiInterface: + description: iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp). + type: string + lun: + description: iSCSI Target Lun number. + type: integer + format: int32 + portals: + description: iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). + type: array + items: + type: string + readOnly: + description: ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. + type: boolean + secretRef: + description: CHAP Secret for iSCSI target and initiator authentication + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + targetPortal: + description: iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). + type: string + name: + description: 'Volume''s name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'NFS represents an NFS mount on the host that shares a pod''s lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: object + required: + - path + - server + properties: + path: + description: 'Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + persistentVolumeClaim: + description: 'PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: object + required: + - claimName + properties: + claimName: + description: 'ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: Will force the ReadOnly setting in VolumeMounts. Default false. + type: boolean + photonPersistentDisk: + description: PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine + type: object + required: + - pdID + properties: + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + type: string + pdID: + description: ID that identifies Photon Controller persistent disk + type: string + portworxVolume: + description: PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + type: object + required: + - volumeID + properties: + fsType: + description: FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + volumeID: + description: VolumeID uniquely identifies a Portworx volume + type: string + projected: + description: Items for all in one resources secrets, configmaps, and downward API + type: object + properties: + defaultMode: + description: Mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. + type: integer + format: int32 + sources: + description: list of volume projections + type: array + items: + description: Projection that may be projected along with other supported volume types + type: object + properties: + configMap: + description: information about the configMap data to project + type: object + properties: + items: + description: If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. + type: array + items: + description: Maps a string key to a path within a volume. + type: object + required: + - key + - path + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its keys must be defined + type: boolean + downwardAPI: + description: information about the downwardAPI data to project + type: object + properties: + items: + description: Items is a list of DownwardAPIVolume file + type: array + items: + description: DownwardAPIVolumeFile represents information to create the file containing the pod field + type: object + required: + - path + properties: + fieldRef: + description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + type: object + required: + - fieldPath + properties: + apiVersion: + description: Version of the schema the FieldPath is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API version. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: 'Required: Path is the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.' + type: object + required: + - resource + properties: + containerName: + description: 'Container name: required for volumes, optional for env vars' + type: string + divisor: + description: Specifies the output format of the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + secret: + description: information about the secret data to project + type: object + properties: + items: + description: If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. + type: array + items: + description: Maps a string key to a path within a volume. + type: object + required: + - key + - path + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + serviceAccountToken: + description: information about the serviceAccountToken data to project + type: object + required: + - path + properties: + audience: + description: Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver. + type: string + expirationSeconds: + description: ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes. + type: integer + format: int64 + path: + description: Path is the path relative to the mount point of the file to project the token into. + type: string + quobyte: + description: Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + type: object + required: + - registry + - volume + properties: + group: + description: Group to map volume access to Default is no group + type: string + readOnly: + description: ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false. + type: boolean + registry: + description: Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes + type: string + tenant: + description: Tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin + type: string + user: + description: User to map volume access to Defaults to serivceaccount user + type: string + volume: + description: Volume is a string that references an already created Quobyte volume by name. + type: string + rbd: + description: 'RBD represents a Rados Block Device mount on the host that shares a pod''s lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md' + type: object + required: + - image + - monitors + properties: + fsType: + description: 'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + image: + description: 'The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: array + items: + type: string + pool: + description: 'The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + user: + description: 'The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + scaleIO: + description: ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. + type: object + required: + - gateway + - secretRef + - system + properties: + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: The host address of the ScaleIO API Gateway. + type: string + protectionDomain: + description: The name of the ScaleIO Protection Domain for the configured storage. + type: string + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail. + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + sslEnabled: + description: Flag to enable/disable SSL communication with Gateway, default false + type: boolean + storageMode: + description: Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: The ScaleIO Storage Pool associated with the protection domain. + type: string + system: + description: The name of the storage system as configured in ScaleIO. + type: string + volumeName: + description: The name of a volume already created in the ScaleIO system that is associated with this volume source. + type: string + secret: + description: 'Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: object + properties: + defaultMode: + description: 'Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + items: + description: If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. + type: array + items: + description: Maps a string key to a path within a volume. + type: object + required: + - key + - path + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'. + type: string + optional: + description: Specify whether the Secret or its keys must be defined + type: boolean + secretName: + description: 'Name of the secret in the pod''s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + storageos: + description: StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes. + type: object + properties: + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted. + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + volumeName: + description: VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace. + type: string + volumeNamespace: + description: VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created. + type: string + vsphereVolume: + description: VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine + type: object + required: + - volumePath + properties: + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + type: string + storagePolicyID: + description: Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName. + type: string + storagePolicyName: + description: Storage Policy Based Management (SPBM) profile name. + type: string + volumePath: + description: Path that identifies vSphere volume vmdk + type: string + permissions: + type: array + items: + description: StrategyDeploymentPermissions describe the rbac rules and service account needed by the install strategy + type: object + required: + - rules + - serviceAccountName + properties: + rules: + type: array + items: + description: PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to. + type: object + required: + - verbs + properties: + apiGroups: + description: APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. + type: array + items: + type: string + nonResourceURLs: + description: NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. + type: array + items: + type: string + resourceNames: + description: ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. + type: array + items: + type: string + resources: + description: Resources is a list of resources this rule applies to. ResourceAll represents all resources. + type: array + items: + type: string + verbs: + description: Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds. + type: array + items: + type: string + serviceAccountName: + type: string + strategy: + type: string + installModes: + description: InstallModes specify supported installation types + type: array + items: + description: InstallMode associates an InstallModeType with a flag representing if the CSV supports it + type: object + required: + - supported + - type + properties: + supported: + type: boolean + type: + description: InstallModeType is a supported type of install mode for CSV installation + type: string + keywords: + type: array + items: + type: string + labels: + description: Map of string keys and values that can be used to organize and categorize (scope and select) objects. + type: object + additionalProperties: + type: string + links: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + maintainers: + type: array + items: + type: object + properties: + email: + type: string + name: + type: string + maturity: + type: string + minKubeVersion: + type: string + nativeAPIs: + type: array + items: + description: GroupVersionKind unambiguously identifies a kind. It doesn't anonymously include GroupVersion to avoid automatic coercion. It doesn't use a GroupVersion to avoid custom marshalling + type: object + required: + - group + - kind + - version + properties: + group: + type: string + kind: + type: string + version: + type: string + provider: + type: object + properties: + name: + type: string + url: + type: string + relatedImages: + description: List any related images, or other container images that your Operator might require to perform their functions. This list should also include operand images as well. All image references should be specified by digest (SHA) and not by tag. This field is only used during catalog creation and plays no part in cluster runtime. + type: array + items: + type: object + required: + - image + - name + properties: + image: + type: string + name: + type: string + replaces: + description: The name of a CSV this one replaces. Should match the `metadata.Name` field of the old CSV. + type: string + selector: + description: Label selector for related resources. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + skips: + description: The name(s) of one or more CSV(s) that should be skipped in the upgrade graph. Should match the `metadata.Name` field of the CSV that should be skipped. This field is only used during catalog creation and plays no part in cluster runtime. + type: array + items: + type: string + version: + description: OperatorVersion is a wrapper around semver.Version which supports correct marshaling to YAML and JSON. + type: string + webhookdefinitions: + type: array + items: + description: WebhookDescription provides details to OLM about required webhooks + type: object + required: + - admissionReviewVersions + - generateName + - sideEffects + - type + properties: + admissionReviewVersions: + type: array + items: + type: string + containerPort: + type: integer + format: int32 + default: 443 + maximum: 65535 + minimum: 1 + conversionCRDs: + type: array + items: + type: string + deploymentName: + type: string + failurePolicy: + type: string + generateName: + type: string + matchPolicy: + description: MatchPolicyType specifies the type of match policy + type: string + objectSelector: + description: A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + reinvocationPolicy: + description: ReinvocationPolicyType specifies what type of policy the admission hook uses. + type: string + rules: + type: array + items: + description: RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid. + type: object + properties: + apiGroups: + description: APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required. + type: array + items: + type: string + apiVersions: + description: APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required. + type: array + items: + type: string + operations: + description: Operations is the operations the admission hook cares about - CREATE, UPDATE, DELETE, CONNECT or * for all of those operations and any future admission operations that are added. If '*' is present, the length of the slice must be one. Required. + type: array + items: + type: string + resources: + description: "Resources is a list of resources this rule applies to. \n For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources. \n If wildcard is present, the validation rule will ensure resources do not overlap with each other. \n Depending on the enclosing object, subresources might not be allowed. Required." + type: array + items: + type: string + scope: + description: scope specifies the scope of this rule. Valid values are "Cluster", "Namespaced", and "*" "Cluster" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. "Namespaced" means that only namespaced resources will match this rule. "*" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is "*". + type: string + sideEffects: + type: string + targetPort: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + timeoutSeconds: + type: integer + format: int32 + type: + description: WebhookAdmissionType is the type of admission webhooks supported by OLM + type: string + enum: + - ValidatingAdmissionWebhook + - MutatingAdmissionWebhook + - ConversionWebhook + webhookPath: + type: string + status: + description: ClusterServiceVersionStatus represents information about the status of a CSV. Status may trail the actual state of a system. + type: object + properties: + certsLastUpdated: + description: Last time the owned APIService certs were updated + type: string + format: date-time + certsRotateAt: + description: Time the owned APIService certs will rotate next + type: string + format: date-time + cleanup: + description: CleanupStatus represents information about the status of cleanup while a CSV is pending deletion + type: object + properties: + pendingDeletion: + description: PendingDeletion is the list of custom resource objects that are pending deletion and blocked on finalizers. This indicates the progress of cleanup that is blocking CSV deletion or operator uninstall. + type: array + items: + description: ResourceList represents a list of resources which are of the same Group/Kind + type: object + required: + - group + - instances + - kind + properties: + group: + type: string + instances: + type: array + items: + type: object + required: + - name + properties: + name: + type: string + namespace: + description: Namespace can be empty for cluster-scoped resources + type: string + kind: + type: string + conditions: + description: List of conditions, a history of state transitions + type: array + items: + description: Conditions appear in the status as a record of state transitions on the ClusterServiceVersion + type: object + properties: + lastTransitionTime: + description: Last time the status transitioned from one status to another. + type: string + format: date-time + lastUpdateTime: + description: Last time we updated the status + type: string + format: date-time + message: + description: A human readable message indicating details about why the ClusterServiceVersion is in this condition. + type: string + phase: + description: Condition of the ClusterServiceVersion + type: string + reason: + description: A brief CamelCase message indicating details about why the ClusterServiceVersion is in this state. e.g. 'RequirementsNotMet' + type: string + lastTransitionTime: + description: Last time the status transitioned from one status to another. + type: string + format: date-time + lastUpdateTime: + description: Last time we updated the status + type: string + format: date-time + message: + description: A human readable message indicating details about why the ClusterServiceVersion is in this condition. + type: string + phase: + description: Current condition of the ClusterServiceVersion + type: string + reason: + description: A brief CamelCase message indicating details about why the ClusterServiceVersion is in this state. e.g. 'RequirementsNotMet' + type: string + requirementStatus: + description: The status of each requirement for this CSV + type: array + items: + type: object + required: + - group + - kind + - message + - name + - status + - version + properties: + dependents: + type: array + items: + description: DependentStatus is the status for a dependent requirement (to prevent infinite nesting) + type: object + required: + - group + - kind + - status + - version + properties: + group: + type: string + kind: + type: string + message: + type: string + status: + description: StatusReason is a camelcased reason for the status of a RequirementStatus or DependentStatus + type: string + uuid: + type: string + version: + type: string + group: + type: string + kind: + type: string + message: + type: string + name: + type: string + status: + description: StatusReason is a camelcased reason for the status of a RequirementStatus or DependentStatus + type: string + uuid: + type: string + version: + type: string + served: true + storage: true + subresources: + status: {} + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + creationTimestamp: null + name: installplans.operators.coreos.com +spec: + group: operators.coreos.com + names: + categories: + - olm + kind: InstallPlan + listKind: InstallPlanList + plural: installplans + shortNames: + - ip + singular: installplan + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The first CSV in the list of clusterServiceVersionNames + jsonPath: .spec.clusterServiceVersionNames[0] + name: CSV + type: string + - description: The approval mode + jsonPath: .spec.approval + name: Approval + type: string + - jsonPath: .spec.approved + name: Approved + type: boolean + name: v1alpha1 + schema: + openAPIV3Schema: + description: InstallPlan defines the installation of a set of operators. + type: object + required: + - metadata + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: InstallPlanSpec defines a set of Application resources to be installed + type: object + required: + - approval + - approved + - clusterServiceVersionNames + properties: + approval: + description: Approval is the user approval policy for an InstallPlan. It must be one of "Automatic" or "Manual". + type: string + approved: + type: boolean + clusterServiceVersionNames: + type: array + items: + type: string + generation: + type: integer + source: + type: string + sourceNamespace: + type: string + status: + description: "InstallPlanStatus represents the information about the status of steps required to complete installation. \n Status may trail the actual state of a system." + type: object + required: + - catalogSources + - phase + properties: + attenuatedServiceAccountRef: + description: AttenuatedServiceAccountRef references the service account that is used to do scoped operator install. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + bundleLookups: + description: BundleLookups is the set of in-progress requests to pull and unpackage bundle content to the cluster. + type: array + items: + description: BundleLookup is a request to pull and unpackage the content of a bundle to the cluster. + type: object + required: + - catalogSourceRef + - identifier + - path + - replaces + properties: + catalogSourceRef: + description: CatalogSourceRef is a reference to the CatalogSource the bundle path was resolved from. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + conditions: + description: Conditions represents the overall state of a BundleLookup. + type: array + items: + type: object + required: + - status + - type + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status to another. + type: string + format: date-time + lastUpdateTime: + description: Last time the condition was probed. + type: string + format: date-time + message: + description: A human readable message indicating details about the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + identifier: + description: Identifier is the catalog-unique name of the operator (the name of the CSV for bundles that contain CSVs) + type: string + path: + description: Path refers to the location of a bundle to pull. It's typically an image reference. + type: string + properties: + description: The effective properties of the unpacked bundle. + type: string + replaces: + description: Replaces is the name of the bundle to replace with the one found at Path. + type: string + catalogSources: + type: array + items: + type: string + conditions: + type: array + items: + description: InstallPlanCondition represents the overall status of the execution of an InstallPlan. + type: object + properties: + lastTransitionTime: + type: string + format: date-time + lastUpdateTime: + type: string + format: date-time + message: + type: string + reason: + description: ConditionReason is a camelcased reason for the state transition. + type: string + status: + type: string + type: + description: InstallPlanConditionType describes the state of an InstallPlan at a certain point as a whole. + type: string + message: + description: Message is a human-readable message containing detailed information that may be important to understanding why the plan has its current status. + type: string + phase: + description: InstallPlanPhase is the current status of a InstallPlan as a whole. + type: string + plan: + type: array + items: + description: Step represents the status of an individual step in an InstallPlan. + type: object + required: + - resolving + - resource + - status + properties: + resolving: + type: string + resource: + description: StepResource represents the status of a resource to be tracked by an InstallPlan. + type: object + required: + - group + - kind + - name + - sourceName + - sourceNamespace + - version + properties: + group: + type: string + kind: + type: string + manifest: + type: string + name: + type: string + sourceName: + type: string + sourceNamespace: + type: string + version: + type: string + status: + description: StepStatus is the current status of a particular resource an in InstallPlan + type: string + startTime: + description: StartTime is the time when the controller began applying the resources listed in the plan to the cluster. + type: string + format: date-time + served: true + storage: true + subresources: + status: {} + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + creationTimestamp: null + name: operatorconditions.operators.coreos.com +spec: + group: operators.coreos.com + names: + categories: + - olm + kind: OperatorCondition + listKind: OperatorConditionList + plural: operatorconditions + shortNames: + - condition + singular: operatorcondition + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: OperatorCondition is a Custom Resource of type `OperatorCondition` which is used to convey information to OLM about the state of an operator. + type: object + required: + - metadata + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: OperatorConditionSpec allows a cluster admin to convey information about the state of an operator to OLM, potentially overriding state reported by the operator. + type: object + properties: + deployments: + type: array + items: + type: string + overrides: + type: array + items: + description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + type: object + required: + - message + - reason + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + type: string + format: date-time + message: + description: message is a human readable message indicating details about the transition. This may be an empty string. + type: string + maxLength: 32768 + observedGeneration: + description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. + type: integer + format: int64 + minimum: 0 + reason: + description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + serviceAccounts: + type: array + items: + type: string + status: + description: OperatorConditionStatus allows an operator to convey information its state to OLM. The status may trail the actual state of a system. + type: object + properties: + conditions: + type: array + items: + description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + type: object + required: + - lastTransitionTime + - message + - reason + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + type: string + format: date-time + message: + description: message is a human readable message indicating details about the transition. This may be an empty string. + type: string + maxLength: 32768 + observedGeneration: + description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. + type: integer + format: int64 + minimum: 0 + reason: + description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + served: true + storage: false + subresources: + status: {} + - name: v2 + schema: + openAPIV3Schema: + description: OperatorCondition is a Custom Resource of type `OperatorCondition` which is used to convey information to OLM about the state of an operator. + type: object + required: + - metadata + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: OperatorConditionSpec allows an operator to report state to OLM and provides cluster admin with the ability to manually override state reported by the operator. + type: object + properties: + conditions: + type: array + items: + description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + type: object + required: + - lastTransitionTime + - message + - reason + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + type: string + format: date-time + message: + description: message is a human readable message indicating details about the transition. This may be an empty string. + type: string + maxLength: 32768 + observedGeneration: + description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. + type: integer + format: int64 + minimum: 0 + reason: + description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + deployments: + type: array + items: + type: string + overrides: + type: array + items: + description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + type: object + required: + - message + - reason + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + type: string + format: date-time + message: + description: message is a human readable message indicating details about the transition. This may be an empty string. + type: string + maxLength: 32768 + observedGeneration: + description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. + type: integer + format: int64 + minimum: 0 + reason: + description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + serviceAccounts: + type: array + items: + type: string + status: + description: OperatorConditionStatus allows OLM to convey which conditions have been observed. + type: object + properties: + conditions: + type: array + items: + description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + type: object + required: + - lastTransitionTime + - message + - reason + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + type: string + format: date-time + message: + description: message is a human readable message indicating details about the transition. This may be an empty string. + type: string + maxLength: 32768 + observedGeneration: + description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. + type: integer + format: int64 + minimum: 0 + reason: + description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + served: true + storage: true + subresources: + status: {} + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + creationTimestamp: null + name: operatorgroups.operators.coreos.com +spec: + group: operators.coreos.com + names: + categories: + - olm + kind: OperatorGroup + listKind: OperatorGroupList + plural: operatorgroups + shortNames: + - og + singular: operatorgroup + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: OperatorGroup is the unit of multitenancy for OLM managed operators. It constrains the installation of operators in its namespace to a specified set of target namespaces. + type: object + required: + - metadata + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: OperatorGroupSpec is the spec for an OperatorGroup resource. + type: object + properties: + selector: + description: Selector selects the OperatorGroup's target namespaces. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + serviceAccountName: + description: ServiceAccountName is the admin specified service account which will be used to deploy operator(s) in this operator group. + type: string + staticProvidedAPIs: + description: Static tells OLM not to update the OperatorGroup's providedAPIs annotation + type: boolean + targetNamespaces: + description: TargetNamespaces is an explicit set of namespaces to target. If it is set, Selector is ignored. + type: array + items: + type: string + x-kubernetes-list-type: set + status: + description: OperatorGroupStatus is the status for an OperatorGroupResource. + type: object + required: + - lastUpdated + properties: + lastUpdated: + description: LastUpdated is a timestamp of the last time the OperatorGroup's status was Updated. + type: string + format: date-time + namespaces: + description: Namespaces is the set of target namespaces for the OperatorGroup. + type: array + items: + type: string + x-kubernetes-list-type: set + serviceAccountRef: + description: ServiceAccountRef references the service account object specified. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + served: true + storage: true + subresources: + status: {} + - name: v1alpha2 + schema: + openAPIV3Schema: + description: OperatorGroup is the unit of multitenancy for OLM managed operators. It constrains the installation of operators in its namespace to a specified set of target namespaces. + type: object + required: + - metadata + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: OperatorGroupSpec is the spec for an OperatorGroup resource. + type: object + properties: + selector: + description: Selector selects the OperatorGroup's target namespaces. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + serviceAccountName: + description: ServiceAccountName is the admin specified service account which will be used to deploy operator(s) in this operator group. + type: string + staticProvidedAPIs: + description: Static tells OLM not to update the OperatorGroup's providedAPIs annotation + type: boolean + targetNamespaces: + description: TargetNamespaces is an explicit set of namespaces to target. If it is set, Selector is ignored. + type: array + items: + type: string + status: + description: OperatorGroupStatus is the status for an OperatorGroupResource. + type: object + required: + - lastUpdated + properties: + lastUpdated: + description: LastUpdated is a timestamp of the last time the OperatorGroup's status was Updated. + type: string + format: date-time + namespaces: + description: Namespaces is the set of target namespaces for the OperatorGroup. + type: array + items: + type: string + serviceAccountRef: + description: ServiceAccountRef references the service account object specified. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + served: true + storage: false + subresources: + status: {} + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + creationTimestamp: null + name: operators.operators.coreos.com +spec: + group: operators.coreos.com + names: + categories: + - olm + kind: Operator + listKind: OperatorList + plural: operators + singular: operator + scope: Cluster + versions: + - name: v1 + schema: + openAPIV3Schema: + description: Operator represents a cluster operator. + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: OperatorSpec defines the desired state of Operator + type: object + status: + description: OperatorStatus defines the observed state of an Operator and its components + type: object + properties: + components: + description: Components describes resources that compose the operator. + type: object + required: + - labelSelector + properties: + labelSelector: + description: LabelSelector is a label query over a set of resources used to select the operator's components + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + refs: + description: Refs are a set of references to the operator's component resources, selected with LabelSelector. + type: array + items: + description: RichReference is a reference to a resource, enriched with its status conditions. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + conditions: + description: Conditions represents the latest state of the component. + type: array + items: + description: Condition represent the latest available observations of an component's state. + type: object + required: + - status + - type + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status to another. + type: string + format: date-time + lastUpdateTime: + description: Last time the condition was probed + type: string + format: date-time + message: + description: A human readable message indicating details about the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + served: true + storage: true + subresources: + status: {} + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + creationTimestamp: null + name: subscriptions.operators.coreos.com +spec: + group: operators.coreos.com + names: + categories: + - olm + kind: Subscription + listKind: SubscriptionList + plural: subscriptions + shortNames: + - sub + - subs + singular: subscription + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The package subscribed to + jsonPath: .spec.name + name: Package + type: string + - description: The catalog source for the specified package + jsonPath: .spec.source + name: Source + type: string + - description: The channel of updates to subscribe to + jsonPath: .spec.channel + name: Channel + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: Subscription keeps operators up to date by tracking changes to Catalogs. + type: object + required: + - metadata + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: SubscriptionSpec defines an Application that can be installed + type: object + required: + - name + - source + - sourceNamespace + properties: + channel: + type: string + config: + description: SubscriptionConfig contains configuration specified for a subscription. + type: object + properties: + env: + description: Env is a list of environment variables to set in the container. Cannot be updated. + type: array + items: + description: EnvVar represents an environment variable present in a Container. + type: object + required: + - name + properties: + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. Cannot be used if value is not empty. + type: object + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + type: object + required: + - key + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its key must be defined + type: boolean + fieldRef: + description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' + type: object + required: + - fieldPath + properties: + apiVersion: + description: Version of the schema the FieldPath is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API version. + type: string + resourceFieldRef: + description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' + type: object + required: + - resource + properties: + containerName: + description: 'Container name: required for volumes, optional for env vars' + type: string + divisor: + description: Specifies the output format of the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + type: object + required: + - key + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + envFrom: + description: EnvFrom is a list of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Immutable. + type: array + items: + description: EnvFromSource represents the source of a set of ConfigMaps + type: object + properties: + configMapRef: + description: The ConfigMap to select from + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap must be defined + type: boolean + prefix: + description: An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret must be defined + type: boolean + nodeSelector: + description: 'NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node''s labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' + type: object + additionalProperties: + type: string + resources: + description: 'Resources represents compute resources required by this container. Immutable. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + properties: + limits: + description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + requests: + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + selector: + description: Selector is the label selector for pods to be configured. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + tolerations: + description: Tolerations are the pod's tolerations. + type: array + items: + description: The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . + type: object + properties: + effect: + description: Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. + type: string + operator: + description: Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. + type: integer + format: int64 + value: + description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. + type: string + volumeMounts: + description: List of VolumeMounts to set in the container. + type: array + items: + description: VolumeMount describes a mounting of a Volume within a container. + type: object + required: + - mountPath + - name + properties: + mountPath: + description: Path within the container at which the volume should be mounted. Must not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false. + type: boolean + subPath: + description: Path within the volume from which the container's volume should be mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to "" (volume's root). SubPathExpr and SubPath are mutually exclusive. + type: string + volumes: + description: List of Volumes to set in the podSpec. + type: array + items: + description: Volume represents a named volume in a pod that may be accessed by any container in the pod. + type: object + required: + - name + properties: + awsElasticBlockStore: + description: 'AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet''s host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: object + required: + - volumeID + properties: + fsType: + description: 'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + partition: + description: 'The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).' + type: integer + format: int32 + readOnly: + description: 'Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + azureDisk: + description: AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + type: object + required: + - diskName + - diskURI + properties: + cachingMode: + description: 'Host Caching mode: None, Read Only, Read Write.' + type: string + diskName: + description: The Name of the data disk in the blob storage + type: string + diskURI: + description: The URI the data disk in the blob storage + type: string + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + type: string + kind: + description: 'Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared' + type: string + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + azureFile: + description: AzureFile represents an Azure File Service mount on the host and bind mount to the pod. + type: object + required: + - secretName + - shareName + properties: + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretName: + description: the name of secret that contains Azure Storage Account Name and Key + type: string + shareName: + description: Share Name + type: string + cephfs: + description: CephFS represents a Ceph FS mount on the host that shares a pod's lifetime + type: object + required: + - monitors + properties: + monitors: + description: 'Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: array + items: + type: string + path: + description: 'Optional: Used as the mounted root, rather than the full Ceph tree, default is /' + type: string + readOnly: + description: 'Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + user: + description: 'Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + cinder: + description: 'Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: object + required: + - volumeID + properties: + fsType: + description: 'Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'Optional: points to a secret object containing parameters used to connect to OpenStack.' + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + volumeID: + description: 'volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + configMap: + description: ConfigMap represents a configMap that should populate this volume + type: object + properties: + defaultMode: + description: 'Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + items: + description: If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. + type: array + items: + description: Maps a string key to a path within a volume. + type: object + required: + - key + - path + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its keys must be defined + type: boolean + csi: + description: CSI (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature). + type: object + required: + - driver + properties: + driver: + description: Driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster. + type: string + fsType: + description: Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply. + type: string + nodePublishSecretRef: + description: NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed. + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + readOnly: + description: Specifies a read-only configuration for the volume. Defaults to false (read/write). + type: boolean + volumeAttributes: + description: VolumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values. + type: object + additionalProperties: + type: string + downwardAPI: + description: DownwardAPI represents downward API about the pod that should populate this volume + type: object + properties: + defaultMode: + description: 'Optional: mode bits to use on created files by default. Must be a Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + items: + description: Items is a list of downward API volume file + type: array + items: + description: DownwardAPIVolumeFile represents information to create the file containing the pod field + type: object + required: + - path + properties: + fieldRef: + description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + type: object + required: + - fieldPath + properties: + apiVersion: + description: Version of the schema the FieldPath is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API version. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: 'Required: Path is the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.' + type: object + required: + - resource + properties: + containerName: + description: 'Container name: required for volumes, optional for env vars' + type: string + divisor: + description: Specifies the output format of the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + emptyDir: + description: 'EmptyDir represents a temporary directory that shares a pod''s lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: object + properties: + medium: + description: 'What type of storage medium should back this directory. The default is "" which means to use the node''s default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + description: 'Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + ephemeral: + description: "Ephemeral represents a volume that is handled by a cluster storage driver (Alpha feature). The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed. \n Use this if: a) the volume is only needed while the pod runs, b) features of normal volumes like restoring from snapshot or capacity tracking are needed, c) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning through a PersistentVolumeClaim (see EphemeralVolumeSource for more information on the connection between this volume type and PersistentVolumeClaim). \n Use PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod. \n Use CSI for light-weight local ephemeral volumes if the CSI driver is meant to be used that way - see the documentation of the driver for more information. \n A pod can use both types of ephemeral volumes and persistent volumes at the same time." + type: object + properties: + readOnly: + description: Specifies a read-only configuration for the volume. Defaults to false (read/write). + type: boolean + volumeClaimTemplate: + description: "Will be used to create a stand-alone PVC to provision the volume. The pod in which this EphemeralVolumeSource is embedded will be the owner of the PVC, i.e. the PVC will be deleted together with the pod. The name of the PVC will be `-` where `` is the name from the `PodSpec.Volumes` array entry. Pod validation will reject the pod if the concatenated name is not valid for a PVC (for example, too long). \n An existing PVC with that name that is not owned by the pod will *not* be used for the pod to avoid using an unrelated volume by mistake. Starting the pod is then blocked until the unrelated PVC is removed. If such a pre-created PVC is meant to be used by the pod, the PVC has to updated with an owner reference to the pod once the pod exists. Normally this should not be necessary, but it may be useful when manually reconstructing a broken cluster. \n This field is read-only and no changes will be made by Kubernetes to the PVC after it has been created. \n Required, must not be nil." + type: object + required: + - spec + properties: + metadata: + description: May contain labels and annotations that will be copied into the PVC when creating it. No other fields are allowed and will be rejected during validation. + type: object + spec: + description: The specification for the PersistentVolumeClaim. The entire content is copied unchanged into the PVC that gets created from this template. The same fields as in a PersistentVolumeClaim are also valid here. + type: object + properties: + accessModes: + description: 'AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + type: array + items: + type: string + dataSource: + description: 'This field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) * An existing custom resource that implements data population (Alpha) In order to use custom resource types that implement data population, the AnyVolumeDataSource feature gate must be enabled. If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source.' + type: object + required: + - kind + - name + properties: + apiGroup: + description: APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + resources: + description: 'Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + type: object + properties: + limits: + description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + requests: + description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + selector: + description: A label query over volumes to consider for binding. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + storageClassName: + description: 'Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. + type: string + volumeName: + description: VolumeName is the binding reference to the PersistentVolume backing this claim. + type: string + fc: + description: FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. + type: object + properties: + fsType: + description: 'Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + lun: + description: 'Optional: FC target lun number' + type: integer + format: int32 + readOnly: + description: 'Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'Optional: FC target worldwide names (WWNs)' + type: array + items: + type: string + wwids: + description: 'Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.' + type: array + items: + type: string + flexVolume: + description: FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. + type: object + required: + - driver + properties: + driver: + description: Driver is the name of the driver to use for this volume. + type: string + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. + type: string + options: + description: 'Optional: Extra command options if any.' + type: object + additionalProperties: + type: string + readOnly: + description: 'Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.' + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + flocker: + description: Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running + type: object + properties: + datasetName: + description: Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated + type: string + datasetUUID: + description: UUID of the dataset. This is unique identifier of a Flocker dataset + type: string + gcePersistentDisk: + description: 'GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet''s host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: object + required: + - pdName + properties: + fsType: + description: 'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + partition: + description: 'The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: integer + format: int32 + pdName: + description: 'Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + gitRepo: + description: 'GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod''s container.' + type: object + required: + - repository + properties: + directory: + description: Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name. + type: string + repository: + description: Repository URL + type: string + revision: + description: Commit hash for the specified revision. + type: string + glusterfs: + description: 'Glusterfs represents a Glusterfs mount on the host that shares a pod''s lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md' + type: object + required: + - endpoints + - path + properties: + endpoints: + description: 'EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + hostPath: + description: 'HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath --- TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not mount host directories as read/write.' + type: object + required: + - path + properties: + path: + description: 'Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + iscsi: + description: 'ISCSI represents an ISCSI Disk resource that is attached to a kubelet''s host machine and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + type: object + required: + - iqn + - lun + - targetPortal + properties: + chapAuthDiscovery: + description: whether support iSCSI Discovery CHAP authentication + type: boolean + chapAuthSession: + description: whether support iSCSI Session CHAP authentication + type: boolean + fsType: + description: 'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + initiatorName: + description: Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection. + type: string + iqn: + description: Target iSCSI Qualified Name. + type: string + iscsiInterface: + description: iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp). + type: string + lun: + description: iSCSI Target Lun number. + type: integer + format: int32 + portals: + description: iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). + type: array + items: + type: string + readOnly: + description: ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. + type: boolean + secretRef: + description: CHAP Secret for iSCSI target and initiator authentication + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + targetPortal: + description: iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260). + type: string + name: + description: 'Volume''s name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'NFS represents an NFS mount on the host that shares a pod''s lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: object + required: + - path + - server + properties: + path: + description: 'Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + persistentVolumeClaim: + description: 'PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: object + required: + - claimName + properties: + claimName: + description: 'ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: Will force the ReadOnly setting in VolumeMounts. Default false. + type: boolean + photonPersistentDisk: + description: PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine + type: object + required: + - pdID + properties: + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + type: string + pdID: + description: ID that identifies Photon Controller persistent disk + type: string + portworxVolume: + description: PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + type: object + required: + - volumeID + properties: + fsType: + description: FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + volumeID: + description: VolumeID uniquely identifies a Portworx volume + type: string + projected: + description: Items for all in one resources secrets, configmaps, and downward API + type: object + properties: + defaultMode: + description: Mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set. + type: integer + format: int32 + sources: + description: list of volume projections + type: array + items: + description: Projection that may be projected along with other supported volume types + type: object + properties: + configMap: + description: information about the configMap data to project + type: object + properties: + items: + description: If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. + type: array + items: + description: Maps a string key to a path within a volume. + type: object + required: + - key + - path + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the ConfigMap or its keys must be defined + type: boolean + downwardAPI: + description: information about the downwardAPI data to project + type: object + properties: + items: + description: Items is a list of DownwardAPIVolume file + type: array + items: + description: DownwardAPIVolumeFile represents information to create the file containing the pod field + type: object + required: + - path + properties: + fieldRef: + description: 'Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.' + type: object + required: + - fieldPath + properties: + apiVersion: + description: Version of the schema the FieldPath is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API version. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: 'Required: Path is the relative path name of the file to be created. Must not be absolute or contain the ''..'' path. Must be utf-8 encoded. The first item of the relative path must not start with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.' + type: object + required: + - resource + properties: + containerName: + description: 'Container name: required for volumes, optional for env vars' + type: string + divisor: + description: Specifies the output format of the exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + secret: + description: information about the secret data to project + type: object + properties: + items: + description: If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. + type: array + items: + description: Maps a string key to a path within a volume. + type: object + required: + - key + - path + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + serviceAccountToken: + description: information about the serviceAccountToken data to project + type: object + required: + - path + properties: + audience: + description: Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver. + type: string + expirationSeconds: + description: ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes. + type: integer + format: int64 + path: + description: Path is the path relative to the mount point of the file to project the token into. + type: string + quobyte: + description: Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + type: object + required: + - registry + - volume + properties: + group: + description: Group to map volume access to Default is no group + type: string + readOnly: + description: ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false. + type: boolean + registry: + description: Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes + type: string + tenant: + description: Tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin + type: string + user: + description: User to map volume access to Defaults to serivceaccount user + type: string + volume: + description: Volume is a string that references an already created Quobyte volume by name. + type: string + rbd: + description: 'RBD represents a Rados Block Device mount on the host that shares a pod''s lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md' + type: object + required: + - image + - monitors + properties: + fsType: + description: 'Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd TODO: how do we prevent errors in the filesystem from compromising the machine' + type: string + image: + description: 'The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: array + items: + type: string + pool: + description: 'The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + user: + description: 'The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + scaleIO: + description: ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. + type: object + required: + - gateway + - secretRef + - system + properties: + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: The host address of the ScaleIO API Gateway. + type: string + protectionDomain: + description: The name of the ScaleIO Protection Domain for the configured storage. + type: string + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail. + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + sslEnabled: + description: Flag to enable/disable SSL communication with Gateway, default false + type: boolean + storageMode: + description: Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned. + type: string + storagePool: + description: The ScaleIO Storage Pool associated with the protection domain. + type: string + system: + description: The name of the storage system as configured in ScaleIO. + type: string + volumeName: + description: The name of a volume already created in the ScaleIO system that is associated with this volume source. + type: string + secret: + description: 'Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: object + properties: + defaultMode: + description: 'Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + items: + description: If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'. + type: array + items: + description: Maps a string key to a path within a volume. + type: object + required: + - key + - path + properties: + key: + description: The key to project. + type: string + mode: + description: 'Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.' + type: integer + format: int32 + path: + description: The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'. + type: string + optional: + description: Specify whether the Secret or its keys must be defined + type: boolean + secretName: + description: 'Name of the secret in the pod''s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + storageos: + description: StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes. + type: object + properties: + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + type: string + readOnly: + description: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretRef: + description: SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted. + type: object + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + volumeName: + description: VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace. + type: string + volumeNamespace: + description: VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created. + type: string + vsphereVolume: + description: VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine + type: object + required: + - volumePath + properties: + fsType: + description: Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + type: string + storagePolicyID: + description: Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName. + type: string + storagePolicyName: + description: Storage Policy Based Management (SPBM) profile name. + type: string + volumePath: + description: Path that identifies vSphere volume vmdk + type: string + installPlanApproval: + description: Approval is the user approval policy for an InstallPlan. It must be one of "Automatic" or "Manual". + type: string + name: + type: string + source: + type: string + sourceNamespace: + type: string + startingCSV: + type: string + status: + type: object + required: + - lastUpdated + properties: + catalogHealth: + description: CatalogHealth contains the Subscription's view of its relevant CatalogSources' status. It is used to determine SubscriptionStatusConditions related to CatalogSources. + type: array + items: + description: SubscriptionCatalogHealth describes the health of a CatalogSource the Subscription knows about. + type: object + required: + - catalogSourceRef + - healthy + - lastUpdated + properties: + catalogSourceRef: + description: CatalogSourceRef is a reference to a CatalogSource. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + healthy: + description: Healthy is true if the CatalogSource is healthy; false otherwise. + type: boolean + lastUpdated: + description: LastUpdated represents the last time that the CatalogSourceHealth changed + type: string + format: date-time + conditions: + description: Conditions is a list of the latest available observations about a Subscription's current state. + type: array + items: + description: SubscriptionCondition represents the latest available observations of a Subscription's state. + type: object + required: + - status + - type + properties: + lastHeartbeatTime: + description: LastHeartbeatTime is the last time we got an update on a given condition + type: string + format: date-time + lastTransitionTime: + description: LastTransitionTime is the last time the condition transit from one status to another + type: string + format: date-time + message: + description: Message is a human-readable message indicating details about last transition. + type: string + reason: + description: Reason is a one-word CamelCase reason for the condition's last transition. + type: string + status: + description: Status is the status of the condition, one of True, False, Unknown. + type: string + type: + description: Type is the type of Subscription condition. + type: string + currentCSV: + description: CurrentCSV is the CSV the Subscription is progressing to. + type: string + installPlanGeneration: + description: InstallPlanGeneration is the current generation of the installplan + type: integer + installPlanRef: + description: InstallPlanRef is a reference to the latest InstallPlan that contains the Subscription's current CSV. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + installedCSV: + description: InstalledCSV is the CSV currently installed by the Subscription. + type: string + installplan: + description: 'Install is a reference to the latest InstallPlan generated for the Subscription. DEPRECATED: InstallPlanRef' + type: object + required: + - apiVersion + - kind + - name + - uuid + properties: + apiVersion: + type: string + kind: + type: string + name: + type: string + uuid: + description: UID is a type that holds unique ID values, including UUIDs. Because we don't ONLY use UUIDs, this is an alias to string. Being a type captures intent and helps make sure that UIDs and names do not get conflated. + type: string + lastUpdated: + description: LastUpdated represents the last time that the Subscription status was updated. + type: string + format: date-time + reason: + description: Reason is the reason the Subscription was transitioned to its current state. + type: string + state: + description: State represents the current state of the Subscription + type: string + served: true + storage: true + subresources: + status: {} diff --git a/deploy/addons/olm/crds.yaml.tmpl b/deploy/addons/olm/crds.yaml.tmpl deleted file mode 100644 index 78c15fe69dbd..000000000000 --- a/deploy/addons/olm/crds.yaml.tmpl +++ /dev/null @@ -1,11794 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.3.0 - creationTimestamp: null - name: catalogsources.operators.coreos.com -spec: - group: operators.coreos.com - names: - categories: - - olm - kind: CatalogSource - listKind: CatalogSourceList - plural: catalogsources - shortNames: - - catsrc - singular: catalogsource - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: The pretty name of the catalog - jsonPath: .spec.displayName - name: Display - type: string - - description: The type of the catalog - jsonPath: .spec.sourceType - name: Type - type: string - - description: The publisher of the catalog - jsonPath: .spec.publisher - name: Publisher - type: string - - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1alpha1 - schema: - openAPIV3Schema: - description: CatalogSource is a repository of CSVs, CRDs, and operator packages. - type: object - required: - - metadata - - spec - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - type: object - required: - - sourceType - properties: - address: - description: 'Address is a host that OLM can use to connect to a pre-existing - registry. Format: : Only used when SourceType - = SourceTypeGrpc. Ignored when the Image field is set.' - type: string - configMap: - description: ConfigMap is the name of the ConfigMap to be used to - back a configmap-server registry. Only used when SourceType = SourceTypeConfigmap - or SourceTypeInternal. - type: string - description: - type: string - displayName: - description: Metadata - type: string - icon: - type: object - required: - - base64data - - mediatype - properties: - base64data: - type: string - mediatype: - type: string - image: - description: Image is an operator-registry container image to instantiate - a registry-server with. Only used when SourceType = SourceTypeGrpc. - If present, the address field is ignored. - type: string - priority: - description: 'Priority field assigns a weight to the catalog source - to prioritize them so that it can be consumed by the dependency - resolver. Usage: Higher weight indicates that this catalog source - is preferred over lower weighted catalog sources during dependency - resolution. The range of the priority value can go from positive - to negative in the range of int32. The default value to a catalog - source with unassigned priority would be 0. The catalog source with - the same priority values will be ranked lexicographically based - on its name.' - type: integer - publisher: - type: string - secrets: - description: Secrets represent set of secrets that can be used to - access the contents of the catalog. It is best to keep this list - small, since each will need to be tried for every catalog entry. - type: array - items: - type: string - sourceType: - description: SourceType is the type of source - type: string - updateStrategy: - description: UpdateStrategy defines how updated catalog source images - can be discovered Consists of an interval that defines polling duration - and an embedded strategy type - type: object - properties: - registryPoll: - type: object - properties: - interval: - description: Interval is used to determine the time interval - between checks of the latest catalog source version. The - catalog operator polls to see if a new version of the catalog - source is available. If available, the latest image is pulled - and gRPC traffic is directed to the latest catalog source. - type: string - status: - type: object - properties: - configMapReference: - type: object - required: - - name - - namespace - properties: - lastUpdateTime: - type: string - format: date-time - name: - type: string - namespace: - type: string - resourceVersion: - type: string - uid: - description: UID is a type that holds unique ID values, including - UUIDs. Because we don't ONLY use UUIDs, this is an alias to - string. Being a type captures intent and helps make sure that - UIDs and names do not get conflated. - type: string - connectionState: - type: object - required: - - lastObservedState - properties: - address: - type: string - lastConnect: - type: string - format: date-time - lastObservedState: - type: string - latestImageRegistryPoll: - description: The last time the CatalogSource image registry has been - polled to ensure the image is up-to-date - type: string - format: date-time - message: - description: A human readable message indicating details about why - the CatalogSource is in this condition. - type: string - reason: - description: Reason is the reason the CatalogSource was transitioned - to its current state. - type: string - registryService: - type: object - properties: - createdAt: - type: string - format: date-time - port: - type: string - protocol: - type: string - serviceName: - type: string - serviceNamespace: - type: string - served: true - storage: true - subresources: - status: {} - ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.3.0 - creationTimestamp: null - name: clusterserviceversions.operators.coreos.com -spec: - group: operators.coreos.com - names: - categories: - - olm - kind: ClusterServiceVersion - listKind: ClusterServiceVersionList - plural: clusterserviceversions - shortNames: - - csv - - csvs - singular: clusterserviceversion - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: The name of the CSV - jsonPath: .spec.displayName - name: Display - type: string - - description: The version of the CSV - jsonPath: .spec.version - name: Version - type: string - - description: The name of a CSV that this one replaces - jsonPath: .spec.replaces - name: Replaces - type: string - - jsonPath: .status.phase - name: Phase - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - description: ClusterServiceVersion is a Custom Resource of type `ClusterServiceVersionSpec`. - type: object - required: - - metadata - - spec - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: ClusterServiceVersionSpec declarations tell OLM how to install - an operator that can manage apps for a given version. - type: object - required: - - displayName - - install - properties: - annotations: - description: Annotations is an unstructured key value map stored with - a resource that may be set by external tools to store and retrieve - arbitrary metadata. - type: object - additionalProperties: - type: string - apiservicedefinitions: - description: APIServiceDefinitions declares all of the extension apis - managed or required by an operator being ran by ClusterServiceVersion. - type: object - properties: - owned: - type: array - items: - description: APIServiceDescription provides details to OLM about - apis provided via aggregation - type: object - required: - - group - - kind - - name - - version - properties: - actionDescriptors: - type: array - items: - description: ActionDescriptor describes a declarative - action that can be performed on a custom resource instance - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - containerPort: - type: integer - format: int32 - deploymentName: - type: string - description: - type: string - displayName: - type: string - group: - type: string - kind: - type: string - name: - type: string - resources: - type: array - items: - description: APIResourceReference is a Kubernetes resource - type used by a custom resource - type: object - required: - - kind - - name - - version - properties: - kind: - type: string - name: - type: string - version: - type: string - specDescriptors: - type: array - items: - description: SpecDescriptor describes a field in a spec - block of a CRD so that OLM can consume it - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - statusDescriptors: - type: array - items: - description: StatusDescriptor describes a field in a status - block of a CRD so that OLM can consume it - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - version: - type: string - required: - type: array - items: - description: APIServiceDescription provides details to OLM about - apis provided via aggregation - type: object - required: - - group - - kind - - name - - version - properties: - actionDescriptors: - type: array - items: - description: ActionDescriptor describes a declarative - action that can be performed on a custom resource instance - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - containerPort: - type: integer - format: int32 - deploymentName: - type: string - description: - type: string - displayName: - type: string - group: - type: string - kind: - type: string - name: - type: string - resources: - type: array - items: - description: APIResourceReference is a Kubernetes resource - type used by a custom resource - type: object - required: - - kind - - name - - version - properties: - kind: - type: string - name: - type: string - version: - type: string - specDescriptors: - type: array - items: - description: SpecDescriptor describes a field in a spec - block of a CRD so that OLM can consume it - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - statusDescriptors: - type: array - items: - description: StatusDescriptor describes a field in a status - block of a CRD so that OLM can consume it - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - version: - type: string - customresourcedefinitions: - description: "CustomResourceDefinitions declares all of the CRDs managed - or required by an operator being ran by ClusterServiceVersion. \n - If the CRD is present in the Owned list, it is implicitly required." - type: object - properties: - owned: - type: array - items: - description: CRDDescription provides details to OLM about the - CRDs - type: object - required: - - kind - - name - - version - properties: - actionDescriptors: - type: array - items: - description: ActionDescriptor describes a declarative - action that can be performed on a custom resource instance - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - description: - type: string - displayName: - type: string - kind: - type: string - name: - type: string - resources: - type: array - items: - description: APIResourceReference is a Kubernetes resource - type used by a custom resource - type: object - required: - - kind - - name - - version - properties: - kind: - type: string - name: - type: string - version: - type: string - specDescriptors: - type: array - items: - description: SpecDescriptor describes a field in a spec - block of a CRD so that OLM can consume it - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - statusDescriptors: - type: array - items: - description: StatusDescriptor describes a field in a status - block of a CRD so that OLM can consume it - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - version: - type: string - required: - type: array - items: - description: CRDDescription provides details to OLM about the - CRDs - type: object - required: - - kind - - name - - version - properties: - actionDescriptors: - type: array - items: - description: ActionDescriptor describes a declarative - action that can be performed on a custom resource instance - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - description: - type: string - displayName: - type: string - kind: - type: string - name: - type: string - resources: - type: array - items: - description: APIResourceReference is a Kubernetes resource - type used by a custom resource - type: object - required: - - kind - - name - - version - properties: - kind: - type: string - name: - type: string - version: - type: string - specDescriptors: - type: array - items: - description: SpecDescriptor describes a field in a spec - block of a CRD so that OLM can consume it - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - statusDescriptors: - type: array - items: - description: StatusDescriptor describes a field in a status - block of a CRD so that OLM can consume it - type: object - required: - - path - properties: - description: - type: string - displayName: - type: string - path: - type: string - value: - description: RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON - encoding. - type: string - format: byte - x-descriptors: - type: array - items: - type: string - version: - type: string - description: - type: string - displayName: - type: string - icon: - type: array - items: - type: object - required: - - base64data - - mediatype - properties: - base64data: - type: string - mediatype: - type: string - install: - description: NamedInstallStrategy represents the block of an ClusterServiceVersion - resource where the install strategy is specified. - type: object - required: - - strategy - properties: - spec: - description: StrategyDetailsDeployment represents the parsed details - of a Deployment InstallStrategy. - type: object - required: - - deployments - properties: - clusterPermissions: - type: array - items: - description: StrategyDeploymentPermissions describe the - rbac rules and service account needed by the install strategy - type: object - required: - - rules - - serviceAccountName - properties: - rules: - type: array - items: - description: PolicyRule holds information that describes - a policy rule, but does not contain information - about who the rule applies to or which namespace - the rule applies to. - type: object - required: - - verbs - properties: - apiGroups: - description: APIGroups is the name of the APIGroup - that contains the resources. If multiple API - groups are specified, any action requested against - one of the enumerated resources in any API group - will be allowed. - type: array - items: - type: string - nonResourceURLs: - description: NonResourceURLs is a set of partial - urls that a user should have access to. *s - are allowed, but only as the full, final step - in the path Since non-resource URLs are not - namespaced, this field is only applicable for - ClusterRoles referenced from a ClusterRoleBinding. - Rules can either apply to API resources (such - as "pods" or "secrets") or non-resource URL - paths (such as "/api"), but not both. - type: array - items: - type: string - resourceNames: - description: ResourceNames is an optional white - list of names that the rule applies to. An - empty set means that everything is allowed. - type: array - items: - type: string - resources: - description: Resources is a list of resources - this rule applies to. ResourceAll represents - all resources. - type: array - items: - type: string - verbs: - description: Verbs is a list of Verbs that apply - to ALL the ResourceKinds and AttributeRestrictions - contained in this rule. VerbAll represents - all kinds. - type: array - items: - type: string - serviceAccountName: - type: string - deployments: - type: array - items: - description: StrategyDeploymentSpec contains the name, spec - and labels for the deployment ALM should create - type: object - required: - - name - - spec - properties: - label: - description: Set is a map of label:value. It implements - Labels. - type: object - additionalProperties: - type: string - name: - type: string - spec: - description: DeploymentSpec is the specification of - the desired behavior of the Deployment. - type: object - required: - - selector - - template - properties: - minReadySeconds: - description: Minimum number of seconds for which - a newly created pod should be ready without any - of its container crashing, for it to be considered - available. Defaults to 0 (pod will be considered - available as soon as it is ready) - type: integer - format: int32 - paused: - description: Indicates that the deployment is paused. - type: boolean - progressDeadlineSeconds: - description: The maximum time in seconds for a deployment - to make progress before it is considered to be - failed. The deployment controller will continue - to process failed deployments and a condition - with a ProgressDeadlineExceeded reason will be - surfaced in the deployment status. Note that progress - will not be estimated during the time a deployment - is paused. Defaults to 600s. - type: integer - format: int32 - replicas: - description: Number of desired pods. This is a pointer - to distinguish between explicit zero and not specified. - Defaults to 1. - type: integer - format: int32 - revisionHistoryLimit: - description: The number of old ReplicaSets to retain - to allow rollback. This is a pointer to distinguish - between explicit zero and not specified. Defaults - to 10. - type: integer - format: int32 - selector: - description: Label selector for pods. Existing ReplicaSets - whose pods are selected by this will be the ones - affected by this deployment. It must match the - pod template's labels. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are - ANDed. - type: array - items: - description: A label selector requirement - is a selector that contains values, a key, - and an operator that relates the key and - values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that - the selector applies to. - type: string - operator: - description: operator represents a key's - relationship to a set of values. Valid - operators are In, NotIn, Exists and - DoesNotExist. - type: string - values: - description: values is an array of string - values. If the operator is In or NotIn, - the values array must be non-empty. - If the operator is Exists or DoesNotExist, - the values array must be empty. This - array is replaced during a strategic - merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} - pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, - whose key field is "key", the operator is - "In", and the values array contains only "value". - The requirements are ANDed. - type: object - additionalProperties: - type: string - strategy: - description: The deployment strategy to use to replace - existing pods with new ones. - type: object - properties: - rollingUpdate: - description: 'Rolling update config params. - Present only if DeploymentStrategyType = RollingUpdate. - --- TODO: Update this to follow our convention - for oneOf, whatever we decide it to be.' - type: object - properties: - maxSurge: - description: 'The maximum number of pods - that can be scheduled above the desired - number of pods. Value can be an absolute - number (ex: 5) or a percentage of desired - pods (ex: 10%). This can not be 0 if MaxUnavailable - is 0. Absolute number is calculated from - percentage by rounding up. Defaults to - 25%. Example: when this is set to 30%, - the new ReplicaSet can be scaled up immediately - when the rolling update starts, such that - the total number of old and new pods do - not exceed 130% of desired pods. Once - old pods have been killed, new ReplicaSet - can be scaled up further, ensuring that - total number of pods running at any time - during the update is at most 130% of desired - pods.' - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - maxUnavailable: - description: 'The maximum number of pods - that can be unavailable during the update. - Value can be an absolute number (ex: 5) - or a percentage of desired pods (ex: 10%). - Absolute number is calculated from percentage - by rounding down. This can not be 0 if - MaxSurge is 0. Defaults to 25%. Example: - when this is set to 30%, the old ReplicaSet - can be scaled down to 70% of desired pods - immediately when the rolling update starts. - Once new pods are ready, old ReplicaSet - can be scaled down further, followed by - scaling up the new ReplicaSet, ensuring - that the total number of pods available - at all times during the update is at least - 70% of desired pods.' - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - type: - description: Type of deployment. Can be "Recreate" - or "RollingUpdate". Default is RollingUpdate. - type: string - template: - description: Template describes the pods that will - be created. - type: object - properties: - metadata: - description: 'Standard object''s metadata. More - info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' - type: object - x-kubernetes-preserve-unknown-fields: true - spec: - description: 'Specification of the desired behavior - of the pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' - type: object - required: - - containers - properties: - activeDeadlineSeconds: - description: Optional duration in seconds - the pod may be active on the node relative - to StartTime before the system will actively - try to mark it failed and kill associated - containers. Value must be a positive integer. - type: integer - format: int64 - affinity: - description: If specified, the pod's scheduling - constraints - type: object - properties: - nodeAffinity: - description: Describes node affinity - scheduling rules for the pod. - type: object - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: The scheduler will - prefer to schedule pods to nodes - that satisfy the affinity expressions - specified by this field, but it - may choose a node that violates - one or more of the expressions. - The node that is most preferred - is the one with the greatest sum - of weights, i.e. for each node - that meets all of the scheduling - requirements (resource request, - requiredDuringScheduling affinity - expressions, etc.), compute a - sum by iterating through the elements - of this field and adding "weight" - to the sum if the node matches - the corresponding matchExpressions; - the node(s) with the highest sum - are the most preferred. - type: array - items: - description: An empty preferred - scheduling term matches all - objects with implicit weight - 0 (i.e. it's a no-op). A null - preferred scheduling term matches - no objects (i.e. is also a no-op). - type: object - required: - - preference - - weight - properties: - preference: - description: A node selector - term, associated with the - corresponding weight. - type: object - properties: - matchExpressions: - description: A list of - node selector requirements - by node's labels. - type: array - items: - description: A node - selector requirement - is a selector that - contains values, a - key, and an operator - that relates the key - and values. - type: object - required: - - key - - operator - properties: - key: - description: The - label key that - the selector applies - to. - type: string - operator: - description: Represents - a key's relationship - to a set of values. - Valid operators - are In, NotIn, - Exists, DoesNotExist. - Gt, and Lt. - type: string - values: - description: An - array of string - values. If the - operator is In - or NotIn, the - values array must - be non-empty. - If the operator - is Exists or DoesNotExist, - the values array - must be empty. - If the operator - is Gt or Lt, the - values array must - have a single - element, which - will be interpreted - as an integer. - This array is - replaced during - a strategic merge - patch. - type: array - items: - type: string - matchFields: - description: A list of - node selector requirements - by node's fields. - type: array - items: - description: A node - selector requirement - is a selector that - contains values, a - key, and an operator - that relates the key - and values. - type: object - required: - - key - - operator - properties: - key: - description: The - label key that - the selector applies - to. - type: string - operator: - description: Represents - a key's relationship - to a set of values. - Valid operators - are In, NotIn, - Exists, DoesNotExist. - Gt, and Lt. - type: string - values: - description: An - array of string - values. If the - operator is In - or NotIn, the - values array must - be non-empty. - If the operator - is Exists or DoesNotExist, - the values array - must be empty. - If the operator - is Gt or Lt, the - values array must - have a single - element, which - will be interpreted - as an integer. - This array is - replaced during - a strategic merge - patch. - type: array - items: - type: string - weight: - description: Weight associated - with matching the corresponding - nodeSelectorTerm, in the - range 1-100. - type: integer - format: int32 - requiredDuringSchedulingIgnoredDuringExecution: - description: If the affinity requirements - specified by this field are not - met at scheduling time, the pod - will not be scheduled onto the - node. If the affinity requirements - specified by this field cease - to be met at some point during - pod execution (e.g. due to an - update), the system may or may - not try to eventually evict the - pod from its node. - type: object - required: - - nodeSelectorTerms - properties: - nodeSelectorTerms: - description: Required. A list - of node selector terms. The - terms are ORed. - type: array - items: - description: A null or empty - node selector term matches - no objects. The requirements - of them are ANDed. The TopologySelectorTerm - type implements a subset - of the NodeSelectorTerm. - type: object - properties: - matchExpressions: - description: A list of - node selector requirements - by node's labels. - type: array - items: - description: A node - selector requirement - is a selector that - contains values, a - key, and an operator - that relates the key - and values. - type: object - required: - - key - - operator - properties: - key: - description: The - label key that - the selector applies - to. - type: string - operator: - description: Represents - a key's relationship - to a set of values. - Valid operators - are In, NotIn, - Exists, DoesNotExist. - Gt, and Lt. - type: string - values: - description: An - array of string - values. If the - operator is In - or NotIn, the - values array must - be non-empty. - If the operator - is Exists or DoesNotExist, - the values array - must be empty. - If the operator - is Gt or Lt, the - values array must - have a single - element, which - will be interpreted - as an integer. - This array is - replaced during - a strategic merge - patch. - type: array - items: - type: string - matchFields: - description: A list of - node selector requirements - by node's fields. - type: array - items: - description: A node - selector requirement - is a selector that - contains values, a - key, and an operator - that relates the key - and values. - type: object - required: - - key - - operator - properties: - key: - description: The - label key that - the selector applies - to. - type: string - operator: - description: Represents - a key's relationship - to a set of values. - Valid operators - are In, NotIn, - Exists, DoesNotExist. - Gt, and Lt. - type: string - values: - description: An - array of string - values. If the - operator is In - or NotIn, the - values array must - be non-empty. - If the operator - is Exists or DoesNotExist, - the values array - must be empty. - If the operator - is Gt or Lt, the - values array must - have a single - element, which - will be interpreted - as an integer. - This array is - replaced during - a strategic merge - patch. - type: array - items: - type: string - podAffinity: - description: Describes pod affinity - scheduling rules (e.g. co-locate this - pod in the same node, zone, etc. as - some other pod(s)). - type: object - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: The scheduler will - prefer to schedule pods to nodes - that satisfy the affinity expressions - specified by this field, but it - may choose a node that violates - one or more of the expressions. - The node that is most preferred - is the one with the greatest sum - of weights, i.e. for each node - that meets all of the scheduling - requirements (resource request, - requiredDuringScheduling affinity - expressions, etc.), compute a - sum by iterating through the elements - of this field and adding "weight" - to the sum if the node has pods - which matches the corresponding - podAffinityTerm; the node(s) with - the highest sum are the most preferred. - type: array - items: - description: The weights of all - of the matched WeightedPodAffinityTerm - fields are added per-node to - find the most preferred node(s) - type: object - required: - - podAffinityTerm - - weight - properties: - podAffinityTerm: - description: Required. A pod - affinity term, associated - with the corresponding weight. - type: object - required: - - topologyKey - properties: - labelSelector: - description: A label query - over a set of resources, - in this case pods. - type: object - properties: - matchExpressions: - description: matchExpressions - is a list of label - selector requirements. - The requirements - are ANDed. - type: array - items: - description: A label - selector requirement - is a selector - that contains - values, a key, - and an operator - that relates the - key and values. - type: object - required: - - key - - operator - properties: - key: - description: key - is the label - key that the - selector applies - to. - type: string - operator: - description: operator - represents - a key's relationship - to a set of - values. Valid - operators - are In, NotIn, - Exists and - DoesNotExist. - type: string - values: - description: values - is an array - of string - values. If - the operator - is In or NotIn, - the values - array must - be non-empty. - If the operator - is Exists - or DoesNotExist, - the values - array must - be empty. - This array - is replaced - during a strategic - merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels - is a map of {key,value} - pairs. A single - {key,value} in the - matchLabels map - is equivalent to - an element of matchExpressions, - whose key field - is "key", the operator - is "In", and the - values array contains - only "value". The - requirements are - ANDed. - type: object - additionalProperties: - type: string - namespaces: - description: namespaces - specifies which namespaces - the labelSelector applies - to (matches against); - null or empty list means - "this pod's namespace" - type: array - items: - type: string - topologyKey: - description: This pod - should be co-located - (affinity) or not co-located - (anti-affinity) with - the pods matching the - labelSelector in the - specified namespaces, - where co-located is - defined as running on - a node whose value of - the label with key topologyKey - matches that of any - node on which any of - the selected pods is - running. Empty topologyKey - is not allowed. - type: string - weight: - description: weight associated - with matching the corresponding - podAffinityTerm, in the - range 1-100. - type: integer - format: int32 - requiredDuringSchedulingIgnoredDuringExecution: - description: If the affinity requirements - specified by this field are not - met at scheduling time, the pod - will not be scheduled onto the - node. If the affinity requirements - specified by this field cease - to be met at some point during - pod execution (e.g. due to a pod - label update), the system may - or may not try to eventually evict - the pod from its node. When there - are multiple elements, the lists - of nodes corresponding to each - podAffinityTerm are intersected, - i.e. all terms must be satisfied. - type: array - items: - description: Defines a set of - pods (namely those matching - the labelSelector relative to - the given namespace(s)) that - this pod should be co-located - (affinity) or not co-located - (anti-affinity) with, where - co-located is defined as running - on a node whose value of the - label with key - matches that of any node on - which a pod of the set of pods - is running - type: object - required: - - topologyKey - properties: - labelSelector: - description: A label query - over a set of resources, - in this case pods. - type: object - properties: - matchExpressions: - description: matchExpressions - is a list of label selector - requirements. The requirements - are ANDed. - type: array - items: - description: A label - selector requirement - is a selector that - contains values, a - key, and an operator - that relates the key - and values. - type: object - required: - - key - - operator - properties: - key: - description: key - is the label key - that the selector - applies to. - type: string - operator: - description: operator - represents a key's - relationship to - a set of values. - Valid operators - are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values - is an array of - string values. - If the operator - is In or NotIn, - the values array - must be non-empty. - If the operator - is Exists or DoesNotExist, - the values array - must be empty. - This array is - replaced during - a strategic merge - patch. - type: array - items: - type: string - matchLabels: - description: matchLabels - is a map of {key,value} - pairs. A single {key,value} - in the matchLabels map - is equivalent to an - element of matchExpressions, - whose key field is "key", - the operator is "In", - and the values array - contains only "value". - The requirements are - ANDed. - type: object - additionalProperties: - type: string - namespaces: - description: namespaces specifies - which namespaces the labelSelector - applies to (matches against); - null or empty list means - "this pod's namespace" - type: array - items: - type: string - topologyKey: - description: This pod should - be co-located (affinity) - or not co-located (anti-affinity) - with the pods matching the - labelSelector in the specified - namespaces, where co-located - is defined as running on - a node whose value of the - label with key topologyKey - matches that of any node - on which any of the selected - pods is running. Empty topologyKey - is not allowed. - type: string - podAntiAffinity: - description: Describes pod anti-affinity - scheduling rules (e.g. avoid putting - this pod in the same node, zone, etc. - as some other pod(s)). - type: object - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: The scheduler will - prefer to schedule pods to nodes - that satisfy the anti-affinity - expressions specified by this - field, but it may choose a node - that violates one or more of the - expressions. The node that is - most preferred is the one with - the greatest sum of weights, i.e. - for each node that meets all of - the scheduling requirements (resource - request, requiredDuringScheduling - anti-affinity expressions, etc.), - compute a sum by iterating through - the elements of this field and - adding "weight" to the sum if - the node has pods which matches - the corresponding podAffinityTerm; - the node(s) with the highest sum - are the most preferred. - type: array - items: - description: The weights of all - of the matched WeightedPodAffinityTerm - fields are added per-node to - find the most preferred node(s) - type: object - required: - - podAffinityTerm - - weight - properties: - podAffinityTerm: - description: Required. A pod - affinity term, associated - with the corresponding weight. - type: object - required: - - topologyKey - properties: - labelSelector: - description: A label query - over a set of resources, - in this case pods. - type: object - properties: - matchExpressions: - description: matchExpressions - is a list of label - selector requirements. - The requirements - are ANDed. - type: array - items: - description: A label - selector requirement - is a selector - that contains - values, a key, - and an operator - that relates the - key and values. - type: object - required: - - key - - operator - properties: - key: - description: key - is the label - key that the - selector applies - to. - type: string - operator: - description: operator - represents - a key's relationship - to a set of - values. Valid - operators - are In, NotIn, - Exists and - DoesNotExist. - type: string - values: - description: values - is an array - of string - values. If - the operator - is In or NotIn, - the values - array must - be non-empty. - If the operator - is Exists - or DoesNotExist, - the values - array must - be empty. - This array - is replaced - during a strategic - merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels - is a map of {key,value} - pairs. A single - {key,value} in the - matchLabels map - is equivalent to - an element of matchExpressions, - whose key field - is "key", the operator - is "In", and the - values array contains - only "value". The - requirements are - ANDed. - type: object - additionalProperties: - type: string - namespaces: - description: namespaces - specifies which namespaces - the labelSelector applies - to (matches against); - null or empty list means - "this pod's namespace" - type: array - items: - type: string - topologyKey: - description: This pod - should be co-located - (affinity) or not co-located - (anti-affinity) with - the pods matching the - labelSelector in the - specified namespaces, - where co-located is - defined as running on - a node whose value of - the label with key topologyKey - matches that of any - node on which any of - the selected pods is - running. Empty topologyKey - is not allowed. - type: string - weight: - description: weight associated - with matching the corresponding - podAffinityTerm, in the - range 1-100. - type: integer - format: int32 - requiredDuringSchedulingIgnoredDuringExecution: - description: If the anti-affinity - requirements specified by this - field are not met at scheduling - time, the pod will not be scheduled - onto the node. If the anti-affinity - requirements specified by this - field cease to be met at some - point during pod execution (e.g. - due to a pod label update), the - system may or may not try to eventually - evict the pod from its node. When - there are multiple elements, the - lists of nodes corresponding to - each podAffinityTerm are intersected, - i.e. all terms must be satisfied. - type: array - items: - description: Defines a set of - pods (namely those matching - the labelSelector relative to - the given namespace(s)) that - this pod should be co-located - (affinity) or not co-located - (anti-affinity) with, where - co-located is defined as running - on a node whose value of the - label with key - matches that of any node on - which a pod of the set of pods - is running - type: object - required: - - topologyKey - properties: - labelSelector: - description: A label query - over a set of resources, - in this case pods. - type: object - properties: - matchExpressions: - description: matchExpressions - is a list of label selector - requirements. The requirements - are ANDed. - type: array - items: - description: A label - selector requirement - is a selector that - contains values, a - key, and an operator - that relates the key - and values. - type: object - required: - - key - - operator - properties: - key: - description: key - is the label key - that the selector - applies to. - type: string - operator: - description: operator - represents a key's - relationship to - a set of values. - Valid operators - are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values - is an array of - string values. - If the operator - is In or NotIn, - the values array - must be non-empty. - If the operator - is Exists or DoesNotExist, - the values array - must be empty. - This array is - replaced during - a strategic merge - patch. - type: array - items: - type: string - matchLabels: - description: matchLabels - is a map of {key,value} - pairs. A single {key,value} - in the matchLabels map - is equivalent to an - element of matchExpressions, - whose key field is "key", - the operator is "In", - and the values array - contains only "value". - The requirements are - ANDed. - type: object - additionalProperties: - type: string - namespaces: - description: namespaces specifies - which namespaces the labelSelector - applies to (matches against); - null or empty list means - "this pod's namespace" - type: array - items: - type: string - topologyKey: - description: This pod should - be co-located (affinity) - or not co-located (anti-affinity) - with the pods matching the - labelSelector in the specified - namespaces, where co-located - is defined as running on - a node whose value of the - label with key topologyKey - matches that of any node - on which any of the selected - pods is running. Empty topologyKey - is not allowed. - type: string - automountServiceAccountToken: - description: AutomountServiceAccountToken - indicates whether a service account token - should be automatically mounted. - type: boolean - containers: - description: List of containers belonging - to the pod. Containers cannot currently - be added or removed. There must be at - least one container in a Pod. Cannot be - updated. - type: array - items: - description: A single application container - that you want to run within a pod. - type: object - required: - - name - properties: - args: - description: 'Arguments to the entrypoint. - The docker image''s CMD is used - if this is not provided. Variable - references $(VAR_NAME) are expanded - using the container''s environment. - If a variable cannot be resolved, - the reference in the input string - will be unchanged. The $(VAR_NAME) - syntax can be escaped with a double - $$, ie: $$(VAR_NAME). Escaped references - will never be expanded, regardless - of whether the variable exists or - not. Cannot be updated. More info: - https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' - type: array - items: - type: string - command: - description: 'Entrypoint array. Not - executed within a shell. The docker - image''s ENTRYPOINT is used if this - is not provided. Variable references - $(VAR_NAME) are expanded using the - container''s environment. If a variable - cannot be resolved, the reference - in the input string will be unchanged. - The $(VAR_NAME) syntax can be escaped - with a double $$, ie: $$(VAR_NAME). - Escaped references will never be - expanded, regardless of whether - the variable exists or not. Cannot - be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' - type: array - items: - type: string - env: - description: List of environment variables - to set in the container. Cannot - be updated. - type: array - items: - description: EnvVar represents an - environment variable present in - a Container. - type: object - required: - - name - properties: - name: - description: Name of the environment - variable. Must be a C_IDENTIFIER. - type: string - value: - description: 'Variable references - $(VAR_NAME) are expanded using - the previous defined environment - variables in the container - and any service environment - variables. If a variable cannot - be resolved, the reference - in the input string will be - unchanged. The $(VAR_NAME) - syntax can be escaped with - a double $$, ie: $$(VAR_NAME). - Escaped references will never - be expanded, regardless of - whether the variable exists - or not. Defaults to "".' - type: string - valueFrom: - description: Source for the - environment variable's value. - Cannot be used if value is - not empty. - type: object - properties: - configMapKeyRef: - description: Selects a key - of a ConfigMap. - type: object - required: - - key - properties: - key: - description: The key - to select. - type: string - name: - description: 'Name of - the referent. More - info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify - whether the ConfigMap - or its key must be - defined - type: boolean - fieldRef: - description: 'Selects a - field of the pod: supports - metadata.name, metadata.namespace, - metadata.labels, metadata.annotations, - spec.nodeName, spec.serviceAccountName, - status.hostIP, status.podIP, - status.podIPs.' - type: object - required: - - fieldPath - properties: - apiVersion: - description: Version - of the schema the - FieldPath is written - in terms of, defaults - to "v1". - type: string - fieldPath: - description: Path of - the field to select - in the specified API - version. - type: string - resourceFieldRef: - description: 'Selects a - resource of the container: - only resources limits - and requests (limits.cpu, - limits.memory, limits.ephemeral-storage, - requests.cpu, requests.memory - and requests.ephemeral-storage) - are currently supported.' - type: object - required: - - resource - properties: - containerName: - description: 'Container - name: required for - volumes, optional - for env vars' - type: string - divisor: - description: Specifies - the output format - of the exposed resources, - defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - resource: - description: 'Required: - resource to select' - type: string - secretKeyRef: - description: Selects a key - of a secret in the pod's - namespace - type: object - required: - - key - properties: - key: - description: The key - of the secret to select - from. Must be a valid - secret key. - type: string - name: - description: 'Name of - the referent. More - info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify - whether the Secret - or its key must be - defined - type: boolean - envFrom: - description: List of sources to populate - environment variables in the container. - The keys defined within a source - must be a C_IDENTIFIER. All invalid - keys will be reported as an event - when the container is starting. - When a key exists in multiple sources, - the value associated with the last - source will take precedence. Values - defined by an Env with a duplicate - key will take precedence. Cannot - be updated. - type: array - items: - description: EnvFromSource represents - the source of a set of ConfigMaps - type: object - properties: - configMapRef: - description: The ConfigMap to - select from - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, kind, - uid?' - type: string - optional: - description: Specify whether - the ConfigMap must be - defined - type: boolean - prefix: - description: An optional identifier - to prepend to each key in - the ConfigMap. Must be a C_IDENTIFIER. - type: string - secretRef: - description: The Secret to select - from - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, kind, - uid?' - type: string - optional: - description: Specify whether - the Secret must be defined - type: boolean - image: - description: 'Docker image name. More - info: https://kubernetes.io/docs/concepts/containers/images - This field is optional to allow - higher level config management to - default or override container images - in workload controllers like Deployments - and StatefulSets.' - type: string - imagePullPolicy: - description: 'Image pull policy. One - of Always, Never, IfNotPresent. - Defaults to Always if :latest tag - is specified, or IfNotPresent otherwise. - Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' - type: string - lifecycle: - description: Actions that the management - system should take in response to - container lifecycle events. Cannot - be updated. - type: object - properties: - postStart: - description: 'PostStart is called - immediately after a container - is created. If the handler fails, - the container is terminated - and restarted according to its - restart policy. Other management - of the container blocks until - the hook completes. More info: - https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' - type: object - properties: - exec: - description: One and only - one of the following should - be specified. Exec specifies - the action to take. - type: object - properties: - command: - description: Command is - the command line to - execute inside the container, - the working directory - for the command is - root ('/') in the container's - filesystem. The command - is simply exec'd, it - is not run inside a - shell, so traditional - shell instructions ('|', - etc) won't work. To - use a shell, you need - to explicitly call out - to that shell. Exit - status of 0 is treated - as live/healthy and - non-zero is unhealthy. - type: array - items: - type: string - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name - to connect to, defaults - to the pod IP. You probably - want to set "Host" in - httpHeaders instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. - HTTP allows repeated - headers. - type: array - items: - description: HTTPHeader - describes a custom - header to be used - in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The - header field name - type: string - value: - description: The - header field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access - on the container. Number - must be in the range - 1 to 65535. Name must - be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to - use for connecting to - the host. Defaults to - HTTP. - type: string - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP - port. TCP hooks not yet - supported TODO: implement - a realistic TCP lifecycle - hook' - type: object - required: - - port - properties: - host: - description: 'Optional: - Host name to connect - to, defaults to the - pod IP.' - type: string - port: - description: Number or - name of the port to - access on the container. - Number must be in the - range 1 to 65535. Name - must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - preStop: - description: 'PreStop is called - immediately before a container - is terminated due to an API - request or management event - such as liveness/startup probe - failure, preemption, resource - contention, etc. The handler - is not called if the container - crashes or exits. The reason - for termination is passed to - the handler. The Pod''s termination - grace period countdown begins - before the PreStop hooked is - executed. Regardless of the - outcome of the handler, the - container will eventually terminate - within the Pod''s termination - grace period. Other management - of the container blocks until - the hook completes or until - the termination grace period - is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' - type: object - properties: - exec: - description: One and only - one of the following should - be specified. Exec specifies - the action to take. - type: object - properties: - command: - description: Command is - the command line to - execute inside the container, - the working directory - for the command is - root ('/') in the container's - filesystem. The command - is simply exec'd, it - is not run inside a - shell, so traditional - shell instructions ('|', - etc) won't work. To - use a shell, you need - to explicitly call out - to that shell. Exit - status of 0 is treated - as live/healthy and - non-zero is unhealthy. - type: array - items: - type: string - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name - to connect to, defaults - to the pod IP. You probably - want to set "Host" in - httpHeaders instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. - HTTP allows repeated - headers. - type: array - items: - description: HTTPHeader - describes a custom - header to be used - in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The - header field name - type: string - value: - description: The - header field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access - on the container. Number - must be in the range - 1 to 65535. Name must - be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to - use for connecting to - the host. Defaults to - HTTP. - type: string - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP - port. TCP hooks not yet - supported TODO: implement - a realistic TCP lifecycle - hook' - type: object - required: - - port - properties: - host: - description: 'Optional: - Host name to connect - to, defaults to the - pod IP.' - type: string - port: - description: Number or - name of the port to - access on the container. - Number must be in the - range 1 to 65535. Name - must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - livenessProbe: - description: 'Periodic probe of container - liveness. Container will be restarted - if the probe fails. Cannot be updated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: object - properties: - exec: - description: One and only one - of the following should be specified. - Exec specifies the action to - take. - type: object - properties: - command: - description: Command is the - command line to execute - inside the container, the - working directory for the - command is root ('/') in - the container's filesystem. - The command is simply exec'd, - it is not run inside a shell, - so traditional shell instructions - ('|', etc) won't work. To - use a shell, you need to - explicitly call out to that - shell. Exit status of 0 - is treated as live/healthy - and non-zero is unhealthy. - type: array - items: - type: string - failureThreshold: - description: Minimum consecutive - failures for the probe to be - considered failed after having - succeeded. Defaults to 3. Minimum - value is 1. - type: integer - format: int32 - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name to - connect to, defaults to - the pod IP. You probably - want to set "Host" in httpHeaders - instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. HTTP - allows repeated headers. - type: array - items: - description: HTTPHeader - describes a custom header - to be used in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The header - field name - type: string - value: - description: The header - field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to use - for connecting to the host. - Defaults to HTTP. - type: string - initialDelaySeconds: - description: 'Number of seconds - after the container has started - before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - periodSeconds: - description: How often (in seconds) - to perform the probe. Default - to 10 seconds. Minimum value - is 1. - type: integer - format: int32 - successThreshold: - description: Minimum consecutive - successes for the probe to be - considered successful after - having failed. Defaults to 1. - Must be 1 for liveness and startup. - Minimum value is 1. - type: integer - format: int32 - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP port. - TCP hooks not yet supported - TODO: implement a realistic - TCP lifecycle hook' - type: object - required: - - port - properties: - host: - description: 'Optional: Host - name to connect to, defaults - to the pod IP.' - type: string - port: - description: Number or name - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - description: 'Number of seconds - after which the probe times - out. Defaults to 1 second. Minimum - value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - name: - description: Name of the container - specified as a DNS_LABEL. Each container - in a pod must have a unique name - (DNS_LABEL). Cannot be updated. - type: string - ports: - description: List of ports to expose - from the container. Exposing a port - here gives the system additional - information about the network connections - a container uses, but is primarily - informational. Not specifying a - port here DOES NOT prevent that - port from being exposed. Any port - which is listening on the default - "0.0.0.0" address inside a container - will be accessible from the network. - Cannot be updated. - type: array - items: - description: ContainerPort represents - a network port in a single container. - type: object - required: - - containerPort - properties: - containerPort: - description: Number of port - to expose on the pod's IP - address. This must be a valid - port number, 0 < x < 65536. - type: integer - format: int32 - hostIP: - description: What host IP to - bind the external port to. - type: string - hostPort: - description: Number of port - to expose on the host. If - specified, this must be a - valid port number, 0 < x < - 65536. If HostNetwork is specified, - this must match ContainerPort. - Most containers do not need - this. - type: integer - format: int32 - name: - description: If specified, this - must be an IANA_SVC_NAME and - unique within the pod. Each - named port in a pod must have - a unique name. Name for the - port that can be referred - to by services. - type: string - protocol: - description: Protocol for port. - Must be UDP, TCP, or SCTP. - Defaults to "TCP". - type: string - default: TCP - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - description: 'Periodic probe of container - service readiness. Container will - be removed from service endpoints - if the probe fails. Cannot be updated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: object - properties: - exec: - description: One and only one - of the following should be specified. - Exec specifies the action to - take. - type: object - properties: - command: - description: Command is the - command line to execute - inside the container, the - working directory for the - command is root ('/') in - the container's filesystem. - The command is simply exec'd, - it is not run inside a shell, - so traditional shell instructions - ('|', etc) won't work. To - use a shell, you need to - explicitly call out to that - shell. Exit status of 0 - is treated as live/healthy - and non-zero is unhealthy. - type: array - items: - type: string - failureThreshold: - description: Minimum consecutive - failures for the probe to be - considered failed after having - succeeded. Defaults to 3. Minimum - value is 1. - type: integer - format: int32 - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name to - connect to, defaults to - the pod IP. You probably - want to set "Host" in httpHeaders - instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. HTTP - allows repeated headers. - type: array - items: - description: HTTPHeader - describes a custom header - to be used in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The header - field name - type: string - value: - description: The header - field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to use - for connecting to the host. - Defaults to HTTP. - type: string - initialDelaySeconds: - description: 'Number of seconds - after the container has started - before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - periodSeconds: - description: How often (in seconds) - to perform the probe. Default - to 10 seconds. Minimum value - is 1. - type: integer - format: int32 - successThreshold: - description: Minimum consecutive - successes for the probe to be - considered successful after - having failed. Defaults to 1. - Must be 1 for liveness and startup. - Minimum value is 1. - type: integer - format: int32 - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP port. - TCP hooks not yet supported - TODO: implement a realistic - TCP lifecycle hook' - type: object - required: - - port - properties: - host: - description: 'Optional: Host - name to connect to, defaults - to the pod IP.' - type: string - port: - description: Number or name - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - description: 'Number of seconds - after which the probe times - out. Defaults to 1 second. Minimum - value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - resources: - description: 'Compute Resources required - by this container. Cannot be updated. - More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - properties: - limits: - description: 'Limits describes - the maximum amount of compute - resources allowed. More info: - https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - requests: - description: 'Requests describes - the minimum amount of compute - resources required. If Requests - is omitted for a container, - it defaults to Limits if that - is explicitly specified, otherwise - to an implementation-defined - value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - securityContext: - description: 'Security options the - pod should run with. More info: - https://kubernetes.io/docs/concepts/policy/security-context/ - More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' - type: object - properties: - allowPrivilegeEscalation: - description: 'AllowPrivilegeEscalation - controls whether a process can - gain more privileges than its - parent process. This bool directly - controls if the no_new_privs - flag will be set on the container - process. AllowPrivilegeEscalation - is true always when the container - is: 1) run as Privileged 2) - has CAP_SYS_ADMIN' - type: boolean - capabilities: - description: The capabilities - to add/drop when running containers. - Defaults to the default set - of capabilities granted by the - container runtime. - type: object - properties: - add: - description: Added capabilities - type: array - items: - description: Capability - represent POSIX capabilities - type - type: string - drop: - description: Removed capabilities - type: array - items: - description: Capability - represent POSIX capabilities - type - type: string - privileged: - description: Run container in - privileged mode. Processes in - privileged containers are essentially - equivalent to root on the host. - Defaults to false. - type: boolean - procMount: - description: procMount denotes - the type of proc mount to use - for the containers. The default - is DefaultProcMount which uses - the container runtime defaults - for readonly paths and masked - paths. This requires the ProcMountType - feature flag to be enabled. - type: string - readOnlyRootFilesystem: - description: Whether this container - has a read-only root filesystem. - Default is false. - type: boolean - runAsGroup: - description: The GID to run the - entrypoint of the container - process. Uses runtime default - if unset. May also be set in - PodSecurityContext. If set - in both SecurityContext and - PodSecurityContext, the value - specified in SecurityContext - takes precedence. - type: integer - format: int64 - runAsNonRoot: - description: Indicates that the - container must run as a non-root - user. If true, the Kubelet will - validate the image at runtime - to ensure that it does not run - as UID 0 (root) and fail to - start the container if it does. - If unset or false, no such validation - will be performed. May also - be set in PodSecurityContext. If - set in both SecurityContext - and PodSecurityContext, the - value specified in SecurityContext - takes precedence. - type: boolean - runAsUser: - description: The UID to run the - entrypoint of the container - process. Defaults to user specified - in image metadata if unspecified. - May also be set in PodSecurityContext. If - set in both SecurityContext - and PodSecurityContext, the - value specified in SecurityContext - takes precedence. - type: integer - format: int64 - seLinuxOptions: - description: The SELinux context - to be applied to the container. - If unspecified, the container - runtime will allocate a random - SELinux context for each container. May - also be set in PodSecurityContext. If - set in both SecurityContext - and PodSecurityContext, the - value specified in SecurityContext - takes precedence. - type: object - properties: - level: - description: Level is SELinux - level label that applies - to the container. - type: string - role: - description: Role is a SELinux - role label that applies - to the container. - type: string - type: - description: Type is a SELinux - type label that applies - to the container. - type: string - user: - description: User is a SELinux - user label that applies - to the container. - type: string - windowsOptions: - description: The Windows specific - settings applied to all containers. - If unspecified, the options - from the PodSecurityContext - will be used. If set in both - SecurityContext and PodSecurityContext, - the value specified in SecurityContext - takes precedence. - type: object - properties: - gmsaCredentialSpec: - description: GMSACredentialSpec - is where the GMSA admission - webhook (https://github.com/kubernetes-sigs/windows-gmsa) - inlines the contents of - the GMSA credential spec - named by the GMSACredentialSpecName - field. - type: string - gmsaCredentialSpecName: - description: GMSACredentialSpecName - is the name of the GMSA - credential spec to use. - type: string - runAsUserName: - description: The UserName - in Windows to run the entrypoint - of the container process. - Defaults to the user specified - in image metadata if unspecified. - May also be set in PodSecurityContext. - If set in both SecurityContext - and PodSecurityContext, - the value specified in SecurityContext - takes precedence. - type: string - startupProbe: - description: 'StartupProbe indicates - that the Pod has successfully initialized. - If specified, no other probes are - executed until this completes successfully. - If this probe fails, the Pod will - be restarted, just as if the livenessProbe - failed. This can be used to provide - different probe parameters at the - beginning of a Pod''s lifecycle, - when it might take a long time to - load data or warm a cache, than - during steady-state operation. This - cannot be updated. This is a beta - feature enabled by the StartupProbe - feature flag. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: object - properties: - exec: - description: One and only one - of the following should be specified. - Exec specifies the action to - take. - type: object - properties: - command: - description: Command is the - command line to execute - inside the container, the - working directory for the - command is root ('/') in - the container's filesystem. - The command is simply exec'd, - it is not run inside a shell, - so traditional shell instructions - ('|', etc) won't work. To - use a shell, you need to - explicitly call out to that - shell. Exit status of 0 - is treated as live/healthy - and non-zero is unhealthy. - type: array - items: - type: string - failureThreshold: - description: Minimum consecutive - failures for the probe to be - considered failed after having - succeeded. Defaults to 3. Minimum - value is 1. - type: integer - format: int32 - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name to - connect to, defaults to - the pod IP. You probably - want to set "Host" in httpHeaders - instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. HTTP - allows repeated headers. - type: array - items: - description: HTTPHeader - describes a custom header - to be used in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The header - field name - type: string - value: - description: The header - field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to use - for connecting to the host. - Defaults to HTTP. - type: string - initialDelaySeconds: - description: 'Number of seconds - after the container has started - before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - periodSeconds: - description: How often (in seconds) - to perform the probe. Default - to 10 seconds. Minimum value - is 1. - type: integer - format: int32 - successThreshold: - description: Minimum consecutive - successes for the probe to be - considered successful after - having failed. Defaults to 1. - Must be 1 for liveness and startup. - Minimum value is 1. - type: integer - format: int32 - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP port. - TCP hooks not yet supported - TODO: implement a realistic - TCP lifecycle hook' - type: object - required: - - port - properties: - host: - description: 'Optional: Host - name to connect to, defaults - to the pod IP.' - type: string - port: - description: Number or name - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - description: 'Number of seconds - after which the probe times - out. Defaults to 1 second. Minimum - value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - stdin: - description: Whether this container - should allocate a buffer for stdin - in the container runtime. If this - is not set, reads from stdin in - the container will always result - in EOF. Default is false. - type: boolean - stdinOnce: - description: Whether the container - runtime should close the stdin channel - after it has been opened by a single - attach. When stdin is true the stdin - stream will remain open across multiple - attach sessions. If stdinOnce is - set to true, stdin is opened on - container start, is empty until - the first client attaches to stdin, - and then remains open and accepts - data until the client disconnects, - at which time stdin is closed and - remains closed until the container - is restarted. If this flag is false, - a container processes that reads - from stdin will never receive an - EOF. Default is false - type: boolean - terminationMessagePath: - description: 'Optional: Path at which - the file to which the container''s - termination message will be written - is mounted into the container''s - filesystem. Message written is intended - to be brief final status, such as - an assertion failure message. Will - be truncated by the node if greater - than 4096 bytes. The total message - length across all containers will - be limited to 12kb. Defaults to - /dev/termination-log. Cannot be - updated.' - type: string - terminationMessagePolicy: - description: Indicate how the termination - message should be populated. File - will use the contents of terminationMessagePath - to populate the container status - message on both success and failure. - FallbackToLogsOnError will use the - last chunk of container log output - if the termination message file - is empty and the container exited - with an error. The log output is - limited to 2048 bytes or 80 lines, - whichever is smaller. Defaults to - File. Cannot be updated. - type: string - tty: - description: Whether this container - should allocate a TTY for itself, - also requires 'stdin' to be true. - Default is false. - type: boolean - volumeDevices: - description: volumeDevices is the - list of block devices to be used - by the container. - type: array - items: - description: volumeDevice describes - a mapping of a raw block device - within a container. - type: object - required: - - devicePath - - name - properties: - devicePath: - description: devicePath is the - path inside of the container - that the device will be mapped - to. - type: string - name: - description: name must match - the name of a persistentVolumeClaim - in the pod - type: string - volumeMounts: - description: Pod volumes to mount - into the container's filesystem. - Cannot be updated. - type: array - items: - description: VolumeMount describes - a mounting of a Volume within - a container. - type: object - required: - - mountPath - - name - properties: - mountPath: - description: Path within the - container at which the volume - should be mounted. Must not - contain ':'. - type: string - mountPropagation: - description: mountPropagation - determines how mounts are - propagated from the host to - container and the other way - around. When not set, MountPropagationNone - is used. This field is beta - in 1.10. - type: string - name: - description: This must match - the Name of a Volume. - type: string - readOnly: - description: Mounted read-only - if true, read-write otherwise - (false or unspecified). Defaults - to false. - type: boolean - subPath: - description: Path within the - volume from which the container's - volume should be mounted. - Defaults to "" (volume's root). - type: string - subPathExpr: - description: Expanded path within - the volume from which the - container's volume should - be mounted. Behaves similarly - to SubPath but environment - variable references $(VAR_NAME) - are expanded using the container's - environment. Defaults to "" - (volume's root). SubPathExpr - and SubPath are mutually exclusive. - type: string - workingDir: - description: Container's working directory. - If not specified, the container - runtime's default will be used, - which might be configured in the - container image. Cannot be updated. - type: string - dnsConfig: - description: Specifies the DNS parameters - of a pod. Parameters specified here will - be merged to the generated DNS configuration - based on DNSPolicy. - type: object - properties: - nameservers: - description: A list of DNS name server - IP addresses. This will be appended - to the base nameservers generated - from DNSPolicy. Duplicated nameservers - will be removed. - type: array - items: - type: string - options: - description: A list of DNS resolver - options. This will be merged with - the base options generated from DNSPolicy. - Duplicated entries will be removed. - Resolution options given in Options - will override those that appear in - the base DNSPolicy. - type: array - items: - description: PodDNSConfigOption defines - DNS resolver options of a pod. - type: object - properties: - name: - description: Required. - type: string - value: - type: string - searches: - description: A list of DNS search domains - for host-name lookup. This will be - appended to the base search paths - generated from DNSPolicy. Duplicated - search paths will be removed. - type: array - items: - type: string - dnsPolicy: - description: Set DNS policy for the pod. - Defaults to "ClusterFirst". Valid values - are 'ClusterFirstWithHostNet', 'ClusterFirst', - 'Default' or 'None'. DNS parameters given - in DNSConfig will be merged with the policy - selected with DNSPolicy. To have DNS options - set along with hostNetwork, you have to - specify DNS policy explicitly to 'ClusterFirstWithHostNet'. - type: string - enableServiceLinks: - description: 'EnableServiceLinks indicates - whether information about services should - be injected into pod''s environment variables, - matching the syntax of Docker links. Optional: - Defaults to true.' - type: boolean - ephemeralContainers: - description: List of ephemeral containers - run in this pod. Ephemeral containers - may be run in an existing pod to perform - user-initiated actions such as debugging. - This list cannot be specified when creating - a pod, and it cannot be modified by updating - the pod spec. In order to add an ephemeral - container to an existing pod, use the - pod's ephemeralcontainers subresource. - This field is alpha-level and is only - honored by servers that enable the EphemeralContainers - feature. - type: array - items: - description: An EphemeralContainer is - a container that may be added temporarily - to an existing pod for user-initiated - activities such as debugging. Ephemeral - containers have no resource or scheduling - guarantees, and they will not be restarted - when they exit or when a pod is removed - or restarted. If an ephemeral container - causes a pod to exceed its resource - allocation, the pod may be evicted. - Ephemeral containers may not be added - by directly updating the pod spec. They - must be added via the pod's ephemeralcontainers - subresource, and they will appear in - the pod spec once added. This is an - alpha feature enabled by the EphemeralContainers - feature flag. - type: object - required: - - name - properties: - args: - description: 'Arguments to the entrypoint. - The docker image''s CMD is used - if this is not provided. Variable - references $(VAR_NAME) are expanded - using the container''s environment. - If a variable cannot be resolved, - the reference in the input string - will be unchanged. The $(VAR_NAME) - syntax can be escaped with a double - $$, ie: $$(VAR_NAME). Escaped references - will never be expanded, regardless - of whether the variable exists or - not. Cannot be updated. More info: - https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' - type: array - items: - type: string - command: - description: 'Entrypoint array. Not - executed within a shell. The docker - image''s ENTRYPOINT is used if this - is not provided. Variable references - $(VAR_NAME) are expanded using the - container''s environment. If a variable - cannot be resolved, the reference - in the input string will be unchanged. - The $(VAR_NAME) syntax can be escaped - with a double $$, ie: $$(VAR_NAME). - Escaped references will never be - expanded, regardless of whether - the variable exists or not. Cannot - be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' - type: array - items: - type: string - env: - description: List of environment variables - to set in the container. Cannot - be updated. - type: array - items: - description: EnvVar represents an - environment variable present in - a Container. - type: object - required: - - name - properties: - name: - description: Name of the environment - variable. Must be a C_IDENTIFIER. - type: string - value: - description: 'Variable references - $(VAR_NAME) are expanded using - the previous defined environment - variables in the container - and any service environment - variables. If a variable cannot - be resolved, the reference - in the input string will be - unchanged. The $(VAR_NAME) - syntax can be escaped with - a double $$, ie: $$(VAR_NAME). - Escaped references will never - be expanded, regardless of - whether the variable exists - or not. Defaults to "".' - type: string - valueFrom: - description: Source for the - environment variable's value. - Cannot be used if value is - not empty. - type: object - properties: - configMapKeyRef: - description: Selects a key - of a ConfigMap. - type: object - required: - - key - properties: - key: - description: The key - to select. - type: string - name: - description: 'Name of - the referent. More - info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify - whether the ConfigMap - or its key must be - defined - type: boolean - fieldRef: - description: 'Selects a - field of the pod: supports - metadata.name, metadata.namespace, - metadata.labels, metadata.annotations, - spec.nodeName, spec.serviceAccountName, - status.hostIP, status.podIP, - status.podIPs.' - type: object - required: - - fieldPath - properties: - apiVersion: - description: Version - of the schema the - FieldPath is written - in terms of, defaults - to "v1". - type: string - fieldPath: - description: Path of - the field to select - in the specified API - version. - type: string - resourceFieldRef: - description: 'Selects a - resource of the container: - only resources limits - and requests (limits.cpu, - limits.memory, limits.ephemeral-storage, - requests.cpu, requests.memory - and requests.ephemeral-storage) - are currently supported.' - type: object - required: - - resource - properties: - containerName: - description: 'Container - name: required for - volumes, optional - for env vars' - type: string - divisor: - description: Specifies - the output format - of the exposed resources, - defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - resource: - description: 'Required: - resource to select' - type: string - secretKeyRef: - description: Selects a key - of a secret in the pod's - namespace - type: object - required: - - key - properties: - key: - description: The key - of the secret to select - from. Must be a valid - secret key. - type: string - name: - description: 'Name of - the referent. More - info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify - whether the Secret - or its key must be - defined - type: boolean - envFrom: - description: List of sources to populate - environment variables in the container. - The keys defined within a source - must be a C_IDENTIFIER. All invalid - keys will be reported as an event - when the container is starting. - When a key exists in multiple sources, - the value associated with the last - source will take precedence. Values - defined by an Env with a duplicate - key will take precedence. Cannot - be updated. - type: array - items: - description: EnvFromSource represents - the source of a set of ConfigMaps - type: object - properties: - configMapRef: - description: The ConfigMap to - select from - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, kind, - uid?' - type: string - optional: - description: Specify whether - the ConfigMap must be - defined - type: boolean - prefix: - description: An optional identifier - to prepend to each key in - the ConfigMap. Must be a C_IDENTIFIER. - type: string - secretRef: - description: The Secret to select - from - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, kind, - uid?' - type: string - optional: - description: Specify whether - the Secret must be defined - type: boolean - image: - description: 'Docker image name. More - info: https://kubernetes.io/docs/concepts/containers/images' - type: string - imagePullPolicy: - description: 'Image pull policy. One - of Always, Never, IfNotPresent. - Defaults to Always if :latest tag - is specified, or IfNotPresent otherwise. - Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' - type: string - lifecycle: - description: Lifecycle is not allowed - for ephemeral containers. - type: object - properties: - postStart: - description: 'PostStart is called - immediately after a container - is created. If the handler fails, - the container is terminated - and restarted according to its - restart policy. Other management - of the container blocks until - the hook completes. More info: - https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' - type: object - properties: - exec: - description: One and only - one of the following should - be specified. Exec specifies - the action to take. - type: object - properties: - command: - description: Command is - the command line to - execute inside the container, - the working directory - for the command is - root ('/') in the container's - filesystem. The command - is simply exec'd, it - is not run inside a - shell, so traditional - shell instructions ('|', - etc) won't work. To - use a shell, you need - to explicitly call out - to that shell. Exit - status of 0 is treated - as live/healthy and - non-zero is unhealthy. - type: array - items: - type: string - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name - to connect to, defaults - to the pod IP. You probably - want to set "Host" in - httpHeaders instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. - HTTP allows repeated - headers. - type: array - items: - description: HTTPHeader - describes a custom - header to be used - in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The - header field name - type: string - value: - description: The - header field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access - on the container. Number - must be in the range - 1 to 65535. Name must - be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to - use for connecting to - the host. Defaults to - HTTP. - type: string - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP - port. TCP hooks not yet - supported TODO: implement - a realistic TCP lifecycle - hook' - type: object - required: - - port - properties: - host: - description: 'Optional: - Host name to connect - to, defaults to the - pod IP.' - type: string - port: - description: Number or - name of the port to - access on the container. - Number must be in the - range 1 to 65535. Name - must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - preStop: - description: 'PreStop is called - immediately before a container - is terminated due to an API - request or management event - such as liveness/startup probe - failure, preemption, resource - contention, etc. The handler - is not called if the container - crashes or exits. The reason - for termination is passed to - the handler. The Pod''s termination - grace period countdown begins - before the PreStop hooked is - executed. Regardless of the - outcome of the handler, the - container will eventually terminate - within the Pod''s termination - grace period. Other management - of the container blocks until - the hook completes or until - the termination grace period - is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' - type: object - properties: - exec: - description: One and only - one of the following should - be specified. Exec specifies - the action to take. - type: object - properties: - command: - description: Command is - the command line to - execute inside the container, - the working directory - for the command is - root ('/') in the container's - filesystem. The command - is simply exec'd, it - is not run inside a - shell, so traditional - shell instructions ('|', - etc) won't work. To - use a shell, you need - to explicitly call out - to that shell. Exit - status of 0 is treated - as live/healthy and - non-zero is unhealthy. - type: array - items: - type: string - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name - to connect to, defaults - to the pod IP. You probably - want to set "Host" in - httpHeaders instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. - HTTP allows repeated - headers. - type: array - items: - description: HTTPHeader - describes a custom - header to be used - in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The - header field name - type: string - value: - description: The - header field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access - on the container. Number - must be in the range - 1 to 65535. Name must - be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to - use for connecting to - the host. Defaults to - HTTP. - type: string - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP - port. TCP hooks not yet - supported TODO: implement - a realistic TCP lifecycle - hook' - type: object - required: - - port - properties: - host: - description: 'Optional: - Host name to connect - to, defaults to the - pod IP.' - type: string - port: - description: Number or - name of the port to - access on the container. - Number must be in the - range 1 to 65535. Name - must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - livenessProbe: - description: Probes are not allowed - for ephemeral containers. - type: object - properties: - exec: - description: One and only one - of the following should be specified. - Exec specifies the action to - take. - type: object - properties: - command: - description: Command is the - command line to execute - inside the container, the - working directory for the - command is root ('/') in - the container's filesystem. - The command is simply exec'd, - it is not run inside a shell, - so traditional shell instructions - ('|', etc) won't work. To - use a shell, you need to - explicitly call out to that - shell. Exit status of 0 - is treated as live/healthy - and non-zero is unhealthy. - type: array - items: - type: string - failureThreshold: - description: Minimum consecutive - failures for the probe to be - considered failed after having - succeeded. Defaults to 3. Minimum - value is 1. - type: integer - format: int32 - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name to - connect to, defaults to - the pod IP. You probably - want to set "Host" in httpHeaders - instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. HTTP - allows repeated headers. - type: array - items: - description: HTTPHeader - describes a custom header - to be used in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The header - field name - type: string - value: - description: The header - field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to use - for connecting to the host. - Defaults to HTTP. - type: string - initialDelaySeconds: - description: 'Number of seconds - after the container has started - before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - periodSeconds: - description: How often (in seconds) - to perform the probe. Default - to 10 seconds. Minimum value - is 1. - type: integer - format: int32 - successThreshold: - description: Minimum consecutive - successes for the probe to be - considered successful after - having failed. Defaults to 1. - Must be 1 for liveness and startup. - Minimum value is 1. - type: integer - format: int32 - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP port. - TCP hooks not yet supported - TODO: implement a realistic - TCP lifecycle hook' - type: object - required: - - port - properties: - host: - description: 'Optional: Host - name to connect to, defaults - to the pod IP.' - type: string - port: - description: Number or name - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - description: 'Number of seconds - after which the probe times - out. Defaults to 1 second. Minimum - value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - name: - description: Name of the ephemeral - container specified as a DNS_LABEL. - This name must be unique among all - containers, init containers and - ephemeral containers. - type: string - ports: - description: Ports are not allowed - for ephemeral containers. - type: array - items: - description: ContainerPort represents - a network port in a single container. - type: object - required: - - containerPort - properties: - containerPort: - description: Number of port - to expose on the pod's IP - address. This must be a valid - port number, 0 < x < 65536. - type: integer - format: int32 - hostIP: - description: What host IP to - bind the external port to. - type: string - hostPort: - description: Number of port - to expose on the host. If - specified, this must be a - valid port number, 0 < x < - 65536. If HostNetwork is specified, - this must match ContainerPort. - Most containers do not need - this. - type: integer - format: int32 - name: - description: If specified, this - must be an IANA_SVC_NAME and - unique within the pod. Each - named port in a pod must have - a unique name. Name for the - port that can be referred - to by services. - type: string - protocol: - description: Protocol for port. - Must be UDP, TCP, or SCTP. - Defaults to "TCP". - type: string - readinessProbe: - description: Probes are not allowed - for ephemeral containers. - type: object - properties: - exec: - description: One and only one - of the following should be specified. - Exec specifies the action to - take. - type: object - properties: - command: - description: Command is the - command line to execute - inside the container, the - working directory for the - command is root ('/') in - the container's filesystem. - The command is simply exec'd, - it is not run inside a shell, - so traditional shell instructions - ('|', etc) won't work. To - use a shell, you need to - explicitly call out to that - shell. Exit status of 0 - is treated as live/healthy - and non-zero is unhealthy. - type: array - items: - type: string - failureThreshold: - description: Minimum consecutive - failures for the probe to be - considered failed after having - succeeded. Defaults to 3. Minimum - value is 1. - type: integer - format: int32 - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name to - connect to, defaults to - the pod IP. You probably - want to set "Host" in httpHeaders - instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. HTTP - allows repeated headers. - type: array - items: - description: HTTPHeader - describes a custom header - to be used in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The header - field name - type: string - value: - description: The header - field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to use - for connecting to the host. - Defaults to HTTP. - type: string - initialDelaySeconds: - description: 'Number of seconds - after the container has started - before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - periodSeconds: - description: How often (in seconds) - to perform the probe. Default - to 10 seconds. Minimum value - is 1. - type: integer - format: int32 - successThreshold: - description: Minimum consecutive - successes for the probe to be - considered successful after - having failed. Defaults to 1. - Must be 1 for liveness and startup. - Minimum value is 1. - type: integer - format: int32 - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP port. - TCP hooks not yet supported - TODO: implement a realistic - TCP lifecycle hook' - type: object - required: - - port - properties: - host: - description: 'Optional: Host - name to connect to, defaults - to the pod IP.' - type: string - port: - description: Number or name - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - description: 'Number of seconds - after which the probe times - out. Defaults to 1 second. Minimum - value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - resources: - description: Resources are not allowed - for ephemeral containers. Ephemeral - containers use spare resources already - allocated to the pod. - type: object - properties: - limits: - description: 'Limits describes - the maximum amount of compute - resources allowed. More info: - https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - requests: - description: 'Requests describes - the minimum amount of compute - resources required. If Requests - is omitted for a container, - it defaults to Limits if that - is explicitly specified, otherwise - to an implementation-defined - value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - securityContext: - description: SecurityContext is not - allowed for ephemeral containers. - type: object - properties: - allowPrivilegeEscalation: - description: 'AllowPrivilegeEscalation - controls whether a process can - gain more privileges than its - parent process. This bool directly - controls if the no_new_privs - flag will be set on the container - process. AllowPrivilegeEscalation - is true always when the container - is: 1) run as Privileged 2) - has CAP_SYS_ADMIN' - type: boolean - capabilities: - description: The capabilities - to add/drop when running containers. - Defaults to the default set - of capabilities granted by the - container runtime. - type: object - properties: - add: - description: Added capabilities - type: array - items: - description: Capability - represent POSIX capabilities - type - type: string - drop: - description: Removed capabilities - type: array - items: - description: Capability - represent POSIX capabilities - type - type: string - privileged: - description: Run container in - privileged mode. Processes in - privileged containers are essentially - equivalent to root on the host. - Defaults to false. - type: boolean - procMount: - description: procMount denotes - the type of proc mount to use - for the containers. The default - is DefaultProcMount which uses - the container runtime defaults - for readonly paths and masked - paths. This requires the ProcMountType - feature flag to be enabled. - type: string - readOnlyRootFilesystem: - description: Whether this container - has a read-only root filesystem. - Default is false. - type: boolean - runAsGroup: - description: The GID to run the - entrypoint of the container - process. Uses runtime default - if unset. May also be set in - PodSecurityContext. If set - in both SecurityContext and - PodSecurityContext, the value - specified in SecurityContext - takes precedence. - type: integer - format: int64 - runAsNonRoot: - description: Indicates that the - container must run as a non-root - user. If true, the Kubelet will - validate the image at runtime - to ensure that it does not run - as UID 0 (root) and fail to - start the container if it does. - If unset or false, no such validation - will be performed. May also - be set in PodSecurityContext. If - set in both SecurityContext - and PodSecurityContext, the - value specified in SecurityContext - takes precedence. - type: boolean - runAsUser: - description: The UID to run the - entrypoint of the container - process. Defaults to user specified - in image metadata if unspecified. - May also be set in PodSecurityContext. If - set in both SecurityContext - and PodSecurityContext, the - value specified in SecurityContext - takes precedence. - type: integer - format: int64 - seLinuxOptions: - description: The SELinux context - to be applied to the container. - If unspecified, the container - runtime will allocate a random - SELinux context for each container. May - also be set in PodSecurityContext. If - set in both SecurityContext - and PodSecurityContext, the - value specified in SecurityContext - takes precedence. - type: object - properties: - level: - description: Level is SELinux - level label that applies - to the container. - type: string - role: - description: Role is a SELinux - role label that applies - to the container. - type: string - type: - description: Type is a SELinux - type label that applies - to the container. - type: string - user: - description: User is a SELinux - user label that applies - to the container. - type: string - windowsOptions: - description: The Windows specific - settings applied to all containers. - If unspecified, the options - from the PodSecurityContext - will be used. If set in both - SecurityContext and PodSecurityContext, - the value specified in SecurityContext - takes precedence. - type: object - properties: - gmsaCredentialSpec: - description: GMSACredentialSpec - is where the GMSA admission - webhook (https://github.com/kubernetes-sigs/windows-gmsa) - inlines the contents of - the GMSA credential spec - named by the GMSACredentialSpecName - field. - type: string - gmsaCredentialSpecName: - description: GMSACredentialSpecName - is the name of the GMSA - credential spec to use. - type: string - runAsUserName: - description: The UserName - in Windows to run the entrypoint - of the container process. - Defaults to the user specified - in image metadata if unspecified. - May also be set in PodSecurityContext. - If set in both SecurityContext - and PodSecurityContext, - the value specified in SecurityContext - takes precedence. - type: string - startupProbe: - description: Probes are not allowed - for ephemeral containers. - type: object - properties: - exec: - description: One and only one - of the following should be specified. - Exec specifies the action to - take. - type: object - properties: - command: - description: Command is the - command line to execute - inside the container, the - working directory for the - command is root ('/') in - the container's filesystem. - The command is simply exec'd, - it is not run inside a shell, - so traditional shell instructions - ('|', etc) won't work. To - use a shell, you need to - explicitly call out to that - shell. Exit status of 0 - is treated as live/healthy - and non-zero is unhealthy. - type: array - items: - type: string - failureThreshold: - description: Minimum consecutive - failures for the probe to be - considered failed after having - succeeded. Defaults to 3. Minimum - value is 1. - type: integer - format: int32 - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name to - connect to, defaults to - the pod IP. You probably - want to set "Host" in httpHeaders - instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. HTTP - allows repeated headers. - type: array - items: - description: HTTPHeader - describes a custom header - to be used in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The header - field name - type: string - value: - description: The header - field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to use - for connecting to the host. - Defaults to HTTP. - type: string - initialDelaySeconds: - description: 'Number of seconds - after the container has started - before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - periodSeconds: - description: How often (in seconds) - to perform the probe. Default - to 10 seconds. Minimum value - is 1. - type: integer - format: int32 - successThreshold: - description: Minimum consecutive - successes for the probe to be - considered successful after - having failed. Defaults to 1. - Must be 1 for liveness and startup. - Minimum value is 1. - type: integer - format: int32 - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP port. - TCP hooks not yet supported - TODO: implement a realistic - TCP lifecycle hook' - type: object - required: - - port - properties: - host: - description: 'Optional: Host - name to connect to, defaults - to the pod IP.' - type: string - port: - description: Number or name - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - description: 'Number of seconds - after which the probe times - out. Defaults to 1 second. Minimum - value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - stdin: - description: Whether this container - should allocate a buffer for stdin - in the container runtime. If this - is not set, reads from stdin in - the container will always result - in EOF. Default is false. - type: boolean - stdinOnce: - description: Whether the container - runtime should close the stdin channel - after it has been opened by a single - attach. When stdin is true the stdin - stream will remain open across multiple - attach sessions. If stdinOnce is - set to true, stdin is opened on - container start, is empty until - the first client attaches to stdin, - and then remains open and accepts - data until the client disconnects, - at which time stdin is closed and - remains closed until the container - is restarted. If this flag is false, - a container processes that reads - from stdin will never receive an - EOF. Default is false - type: boolean - targetContainerName: - description: If set, the name of the - container from PodSpec that this - ephemeral container targets. The - ephemeral container will be run - in the namespaces (IPC, PID, etc) - of this container. If not set then - the ephemeral container is run in - whatever namespaces are shared for - the pod. Note that the container - runtime must support this feature. - type: string - terminationMessagePath: - description: 'Optional: Path at which - the file to which the container''s - termination message will be written - is mounted into the container''s - filesystem. Message written is intended - to be brief final status, such as - an assertion failure message. Will - be truncated by the node if greater - than 4096 bytes. The total message - length across all containers will - be limited to 12kb. Defaults to - /dev/termination-log. Cannot be - updated.' - type: string - terminationMessagePolicy: - description: Indicate how the termination - message should be populated. File - will use the contents of terminationMessagePath - to populate the container status - message on both success and failure. - FallbackToLogsOnError will use the - last chunk of container log output - if the termination message file - is empty and the container exited - with an error. The log output is - limited to 2048 bytes or 80 lines, - whichever is smaller. Defaults to - File. Cannot be updated. - type: string - tty: - description: Whether this container - should allocate a TTY for itself, - also requires 'stdin' to be true. - Default is false. - type: boolean - volumeDevices: - description: volumeDevices is the - list of block devices to be used - by the container. - type: array - items: - description: volumeDevice describes - a mapping of a raw block device - within a container. - type: object - required: - - devicePath - - name - properties: - devicePath: - description: devicePath is the - path inside of the container - that the device will be mapped - to. - type: string - name: - description: name must match - the name of a persistentVolumeClaim - in the pod - type: string - volumeMounts: - description: Pod volumes to mount - into the container's filesystem. - Cannot be updated. - type: array - items: - description: VolumeMount describes - a mounting of a Volume within - a container. - type: object - required: - - mountPath - - name - properties: - mountPath: - description: Path within the - container at which the volume - should be mounted. Must not - contain ':'. - type: string - mountPropagation: - description: mountPropagation - determines how mounts are - propagated from the host to - container and the other way - around. When not set, MountPropagationNone - is used. This field is beta - in 1.10. - type: string - name: - description: This must match - the Name of a Volume. - type: string - readOnly: - description: Mounted read-only - if true, read-write otherwise - (false or unspecified). Defaults - to false. - type: boolean - subPath: - description: Path within the - volume from which the container's - volume should be mounted. - Defaults to "" (volume's root). - type: string - subPathExpr: - description: Expanded path within - the volume from which the - container's volume should - be mounted. Behaves similarly - to SubPath but environment - variable references $(VAR_NAME) - are expanded using the container's - environment. Defaults to "" - (volume's root). SubPathExpr - and SubPath are mutually exclusive. - type: string - workingDir: - description: Container's working directory. - If not specified, the container - runtime's default will be used, - which might be configured in the - container image. Cannot be updated. - type: string - hostAliases: - description: HostAliases is an optional - list of hosts and IPs that will be injected - into the pod's hosts file if specified. - This is only valid for non-hostNetwork - pods. - type: array - items: - description: HostAlias holds the mapping - between IP and hostnames that will be - injected as an entry in the pod's hosts - file. - type: object - properties: - hostnames: - description: Hostnames for the above - IP address. - type: array - items: - type: string - ip: - description: IP address of the host - file entry. - type: string - hostIPC: - description: 'Use the host''s ipc namespace. - Optional: Default to false.' - type: boolean - hostNetwork: - description: Host networking requested for - this pod. Use the host's network namespace. - If this option is set, the ports that - will be used must be specified. Default - to false. - type: boolean - hostPID: - description: 'Use the host''s pid namespace. - Optional: Default to false.' - type: boolean - hostname: - description: Specifies the hostname of the - Pod If not specified, the pod's hostname - will be set to a system-defined value. - type: string - imagePullSecrets: - description: 'ImagePullSecrets is an optional - list of references to secrets in the same - namespace to use for pulling any of the - images used by this PodSpec. If specified, - these secrets will be passed to individual - puller implementations for them to use. - For example, in the case of docker, only - DockerConfig type secrets are honored. - More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod' - type: array - items: - description: LocalObjectReference contains - enough information to let you locate - the referenced object inside the same - namespace. - type: object - properties: - name: - description: 'Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, - kind, uid?' - type: string - initContainers: - description: 'List of initialization containers - belonging to the pod. Init containers - are executed in order prior to containers - being started. If any init container fails, - the pod is considered to have failed and - is handled according to its restartPolicy. - The name for an init container or normal - container must be unique among all containers. - Init containers may not have Lifecycle - actions, Readiness probes, Liveness probes, - or Startup probes. The resourceRequirements - of an init container are taken into account - during scheduling by finding the highest - request/limit for each resource type, - and then using the max of of that value - or the sum of the normal containers. Limits - are applied to init containers in a similar - fashion. Init containers cannot currently - be added or removed. Cannot be updated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/' - type: array - items: - description: A single application container - that you want to run within a pod. - type: object - required: - - name - properties: - args: - description: 'Arguments to the entrypoint. - The docker image''s CMD is used - if this is not provided. Variable - references $(VAR_NAME) are expanded - using the container''s environment. - If a variable cannot be resolved, - the reference in the input string - will be unchanged. The $(VAR_NAME) - syntax can be escaped with a double - $$, ie: $$(VAR_NAME). Escaped references - will never be expanded, regardless - of whether the variable exists or - not. Cannot be updated. More info: - https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' - type: array - items: - type: string - command: - description: 'Entrypoint array. Not - executed within a shell. The docker - image''s ENTRYPOINT is used if this - is not provided. Variable references - $(VAR_NAME) are expanded using the - container''s environment. If a variable - cannot be resolved, the reference - in the input string will be unchanged. - The $(VAR_NAME) syntax can be escaped - with a double $$, ie: $$(VAR_NAME). - Escaped references will never be - expanded, regardless of whether - the variable exists or not. Cannot - be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' - type: array - items: - type: string - env: - description: List of environment variables - to set in the container. Cannot - be updated. - type: array - items: - description: EnvVar represents an - environment variable present in - a Container. - type: object - required: - - name - properties: - name: - description: Name of the environment - variable. Must be a C_IDENTIFIER. - type: string - value: - description: 'Variable references - $(VAR_NAME) are expanded using - the previous defined environment - variables in the container - and any service environment - variables. If a variable cannot - be resolved, the reference - in the input string will be - unchanged. The $(VAR_NAME) - syntax can be escaped with - a double $$, ie: $$(VAR_NAME). - Escaped references will never - be expanded, regardless of - whether the variable exists - or not. Defaults to "".' - type: string - valueFrom: - description: Source for the - environment variable's value. - Cannot be used if value is - not empty. - type: object - properties: - configMapKeyRef: - description: Selects a key - of a ConfigMap. - type: object - required: - - key - properties: - key: - description: The key - to select. - type: string - name: - description: 'Name of - the referent. More - info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify - whether the ConfigMap - or its key must be - defined - type: boolean - fieldRef: - description: 'Selects a - field of the pod: supports - metadata.name, metadata.namespace, - metadata.labels, metadata.annotations, - spec.nodeName, spec.serviceAccountName, - status.hostIP, status.podIP, - status.podIPs.' - type: object - required: - - fieldPath - properties: - apiVersion: - description: Version - of the schema the - FieldPath is written - in terms of, defaults - to "v1". - type: string - fieldPath: - description: Path of - the field to select - in the specified API - version. - type: string - resourceFieldRef: - description: 'Selects a - resource of the container: - only resources limits - and requests (limits.cpu, - limits.memory, limits.ephemeral-storage, - requests.cpu, requests.memory - and requests.ephemeral-storage) - are currently supported.' - type: object - required: - - resource - properties: - containerName: - description: 'Container - name: required for - volumes, optional - for env vars' - type: string - divisor: - description: Specifies - the output format - of the exposed resources, - defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - resource: - description: 'Required: - resource to select' - type: string - secretKeyRef: - description: Selects a key - of a secret in the pod's - namespace - type: object - required: - - key - properties: - key: - description: The key - of the secret to select - from. Must be a valid - secret key. - type: string - name: - description: 'Name of - the referent. More - info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify - whether the Secret - or its key must be - defined - type: boolean - envFrom: - description: List of sources to populate - environment variables in the container. - The keys defined within a source - must be a C_IDENTIFIER. All invalid - keys will be reported as an event - when the container is starting. - When a key exists in multiple sources, - the value associated with the last - source will take precedence. Values - defined by an Env with a duplicate - key will take precedence. Cannot - be updated. - type: array - items: - description: EnvFromSource represents - the source of a set of ConfigMaps - type: object - properties: - configMapRef: - description: The ConfigMap to - select from - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, kind, - uid?' - type: string - optional: - description: Specify whether - the ConfigMap must be - defined - type: boolean - prefix: - description: An optional identifier - to prepend to each key in - the ConfigMap. Must be a C_IDENTIFIER. - type: string - secretRef: - description: The Secret to select - from - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, kind, - uid?' - type: string - optional: - description: Specify whether - the Secret must be defined - type: boolean - image: - description: 'Docker image name. More - info: https://kubernetes.io/docs/concepts/containers/images - This field is optional to allow - higher level config management to - default or override container images - in workload controllers like Deployments - and StatefulSets.' - type: string - imagePullPolicy: - description: 'Image pull policy. One - of Always, Never, IfNotPresent. - Defaults to Always if :latest tag - is specified, or IfNotPresent otherwise. - Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' - type: string - lifecycle: - description: Actions that the management - system should take in response to - container lifecycle events. Cannot - be updated. - type: object - properties: - postStart: - description: 'PostStart is called - immediately after a container - is created. If the handler fails, - the container is terminated - and restarted according to its - restart policy. Other management - of the container blocks until - the hook completes. More info: - https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' - type: object - properties: - exec: - description: One and only - one of the following should - be specified. Exec specifies - the action to take. - type: object - properties: - command: - description: Command is - the command line to - execute inside the container, - the working directory - for the command is - root ('/') in the container's - filesystem. The command - is simply exec'd, it - is not run inside a - shell, so traditional - shell instructions ('|', - etc) won't work. To - use a shell, you need - to explicitly call out - to that shell. Exit - status of 0 is treated - as live/healthy and - non-zero is unhealthy. - type: array - items: - type: string - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name - to connect to, defaults - to the pod IP. You probably - want to set "Host" in - httpHeaders instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. - HTTP allows repeated - headers. - type: array - items: - description: HTTPHeader - describes a custom - header to be used - in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The - header field name - type: string - value: - description: The - header field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access - on the container. Number - must be in the range - 1 to 65535. Name must - be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to - use for connecting to - the host. Defaults to - HTTP. - type: string - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP - port. TCP hooks not yet - supported TODO: implement - a realistic TCP lifecycle - hook' - type: object - required: - - port - properties: - host: - description: 'Optional: - Host name to connect - to, defaults to the - pod IP.' - type: string - port: - description: Number or - name of the port to - access on the container. - Number must be in the - range 1 to 65535. Name - must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - preStop: - description: 'PreStop is called - immediately before a container - is terminated due to an API - request or management event - such as liveness/startup probe - failure, preemption, resource - contention, etc. The handler - is not called if the container - crashes or exits. The reason - for termination is passed to - the handler. The Pod''s termination - grace period countdown begins - before the PreStop hooked is - executed. Regardless of the - outcome of the handler, the - container will eventually terminate - within the Pod''s termination - grace period. Other management - of the container blocks until - the hook completes or until - the termination grace period - is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' - type: object - properties: - exec: - description: One and only - one of the following should - be specified. Exec specifies - the action to take. - type: object - properties: - command: - description: Command is - the command line to - execute inside the container, - the working directory - for the command is - root ('/') in the container's - filesystem. The command - is simply exec'd, it - is not run inside a - shell, so traditional - shell instructions ('|', - etc) won't work. To - use a shell, you need - to explicitly call out - to that shell. Exit - status of 0 is treated - as live/healthy and - non-zero is unhealthy. - type: array - items: - type: string - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name - to connect to, defaults - to the pod IP. You probably - want to set "Host" in - httpHeaders instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. - HTTP allows repeated - headers. - type: array - items: - description: HTTPHeader - describes a custom - header to be used - in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The - header field name - type: string - value: - description: The - header field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access - on the container. Number - must be in the range - 1 to 65535. Name must - be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to - use for connecting to - the host. Defaults to - HTTP. - type: string - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP - port. TCP hooks not yet - supported TODO: implement - a realistic TCP lifecycle - hook' - type: object - required: - - port - properties: - host: - description: 'Optional: - Host name to connect - to, defaults to the - pod IP.' - type: string - port: - description: Number or - name of the port to - access on the container. - Number must be in the - range 1 to 65535. Name - must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - livenessProbe: - description: 'Periodic probe of container - liveness. Container will be restarted - if the probe fails. Cannot be updated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: object - properties: - exec: - description: One and only one - of the following should be specified. - Exec specifies the action to - take. - type: object - properties: - command: - description: Command is the - command line to execute - inside the container, the - working directory for the - command is root ('/') in - the container's filesystem. - The command is simply exec'd, - it is not run inside a shell, - so traditional shell instructions - ('|', etc) won't work. To - use a shell, you need to - explicitly call out to that - shell. Exit status of 0 - is treated as live/healthy - and non-zero is unhealthy. - type: array - items: - type: string - failureThreshold: - description: Minimum consecutive - failures for the probe to be - considered failed after having - succeeded. Defaults to 3. Minimum - value is 1. - type: integer - format: int32 - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name to - connect to, defaults to - the pod IP. You probably - want to set "Host" in httpHeaders - instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. HTTP - allows repeated headers. - type: array - items: - description: HTTPHeader - describes a custom header - to be used in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The header - field name - type: string - value: - description: The header - field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to use - for connecting to the host. - Defaults to HTTP. - type: string - initialDelaySeconds: - description: 'Number of seconds - after the container has started - before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - periodSeconds: - description: How often (in seconds) - to perform the probe. Default - to 10 seconds. Minimum value - is 1. - type: integer - format: int32 - successThreshold: - description: Minimum consecutive - successes for the probe to be - considered successful after - having failed. Defaults to 1. - Must be 1 for liveness and startup. - Minimum value is 1. - type: integer - format: int32 - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP port. - TCP hooks not yet supported - TODO: implement a realistic - TCP lifecycle hook' - type: object - required: - - port - properties: - host: - description: 'Optional: Host - name to connect to, defaults - to the pod IP.' - type: string - port: - description: Number or name - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - description: 'Number of seconds - after which the probe times - out. Defaults to 1 second. Minimum - value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - name: - description: Name of the container - specified as a DNS_LABEL. Each container - in a pod must have a unique name - (DNS_LABEL). Cannot be updated. - type: string - ports: - description: List of ports to expose - from the container. Exposing a port - here gives the system additional - information about the network connections - a container uses, but is primarily - informational. Not specifying a - port here DOES NOT prevent that - port from being exposed. Any port - which is listening on the default - "0.0.0.0" address inside a container - will be accessible from the network. - Cannot be updated. - type: array - items: - description: ContainerPort represents - a network port in a single container. - type: object - required: - - containerPort - properties: - containerPort: - description: Number of port - to expose on the pod's IP - address. This must be a valid - port number, 0 < x < 65536. - type: integer - format: int32 - hostIP: - description: What host IP to - bind the external port to. - type: string - hostPort: - description: Number of port - to expose on the host. If - specified, this must be a - valid port number, 0 < x < - 65536. If HostNetwork is specified, - this must match ContainerPort. - Most containers do not need - this. - type: integer - format: int32 - name: - description: If specified, this - must be an IANA_SVC_NAME and - unique within the pod. Each - named port in a pod must have - a unique name. Name for the - port that can be referred - to by services. - type: string - protocol: - description: Protocol for port. - Must be UDP, TCP, or SCTP. - Defaults to "TCP". - type: string - default: TCP - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - description: 'Periodic probe of container - service readiness. Container will - be removed from service endpoints - if the probe fails. Cannot be updated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: object - properties: - exec: - description: One and only one - of the following should be specified. - Exec specifies the action to - take. - type: object - properties: - command: - description: Command is the - command line to execute - inside the container, the - working directory for the - command is root ('/') in - the container's filesystem. - The command is simply exec'd, - it is not run inside a shell, - so traditional shell instructions - ('|', etc) won't work. To - use a shell, you need to - explicitly call out to that - shell. Exit status of 0 - is treated as live/healthy - and non-zero is unhealthy. - type: array - items: - type: string - failureThreshold: - description: Minimum consecutive - failures for the probe to be - considered failed after having - succeeded. Defaults to 3. Minimum - value is 1. - type: integer - format: int32 - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name to - connect to, defaults to - the pod IP. You probably - want to set "Host" in httpHeaders - instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. HTTP - allows repeated headers. - type: array - items: - description: HTTPHeader - describes a custom header - to be used in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The header - field name - type: string - value: - description: The header - field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to use - for connecting to the host. - Defaults to HTTP. - type: string - initialDelaySeconds: - description: 'Number of seconds - after the container has started - before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - periodSeconds: - description: How often (in seconds) - to perform the probe. Default - to 10 seconds. Minimum value - is 1. - type: integer - format: int32 - successThreshold: - description: Minimum consecutive - successes for the probe to be - considered successful after - having failed. Defaults to 1. - Must be 1 for liveness and startup. - Minimum value is 1. - type: integer - format: int32 - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP port. - TCP hooks not yet supported - TODO: implement a realistic - TCP lifecycle hook' - type: object - required: - - port - properties: - host: - description: 'Optional: Host - name to connect to, defaults - to the pod IP.' - type: string - port: - description: Number or name - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - description: 'Number of seconds - after which the probe times - out. Defaults to 1 second. Minimum - value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - resources: - description: 'Compute Resources required - by this container. Cannot be updated. - More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - properties: - limits: - description: 'Limits describes - the maximum amount of compute - resources allowed. More info: - https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - requests: - description: 'Requests describes - the minimum amount of compute - resources required. If Requests - is omitted for a container, - it defaults to Limits if that - is explicitly specified, otherwise - to an implementation-defined - value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - securityContext: - description: 'Security options the - pod should run with. More info: - https://kubernetes.io/docs/concepts/policy/security-context/ - More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' - type: object - properties: - allowPrivilegeEscalation: - description: 'AllowPrivilegeEscalation - controls whether a process can - gain more privileges than its - parent process. This bool directly - controls if the no_new_privs - flag will be set on the container - process. AllowPrivilegeEscalation - is true always when the container - is: 1) run as Privileged 2) - has CAP_SYS_ADMIN' - type: boolean - capabilities: - description: The capabilities - to add/drop when running containers. - Defaults to the default set - of capabilities granted by the - container runtime. - type: object - properties: - add: - description: Added capabilities - type: array - items: - description: Capability - represent POSIX capabilities - type - type: string - drop: - description: Removed capabilities - type: array - items: - description: Capability - represent POSIX capabilities - type - type: string - privileged: - description: Run container in - privileged mode. Processes in - privileged containers are essentially - equivalent to root on the host. - Defaults to false. - type: boolean - procMount: - description: procMount denotes - the type of proc mount to use - for the containers. The default - is DefaultProcMount which uses - the container runtime defaults - for readonly paths and masked - paths. This requires the ProcMountType - feature flag to be enabled. - type: string - readOnlyRootFilesystem: - description: Whether this container - has a read-only root filesystem. - Default is false. - type: boolean - runAsGroup: - description: The GID to run the - entrypoint of the container - process. Uses runtime default - if unset. May also be set in - PodSecurityContext. If set - in both SecurityContext and - PodSecurityContext, the value - specified in SecurityContext - takes precedence. - type: integer - format: int64 - runAsNonRoot: - description: Indicates that the - container must run as a non-root - user. If true, the Kubelet will - validate the image at runtime - to ensure that it does not run - as UID 0 (root) and fail to - start the container if it does. - If unset or false, no such validation - will be performed. May also - be set in PodSecurityContext. If - set in both SecurityContext - and PodSecurityContext, the - value specified in SecurityContext - takes precedence. - type: boolean - runAsUser: - description: The UID to run the - entrypoint of the container - process. Defaults to user specified - in image metadata if unspecified. - May also be set in PodSecurityContext. If - set in both SecurityContext - and PodSecurityContext, the - value specified in SecurityContext - takes precedence. - type: integer - format: int64 - seLinuxOptions: - description: The SELinux context - to be applied to the container. - If unspecified, the container - runtime will allocate a random - SELinux context for each container. May - also be set in PodSecurityContext. If - set in both SecurityContext - and PodSecurityContext, the - value specified in SecurityContext - takes precedence. - type: object - properties: - level: - description: Level is SELinux - level label that applies - to the container. - type: string - role: - description: Role is a SELinux - role label that applies - to the container. - type: string - type: - description: Type is a SELinux - type label that applies - to the container. - type: string - user: - description: User is a SELinux - user label that applies - to the container. - type: string - windowsOptions: - description: The Windows specific - settings applied to all containers. - If unspecified, the options - from the PodSecurityContext - will be used. If set in both - SecurityContext and PodSecurityContext, - the value specified in SecurityContext - takes precedence. - type: object - properties: - gmsaCredentialSpec: - description: GMSACredentialSpec - is where the GMSA admission - webhook (https://github.com/kubernetes-sigs/windows-gmsa) - inlines the contents of - the GMSA credential spec - named by the GMSACredentialSpecName - field. - type: string - gmsaCredentialSpecName: - description: GMSACredentialSpecName - is the name of the GMSA - credential spec to use. - type: string - runAsUserName: - description: The UserName - in Windows to run the entrypoint - of the container process. - Defaults to the user specified - in image metadata if unspecified. - May also be set in PodSecurityContext. - If set in both SecurityContext - and PodSecurityContext, - the value specified in SecurityContext - takes precedence. - type: string - startupProbe: - description: 'StartupProbe indicates - that the Pod has successfully initialized. - If specified, no other probes are - executed until this completes successfully. - If this probe fails, the Pod will - be restarted, just as if the livenessProbe - failed. This can be used to provide - different probe parameters at the - beginning of a Pod''s lifecycle, - when it might take a long time to - load data or warm a cache, than - during steady-state operation. This - cannot be updated. This is a beta - feature enabled by the StartupProbe - feature flag. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: object - properties: - exec: - description: One and only one - of the following should be specified. - Exec specifies the action to - take. - type: object - properties: - command: - description: Command is the - command line to execute - inside the container, the - working directory for the - command is root ('/') in - the container's filesystem. - The command is simply exec'd, - it is not run inside a shell, - so traditional shell instructions - ('|', etc) won't work. To - use a shell, you need to - explicitly call out to that - shell. Exit status of 0 - is treated as live/healthy - and non-zero is unhealthy. - type: array - items: - type: string - failureThreshold: - description: Minimum consecutive - failures for the probe to be - considered failed after having - succeeded. Defaults to 3. Minimum - value is 1. - type: integer - format: int32 - httpGet: - description: HTTPGet specifies - the http request to perform. - type: object - required: - - port - properties: - host: - description: Host name to - connect to, defaults to - the pod IP. You probably - want to set "Host" in httpHeaders - instead. - type: string - httpHeaders: - description: Custom headers - to set in the request. HTTP - allows repeated headers. - type: array - items: - description: HTTPHeader - describes a custom header - to be used in HTTP probes - type: object - required: - - name - - value - properties: - name: - description: The header - field name - type: string - value: - description: The header - field value - type: string - path: - description: Path to access - on the HTTP server. - type: string - port: - description: Name or number - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - description: Scheme to use - for connecting to the host. - Defaults to HTTP. - type: string - initialDelaySeconds: - description: 'Number of seconds - after the container has started - before liveness probes are initiated. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - periodSeconds: - description: How often (in seconds) - to perform the probe. Default - to 10 seconds. Minimum value - is 1. - type: integer - format: int32 - successThreshold: - description: Minimum consecutive - successes for the probe to be - considered successful after - having failed. Defaults to 1. - Must be 1 for liveness and startup. - Minimum value is 1. - type: integer - format: int32 - tcpSocket: - description: 'TCPSocket specifies - an action involving a TCP port. - TCP hooks not yet supported - TODO: implement a realistic - TCP lifecycle hook' - type: object - required: - - port - properties: - host: - description: 'Optional: Host - name to connect to, defaults - to the pod IP.' - type: string - port: - description: Number or name - of the port to access on - the container. Number must - be in the range 1 to 65535. - Name must be an IANA_SVC_NAME. - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - description: 'Number of seconds - after which the probe times - out. Defaults to 1 second. Minimum - value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' - type: integer - format: int32 - stdin: - description: Whether this container - should allocate a buffer for stdin - in the container runtime. If this - is not set, reads from stdin in - the container will always result - in EOF. Default is false. - type: boolean - stdinOnce: - description: Whether the container - runtime should close the stdin channel - after it has been opened by a single - attach. When stdin is true the stdin - stream will remain open across multiple - attach sessions. If stdinOnce is - set to true, stdin is opened on - container start, is empty until - the first client attaches to stdin, - and then remains open and accepts - data until the client disconnects, - at which time stdin is closed and - remains closed until the container - is restarted. If this flag is false, - a container processes that reads - from stdin will never receive an - EOF. Default is false - type: boolean - terminationMessagePath: - description: 'Optional: Path at which - the file to which the container''s - termination message will be written - is mounted into the container''s - filesystem. Message written is intended - to be brief final status, such as - an assertion failure message. Will - be truncated by the node if greater - than 4096 bytes. The total message - length across all containers will - be limited to 12kb. Defaults to - /dev/termination-log. Cannot be - updated.' - type: string - terminationMessagePolicy: - description: Indicate how the termination - message should be populated. File - will use the contents of terminationMessagePath - to populate the container status - message on both success and failure. - FallbackToLogsOnError will use the - last chunk of container log output - if the termination message file - is empty and the container exited - with an error. The log output is - limited to 2048 bytes or 80 lines, - whichever is smaller. Defaults to - File. Cannot be updated. - type: string - tty: - description: Whether this container - should allocate a TTY for itself, - also requires 'stdin' to be true. - Default is false. - type: boolean - volumeDevices: - description: volumeDevices is the - list of block devices to be used - by the container. - type: array - items: - description: volumeDevice describes - a mapping of a raw block device - within a container. - type: object - required: - - devicePath - - name - properties: - devicePath: - description: devicePath is the - path inside of the container - that the device will be mapped - to. - type: string - name: - description: name must match - the name of a persistentVolumeClaim - in the pod - type: string - volumeMounts: - description: Pod volumes to mount - into the container's filesystem. - Cannot be updated. - type: array - items: - description: VolumeMount describes - a mounting of a Volume within - a container. - type: object - required: - - mountPath - - name - properties: - mountPath: - description: Path within the - container at which the volume - should be mounted. Must not - contain ':'. - type: string - mountPropagation: - description: mountPropagation - determines how mounts are - propagated from the host to - container and the other way - around. When not set, MountPropagationNone - is used. This field is beta - in 1.10. - type: string - name: - description: This must match - the Name of a Volume. - type: string - readOnly: - description: Mounted read-only - if true, read-write otherwise - (false or unspecified). Defaults - to false. - type: boolean - subPath: - description: Path within the - volume from which the container's - volume should be mounted. - Defaults to "" (volume's root). - type: string - subPathExpr: - description: Expanded path within - the volume from which the - container's volume should - be mounted. Behaves similarly - to SubPath but environment - variable references $(VAR_NAME) - are expanded using the container's - environment. Defaults to "" - (volume's root). SubPathExpr - and SubPath are mutually exclusive. - type: string - workingDir: - description: Container's working directory. - If not specified, the container - runtime's default will be used, - which might be configured in the - container image. Cannot be updated. - type: string - nodeName: - description: NodeName is a request to schedule - this pod onto a specific node. If it is - non-empty, the scheduler simply schedules - this pod onto that node, assuming that - it fits resource requirements. - type: string - nodeSelector: - description: 'NodeSelector is a selector - which must be true for the pod to fit - on a node. Selector which must match a - node''s labels for the pod to be scheduled - on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' - type: object - additionalProperties: - type: string - overhead: - description: 'Overhead represents the resource - overhead associated with running a pod - for a given RuntimeClass. This field will - be autopopulated at admission time by - the RuntimeClass admission controller. - If the RuntimeClass admission controller - is enabled, overhead must not be set in - Pod create requests. The RuntimeClass - admission controller will reject Pod create - requests which have the overhead already - set. If RuntimeClass is configured and - selected in the PodSpec, Overhead will - be set to the value defined in the corresponding - RuntimeClass, otherwise it will remain - unset and treated as zero. More info: - https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md - This field is alpha-level as of Kubernetes - v1.16, and is only honored by servers - that enable the PodOverhead feature.' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - preemptionPolicy: - description: PreemptionPolicy is the Policy - for preempting pods with lower priority. - One of Never, PreemptLowerPriority. Defaults - to PreemptLowerPriority if unset. This - field is alpha-level and is only honored - by servers that enable the NonPreemptingPriority - feature. - type: string - priority: - description: The priority value. Various - system components use this field to find - the priority of the pod. When Priority - Admission Controller is enabled, it prevents - users from setting this field. The admission - controller populates this field from PriorityClassName. - The higher the value, the higher the priority. - type: integer - format: int32 - priorityClassName: - description: If specified, indicates the - pod's priority. "system-node-critical" - and "system-cluster-critical" are two - special keywords which indicate the highest - priorities with the former being the highest - priority. Any other name must be defined - by creating a PriorityClass object with - that name. If not specified, the pod priority - will be default or zero if there is no - default. - type: string - readinessGates: - description: 'If specified, all readiness - gates will be evaluated for pod readiness. - A pod is ready when all its containers - are ready AND all conditions specified - in the readiness gates have status equal - to "True" More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md' - type: array - items: - description: PodReadinessGate contains - the reference to a pod condition - type: object - required: - - conditionType - properties: - conditionType: - description: ConditionType refers - to a condition in the pod's condition - list with matching type. - type: string - restartPolicy: - description: 'Restart policy for all containers - within the pod. One of Always, OnFailure, - Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy' - type: string - runtimeClassName: - description: 'RuntimeClassName refers to - a RuntimeClass object in the node.k8s.io - group, which should be used to run this - pod. If no RuntimeClass resource matches - the named class, the pod will not be run. - If unset or empty, the "legacy" RuntimeClass - will be used, which is an implicit class - with an empty definition that uses the - default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md - This is a beta feature as of Kubernetes - v1.14.' - type: string - schedulerName: - description: If specified, the pod will - be dispatched by specified scheduler. - If not specified, the pod will be dispatched - by default scheduler. - type: string - securityContext: - description: 'SecurityContext holds pod-level - security attributes and common container - settings. Optional: Defaults to empty. See - type description for default values of - each field.' - type: object - properties: - fsGroup: - description: "A special supplemental - group that applies to all containers - in a pod. Some volume types allow - the Kubelet to change the ownership - of that volume to be owned by the - pod: \n 1. The owning GID will be - the FSGroup 2. The setgid bit is set - (new files created in the volume will - be owned by FSGroup) 3. The permission - bits are OR'd with rw-rw---- \n If - unset, the Kubelet will not modify - the ownership and permissions of any - volume." - type: integer - format: int64 - fsGroupChangePolicy: - description: 'fsGroupChangePolicy defines - behavior of changing ownership and - permission of the volume before being - exposed inside Pod. This field will - only apply to volume types which support - fsGroup based ownership(and permissions). - It will have no effect on ephemeral - volume types such as: secret, configmaps - and emptydir. Valid values are "OnRootMismatch" - and "Always". If not specified defaults - to "Always".' - type: string - runAsGroup: - description: The GID to run the entrypoint - of the container process. Uses runtime - default if unset. May also be set - in SecurityContext. If set in both - SecurityContext and PodSecurityContext, - the value specified in SecurityContext - takes precedence for that container. - type: integer - format: int64 - runAsNonRoot: - description: Indicates that the container - must run as a non-root user. If true, - the Kubelet will validate the image - at runtime to ensure that it does - not run as UID 0 (root) and fail to - start the container if it does. If - unset or false, no such validation - will be performed. May also be set - in SecurityContext. If set in both - SecurityContext and PodSecurityContext, - the value specified in SecurityContext - takes precedence. - type: boolean - runAsUser: - description: The UID to run the entrypoint - of the container process. Defaults - to user specified in image metadata - if unspecified. May also be set in - SecurityContext. If set in both SecurityContext - and PodSecurityContext, the value - specified in SecurityContext takes - precedence for that container. - type: integer - format: int64 - seLinuxOptions: - description: The SELinux context to - be applied to all containers. If unspecified, - the container runtime will allocate - a random SELinux context for each - container. May also be set in SecurityContext. If - set in both SecurityContext and PodSecurityContext, - the value specified in SecurityContext - takes precedence for that container. - type: object - properties: - level: - description: Level is SELinux level - label that applies to the container. - type: string - role: - description: Role is a SELinux role - label that applies to the container. - type: string - type: - description: Type is a SELinux type - label that applies to the container. - type: string - user: - description: User is a SELinux user - label that applies to the container. - type: string - supplementalGroups: - description: A list of groups applied - to the first process run in each container, - in addition to the container's primary - GID. If unspecified, no groups will - be added to any container. - type: array - items: - type: integer - format: int64 - sysctls: - description: Sysctls hold a list of - namespaced sysctls used for the pod. - Pods with unsupported sysctls (by - the container runtime) might fail - to launch. - type: array - items: - description: Sysctl defines a kernel - parameter to be set - type: object - required: - - name - - value - properties: - name: - description: Name of a property - to set - type: string - value: - description: Value of a property - to set - type: string - windowsOptions: - description: The Windows specific settings - applied to all containers. If unspecified, - the options within a container's SecurityContext - will be used. If set in both SecurityContext - and PodSecurityContext, the value - specified in SecurityContext takes - precedence. - type: object - properties: - gmsaCredentialSpec: - description: GMSACredentialSpec - is where the GMSA admission webhook - (https://github.com/kubernetes-sigs/windows-gmsa) - inlines the contents of the GMSA - credential spec named by the GMSACredentialSpecName - field. - type: string - gmsaCredentialSpecName: - description: GMSACredentialSpecName - is the name of the GMSA credential - spec to use. - type: string - runAsUserName: - description: The UserName in Windows - to run the entrypoint of the container - process. Defaults to the user - specified in image metadata if - unspecified. May also be set in - PodSecurityContext. If set in - both SecurityContext and PodSecurityContext, - the value specified in SecurityContext - takes precedence. - type: string - serviceAccount: - description: 'DeprecatedServiceAccount is - a depreciated alias for ServiceAccountName. - Deprecated: Use serviceAccountName instead.' - type: string - serviceAccountName: - description: 'ServiceAccountName is the - name of the ServiceAccount to use to run - this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/' - type: string - shareProcessNamespace: - description: 'Share a single process namespace - between all of the containers in a pod. - When this is set containers will be able - to view and signal processes from other - containers in the same pod, and the first - process in each container will not be - assigned PID 1. HostPID and ShareProcessNamespace - cannot both be set. Optional: Default - to false.' - type: boolean - subdomain: - description: If specified, the fully qualified - Pod hostname will be "...svc.". If not - specified, the pod will not have a domainname - at all. - type: string - terminationGracePeriodSeconds: - description: Optional duration in seconds - the pod needs to terminate gracefully. - May be decreased in delete request. Value - must be non-negative integer. The value - zero indicates delete immediately. If - this value is nil, the default grace period - will be used instead. The grace period - is the duration in seconds after the processes - running in the pod are sent a termination - signal and the time when the processes - are forcibly halted with a kill signal. - Set this value longer than the expected - cleanup time for your process. Defaults - to 30 seconds. - type: integer - format: int64 - tolerations: - description: If specified, the pod's tolerations. - type: array - items: - description: The pod this Toleration is - attached to tolerates any taint that - matches the triple - using the matching operator . - type: object - properties: - effect: - description: Effect indicates the - taint effect to match. Empty means - match all taint effects. When specified, - allowed values are NoSchedule, PreferNoSchedule - and NoExecute. - type: string - key: - description: Key is the taint key - that the toleration applies to. - Empty means match all taint keys. - If the key is empty, operator must - be Exists; this combination means - to match all values and all keys. - type: string - operator: - description: Operator represents a - key's relationship to the value. - Valid operators are Exists and Equal. - Defaults to Equal. Exists is equivalent - to wildcard for value, so that a - pod can tolerate all taints of a - particular category. - type: string - tolerationSeconds: - description: TolerationSeconds represents - the period of time the toleration - (which must be of effect NoExecute, - otherwise this field is ignored) - tolerates the taint. By default, - it is not set, which means tolerate - the taint forever (do not evict). - Zero and negative values will be - treated as 0 (evict immediately) - by the system. - type: integer - format: int64 - value: - description: Value is the taint value - the toleration matches to. If the - operator is Exists, the value should - be empty, otherwise just a regular - string. - type: string - topologySpreadConstraints: - description: TopologySpreadConstraints describes - how a group of pods ought to spread across - topology domains. Scheduler will schedule - pods in a way which abides by the constraints. - This field is only honored by clusters - that enable the EvenPodsSpread feature. - All topologySpreadConstraints are ANDed. - type: array - items: - description: TopologySpreadConstraint - specifies how to spread matching pods - among the given topology. - type: object - required: - - maxSkew - - topologyKey - - whenUnsatisfiable - properties: - labelSelector: - description: LabelSelector is used - to find matching pods. Pods that - match this label selector are counted - to determine the number of pods - in their corresponding topology - domain. - type: object - properties: - matchExpressions: - description: matchExpressions - is a list of label selector - requirements. The requirements - are ANDed. - type: array - items: - description: A label selector - requirement is a selector - that contains values, a key, - and an operator that relates - the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the - label key that the selector - applies to. - type: string - operator: - description: operator represents - a key's relationship to - a set of values. Valid - operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an - array of string values. - If the operator is In - or NotIn, the values array - must be non-empty. If - the operator is Exists - or DoesNotExist, the values - array must be empty. This - array is replaced during - a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a - map of {key,value} pairs. A - single {key,value} in the matchLabels - map is equivalent to an element - of matchExpressions, whose key - field is "key", the operator - is "In", and the values array - contains only "value". The requirements - are ANDed. - type: object - additionalProperties: - type: string - maxSkew: - description: 'MaxSkew describes the - degree to which pods may be unevenly - distributed. It''s the maximum permitted - difference between the number of - matching pods in any two topology - domains of a given topology type. - For example, in a 3-zone cluster, - MaxSkew is set to 1, and pods with - the same labelSelector spread as - 1/1/0: | zone1 | zone2 | zone3 | - | P | P | | - if MaxSkew - is 1, incoming pod can only be scheduled - to zone3 to become 1/1/1; scheduling - it onto zone1(zone2) would make - the ActualSkew(2-0) on zone1(zone2) - violate MaxSkew(1). - if MaxSkew - is 2, incoming pod can be scheduled - onto any zone. It''s a required - field. Default value is 1 and 0 - is not allowed.' - type: integer - format: int32 - topologyKey: - description: TopologyKey is the key - of node labels. Nodes that have - a label with this key and identical - values are considered to be in the - same topology. We consider each - as a "bucket", and - try to put balanced number of pods - into each bucket. It's a required - field. - type: string - whenUnsatisfiable: - description: 'WhenUnsatisfiable indicates - how to deal with a pod if it doesn''t - satisfy the spread constraint. - - DoNotSchedule (default) tells the - scheduler not to schedule it - ScheduleAnyway - tells the scheduler to still schedule - it It''s considered as "Unsatisfiable" - if and only if placing incoming - pod on any topology violates "MaxSkew". - For example, in a 3-zone cluster, - MaxSkew is set to 1, and pods with - the same labelSelector spread as - 3/1/1: | zone1 | zone2 | zone3 | - | P P P | P | P | If WhenUnsatisfiable - is set to DoNotSchedule, incoming - pod can only be scheduled to zone2(zone3) - to become 3/2/1(3/1/2) as ActualSkew(2-1) - on zone2(zone3) satisfies MaxSkew(1). - In other words, the cluster can - still be imbalanced, but scheduler - won''t make it *more* imbalanced. - It''s a required field.' - type: string - x-kubernetes-list-map-keys: - - topologyKey - - whenUnsatisfiable - x-kubernetes-list-type: map - volumes: - description: 'List of volumes that can be - mounted by containers belonging to the - pod. More info: https://kubernetes.io/docs/concepts/storage/volumes' - type: array - items: - description: Volume represents a named - volume in a pod that may be accessed - by any container in the pod. - type: object - required: - - name - properties: - awsElasticBlockStore: - description: 'AWSElasticBlockStore - represents an AWS Disk resource - that is attached to a kubelet''s - host machine and then exposed to - the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' - type: object - required: - - volumeID - properties: - fsType: - description: 'Filesystem type - of the volume that you want - to mount. Tip: Ensure that the - filesystem type is supported - by the host operating system. - Examples: "ext4", "xfs", "ntfs". - Implicitly inferred to be "ext4" - if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - TODO: how do we prevent errors - in the filesystem from compromising - the machine' - type: string - partition: - description: 'The partition in - the volume that you want to - mount. If omitted, the default - is to mount by volume name. - Examples: For volume /dev/sda1, - you specify the partition as - "1". Similarly, the volume partition - for /dev/sda is "0" (or you - can leave the property empty).' - type: integer - format: int32 - readOnly: - description: 'Specify "true" to - force and set the ReadOnly property - in VolumeMounts to "true". If - omitted, the default is "false". - More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' - type: boolean - volumeID: - description: 'Unique ID of the - persistent disk resource in - AWS (Amazon EBS volume). More - info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' - type: string - azureDisk: - description: AzureDisk represents - an Azure Data Disk mount on the - host and bind mount to the pod. - type: object - required: - - diskName - - diskURI - properties: - cachingMode: - description: 'Host Caching mode: - None, Read Only, Read Write.' - type: string - diskName: - description: The Name of the data - disk in the blob storage - type: string - diskURI: - description: The URI the data - disk in the blob storage - type: string - fsType: - description: Filesystem type to - mount. Must be a filesystem - type supported by the host operating - system. Ex. "ext4", "xfs", "ntfs". - Implicitly inferred to be "ext4" - if unspecified. - type: string - kind: - description: 'Expected values - Shared: multiple blob disks - per storage account Dedicated: - single blob disk per storage - account Managed: azure managed - data disk (only in managed availability - set). defaults to shared' - type: string - readOnly: - description: Defaults to false - (read/write). ReadOnly here - will force the ReadOnly setting - in VolumeMounts. - type: boolean - azureFile: - description: AzureFile represents - an Azure File Service mount on the - host and bind mount to the pod. - type: object - required: - - secretName - - shareName - properties: - readOnly: - description: Defaults to false - (read/write). ReadOnly here - will force the ReadOnly setting - in VolumeMounts. - type: boolean - secretName: - description: the name of secret - that contains Azure Storage - Account Name and Key - type: string - shareName: - description: Share Name - type: string - cephfs: - description: CephFS represents a Ceph - FS mount on the host that shares - a pod's lifetime - type: object - required: - - monitors - properties: - monitors: - description: 'Required: Monitors - is a collection of Ceph monitors - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: array - items: - type: string - path: - description: 'Optional: Used as - the mounted root, rather than - the full Ceph tree, default - is /' - type: string - readOnly: - description: 'Optional: Defaults - to false (read/write). ReadOnly - here will force the ReadOnly - setting in VolumeMounts. More - info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: boolean - secretFile: - description: 'Optional: SecretFile - is the path to key ring for - User, default is /etc/ceph/user.secret - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: string - secretRef: - description: 'Optional: SecretRef - is reference to the authentication - secret for User, default is - empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. - apiVersion, kind, uid?' - type: string - user: - description: 'Optional: User is - the rados user name, default - is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: string - cinder: - description: 'Cinder represents a - cinder volume attached and mounted - on kubelets host machine. More info: - https://examples.k8s.io/mysql-cinder-pd/README.md' - type: object - required: - - volumeID - properties: - fsType: - description: 'Filesystem type - to mount. Must be a filesystem - type supported by the host operating - system. Examples: "ext4", "xfs", - "ntfs". Implicitly inferred - to be "ext4" if unspecified. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md' - type: string - readOnly: - description: 'Optional: Defaults - to false (read/write). ReadOnly - here will force the ReadOnly - setting in VolumeMounts. More - info: https://examples.k8s.io/mysql-cinder-pd/README.md' - type: boolean - secretRef: - description: 'Optional: points - to a secret object containing - parameters used to connect to - OpenStack.' - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. - apiVersion, kind, uid?' - type: string - volumeID: - description: 'volume id used to - identify the volume in cinder. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md' - type: string - configMap: - description: ConfigMap represents - a configMap that should populate - this volume - type: object - properties: - defaultMode: - description: 'Optional: mode bits - to use on created files by default. - Must be a value between 0 and - 0777. Defaults to 0644. Directories - within the path are not affected - by this setting. This might - be in conflict with other options - that affect the file mode, like - fsGroup, and the result can - be other mode bits set.' - type: integer - format: int32 - items: - description: If unspecified, each - key-value pair in the Data field - of the referenced ConfigMap - will be projected into the volume - as a file whose name is the - key and content is the value. - If specified, the listed keys - will be projected into the specified - paths, and unlisted keys will - not be present. If a key is - specified which is not present - in the ConfigMap, the volume - setup will error unless it is - marked optional. Paths must - be relative and may not contain - the '..' path or start with - '..'. - type: array - items: - description: Maps a string key - to a path within a volume. - type: object - required: - - key - - path - properties: - key: - description: The key to - project. - type: string - mode: - description: 'Optional: - mode bits to use on this - file, must be a value - between 0 and 0777. If - not specified, the volume - defaultMode will be used. - This might be in conflict - with other options that - affect the file mode, - like fsGroup, and the - result can be other mode - bits set.' - type: integer - format: int32 - path: - description: The relative - path of the file to map - the key to. May not be - an absolute path. May - not contain the path element - '..'. May not start with - the string '..'. - type: string - name: - description: 'Name of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. - apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the - ConfigMap or its keys must be - defined - type: boolean - csi: - description: CSI (Container Storage - Interface) represents storage that - is handled by an external CSI driver - (Alpha feature). - type: object - required: - - driver - properties: - driver: - description: Driver is the name - of the CSI driver that handles - this volume. Consult with your - admin for the correct name as - registered in the cluster. - type: string - fsType: - description: Filesystem type to - mount. Ex. "ext4", "xfs", "ntfs". - If not provided, the empty value - is passed to the associated - CSI driver which will determine - the default filesystem to apply. - type: string - nodePublishSecretRef: - description: NodePublishSecretRef - is a reference to the secret - object containing sensitive - information to pass to the CSI - driver to complete the CSI NodePublishVolume - and NodeUnpublishVolume calls. - This field is optional, and may - be empty if no secret is required. - If the secret object contains - more than one secret, all secret - references are passed. - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. - apiVersion, kind, uid?' - type: string - readOnly: - description: Specifies a read-only - configuration for the volume. - Defaults to false (read/write). - type: boolean - volumeAttributes: - description: VolumeAttributes - stores driver-specific properties - that are passed to the CSI driver. - Consult your driver's documentation - for supported values. - type: object - additionalProperties: - type: string - downwardAPI: - description: DownwardAPI represents - downward API about the pod that - should populate this volume - type: object - properties: - defaultMode: - description: 'Optional: mode bits - to use on created files by default. - Must be a value between 0 and - 0777. Defaults to 0644. Directories - within the path are not affected - by this setting. This might - be in conflict with other options - that affect the file mode, like - fsGroup, and the result can - be other mode bits set.' - type: integer - format: int32 - items: - description: Items is a list of - downward API volume file - type: array - items: - description: DownwardAPIVolumeFile - represents information to - create the file containing - the pod field - type: object - required: - - path - properties: - fieldRef: - description: 'Required: - Selects a field of the - pod: only annotations, - labels, name and namespace - are supported.' - type: object - required: - - fieldPath - properties: - apiVersion: - description: Version - of the schema the - FieldPath is written - in terms of, defaults - to "v1". - type: string - fieldPath: - description: Path of - the field to select - in the specified API - version. - type: string - mode: - description: 'Optional: - mode bits to use on this - file, must be a value - between 0 and 0777. If - not specified, the volume - defaultMode will be used. - This might be in conflict - with other options that - affect the file mode, - like fsGroup, and the - result can be other mode - bits set.' - type: integer - format: int32 - path: - description: 'Required: - Path is the relative - path name of the file - to be created. Must not - be absolute or contain - the ''..'' path. Must - be utf-8 encoded. The - first item of the relative - path must not start with - ''..''' - type: string - resourceFieldRef: - description: 'Selects a - resource of the container: - only resources limits - and requests (limits.cpu, - limits.memory, requests.cpu - and requests.memory) are - currently supported.' - type: object - required: - - resource - properties: - containerName: - description: 'Container - name: required for - volumes, optional - for env vars' - type: string - divisor: - description: Specifies - the output format - of the exposed resources, - defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - resource: - description: 'Required: - resource to select' - type: string - emptyDir: - description: 'EmptyDir represents - a temporary directory that shares - a pod''s lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' - type: object - properties: - medium: - description: 'What type of storage - medium should back this directory. - The default is "" which means - to use the node''s default medium. - Must be an empty string (default) - or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' - type: string - sizeLimit: - description: 'Total amount of - local storage required for this - EmptyDir volume. The size limit - is also applicable for memory - medium. The maximum usage on - memory medium EmptyDir would - be the minimum value between - the SizeLimit specified here - and the sum of memory limits - of all containers in a pod. - The default is nil which means - that the limit is undefined. - More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - fc: - description: FC represents a Fibre - Channel resource that is attached - to a kubelet's host machine and - then exposed to the pod. - type: object - properties: - fsType: - description: 'Filesystem type - to mount. Must be a filesystem - type supported by the host operating - system. Ex. "ext4", "xfs", "ntfs". - Implicitly inferred to be "ext4" - if unspecified. TODO: how do - we prevent errors in the filesystem - from compromising the machine' - type: string - lun: - description: 'Optional: FC target - lun number' - type: integer - format: int32 - readOnly: - description: 'Optional: Defaults - to false (read/write). ReadOnly - here will force the ReadOnly - setting in VolumeMounts.' - type: boolean - targetWWNs: - description: 'Optional: FC target - worldwide names (WWNs)' - type: array - items: - type: string - wwids: - description: 'Optional: FC volume - world wide identifiers (wwids) - Either wwids or combination - of targetWWNs and lun must be - set, but not both simultaneously.' - type: array - items: - type: string - flexVolume: - description: FlexVolume represents - a generic volume resource that is - provisioned/attached using an exec - based plugin. - type: object - required: - - driver - properties: - driver: - description: Driver is the name - of the driver to use for this - volume. - type: string - fsType: - description: Filesystem type to - mount. Must be a filesystem - type supported by the host operating - system. Ex. "ext4", "xfs", "ntfs". - The default filesystem depends - on FlexVolume script. - type: string - options: - description: 'Optional: Extra - command options if any.' - type: object - additionalProperties: - type: string - readOnly: - description: 'Optional: Defaults - to false (read/write). ReadOnly - here will force the ReadOnly - setting in VolumeMounts.' - type: boolean - secretRef: - description: 'Optional: SecretRef - is reference to the secret object - containing sensitive information - to pass to the plugin scripts. - This may be empty if no secret - object is specified. If the - secret object contains more - than one secret, all secrets - are passed to the plugin scripts.' - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. - apiVersion, kind, uid?' - type: string - flocker: - description: Flocker represents a - Flocker volume attached to a kubelet's - host machine. This depends on the - Flocker control service being running - type: object - properties: - datasetName: - description: Name of the dataset - stored as metadata -> name on - the dataset for Flocker should - be considered as deprecated - type: string - datasetUUID: - description: UUID of the dataset. - This is unique identifier of - a Flocker dataset - type: string - gcePersistentDisk: - description: 'GCEPersistentDisk represents - a GCE Disk resource that is attached - to a kubelet''s host machine and - then exposed to the pod. More info: - https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' - type: object - required: - - pdName - properties: - fsType: - description: 'Filesystem type - of the volume that you want - to mount. Tip: Ensure that the - filesystem type is supported - by the host operating system. - Examples: "ext4", "xfs", "ntfs". - Implicitly inferred to be "ext4" - if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - TODO: how do we prevent errors - in the filesystem from compromising - the machine' - type: string - partition: - description: 'The partition in - the volume that you want to - mount. If omitted, the default - is to mount by volume name. - Examples: For volume /dev/sda1, - you specify the partition as - "1". Similarly, the volume partition - for /dev/sda is "0" (or you - can leave the property empty). - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' - type: integer - format: int32 - pdName: - description: 'Unique name of the - PD resource in GCE. Used to - identify the disk in GCE. More - info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' - type: string - readOnly: - description: 'ReadOnly here will - force the ReadOnly setting in - VolumeMounts. Defaults to false. - More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' - type: boolean - gitRepo: - description: 'GitRepo represents a - git repository at a particular revision. - DEPRECATED: GitRepo is deprecated. - To provision a container with a - git repo, mount an EmptyDir into - an InitContainer that clones the - repo using git, then mount the EmptyDir - into the Pod''s container.' - type: object - required: - - repository - properties: - directory: - description: Target directory - name. Must not contain or start - with '..'. If '.' is supplied, - the volume directory will be - the git repository. Otherwise, - if specified, the volume will - contain the git repository in - the subdirectory with the given - name. - type: string - repository: - description: Repository URL - type: string - revision: - description: Commit hash for the - specified revision. - type: string - glusterfs: - description: 'Glusterfs represents - a Glusterfs mount on the host that - shares a pod''s lifetime. More info: - https://examples.k8s.io/volumes/glusterfs/README.md' - type: object - required: - - endpoints - - path - properties: - endpoints: - description: 'EndpointsName is - the endpoint name that details - Glusterfs topology. More info: - https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' - type: string - path: - description: 'Path is the Glusterfs - volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' - type: string - readOnly: - description: 'ReadOnly here will - force the Glusterfs volume to - be mounted with read-only permissions. - Defaults to false. More info: - https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' - type: boolean - hostPath: - description: 'HostPath represents - a pre-existing file or directory - on the host machine that is directly - exposed to the container. This is - generally used for system agents - or other privileged things that - are allowed to see the host machine. - Most containers will NOT need this. - More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - --- TODO(jonesdl) We need to restrict - who can use host directory mounts - and who can/can not mount host directories - as read/write.' - type: object - required: - - path - properties: - path: - description: 'Path of the directory - on the host. If the path is - a symlink, it will follow the - link to the real path. More - info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' - type: string - type: - description: 'Type for HostPath - Volume Defaults to "" More info: - https://kubernetes.io/docs/concepts/storage/volumes#hostpath' - type: string - iscsi: - description: 'ISCSI represents an - ISCSI Disk resource that is attached - to a kubelet''s host machine and - then exposed to the pod. More info: - https://examples.k8s.io/volumes/iscsi/README.md' - type: object - required: - - iqn - - lun - - targetPortal - properties: - chapAuthDiscovery: - description: whether support iSCSI - Discovery CHAP authentication - type: boolean - chapAuthSession: - description: whether support iSCSI - Session CHAP authentication - type: boolean - fsType: - description: 'Filesystem type - of the volume that you want - to mount. Tip: Ensure that the - filesystem type is supported - by the host operating system. - Examples: "ext4", "xfs", "ntfs". - Implicitly inferred to be "ext4" - if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi - TODO: how do we prevent errors - in the filesystem from compromising - the machine' - type: string - initiatorName: - description: Custom iSCSI Initiator - Name. If initiatorName is specified - with iscsiInterface simultaneously, - new iSCSI interface : will be - created for the connection. - type: string - iqn: - description: Target iSCSI Qualified - Name. - type: string - iscsiInterface: - description: iSCSI Interface Name - that uses an iSCSI transport. - Defaults to 'default' (tcp). - type: string - lun: - description: iSCSI Target Lun - number. - type: integer - format: int32 - portals: - description: iSCSI Target Portal - List. The portal is either an - IP or ip_addr:port if the port - is other than default (typically - TCP ports 860 and 3260). - type: array - items: - type: string - readOnly: - description: ReadOnly here will - force the ReadOnly setting in - VolumeMounts. Defaults to false. - type: boolean - secretRef: - description: CHAP Secret for iSCSI - target and initiator authentication - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. - apiVersion, kind, uid?' - type: string - targetPortal: - description: iSCSI Target Portal. - The Portal is either an IP or - ip_addr:port if the port is - other than default (typically - TCP ports 860 and 3260). - type: string - name: - description: 'Volume''s name. Must - be a DNS_LABEL and unique within - the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - nfs: - description: 'NFS represents an NFS - mount on the host that shares a - pod''s lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' - type: object - required: - - path - - server - properties: - path: - description: 'Path that is exported - by the NFS server. More info: - https://kubernetes.io/docs/concepts/storage/volumes#nfs' - type: string - readOnly: - description: 'ReadOnly here will - force the NFS export to be mounted - with read-only permissions. - Defaults to false. More info: - https://kubernetes.io/docs/concepts/storage/volumes#nfs' - type: boolean - server: - description: 'Server is the hostname - or IP address of the NFS server. - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' - type: string - persistentVolumeClaim: - description: 'PersistentVolumeClaimVolumeSource - represents a reference to a PersistentVolumeClaim - in the same namespace. More info: - https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' - type: object - required: - - claimName - properties: - claimName: - description: 'ClaimName is the - name of a PersistentVolumeClaim - in the same namespace as the - pod using this volume. More - info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' - type: string - readOnly: - description: Will force the ReadOnly - setting in VolumeMounts. Default - false. - type: boolean - photonPersistentDisk: - description: PhotonPersistentDisk - represents a PhotonController persistent - disk attached and mounted on kubelets - host machine - type: object - required: - - pdID - properties: - fsType: - description: Filesystem type to - mount. Must be a filesystem - type supported by the host operating - system. Ex. "ext4", "xfs", "ntfs". - Implicitly inferred to be "ext4" - if unspecified. - type: string - pdID: - description: ID that identifies - Photon Controller persistent - disk - type: string - portworxVolume: - description: PortworxVolume represents - a portworx volume attached and mounted - on kubelets host machine - type: object - required: - - volumeID - properties: - fsType: - description: FSType represents - the filesystem type to mount - Must be a filesystem type supported - by the host operating system. - Ex. "ext4", "xfs". Implicitly - inferred to be "ext4" if unspecified. - type: string - readOnly: - description: Defaults to false - (read/write). ReadOnly here - will force the ReadOnly setting - in VolumeMounts. - type: boolean - volumeID: - description: VolumeID uniquely - identifies a Portworx volume - type: string - projected: - description: Items for all in one - resources secrets, configmaps, and - downward API - type: object - required: - - sources - properties: - defaultMode: - description: Mode bits to use - on created files by default. - Must be a value between 0 and - 0777. Directories within the - path are not affected by this - setting. This might be in conflict - with other options that affect - the file mode, like fsGroup, - and the result can be other - mode bits set. - type: integer - format: int32 - sources: - description: list of volume projections - type: array - items: - description: Projection that - may be projected along with - other supported volume types - type: object - properties: - configMap: - description: information - about the configMap data - to project - type: object - properties: - items: - description: If unspecified, - each key-value pair - in the Data field - of the referenced - ConfigMap will be - projected into the - volume as a file whose - name is the key and - content is the value. - If specified, the - listed keys will be - projected into the - specified paths, and - unlisted keys will - not be present. If - a key is specified - which is not present - in the ConfigMap, - the volume setup will - error unless it is - marked optional. Paths - must be relative and - may not contain the - '..' path or start - with '..'. - type: array - items: - description: Maps - a string key to - a path within a - volume. - type: object - required: - - key - - path - properties: - key: - description: The - key to project. - type: string - mode: - description: 'Optional: - mode bits to - use on this - file, must be - a value between - 0 and 0777. - If not specified, - the volume defaultMode - will be used. - This might be - in conflict - with other options - that affect - the file mode, - like fsGroup, - and the result - can be other - mode bits set.' - type: integer - format: int32 - path: - description: The - relative path - of the file - to map the key - to. May not - be an absolute - path. May not - contain the - path element - '..'. May not - start with the - string '..'. - type: string - name: - description: 'Name of - the referent. More - info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify - whether the ConfigMap - or its keys must be - defined - type: boolean - downwardAPI: - description: information - about the downwardAPI - data to project - type: object - properties: - items: - description: Items is - a list of DownwardAPIVolume - file - type: array - items: - description: DownwardAPIVolumeFile - represents information - to create the file - containing the pod - field - type: object - required: - - path - properties: - fieldRef: - description: 'Required: - Selects a field - of the pod: - only annotations, - labels, name - and namespace - are supported.' - type: object - required: - - fieldPath - properties: - apiVersion: - description: Version - of the schema - the FieldPath - is written - in terms - of, defaults - to "v1". - type: string - fieldPath: - description: Path - of the field - to select - in the specified - API version. - type: string - mode: - description: 'Optional: - mode bits to - use on this - file, must be - a value between - 0 and 0777. - If not specified, - the volume defaultMode - will be used. - This might be - in conflict - with other options - that affect - the file mode, - like fsGroup, - and the result - can be other - mode bits set.' - type: integer - format: int32 - path: - description: 'Required: - Path is the - relative path - name of the - file to be created. - Must not be - absolute or - contain the - ''..'' path. - Must be utf-8 - encoded. The - first item of - the relative - path must not - start with ''..''' - type: string - resourceFieldRef: - description: 'Selects - a resource of - the container: - only resources - limits and requests - (limits.cpu, - limits.memory, - requests.cpu - and requests.memory) - are currently - supported.' - type: object - required: - - resource - properties: - containerName: - description: 'Container - name: required - for volumes, - optional - for env - vars' - type: string - divisor: - description: Specifies - the output - format of - the exposed - resources, - defaults - to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - resource: - description: 'Required: - resource - to select' - type: string - secret: - description: information - about the secret data - to project - type: object - properties: - items: - description: If unspecified, - each key-value pair - in the Data field - of the referenced - Secret will be projected - into the volume as - a file whose name - is the key and content - is the value. If specified, - the listed keys will - be projected into - the specified paths, - and unlisted keys - will not be present. - If a key is specified - which is not present - in the Secret, the - volume setup will - error unless it is - marked optional. Paths - must be relative and - may not contain the - '..' path or start - with '..'. - type: array - items: - description: Maps - a string key to - a path within a - volume. - type: object - required: - - key - - path - properties: - key: - description: The - key to project. - type: string - mode: - description: 'Optional: - mode bits to - use on this - file, must be - a value between - 0 and 0777. - If not specified, - the volume defaultMode - will be used. - This might be - in conflict - with other options - that affect - the file mode, - like fsGroup, - and the result - can be other - mode bits set.' - type: integer - format: int32 - path: - description: The - relative path - of the file - to map the key - to. May not - be an absolute - path. May not - contain the - path element - '..'. May not - start with the - string '..'. - type: string - name: - description: 'Name of - the referent. More - info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful - fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify - whether the Secret - or its key must be - defined - type: boolean - serviceAccountToken: - description: information - about the serviceAccountToken - data to project - type: object - required: - - path - properties: - audience: - description: Audience - is the intended audience - of the token. A recipient - of a token must identify - itself with an identifier - specified in the audience - of the token, and - otherwise should reject - the token. The audience - defaults to the identifier - of the apiserver. - type: string - expirationSeconds: - description: ExpirationSeconds - is the requested duration - of validity of the - service account token. - As the token approaches - expiration, the kubelet - volume plugin will - proactively rotate - the service account - token. The kubelet - will start trying - to rotate the token - if the token is older - than 80 percent of - its time to live or - if the token is older - than 24 hours.Defaults - to 1 hour and must - be at least 10 minutes. - type: integer - format: int64 - path: - description: Path is - the path relative - to the mount point - of the file to project - the token into. - type: string - quobyte: - description: Quobyte represents a - Quobyte mount on the host that shares - a pod's lifetime - type: object - required: - - registry - - volume - properties: - group: - description: Group to map volume - access to Default is no group - type: string - readOnly: - description: ReadOnly here will - force the Quobyte volume to - be mounted with read-only permissions. - Defaults to false. - type: boolean - registry: - description: Registry represents - a single or multiple Quobyte - Registry services specified - as a string as host:port pair - (multiple entries are separated - with commas) which acts as the - central registry for volumes - type: string - tenant: - description: Tenant owning the - given Quobyte volume in the - Backend Used with dynamically - provisioned Quobyte volumes, - value is set by the plugin - type: string - user: - description: User to map volume - access to Defaults to serivceaccount - user - type: string - volume: - description: Volume is a string - that references an already created - Quobyte volume by name. - type: string - rbd: - description: 'RBD represents a Rados - Block Device mount on the host that - shares a pod''s lifetime. More info: - https://examples.k8s.io/volumes/rbd/README.md' - type: object - required: - - image - - monitors - properties: - fsType: - description: 'Filesystem type - of the volume that you want - to mount. Tip: Ensure that the - filesystem type is supported - by the host operating system. - Examples: "ext4", "xfs", "ntfs". - Implicitly inferred to be "ext4" - if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd - TODO: how do we prevent errors - in the filesystem from compromising - the machine' - type: string - image: - description: 'The rados image - name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: string - keyring: - description: 'Keyring is the path - to key ring for RBDUser. Default - is /etc/ceph/keyring. More info: - https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: string - monitors: - description: 'A collection of - Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: array - items: - type: string - pool: - description: 'The rados pool name. - Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: string - readOnly: - description: 'ReadOnly here will - force the ReadOnly setting in - VolumeMounts. Defaults to false. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: boolean - secretRef: - description: 'SecretRef is name - of the authentication secret - for RBDUser. If provided overrides - keyring. Default is nil. More - info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. - apiVersion, kind, uid?' - type: string - user: - description: 'The rados user name. - Default is admin. More info: - https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: string - scaleIO: - description: ScaleIO represents a - ScaleIO persistent volume attached - and mounted on Kubernetes nodes. - type: object - required: - - gateway - - secretRef - - system - properties: - fsType: - description: Filesystem type to - mount. Must be a filesystem - type supported by the host operating - system. Ex. "ext4", "xfs", "ntfs". - Default is "xfs". - type: string - gateway: - description: The host address - of the ScaleIO API Gateway. - type: string - protectionDomain: - description: The name of the ScaleIO - Protection Domain for the configured - storage. - type: string - readOnly: - description: Defaults to false - (read/write). ReadOnly here - will force the ReadOnly setting - in VolumeMounts. - type: boolean - secretRef: - description: SecretRef references - to the secret for ScaleIO user - and other sensitive information. - If this is not provided, Login - operation will fail. - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. - apiVersion, kind, uid?' - type: string - sslEnabled: - description: Flag to enable/disable - SSL communication with Gateway, - default false - type: boolean - storageMode: - description: Indicates whether - the storage for a volume should - be ThickProvisioned or ThinProvisioned. - Default is ThinProvisioned. - type: string - storagePool: - description: The ScaleIO Storage - Pool associated with the protection - domain. - type: string - system: - description: The name of the storage - system as configured in ScaleIO. - type: string - volumeName: - description: The name of a volume - already created in the ScaleIO - system that is associated with - this volume source. - type: string - secret: - description: 'Secret represents a - secret that should populate this - volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' - type: object - properties: - defaultMode: - description: 'Optional: mode bits - to use on created files by default. - Must be a value between 0 and - 0777. Defaults to 0644. Directories - within the path are not affected - by this setting. This might - be in conflict with other options - that affect the file mode, like - fsGroup, and the result can - be other mode bits set.' - type: integer - format: int32 - items: - description: If unspecified, each - key-value pair in the Data field - of the referenced Secret will - be projected into the volume - as a file whose name is the - key and content is the value. - If specified, the listed keys - will be projected into the specified - paths, and unlisted keys will - not be present. If a key is - specified which is not present - in the Secret, the volume setup - will error unless it is marked - optional. Paths must be relative - and may not contain the '..' - path or start with '..'. - type: array - items: - description: Maps a string key - to a path within a volume. - type: object - required: - - key - - path - properties: - key: - description: The key to - project. - type: string - mode: - description: 'Optional: - mode bits to use on this - file, must be a value - between 0 and 0777. If - not specified, the volume - defaultMode will be used. - This might be in conflict - with other options that - affect the file mode, - like fsGroup, and the - result can be other mode - bits set.' - type: integer - format: int32 - path: - description: The relative - path of the file to map - the key to. May not be - an absolute path. May - not contain the path element - '..'. May not start with - the string '..'. - type: string - optional: - description: Specify whether the - Secret or its keys must be defined - type: boolean - secretName: - description: 'Name of the secret - in the pod''s namespace to use. - More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' - type: string - storageos: - description: StorageOS represents - a StorageOS volume attached and - mounted on Kubernetes nodes. - type: object - properties: - fsType: - description: Filesystem type to - mount. Must be a filesystem - type supported by the host operating - system. Ex. "ext4", "xfs", "ntfs". - Implicitly inferred to be "ext4" - if unspecified. - type: string - readOnly: - description: Defaults to false - (read/write). ReadOnly here - will force the ReadOnly setting - in VolumeMounts. - type: boolean - secretRef: - description: SecretRef specifies - the secret to use for obtaining - the StorageOS API credentials. If - not specified, default values - will be attempted. - type: object - properties: - name: - description: 'Name of the - referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. - apiVersion, kind, uid?' - type: string - volumeName: - description: VolumeName is the - human-readable name of the StorageOS - volume. Volume names are only - unique within a namespace. - type: string - volumeNamespace: - description: VolumeNamespace specifies - the scope of the volume within - StorageOS. If no namespace - is specified then the Pod's - namespace will be used. This - allows the Kubernetes name scoping - to be mirrored within StorageOS - for tighter integration. Set - VolumeName to any name to override - the default behaviour. Set to - "default" if you are not using - namespaces within StorageOS. - Namespaces that do not pre-exist - within StorageOS will be created. - type: string - vsphereVolume: - description: VsphereVolume represents - a vSphere volume attached and mounted - on kubelets host machine - type: object - required: - - volumePath - properties: - fsType: - description: Filesystem type to - mount. Must be a filesystem - type supported by the host operating - system. Ex. "ext4", "xfs", "ntfs". - Implicitly inferred to be "ext4" - if unspecified. - type: string - storagePolicyID: - description: Storage Policy Based - Management (SPBM) profile ID - associated with the StoragePolicyName. - type: string - storagePolicyName: - description: Storage Policy Based - Management (SPBM) profile name. - type: string - volumePath: - description: Path that identifies - vSphere volume vmdk - type: string - permissions: - type: array - items: - description: StrategyDeploymentPermissions describe the - rbac rules and service account needed by the install strategy - type: object - required: - - rules - - serviceAccountName - properties: - rules: - type: array - items: - description: PolicyRule holds information that describes - a policy rule, but does not contain information - about who the rule applies to or which namespace - the rule applies to. - type: object - required: - - verbs - properties: - apiGroups: - description: APIGroups is the name of the APIGroup - that contains the resources. If multiple API - groups are specified, any action requested against - one of the enumerated resources in any API group - will be allowed. - type: array - items: - type: string - nonResourceURLs: - description: NonResourceURLs is a set of partial - urls that a user should have access to. *s - are allowed, but only as the full, final step - in the path Since non-resource URLs are not - namespaced, this field is only applicable for - ClusterRoles referenced from a ClusterRoleBinding. - Rules can either apply to API resources (such - as "pods" or "secrets") or non-resource URL - paths (such as "/api"), but not both. - type: array - items: - type: string - resourceNames: - description: ResourceNames is an optional white - list of names that the rule applies to. An - empty set means that everything is allowed. - type: array - items: - type: string - resources: - description: Resources is a list of resources - this rule applies to. ResourceAll represents - all resources. - type: array - items: - type: string - verbs: - description: Verbs is a list of Verbs that apply - to ALL the ResourceKinds and AttributeRestrictions - contained in this rule. VerbAll represents - all kinds. - type: array - items: - type: string - serviceAccountName: - type: string - strategy: - type: string - installModes: - description: InstallModes specify supported installation types - type: array - items: - description: InstallMode associates an InstallModeType with a flag - representing if the CSV supports it - type: object - required: - - supported - - type - properties: - supported: - type: boolean - type: - description: InstallModeType is a supported type of install - mode for CSV installation - type: string - keywords: - type: array - items: - type: string - labels: - description: Map of string keys and values that can be used to organize - and categorize (scope and select) objects. - type: object - additionalProperties: - type: string - links: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - maintainers: - type: array - items: - type: object - properties: - email: - type: string - name: - type: string - maturity: - type: string - minKubeVersion: - type: string - nativeAPIs: - type: array - items: - description: GroupVersionKind unambiguously identifies a kind. It - doesn't anonymously include GroupVersion to avoid automatic coersion. It - doesn't use a GroupVersion to avoid custom marshalling - type: object - required: - - group - - kind - - version - properties: - group: - type: string - kind: - type: string - version: - type: string - provider: - type: object - properties: - name: - type: string - url: - type: string - replaces: - description: The name of a CSV this one replaces. Should match the - `metadata.Name` field of the old CSV. - type: string - selector: - description: Label selector for related resources. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the key - and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: operator represents a key's relationship to - a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. - type: string - values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a strategic - merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. - type: object - additionalProperties: - type: string - version: - description: OperatorVersion is a wrapper around semver.Version which - supports correct marshaling to YAML and JSON. - type: string - webhookdefinitions: - type: array - items: - description: WebhookDescription provides details to OLM about required - webhooks - type: object - required: - - admissionReviewVersions - - generateName - - sideEffects - - type - properties: - admissionReviewVersions: - type: array - items: - type: string - containerPort: - type: integer - format: int32 - default: 443 - maximum: 65535 - minimum: 1 - conversionCRDs: - type: array - items: - type: string - deploymentName: - type: string - failurePolicy: - type: string - generateName: - type: string - matchPolicy: - description: MatchPolicyType specifies the type of match policy - type: string - objectSelector: - description: A label selector is a label query over a set of - resources. The result of matchLabels and matchExpressions - are ANDed. An empty label selector matches all objects. A - null label selector matches no objects. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector - that contains values, a key, and an operator that relates - the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. - If the operator is In or NotIn, the values array - must be non-empty. If the operator is Exists or - DoesNotExist, the values array must be empty. This - array is replaced during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. - A single {key,value} in the matchLabels map is equivalent - to an element of matchExpressions, whose key field is - "key", the operator is "In", and the values array contains - only "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - reinvocationPolicy: - description: ReinvocationPolicyType specifies what type of policy - the admission hook uses. - type: string - rules: - type: array - items: - description: RuleWithOperations is a tuple of Operations and - Resources. It is recommended to make sure that all the tuple - expansions are valid. - type: object - properties: - apiGroups: - description: APIGroups is the API groups the resources - belong to. '*' is all groups. If '*' is present, the - length of the slice must be one. Required. - type: array - items: - type: string - apiVersions: - description: APIVersions is the API versions the resources - belong to. '*' is all versions. If '*' is present, the - length of the slice must be one. Required. - type: array - items: - type: string - operations: - description: Operations is the operations the admission - hook cares about - CREATE, UPDATE, or * for all operations. - If '*' is present, the length of the slice must be one. - Required. - type: array - items: - type: string - resources: - description: "Resources is a list of resources this rule - applies to. \n For example: 'pods' means pods. 'pods/log' - means the log subresource of pods. '*' means all resources, - but not subresources. 'pods/*' means all subresources - of pods. '*/scale' means all scale subresources. '*/*' - means all resources and their subresources. \n If wildcard - is present, the validation rule will ensure resources - do not overlap with each other. \n Depending on the - enclosing object, subresources might not be allowed. - Required." - type: array - items: - type: string - scope: - description: scope specifies the scope of this rule. Valid - values are "Cluster", "Namespaced", and "*" "Cluster" - means that only cluster-scoped resources will match - this rule. Namespace API objects are cluster-scoped. - "Namespaced" means that only namespaced resources will - match this rule. "*" means that there are no scope restrictions. - Subresources match the scope of their parent resource. - Default is "*". - type: string - sideEffects: - type: string - targetPort: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - timeoutSeconds: - type: integer - format: int32 - type: - description: WebhookAdmissionType is the type of admission webhooks - supported by OLM - type: string - enum: - - ValidatingAdmissionWebhook - - MutatingAdmissionWebhook - - ConversionWebhook - webhookPath: - type: string - status: - description: ClusterServiceVersionStatus represents information about - the status of a pod. Status may trail the actual state of a system. - type: object - properties: - certsLastUpdated: - description: Last time the owned APIService certs were updated - type: string - format: date-time - certsRotateAt: - description: Time the owned APIService certs will rotate next - type: string - format: date-time - conditions: - description: List of conditions, a history of state transitions - type: array - items: - description: Conditions appear in the status as a record of state - transitions on the ClusterServiceVersion - type: object - properties: - lastTransitionTime: - description: Last time the status transitioned from one status - to another. - type: string - format: date-time - lastUpdateTime: - description: Last time we updated the status - type: string - format: date-time - message: - description: A human readable message indicating details about - why the ClusterServiceVersion is in this condition. - type: string - phase: - description: Condition of the ClusterServiceVersion - type: string - reason: - description: A brief CamelCase message indicating details about - why the ClusterServiceVersion is in this state. e.g. 'RequirementsNotMet' - type: string - lastTransitionTime: - description: Last time the status transitioned from one status to - another. - type: string - format: date-time - lastUpdateTime: - description: Last time we updated the status - type: string - format: date-time - message: - description: A human readable message indicating details about why - the ClusterServiceVersion is in this condition. - type: string - phase: - description: Current condition of the ClusterServiceVersion - type: string - reason: - description: A brief CamelCase message indicating details about why - the ClusterServiceVersion is in this state. e.g. 'RequirementsNotMet' - type: string - requirementStatus: - description: The status of each requirement for this CSV - type: array - items: - type: object - required: - - group - - kind - - message - - name - - status - - version - properties: - dependents: - type: array - items: - description: DependentStatus is the status for a dependent - requirement (to prevent infinite nesting) - type: object - required: - - group - - kind - - status - - version - properties: - group: - type: string - kind: - type: string - message: - type: string - status: - description: StatusReason is a camelcased reason for the - status of a RequirementStatus or DependentStatus - type: string - uuid: - type: string - version: - type: string - group: - type: string - kind: - type: string - message: - type: string - name: - type: string - status: - description: StatusReason is a camelcased reason for the status - of a RequirementStatus or DependentStatus - type: string - uuid: - type: string - version: - type: string - served: true - storage: true - subresources: - status: {} - ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.3.0 - creationTimestamp: null - name: installplans.operators.coreos.com -spec: - group: operators.coreos.com - names: - categories: - - olm - kind: InstallPlan - listKind: InstallPlanList - plural: installplans - shortNames: - - ip - singular: installplan - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: The first CSV in the list of clusterServiceVersionNames - jsonPath: .spec.clusterServiceVersionNames[0] - name: CSV - type: string - - description: The approval mode - jsonPath: .spec.approval - name: Approval - type: string - - jsonPath: .spec.approved - name: Approved - type: boolean - name: v1alpha1 - schema: - openAPIV3Schema: - description: InstallPlan defines the installation of a set of operators. - type: object - required: - - metadata - - spec - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: InstallPlanSpec defines a set of Application resources to - be installed - type: object - required: - - approval - - approved - - clusterServiceVersionNames - properties: - approval: - description: Approval is the user approval policy for an InstallPlan. - It must be one of "Automatic" or "Manual". - type: string - approved: - type: boolean - clusterServiceVersionNames: - type: array - items: - type: string - generation: - type: integer - source: - type: string - sourceNamespace: - type: string - status: - description: "InstallPlanStatus represents the information about the status - of steps required to complete installation. \n Status may trail the - actual state of a system." - type: object - required: - - catalogSources - - phase - properties: - attenuatedServiceAccountRef: - description: AttenuatedServiceAccountRef references the service account - that is used to do scoped operator install. - type: object - properties: - apiVersion: - description: API version of the referent. - type: string - fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' - type: string - kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' - type: string - resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - bundleLookups: - description: BundleLookups is the set of in-progress requests to pull - and unpackage bundle content to the cluster. - type: array - items: - description: BundleLookup is a request to pull and unpackage the - content of a bundle to the cluster. - type: object - required: - - catalogSourceRef - - identifier - - path - - replaces - properties: - catalogSourceRef: - description: CatalogSourceRef is a reference to the CatalogSource - the bundle path was resolved from. - type: object - properties: - apiVersion: - description: API version of the referent. - type: string - fieldPath: - description: 'If referring to a piece of an object instead - of an entire object, this string should contain a valid - JSON/Go field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container - within a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that - triggered the event) or if no container name is specified - "spec.containers[2]" (container with index 2 in this pod). - This syntax is chosen only to have some well-defined way - of referencing a part of an object. TODO: this design - is not final and this field is subject to change in the - future.' - type: string - kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' - type: string - resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - conditions: - description: Conditions represents the overall state of a BundleLookup. - type: array - items: - type: object - required: - - status - - type - properties: - lastTransitionTime: - description: Last time the condition transitioned from - one status to another. - type: string - format: date-time - lastUpdateTime: - description: Last time the condition was probed. - type: string - format: date-time - message: - description: A human readable message indicating details - about the transition. - type: string - reason: - description: The reason for the condition's last transition. - type: string - status: - description: Status of the condition, one of True, False, - Unknown. - type: string - type: - description: Type of condition. - type: string - identifier: - description: Identifier is the catalog-unique name of the operator - (the name of the CSV for bundles that contain CSVs) - type: string - path: - description: Path refers to the location of a bundle to pull. - It's typically an image reference. - type: string - properties: - description: The effective properties of the unpacked bundle. - type: string - replaces: - description: Replaces is the name of the bundle to replace with - the one found at Path. - type: string - catalogSources: - type: array - items: - type: string - conditions: - type: array - items: - description: InstallPlanCondition represents the overall status - of the execution of an InstallPlan. - type: object - properties: - lastTransitionTime: - type: string - format: date-time - lastUpdateTime: - type: string - format: date-time - message: - type: string - reason: - description: ConditionReason is a camelcased reason for the - state transition. - type: string - status: - type: string - type: - description: InstallPlanConditionType describes the state of - an InstallPlan at a certain point as a whole. - type: string - phase: - description: InstallPlanPhase is the current status of a InstallPlan - as a whole. - type: string - plan: - type: array - items: - description: Step represents the status of an individual step in - an InstallPlan. - type: object - required: - - resolving - - resource - - status - properties: - resolving: - type: string - resource: - description: StepResource represents the status of a resource - to be tracked by an InstallPlan. - type: object - required: - - group - - kind - - name - - sourceName - - sourceNamespace - - version - properties: - group: - type: string - kind: - type: string - manifest: - type: string - name: - type: string - sourceName: - type: string - sourceNamespace: - type: string - version: - type: string - status: - description: StepStatus is the current status of a particular - resource an in InstallPlan - type: string - served: true - storage: true - subresources: - status: {} - ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.3.0 - creationTimestamp: null - name: operatorgroups.operators.coreos.com -spec: - group: operators.coreos.com - names: - categories: - - olm - kind: OperatorGroup - listKind: OperatorGroupList - plural: operatorgroups - shortNames: - - og - singular: operatorgroup - scope: Namespaced - versions: - - name: v1 - schema: - openAPIV3Schema: - description: OperatorGroup is the unit of multitenancy for OLM managed operators. - It constrains the installation of operators in its namespace to a specified - set of target namespaces. - type: object - required: - - metadata - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: OperatorGroupSpec is the spec for an OperatorGroup resource. - type: object - properties: - selector: - description: Selector selects the OperatorGroup's target namespaces. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the key - and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: operator represents a key's relationship to - a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. - type: string - values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a strategic - merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. - type: object - additionalProperties: - type: string - serviceAccountName: - description: ServiceAccountName is the admin specified service account - which will be used to deploy operator(s) in this operator group. - type: string - staticProvidedAPIs: - description: Static tells OLM not to update the OperatorGroup's providedAPIs - annotation - type: boolean - targetNamespaces: - description: TargetNamespaces is an explicit set of namespaces to - target. If it is set, Selector is ignored. - type: array - items: - type: string - x-kubernetes-list-type: set - status: - description: OperatorGroupStatus is the status for an OperatorGroupResource. - type: object - required: - - lastUpdated - properties: - lastUpdated: - description: LastUpdated is a timestamp of the last time the OperatorGroup's - status was Updated. - type: string - format: date-time - namespaces: - description: Namespaces is the set of target namespaces for the OperatorGroup. - type: array - items: - type: string - x-kubernetes-list-type: set - serviceAccountRef: - description: ServiceAccountRef references the service account object - specified. - type: object - properties: - apiVersion: - description: API version of the referent. - type: string - fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' - type: string - kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' - type: string - resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - served: true - storage: true - subresources: - status: {} - - name: v1alpha2 - schema: - openAPIV3Schema: - description: OperatorGroup is the unit of multitenancy for OLM managed operators. - It constrains the installation of operators in its namespace to a specified - set of target namespaces. - type: object - required: - - metadata - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: OperatorGroupSpec is the spec for an OperatorGroup resource. - type: object - properties: - selector: - description: Selector selects the OperatorGroup's target namespaces. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the key - and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: operator represents a key's relationship to - a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. - type: string - values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a strategic - merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. - type: object - additionalProperties: - type: string - serviceAccountName: - description: ServiceAccountName is the admin specified service account - which will be used to deploy operator(s) in this operator group. - type: string - staticProvidedAPIs: - description: Static tells OLM not to update the OperatorGroup's providedAPIs - annotation - type: boolean - targetNamespaces: - description: TargetNamespaces is an explicit set of namespaces to - target. If it is set, Selector is ignored. - type: array - items: - type: string - status: - description: OperatorGroupStatus is the status for an OperatorGroupResource. - type: object - required: - - lastUpdated - properties: - lastUpdated: - description: LastUpdated is a timestamp of the last time the OperatorGroup's - status was Updated. - type: string - format: date-time - namespaces: - description: Namespaces is the set of target namespaces for the OperatorGroup. - type: array - items: - type: string - serviceAccountRef: - description: ServiceAccountRef references the service account object - specified. - type: object - properties: - apiVersion: - description: API version of the referent. - type: string - fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' - type: string - kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' - type: string - resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - served: true - storage: false - subresources: - status: {} - ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.3.0 - creationTimestamp: null - name: operators.operators.coreos.com -spec: - group: operators.coreos.com - names: - categories: - - olm - kind: Operator - listKind: OperatorList - plural: operators - singular: operator - scope: Cluster - versions: - - name: v1 - schema: - openAPIV3Schema: - description: Operator represents a cluster operator. - type: object - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: OperatorSpec defines the desired state of Operator - type: object - status: - description: OperatorStatus defines the observed state of an Operator - and its components - type: object - properties: - components: - description: Components describes resources that compose the operator. - type: object - required: - - labelSelector - properties: - labelSelector: - description: LabelSelector is a label query over a set of resources - used to select the operator's components - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector - that contains values, a key, and an operator that relates - the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If - the operator is In or NotIn, the values array must - be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced - during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A - single {key,value} in the matchLabels map is equivalent - to an element of matchExpressions, whose key field is "key", - the operator is "In", and the values array contains only - "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - refs: - description: Refs are a set of references to the operator's component - resources, selected with LabelSelector. - type: array - items: - description: RichReference is a reference to a resource, enriched - with its status conditions. - type: object - properties: - apiVersion: - description: API version of the referent. - type: string - conditions: - description: Conditions represents the latest state of the - component. - type: array - items: - description: Condition represent the latest available - observations of an component's state. - type: object - required: - - status - - type - properties: - lastTransitionTime: - description: Last time the condition transitioned - from one status to another. - type: string - format: date-time - lastUpdateTime: - description: Last time the condition was probed - type: string - format: date-time - message: - description: A human readable message indicating details - about the transition. - type: string - reason: - description: The reason for the condition's last transition. - type: string - status: - description: Status of the condition, one of True, - False, Unknown. - type: string - type: - description: Type of condition. - type: string - fieldPath: - description: 'If referring to a piece of an object instead - of an entire object, this string should contain a valid - JSON/Go field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container - within a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that - triggered the event) or if no container name is specified - "spec.containers[2]" (container with index 2 in this pod). - This syntax is chosen only to have some well-defined way - of referencing a part of an object. TODO: this design - is not final and this field is subject to change in the - future.' - type: string - kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' - type: string - resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - served: true - storage: true - subresources: - status: {} - ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.3.0 - creationTimestamp: null - name: subscriptions.operators.coreos.com -spec: - group: operators.coreos.com - names: - categories: - - olm - kind: Subscription - listKind: SubscriptionList - plural: subscriptions - shortNames: - - sub - - subs - singular: subscription - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: The package subscribed to - jsonPath: .spec.name - name: Package - type: string - - description: The catalog source for the specified package - jsonPath: .spec.source - name: Source - type: string - - description: The channel of updates to subscribe to - jsonPath: .spec.channel - name: Channel - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - description: Subscription keeps operators up to date by tracking changes to - Catalogs. - type: object - required: - - metadata - - spec - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: SubscriptionSpec defines an Application that can be installed - type: object - required: - - name - - source - - sourceNamespace - properties: - channel: - type: string - config: - description: SubscriptionConfig contains configuration specified for - a subscription. - type: object - properties: - env: - description: Env is a list of environment variables to set in - the container. Cannot be updated. - type: array - items: - description: EnvVar represents an environment variable present - in a Container. - type: object - required: - - name - properties: - name: - description: Name of the environment variable. Must be a - C_IDENTIFIER. - type: string - value: - description: 'Variable references $(VAR_NAME) are expanded - using the previous defined environment variables in the - container and any service environment variables. If a - variable cannot be resolved, the reference in the input - string will be unchanged. The $(VAR_NAME) syntax can be - escaped with a double $$, ie: $$(VAR_NAME). Escaped references - will never be expanded, regardless of whether the variable - exists or not. Defaults to "".' - type: string - valueFrom: - description: Source for the environment variable's value. - Cannot be used if value is not empty. - type: object - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - type: object - required: - - key - properties: - key: - description: The key to select. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - optional: - description: Specify whether the ConfigMap or its - key must be defined - type: boolean - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, - metadata.namespace, metadata.labels, metadata.annotations, - spec.nodeName, spec.serviceAccountName, status.hostIP, - status.podIP, status.podIPs.' - type: object - required: - - fieldPath - properties: - apiVersion: - description: Version of the schema the FieldPath - is written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the - specified API version. - type: string - resourceFieldRef: - description: 'Selects a resource of the container: only - resources limits and requests (limits.cpu, limits.memory, - limits.ephemeral-storage, requests.cpu, requests.memory - and requests.ephemeral-storage) are currently supported.' - type: object - required: - - resource - properties: - containerName: - description: 'Container name: required for volumes, - optional for env vars' - type: string - divisor: - description: Specifies the output format of the - exposed resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - secretKeyRef: - description: Selects a key of a secret in the pod's - namespace - type: object - required: - - key - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - optional: - description: Specify whether the Secret or its key - must be defined - type: boolean - envFrom: - description: EnvFrom is a list of sources to populate environment - variables in the container. The keys defined within a source - must be a C_IDENTIFIER. All invalid keys will be reported as - an event when the container is starting. When a key exists in - multiple sources, the value associated with the last source - will take precedence. Values defined by an Env with a duplicate - key will take precedence. Immutable. - type: array - items: - description: EnvFromSource represents the source of a set of - ConfigMaps - type: object - properties: - configMapRef: - description: The ConfigMap to select from - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the ConfigMap must be defined - type: boolean - prefix: - description: An optional identifier to prepend to each key - in the ConfigMap. Must be a C_IDENTIFIER. - type: string - secretRef: - description: The Secret to select from - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the Secret must be defined - type: boolean - nodeSelector: - description: 'NodeSelector is a selector which must be true for - the pod to fit on a node. Selector which must match a node''s - labels for the pod to be scheduled on that node. More info: - https://kubernetes.io/docs/concepts/configuration/assign-pod-node/' - type: object - additionalProperties: - type: string - resources: - description: 'Resources represents compute resources required - by this container. Immutable. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - properties: - limits: - description: 'Limits describes the maximum amount of compute - resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - requests: - description: 'Requests describes the minimum amount of compute - resources required. If Requests is omitted for a container, - it defaults to Limits if that is explicitly specified, otherwise - to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - selector: - description: Selector is the label selector for pods to be configured. - Existing ReplicaSets whose pods are selected by this will be - the ones affected by this deployment. It must match the pod - template's labels. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector - that contains values, a key, and an operator that relates - the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, - Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If - the operator is In or NotIn, the values array must - be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced - during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A - single {key,value} in the matchLabels map is equivalent - to an element of matchExpressions, whose key field is "key", - the operator is "In", and the values array contains only - "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - tolerations: - description: Tolerations are the pod's tolerations. - type: array - items: - description: The pod this Toleration is attached to tolerates - any taint that matches the triple using - the matching operator . - type: object - properties: - effect: - description: Effect indicates the taint effect to match. - Empty means match all taint effects. When specified, allowed - values are NoSchedule, PreferNoSchedule and NoExecute. - type: string - key: - description: Key is the taint key that the toleration applies - to. Empty means match all taint keys. If the key is empty, - operator must be Exists; this combination means to match - all values and all keys. - type: string - operator: - description: Operator represents a key's relationship to - the value. Valid operators are Exists and Equal. Defaults - to Equal. Exists is equivalent to wildcard for value, - so that a pod can tolerate all taints of a particular - category. - type: string - tolerationSeconds: - description: TolerationSeconds represents the period of - time the toleration (which must be of effect NoExecute, - otherwise this field is ignored) tolerates the taint. - By default, it is not set, which means tolerate the taint - forever (do not evict). Zero and negative values will - be treated as 0 (evict immediately) by the system. - type: integer - format: int64 - value: - description: Value is the taint value the toleration matches - to. If the operator is Exists, the value should be empty, - otherwise just a regular string. - type: string - volumeMounts: - description: List of VolumeMounts to set in the container. - type: array - items: - description: VolumeMount describes a mounting of a Volume within - a container. - type: object - required: - - mountPath - - name - properties: - mountPath: - description: Path within the container at which the volume - should be mounted. Must not contain ':'. - type: string - mountPropagation: - description: mountPropagation determines how mounts are - propagated from the host to container and the other way - around. When not set, MountPropagationNone is used. This - field is beta in 1.10. - type: string - name: - description: This must match the Name of a Volume. - type: string - readOnly: - description: Mounted read-only if true, read-write otherwise - (false or unspecified). Defaults to false. - type: boolean - subPath: - description: Path within the volume from which the container's - volume should be mounted. Defaults to "" (volume's root). - type: string - subPathExpr: - description: Expanded path within the volume from which - the container's volume should be mounted. Behaves similarly - to SubPath but environment variable references $(VAR_NAME) - are expanded using the container's environment. Defaults - to "" (volume's root). SubPathExpr and SubPath are mutually - exclusive. - type: string - volumes: - description: List of Volumes to set in the podSpec. - type: array - items: - description: Volume represents a named volume in a pod that - may be accessed by any container in the pod. - type: object - required: - - name - properties: - awsElasticBlockStore: - description: 'AWSElasticBlockStore represents an AWS Disk - resource that is attached to a kubelet''s host machine - and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' - type: object - required: - - volumeID - properties: - fsType: - description: 'Filesystem type of the volume that you - want to mount. Tip: Ensure that the filesystem type - is supported by the host operating system. Examples: - "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" - if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore - TODO: how do we prevent errors in the filesystem from - compromising the machine' - type: string - partition: - description: 'The partition in the volume that you want - to mount. If omitted, the default is to mount by volume - name. Examples: For volume /dev/sda1, you specify - the partition as "1". Similarly, the volume partition - for /dev/sda is "0" (or you can leave the property - empty).' - type: integer - format: int32 - readOnly: - description: 'Specify "true" to force and set the ReadOnly - property in VolumeMounts to "true". If omitted, the - default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' - type: boolean - volumeID: - description: 'Unique ID of the persistent disk resource - in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' - type: string - azureDisk: - description: AzureDisk represents an Azure Data Disk mount - on the host and bind mount to the pod. - type: object - required: - - diskName - - diskURI - properties: - cachingMode: - description: 'Host Caching mode: None, Read Only, Read - Write.' - type: string - diskName: - description: The Name of the data disk in the blob storage - type: string - diskURI: - description: The URI the data disk in the blob storage - type: string - fsType: - description: Filesystem type to mount. Must be a filesystem - type supported by the host operating system. Ex. "ext4", - "xfs", "ntfs". Implicitly inferred to be "ext4" if - unspecified. - type: string - kind: - description: 'Expected values Shared: multiple blob - disks per storage account Dedicated: single blob - disk per storage account Managed: azure managed data - disk (only in managed availability set). defaults - to shared' - type: string - readOnly: - description: Defaults to false (read/write). ReadOnly - here will force the ReadOnly setting in VolumeMounts. - type: boolean - azureFile: - description: AzureFile represents an Azure File Service - mount on the host and bind mount to the pod. - type: object - required: - - secretName - - shareName - properties: - readOnly: - description: Defaults to false (read/write). ReadOnly - here will force the ReadOnly setting in VolumeMounts. - type: boolean - secretName: - description: the name of secret that contains Azure - Storage Account Name and Key - type: string - shareName: - description: Share Name - type: string - cephfs: - description: CephFS represents a Ceph FS mount on the host - that shares a pod's lifetime - type: object - required: - - monitors - properties: - monitors: - description: 'Required: Monitors is a collection of - Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: array - items: - type: string - path: - description: 'Optional: Used as the mounted root, rather - than the full Ceph tree, default is /' - type: string - readOnly: - description: 'Optional: Defaults to false (read/write). - ReadOnly here will force the ReadOnly setting in VolumeMounts. - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: boolean - secretFile: - description: 'Optional: SecretFile is the path to key - ring for User, default is /etc/ceph/user.secret More - info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: string - secretRef: - description: 'Optional: SecretRef is reference to the - authentication secret for User, default is empty. - More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - user: - description: 'Optional: User is the rados user name, - default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' - type: string - cinder: - description: 'Cinder represents a cinder volume attached - and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' - type: object - required: - - volumeID - properties: - fsType: - description: 'Filesystem type to mount. Must be a filesystem - type supported by the host operating system. Examples: - "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" - if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' - type: string - readOnly: - description: 'Optional: Defaults to false (read/write). - ReadOnly here will force the ReadOnly setting in VolumeMounts. - More info: https://examples.k8s.io/mysql-cinder-pd/README.md' - type: boolean - secretRef: - description: 'Optional: points to a secret object containing - parameters used to connect to OpenStack.' - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - volumeID: - description: 'volume id used to identify the volume - in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' - type: string - configMap: - description: ConfigMap represents a configMap that should - populate this volume - type: object - properties: - defaultMode: - description: 'Optional: mode bits to use on created - files by default. Must be a value between 0 and 0777. - Defaults to 0644. Directories within the path are - not affected by this setting. This might be in conflict - with other options that affect the file mode, like - fsGroup, and the result can be other mode bits set.' - type: integer - format: int32 - items: - description: If unspecified, each key-value pair in - the Data field of the referenced ConfigMap will be - projected into the volume as a file whose name is - the key and content is the value. If specified, the - listed keys will be projected into the specified paths, - and unlisted keys will not be present. If a key is - specified which is not present in the ConfigMap, the - volume setup will error unless it is marked optional. - Paths must be relative and may not contain the '..' - path or start with '..'. - type: array - items: - description: Maps a string key to a path within a - volume. - type: object - required: - - key - - path - properties: - key: - description: The key to project. - type: string - mode: - description: 'Optional: mode bits to use on this - file, must be a value between 0 and 0777. If - not specified, the volume defaultMode will be - used. This might be in conflict with other options - that affect the file mode, like fsGroup, and - the result can be other mode bits set.' - type: integer - format: int32 - path: - description: The relative path of the file to - map the key to. May not be an absolute path. - May not contain the path element '..'. May not - start with the string '..'. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the ConfigMap or its keys - must be defined - type: boolean - csi: - description: CSI (Container Storage Interface) represents - storage that is handled by an external CSI driver (Alpha - feature). - type: object - required: - - driver - properties: - driver: - description: Driver is the name of the CSI driver that - handles this volume. Consult with your admin for the - correct name as registered in the cluster. - type: string - fsType: - description: Filesystem type to mount. Ex. "ext4", "xfs", - "ntfs". If not provided, the empty value is passed - to the associated CSI driver which will determine - the default filesystem to apply. - type: string - nodePublishSecretRef: - description: NodePublishSecretRef is a reference to - the secret object containing sensitive information - to pass to the CSI driver to complete the CSI NodePublishVolume - and NodeUnpublishVolume calls. This field is optional, - and may be empty if no secret is required. If the - secret object contains more than one secret, all secret - references are passed. - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - readOnly: - description: Specifies a read-only configuration for - the volume. Defaults to false (read/write). - type: boolean - volumeAttributes: - description: VolumeAttributes stores driver-specific - properties that are passed to the CSI driver. Consult - your driver's documentation for supported values. - type: object - additionalProperties: - type: string - downwardAPI: - description: DownwardAPI represents downward API about the - pod that should populate this volume - type: object - properties: - defaultMode: - description: 'Optional: mode bits to use on created - files by default. Must be a value between 0 and 0777. - Defaults to 0644. Directories within the path are - not affected by this setting. This might be in conflict - with other options that affect the file mode, like - fsGroup, and the result can be other mode bits set.' - type: integer - format: int32 - items: - description: Items is a list of downward API volume - file - type: array - items: - description: DownwardAPIVolumeFile represents information - to create the file containing the pod field - type: object - required: - - path - properties: - fieldRef: - description: 'Required: Selects a field of the - pod: only annotations, labels, name and namespace - are supported.' - type: object - required: - - fieldPath - properties: - apiVersion: - description: Version of the schema the FieldPath - is written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in - the specified API version. - type: string - mode: - description: 'Optional: mode bits to use on this - file, must be a value between 0 and 0777. If - not specified, the volume defaultMode will be - used. This might be in conflict with other options - that affect the file mode, like fsGroup, and - the result can be other mode bits set.' - type: integer - format: int32 - path: - description: 'Required: Path is the relative - path name of the file to be created. Must not - be absolute or contain the ''..'' path. Must - be utf-8 encoded. The first item of the relative - path must not start with ''..''' - type: string - resourceFieldRef: - description: 'Selects a resource of the container: - only resources limits and requests (limits.cpu, - limits.memory, requests.cpu and requests.memory) - are currently supported.' - type: object - required: - - resource - properties: - containerName: - description: 'Container name: required for - volumes, optional for env vars' - type: string - divisor: - description: Specifies the output format of - the exposed resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - emptyDir: - description: 'EmptyDir represents a temporary directory - that shares a pod''s lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' - type: object - properties: - medium: - description: 'What type of storage medium should back - this directory. The default is "" which means to use - the node''s default medium. Must be an empty string - (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' - type: string - sizeLimit: - description: 'Total amount of local storage required - for this EmptyDir volume. The size limit is also applicable - for memory medium. The maximum usage on memory medium - EmptyDir would be the minimum value between the SizeLimit - specified here and the sum of memory limits of all - containers in a pod. The default is nil which means - that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - fc: - description: FC represents a Fibre Channel resource that - is attached to a kubelet's host machine and then exposed - to the pod. - type: object - properties: - fsType: - description: 'Filesystem type to mount. Must be a filesystem - type supported by the host operating system. Ex. "ext4", - "xfs", "ntfs". Implicitly inferred to be "ext4" if - unspecified. TODO: how do we prevent errors in the - filesystem from compromising the machine' - type: string - lun: - description: 'Optional: FC target lun number' - type: integer - format: int32 - readOnly: - description: 'Optional: Defaults to false (read/write). - ReadOnly here will force the ReadOnly setting in VolumeMounts.' - type: boolean - targetWWNs: - description: 'Optional: FC target worldwide names (WWNs)' - type: array - items: - type: string - wwids: - description: 'Optional: FC volume world wide identifiers - (wwids) Either wwids or combination of targetWWNs - and lun must be set, but not both simultaneously.' - type: array - items: - type: string - flexVolume: - description: FlexVolume represents a generic volume resource - that is provisioned/attached using an exec based plugin. - type: object - required: - - driver - properties: - driver: - description: Driver is the name of the driver to use - for this volume. - type: string - fsType: - description: Filesystem type to mount. Must be a filesystem - type supported by the host operating system. Ex. "ext4", - "xfs", "ntfs". The default filesystem depends on FlexVolume - script. - type: string - options: - description: 'Optional: Extra command options if any.' - type: object - additionalProperties: - type: string - readOnly: - description: 'Optional: Defaults to false (read/write). - ReadOnly here will force the ReadOnly setting in VolumeMounts.' - type: boolean - secretRef: - description: 'Optional: SecretRef is reference to the - secret object containing sensitive information to - pass to the plugin scripts. This may be empty if no - secret object is specified. If the secret object contains - more than one secret, all secrets are passed to the - plugin scripts.' - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - flocker: - description: Flocker represents a Flocker volume attached - to a kubelet's host machine. This depends on the Flocker - control service being running - type: object - properties: - datasetName: - description: Name of the dataset stored as metadata - -> name on the dataset for Flocker should be considered - as deprecated - type: string - datasetUUID: - description: UUID of the dataset. This is unique identifier - of a Flocker dataset - type: string - gcePersistentDisk: - description: 'GCEPersistentDisk represents a GCE Disk resource - that is attached to a kubelet''s host machine and then - exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' - type: object - required: - - pdName - properties: - fsType: - description: 'Filesystem type of the volume that you - want to mount. Tip: Ensure that the filesystem type - is supported by the host operating system. Examples: - "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" - if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk - TODO: how do we prevent errors in the filesystem from - compromising the machine' - type: string - partition: - description: 'The partition in the volume that you want - to mount. If omitted, the default is to mount by volume - name. Examples: For volume /dev/sda1, you specify - the partition as "1". Similarly, the volume partition - for /dev/sda is "0" (or you can leave the property - empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' - type: integer - format: int32 - pdName: - description: 'Unique name of the PD resource in GCE. - Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' - type: string - readOnly: - description: 'ReadOnly here will force the ReadOnly - setting in VolumeMounts. Defaults to false. More info: - https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' - type: boolean - gitRepo: - description: 'GitRepo represents a git repository at a particular - revision. DEPRECATED: GitRepo is deprecated. To provision - a container with a git repo, mount an EmptyDir into an - InitContainer that clones the repo using git, then mount - the EmptyDir into the Pod''s container.' - type: object - required: - - repository - properties: - directory: - description: Target directory name. Must not contain - or start with '..'. If '.' is supplied, the volume - directory will be the git repository. Otherwise, - if specified, the volume will contain the git repository - in the subdirectory with the given name. - type: string - repository: - description: Repository URL - type: string - revision: - description: Commit hash for the specified revision. - type: string - glusterfs: - description: 'Glusterfs represents a Glusterfs mount on - the host that shares a pod''s lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md' - type: object - required: - - endpoints - - path - properties: - endpoints: - description: 'EndpointsName is the endpoint name that - details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' - type: string - path: - description: 'Path is the Glusterfs volume path. More - info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' - type: string - readOnly: - description: 'ReadOnly here will force the Glusterfs - volume to be mounted with read-only permissions. Defaults - to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' - type: boolean - hostPath: - description: 'HostPath represents a pre-existing file or - directory on the host machine that is directly exposed - to the container. This is generally used for system agents - or other privileged things that are allowed to see the - host machine. Most containers will NOT need this. More - info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath - --- TODO(jonesdl) We need to restrict who can use host - directory mounts and who can/can not mount host directories - as read/write.' - type: object - required: - - path - properties: - path: - description: 'Path of the directory on the host. If - the path is a symlink, it will follow the link to - the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' - type: string - type: - description: 'Type for HostPath Volume Defaults to "" - More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' - type: string - iscsi: - description: 'ISCSI represents an ISCSI Disk resource that - is attached to a kubelet''s host machine and then exposed - to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' - type: object - required: - - iqn - - lun - - targetPortal - properties: - chapAuthDiscovery: - description: whether support iSCSI Discovery CHAP authentication - type: boolean - chapAuthSession: - description: whether support iSCSI Session CHAP authentication - type: boolean - fsType: - description: 'Filesystem type of the volume that you - want to mount. Tip: Ensure that the filesystem type - is supported by the host operating system. Examples: - "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" - if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi - TODO: how do we prevent errors in the filesystem from - compromising the machine' - type: string - initiatorName: - description: Custom iSCSI Initiator Name. If initiatorName - is specified with iscsiInterface simultaneously, new - iSCSI interface : will - be created for the connection. - type: string - iqn: - description: Target iSCSI Qualified Name. - type: string - iscsiInterface: - description: iSCSI Interface Name that uses an iSCSI - transport. Defaults to 'default' (tcp). - type: string - lun: - description: iSCSI Target Lun number. - type: integer - format: int32 - portals: - description: iSCSI Target Portal List. The portal is - either an IP or ip_addr:port if the port is other - than default (typically TCP ports 860 and 3260). - type: array - items: - type: string - readOnly: - description: ReadOnly here will force the ReadOnly setting - in VolumeMounts. Defaults to false. - type: boolean - secretRef: - description: CHAP Secret for iSCSI target and initiator - authentication - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - targetPortal: - description: iSCSI Target Portal. The Portal is either - an IP or ip_addr:port if the port is other than default - (typically TCP ports 860 and 3260). - type: string - name: - description: 'Volume''s name. Must be a DNS_LABEL and unique - within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - nfs: - description: 'NFS represents an NFS mount on the host that - shares a pod''s lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' - type: object - required: - - path - - server - properties: - path: - description: 'Path that is exported by the NFS server. - More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' - type: string - readOnly: - description: 'ReadOnly here will force the NFS export - to be mounted with read-only permissions. Defaults - to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' - type: boolean - server: - description: 'Server is the hostname or IP address of - the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' - type: string - persistentVolumeClaim: - description: 'PersistentVolumeClaimVolumeSource represents - a reference to a PersistentVolumeClaim in the same namespace. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' - type: object - required: - - claimName - properties: - claimName: - description: 'ClaimName is the name of a PersistentVolumeClaim - in the same namespace as the pod using this volume. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' - type: string - readOnly: - description: Will force the ReadOnly setting in VolumeMounts. - Default false. - type: boolean - photonPersistentDisk: - description: PhotonPersistentDisk represents a PhotonController - persistent disk attached and mounted on kubelets host - machine - type: object - required: - - pdID - properties: - fsType: - description: Filesystem type to mount. Must be a filesystem - type supported by the host operating system. Ex. "ext4", - "xfs", "ntfs". Implicitly inferred to be "ext4" if - unspecified. - type: string - pdID: - description: ID that identifies Photon Controller persistent - disk - type: string - portworxVolume: - description: PortworxVolume represents a portworx volume - attached and mounted on kubelets host machine - type: object - required: - - volumeID - properties: - fsType: - description: FSType represents the filesystem type to - mount Must be a filesystem type supported by the host - operating system. Ex. "ext4", "xfs". Implicitly inferred - to be "ext4" if unspecified. - type: string - readOnly: - description: Defaults to false (read/write). ReadOnly - here will force the ReadOnly setting in VolumeMounts. - type: boolean - volumeID: - description: VolumeID uniquely identifies a Portworx - volume - type: string - projected: - description: Items for all in one resources secrets, configmaps, - and downward API - type: object - required: - - sources - properties: - defaultMode: - description: Mode bits to use on created files by default. - Must be a value between 0 and 0777. Directories within - the path are not affected by this setting. This might - be in conflict with other options that affect the - file mode, like fsGroup, and the result can be other - mode bits set. - type: integer - format: int32 - sources: - description: list of volume projections - type: array - items: - description: Projection that may be projected along - with other supported volume types - type: object - properties: - configMap: - description: information about the configMap data - to project - type: object - properties: - items: - description: If unspecified, each key-value - pair in the Data field of the referenced - ConfigMap will be projected into the volume - as a file whose name is the key and content - is the value. If specified, the listed keys - will be projected into the specified paths, - and unlisted keys will not be present. If - a key is specified which is not present - in the ConfigMap, the volume setup will - error unless it is marked optional. Paths - must be relative and may not contain the - '..' path or start with '..'. - type: array - items: - description: Maps a string key to a path - within a volume. - type: object - required: - - key - - path - properties: - key: - description: The key to project. - type: string - mode: - description: 'Optional: mode bits to - use on this file, must be a value - between 0 and 0777. If not specified, - the volume defaultMode will be used. - This might be in conflict with other - options that affect the file mode, - like fsGroup, and the result can be - other mode bits set.' - type: integer - format: int32 - path: - description: The relative path of the - file to map the key to. May not be - an absolute path. May not contain - the path element '..'. May not start - with the string '..'. - type: string - name: - description: 'Name of the referent. More info: - https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify whether the ConfigMap - or its keys must be defined - type: boolean - downwardAPI: - description: information about the downwardAPI - data to project - type: object - properties: - items: - description: Items is a list of DownwardAPIVolume - file - type: array - items: - description: DownwardAPIVolumeFile represents - information to create the file containing - the pod field - type: object - required: - - path - properties: - fieldRef: - description: 'Required: Selects a field - of the pod: only annotations, labels, - name and namespace are supported.' - type: object - required: - - fieldPath - properties: - apiVersion: - description: Version of the schema - the FieldPath is written in terms - of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to - select in the specified API version. - type: string - mode: - description: 'Optional: mode bits to - use on this file, must be a value - between 0 and 0777. If not specified, - the volume defaultMode will be used. - This might be in conflict with other - options that affect the file mode, - like fsGroup, and the result can be - other mode bits set.' - type: integer - format: int32 - path: - description: 'Required: Path is the - relative path name of the file to - be created. Must not be absolute or - contain the ''..'' path. Must be utf-8 - encoded. The first item of the relative - path must not start with ''..''' - type: string - resourceFieldRef: - description: 'Selects a resource of - the container: only resources limits - and requests (limits.cpu, limits.memory, - requests.cpu and requests.memory) - are currently supported.' - type: object - required: - - resource - properties: - containerName: - description: 'Container name: required - for volumes, optional for env - vars' - type: string - divisor: - description: Specifies the output - format of the exposed resources, - defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource - to select' - type: string - secret: - description: information about the secret data - to project - type: object - properties: - items: - description: If unspecified, each key-value - pair in the Data field of the referenced - Secret will be projected into the volume - as a file whose name is the key and content - is the value. If specified, the listed keys - will be projected into the specified paths, - and unlisted keys will not be present. If - a key is specified which is not present - in the Secret, the volume setup will error - unless it is marked optional. Paths must - be relative and may not contain the '..' - path or start with '..'. - type: array - items: - description: Maps a string key to a path - within a volume. - type: object - required: - - key - - path - properties: - key: - description: The key to project. - type: string - mode: - description: 'Optional: mode bits to - use on this file, must be a value - between 0 and 0777. If not specified, - the volume defaultMode will be used. - This might be in conflict with other - options that affect the file mode, - like fsGroup, and the result can be - other mode bits set.' - type: integer - format: int32 - path: - description: The relative path of the - file to map the key to. May not be - an absolute path. May not contain - the path element '..'. May not start - with the string '..'. - type: string - name: - description: 'Name of the referent. More info: - https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, - kind, uid?' - type: string - optional: - description: Specify whether the Secret or - its key must be defined - type: boolean - serviceAccountToken: - description: information about the serviceAccountToken - data to project - type: object - required: - - path - properties: - audience: - description: Audience is the intended audience - of the token. A recipient of a token must - identify itself with an identifier specified - in the audience of the token, and otherwise - should reject the token. The audience defaults - to the identifier of the apiserver. - type: string - expirationSeconds: - description: ExpirationSeconds is the requested - duration of validity of the service account - token. As the token approaches expiration, - the kubelet volume plugin will proactively - rotate the service account token. The kubelet - will start trying to rotate the token if - the token is older than 80 percent of its - time to live or if the token is older than - 24 hours.Defaults to 1 hour and must be - at least 10 minutes. - type: integer - format: int64 - path: - description: Path is the path relative to - the mount point of the file to project the - token into. - type: string - quobyte: - description: Quobyte represents a Quobyte mount on the host - that shares a pod's lifetime - type: object - required: - - registry - - volume - properties: - group: - description: Group to map volume access to Default is - no group - type: string - readOnly: - description: ReadOnly here will force the Quobyte volume - to be mounted with read-only permissions. Defaults - to false. - type: boolean - registry: - description: Registry represents a single or multiple - Quobyte Registry services specified as a string as - host:port pair (multiple entries are separated with - commas) which acts as the central registry for volumes - type: string - tenant: - description: Tenant owning the given Quobyte volume - in the Backend Used with dynamically provisioned Quobyte - volumes, value is set by the plugin - type: string - user: - description: User to map volume access to Defaults to - serivceaccount user - type: string - volume: - description: Volume is a string that references an already - created Quobyte volume by name. - type: string - rbd: - description: 'RBD represents a Rados Block Device mount - on the host that shares a pod''s lifetime. More info: - https://examples.k8s.io/volumes/rbd/README.md' - type: object - required: - - image - - monitors - properties: - fsType: - description: 'Filesystem type of the volume that you - want to mount. Tip: Ensure that the filesystem type - is supported by the host operating system. Examples: - "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" - if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd - TODO: how do we prevent errors in the filesystem from - compromising the machine' - type: string - image: - description: 'The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: string - keyring: - description: 'Keyring is the path to key ring for RBDUser. - Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: string - monitors: - description: 'A collection of Ceph monitors. More info: - https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: array - items: - type: string - pool: - description: 'The rados pool name. Default is rbd. More - info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: string - readOnly: - description: 'ReadOnly here will force the ReadOnly - setting in VolumeMounts. Defaults to false. More info: - https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: boolean - secretRef: - description: 'SecretRef is name of the authentication - secret for RBDUser. If provided overrides keyring. - Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - user: - description: 'The rados user name. Default is admin. - More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' - type: string - scaleIO: - description: ScaleIO represents a ScaleIO persistent volume - attached and mounted on Kubernetes nodes. - type: object - required: - - gateway - - secretRef - - system - properties: - fsType: - description: Filesystem type to mount. Must be a filesystem - type supported by the host operating system. Ex. "ext4", - "xfs", "ntfs". Default is "xfs". - type: string - gateway: - description: The host address of the ScaleIO API Gateway. - type: string - protectionDomain: - description: The name of the ScaleIO Protection Domain - for the configured storage. - type: string - readOnly: - description: Defaults to false (read/write). ReadOnly - here will force the ReadOnly setting in VolumeMounts. - type: boolean - secretRef: - description: SecretRef references to the secret for - ScaleIO user and other sensitive information. If this - is not provided, Login operation will fail. - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - sslEnabled: - description: Flag to enable/disable SSL communication - with Gateway, default false - type: boolean - storageMode: - description: Indicates whether the storage for a volume - should be ThickProvisioned or ThinProvisioned. Default - is ThinProvisioned. - type: string - storagePool: - description: The ScaleIO Storage Pool associated with - the protection domain. - type: string - system: - description: The name of the storage system as configured - in ScaleIO. - type: string - volumeName: - description: The name of a volume already created in - the ScaleIO system that is associated with this volume - source. - type: string - secret: - description: 'Secret represents a secret that should populate - this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' - type: object - properties: - defaultMode: - description: 'Optional: mode bits to use on created - files by default. Must be a value between 0 and 0777. - Defaults to 0644. Directories within the path are - not affected by this setting. This might be in conflict - with other options that affect the file mode, like - fsGroup, and the result can be other mode bits set.' - type: integer - format: int32 - items: - description: If unspecified, each key-value pair in - the Data field of the referenced Secret will be projected - into the volume as a file whose name is the key and - content is the value. If specified, the listed keys - will be projected into the specified paths, and unlisted - keys will not be present. If a key is specified which - is not present in the Secret, the volume setup will - error unless it is marked optional. Paths must be - relative and may not contain the '..' path or start - with '..'. - type: array - items: - description: Maps a string key to a path within a - volume. - type: object - required: - - key - - path - properties: - key: - description: The key to project. - type: string - mode: - description: 'Optional: mode bits to use on this - file, must be a value between 0 and 0777. If - not specified, the volume defaultMode will be - used. This might be in conflict with other options - that affect the file mode, like fsGroup, and - the result can be other mode bits set.' - type: integer - format: int32 - path: - description: The relative path of the file to - map the key to. May not be an absolute path. - May not contain the path element '..'. May not - start with the string '..'. - type: string - optional: - description: Specify whether the Secret or its keys - must be defined - type: boolean - secretName: - description: 'Name of the secret in the pod''s namespace - to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' - type: string - storageos: - description: StorageOS represents a StorageOS volume attached - and mounted on Kubernetes nodes. - type: object - properties: - fsType: - description: Filesystem type to mount. Must be a filesystem - type supported by the host operating system. Ex. "ext4", - "xfs", "ntfs". Implicitly inferred to be "ext4" if - unspecified. - type: string - readOnly: - description: Defaults to false (read/write). ReadOnly - here will force the ReadOnly setting in VolumeMounts. - type: boolean - secretRef: - description: SecretRef specifies the secret to use for - obtaining the StorageOS API credentials. If not specified, - default values will be attempted. - type: object - properties: - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, - uid?' - type: string - volumeName: - description: VolumeName is the human-readable name of - the StorageOS volume. Volume names are only unique - within a namespace. - type: string - volumeNamespace: - description: VolumeNamespace specifies the scope of - the volume within StorageOS. If no namespace is specified - then the Pod's namespace will be used. This allows - the Kubernetes name scoping to be mirrored within - StorageOS for tighter integration. Set VolumeName - to any name to override the default behaviour. Set - to "default" if you are not using namespaces within - StorageOS. Namespaces that do not pre-exist within - StorageOS will be created. - type: string - vsphereVolume: - description: VsphereVolume represents a vSphere volume attached - and mounted on kubelets host machine - type: object - required: - - volumePath - properties: - fsType: - description: Filesystem type to mount. Must be a filesystem - type supported by the host operating system. Ex. "ext4", - "xfs", "ntfs". Implicitly inferred to be "ext4" if - unspecified. - type: string - storagePolicyID: - description: Storage Policy Based Management (SPBM) - profile ID associated with the StoragePolicyName. - type: string - storagePolicyName: - description: Storage Policy Based Management (SPBM) - profile name. - type: string - volumePath: - description: Path that identifies vSphere volume vmdk - type: string - installPlanApproval: - description: Approval is the user approval policy for an InstallPlan. - It must be one of "Automatic" or "Manual". - type: string - name: - type: string - source: - type: string - sourceNamespace: - type: string - startingCSV: - type: string - status: - type: object - required: - - lastUpdated - properties: - catalogHealth: - description: CatalogHealth contains the Subscription's view of its - relevant CatalogSources' status. It is used to determine SubscriptionStatusConditions - related to CatalogSources. - type: array - items: - description: SubscriptionCatalogHealth describes the health of a - CatalogSource the Subscription knows about. - type: object - required: - - catalogSourceRef - - healthy - - lastUpdated - properties: - catalogSourceRef: - description: CatalogSourceRef is a reference to a CatalogSource. - type: object - properties: - apiVersion: - description: API version of the referent. - type: string - fieldPath: - description: 'If referring to a piece of an object instead - of an entire object, this string should contain a valid - JSON/Go field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container - within a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that - triggered the event) or if no container name is specified - "spec.containers[2]" (container with index 2 in this pod). - This syntax is chosen only to have some well-defined way - of referencing a part of an object. TODO: this design - is not final and this field is subject to change in the - future.' - type: string - kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' - type: string - resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - healthy: - description: Healthy is true if the CatalogSource is healthy; - false otherwise. - type: boolean - lastUpdated: - description: LastUpdated represents the last time that the CatalogSourceHealth - changed - type: string - format: date-time - conditions: - description: Conditions is a list of the latest available observations - about a Subscription's current state. - type: array - items: - description: SubscriptionCondition represents the latest available - observations of a Subscription's state. - type: object - required: - - status - - type - properties: - lastHeartbeatTime: - description: LastHeartbeatTime is the last time we got an update - on a given condition - type: string - format: date-time - lastTransitionTime: - description: LastTransitionTime is the last time the condition - transit from one status to another - type: string - format: date-time - message: - description: Message is a human-readable message indicating - details about last transition. - type: string - reason: - description: Reason is a one-word CamelCase reason for the condition's - last transition. - type: string - status: - description: Status is the status of the condition, one of True, - False, Unknown. - type: string - type: - description: Type is the type of Subscription condition. - type: string - currentCSV: - description: CurrentCSV is the CSV the Subscription is progressing - to. - type: string - installPlanGeneration: - description: InstallPlanGeneration is the current generation of the - installplan - type: integer - installPlanRef: - description: InstallPlanRef is a reference to the latest InstallPlan - that contains the Subscription's current CSV. - type: object - properties: - apiVersion: - description: API version of the referent. - type: string - fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' - type: string - kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' - type: string - resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - installedCSV: - description: InstalledCSV is the CSV currently installed by the Subscription. - type: string - installplan: - description: 'Install is a reference to the latest InstallPlan generated - for the Subscription. DEPRECATED: InstallPlanRef' - type: object - required: - - apiVersion - - kind - - name - - uuid - properties: - apiVersion: - type: string - kind: - type: string - name: - type: string - uuid: - description: UID is a type that holds unique ID values, including - UUIDs. Because we don't ONLY use UUIDs, this is an alias to - string. Being a type captures intent and helps make sure that - UIDs and names do not get conflated. - type: string - lastUpdated: - description: LastUpdated represents the last time that the Subscription - status was updated. - type: string - format: date-time - reason: - description: Reason is the reason the Subscription was transitioned - to its current state. - type: string - state: - description: State represents the current state of the Subscription - type: string - served: true - storage: true - subresources: - status: {} - diff --git a/deploy/addons/olm/olm.yaml.tmpl b/deploy/addons/olm/olm.yaml.tmpl index e79ce4a0151a..dcd31757116d 100644 --- a/deploy/addons/olm/olm.yaml.tmpl +++ b/deploy/addons/olm/olm.yaml.tmpl @@ -1,4 +1,4 @@ -# Copyright 2016 The Kubernetes Authors All rights reserved. +# Copyright 2021 The Kubernetes Authors All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +# ref: https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.18.3/olm.yaml + --- apiVersion: v1 kind: Namespace @@ -82,7 +84,7 @@ spec: - $(OPERATOR_NAMESPACE) - --writeStatusName - "" - image: {{.CustomRegistries.OLM | default .ImageRepository | default .Registries.OLM }}{{.Images.OLM}} + image: {{.CustomRegistries.OLM | default .ImageRepository | default .Registries.OLM}}{{.Images.OLM}} imagePullPolicy: IfNotPresent ports: - containerPort: 8080 @@ -99,7 +101,6 @@ spec: port: 8080 terminationMessagePolicy: FallbackToLogsOnError env: - - name: OPERATOR_NAMESPACE valueFrom: fieldRef: @@ -110,8 +111,6 @@ spec: requests: cpu: 10m memory: 160Mi - - nodeSelector: kubernetes.io/os: linux --- @@ -144,8 +143,8 @@ spec: - olm - -configmapServerImage=quay.io/operator-framework/configmap-operator-registry:latest - -util-image - - {{.CustomRegistries.OLM | default .ImageRepository | default .Registries.OLM }}{{.Images.OLM}} - image: {{.CustomRegistries.OLM | default .ImageRepository | default .Registries.OLM }}{{.Images.OLM}} + - {{.CustomRegistries.OLM | default .ImageRepository | default .Registries.OLM}}{{.Images.OLM}} + image: {{.CustomRegistries.OLM | default .ImageRepository | default .Registries.OLM}}{{.Images.OLM}} imagePullPolicy: IfNotPresent ports: - containerPort: 8080 @@ -161,14 +160,10 @@ spec: path: /healthz port: 8080 terminationMessagePolicy: FallbackToLogsOnError - env: - resources: requests: cpu: 10m memory: 80Mi - - nodeSelector: kubernetes.io/os: linux --- @@ -224,7 +219,7 @@ metadata: name: packageserver namespace: olm labels: - olm.version: 0.17.0 + olm.version: 0.18.3 spec: displayName: Package Server description: Represents an Operator package that is available from a given CatalogSource which will resolve to a ClusterServiceVersion. @@ -288,6 +283,9 @@ spec: spec: strategy: type: RollingUpdate + rollingUpdate: + maxUnavailable: 1 + maxSurge: 1 replicas: 2 selector: matchLabels: @@ -309,7 +307,7 @@ spec: - "5443" - --global-namespace - olm - image: {{.CustomRegistries.OLM | default .ImageRepository | default .Registries.OLM }}{{.Images.OLM}} + image: {{.CustomRegistries.OLM | default .ImageRepository | default .Registries.OLM}}{{.Images.OLM}} imagePullPolicy: Always ports: - containerPort: 5443 @@ -337,7 +335,7 @@ spec: - name: tmpfs emptyDir: {} maturity: alpha - version: 0.17.0 + version: 0.18.3 apiservicedefinitions: owned: - group: packages.operators.coreos.com @@ -356,6 +354,9 @@ metadata: namespace: olm spec: sourceType: grpc - image: {{.CustomRegistries.UpstreamCommunityOperators | default .ImageRepository | default .Registries.UpstreamCommunityOperators }}{{.Images.UpstreamCommunityOperators}} + image: {{.CustomRegistries.UpstreamCommunityOperators | default .ImageRepository | default .Registries.UpstreamCommunityOperators}}{{.Images.UpstreamCommunityOperators}} displayName: Community Operators publisher: OperatorHub.io + updateStrategy: + registryPoll: + interval: 60m diff --git a/deploy/addons/pod-security-policy/pod-security-policy.yaml.tmpl b/deploy/addons/pod-security-policy/pod-security-policy.yaml similarity index 100% rename from deploy/addons/pod-security-policy/pod-security-policy.yaml.tmpl rename to deploy/addons/pod-security-policy/pod-security-policy.yaml diff --git a/deploy/addons/portainer/portainer.yaml.tmpl b/deploy/addons/portainer/portainer.yaml.tmpl old mode 100755 new mode 100644 index 32d6a3dca1d0..12b142a1c1d4 --- a/deploy/addons/portainer/portainer.yaml.tmpl +++ b/deploy/addons/portainer/portainer.yaml.tmpl @@ -14,21 +14,21 @@ metadata: labels: app.kubernetes.io/name: portainer app.kubernetes.io/instance: portainer - app.kubernetes.io/version: "ce-latest-ee-2.4.0" + app.kubernetes.io/version: "ce-latest-ee-2.27.7" --- # Source: portainer/templates/pvc.yaml kind: "PersistentVolumeClaim" apiVersion: "v1" metadata: name: portainer - namespace: portainer + namespace: portainer annotations: volume.alpha.kubernetes.io/storage-class: "generic" labels: io.portainer.kubernetes.application.stack: portainer app.kubernetes.io/name: portainer app.kubernetes.io/instance: portainer - app.kubernetes.io/version: "ce-latest-ee-2.4.0" + app.kubernetes.io/version: "ce-latest-ee-2.27.7" spec: accessModes: - "ReadWriteOnce" @@ -44,15 +44,15 @@ metadata: labels: app.kubernetes.io/name: portainer app.kubernetes.io/instance: portainer - app.kubernetes.io/version: "ce-latest-ee-2.4.0" + app.kubernetes.io/version: "ce-latest-ee-2.27.7" roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: -- kind: ServiceAccount - namespace: portainer - name: portainer-sa-clusteradmin + - kind: ServiceAccount + namespace: portainer + name: portainer-sa-clusteradmin --- # Source: portainer/templates/service.yaml apiVersion: v1 @@ -64,7 +64,7 @@ metadata: io.portainer.kubernetes.application.stack: portainer app.kubernetes.io/name: portainer app.kubernetes.io/instance: portainer - app.kubernetes.io/version: "ce-latest-ee-2.4.0" + app.kubernetes.io/version: "ce-latest-ee-2.27.7" kubernetes.io/minikube-addons-endpoint: portainer spec: type: NodePort @@ -74,6 +74,11 @@ spec: protocol: TCP name: http nodePort: 30777 + - port: 9443 + targetPort: 9443 + protocol: TCP + name: https + nodePort: 30779 - port: 30776 targetPort: 30776 protocol: TCP @@ -93,7 +98,7 @@ metadata: io.portainer.kubernetes.application.stack: portainer app.kubernetes.io/name: portainer app.kubernetes.io/instance: portainer - app.kubernetes.io/version: "ce-latest-ee-2.4.0" + app.kubernetes.io/version: "ce-latest-ee-2.27.7" spec: replicas: 1 strategy: @@ -112,14 +117,15 @@ spec: {} serviceAccountName: portainer-sa-clusteradmin volumes: - - name: "data" - persistentVolumeClaim: - claimName: portainer + - name: "data" + persistentVolumeClaim: + claimName: portainer containers: - name: portainer - image: "portainer/portainer-ce:latest" + image: {{.CustomRegistries.Portainer | default .ImageRepository | default .Registries.Portainer}}{{.Images.Portainer}} imagePullPolicy: Always - args: [ '--tunnel-port','30776' ] + args: + - '--tunnel-port=30776' volumeMounts: - name: data mountPath: /data @@ -127,17 +133,21 @@ spec: - name: http containerPort: 9000 protocol: TCP + - name: https + containerPort: 9443 + protocol: TCP - name: tcp-edge containerPort: 8000 - protocol: TCP + protocol: TCP livenessProbe: httpGet: path: / - port: 9000 + port: 9443 + scheme: HTTPS readinessProbe: httpGet: path: / - port: 9000 + port: 9443 + scheme: HTTPS resources: {} - diff --git a/deploy/addons/registry-aliases/node-etc-hosts-update.tmpl b/deploy/addons/registry-aliases/node-etc-hosts-update.yaml.tmpl similarity index 100% rename from deploy/addons/registry-aliases/node-etc-hosts-update.tmpl rename to deploy/addons/registry-aliases/node-etc-hosts-update.yaml.tmpl diff --git a/deploy/addons/registry-aliases/patch-coredns-job.tmpl b/deploy/addons/registry-aliases/patch-coredns-job.yaml.tmpl similarity index 100% rename from deploy/addons/registry-aliases/patch-coredns-job.tmpl rename to deploy/addons/registry-aliases/patch-coredns-job.yaml.tmpl diff --git a/deploy/addons/registry-aliases/registry-aliases-config.tmpl b/deploy/addons/registry-aliases/registry-aliases-config.yaml.tmpl similarity index 76% rename from deploy/addons/registry-aliases/registry-aliases-config.tmpl rename to deploy/addons/registry-aliases/registry-aliases-config.yaml.tmpl index 61dcb7647201..e43a2184711c 100644 --- a/deploy/addons/registry-aliases/registry-aliases-config.tmpl +++ b/deploy/addons/registry-aliases/registry-aliases-config.yaml.tmpl @@ -9,11 +9,14 @@ metadata: data: # Add additional hosts separated by new-line registryAliases: >- + {{- if .RegistryAliases}} + {{ .RegistryAliases}} + {{- else}} example.org example.com test.com test.org + {{- end}} registry.minikube # default registry address in minikube when enabled via minikube addons enable registry - registrySvc: registry.kube-system.svc.cluster.local - + registrySvc: registry.kube-system.svc.cluster.local \ No newline at end of file diff --git a/deploy/addons/registry-aliases/registry-aliases-sa-crb.tmpl b/deploy/addons/registry-aliases/registry-aliases-sa-crb.yaml similarity index 100% rename from deploy/addons/registry-aliases/registry-aliases-sa-crb.tmpl rename to deploy/addons/registry-aliases/registry-aliases-sa-crb.yaml diff --git a/deploy/addons/registry-aliases/registry-aliases-sa.tmpl b/deploy/addons/registry-aliases/registry-aliases-sa.yaml similarity index 100% rename from deploy/addons/registry-aliases/registry-aliases-sa.tmpl rename to deploy/addons/registry-aliases/registry-aliases-sa.yaml diff --git a/deploy/addons/registry/registry-proxy.yaml.tmpl b/deploy/addons/registry/registry-proxy.yaml.tmpl index 487066156c10..d2ec5436aadd 100644 --- a/deploy/addons/registry/registry-proxy.yaml.tmpl +++ b/deploy/addons/registry/registry-proxy.yaml.tmpl @@ -28,6 +28,6 @@ spec: hostPort: 5000 env: - name: REGISTRY_HOST - value: registry.kube-system.svc.cluster.local + value: registry.kube-system.svc.{{.NetworkInfo.DNSDomain}} - name: REGISTRY_PORT value: "80" diff --git a/deploy/addons/registry/registry-rc.yaml.tmpl b/deploy/addons/registry/registry-rc.yaml.tmpl index eb6d782ba043..7f7e13e2f986 100644 --- a/deploy/addons/registry/registry-rc.yaml.tmpl +++ b/deploy/addons/registry/registry-rc.yaml.tmpl @@ -1,5 +1,5 @@ -apiVersion: v1 -kind: ReplicationController +apiVersion: apps/v1 +kind: Deployment metadata: labels: kubernetes.io/minikube-addons: registry @@ -9,7 +9,9 @@ metadata: spec: replicas: 1 selector: - kubernetes.io/minikube-addons: registry + matchLabels: + kubernetes.io/minikube-addons: registry + addonmanager.kubernetes.io/mode: Reconcile template: metadata: labels: diff --git a/deploy/addons/registry/registry-svc.yaml.tmpl b/deploy/addons/registry/registry-svc.yaml similarity index 100% rename from deploy/addons/registry/registry-svc.yaml.tmpl rename to deploy/addons/registry/registry-svc.yaml diff --git a/deploy/addons/storage-provisioner-gluster/README.md b/deploy/addons/storage-provisioner-gluster/README.md deleted file mode 100644 index 72a350ca9c0c..000000000000 --- a/deploy/addons/storage-provisioner-gluster/README.md +++ /dev/null @@ -1,141 +0,0 @@ -## storage-provisioner-gluster addon -[Gluster](https://gluster.org/), a scalable network filesystem that provides dynamic provisioning of PersistentVolumeClaims. - -### Starting Minikube -This addon works within Minikube, without any additional configuration. - -```shell -$ minikube start -``` - -### Enabling storage-provisioner-gluster -To enable this addon, simply run: - -``` -$ minikube addons enable storage-provisioner-gluster -``` - -Within one minute, the addon manager should pick up the change and you should see several Pods in the `storage-gluster` namespace: - -``` -$ kubectl -n storage-gluster get pods -NAME READY STATUS RESTARTS AGE -glusterfile-provisioner-dbcbf54fc-726vv 1/1 Running 0 1m -glusterfs-rvdmz 0/1 Running 0 40s -heketi-79997b9d85-42c49 0/1 ContainerCreating 0 40s -``` - -Some of the Pods need a little more time to get up an running than others, but in a few minutes everything should have been deployed and all Pods should be `READY`: - -``` -$ kubectl -n storage-gluster get pods -NAME READY STATUS RESTARTS AGE -glusterfile-provisioner-dbcbf54fc-726vv 1/1 Running 0 5m -glusterfs-rvdmz 1/1 Running 0 4m -heketi-79997b9d85-42c49 1/1 Running 1 4m -``` - -Once the Pods have status `Running`, the `glusterfile` StorageClass should have been marked as `default`: - -``` -$ kubectl get sc -NAME PROVISIONER AGE -glusterfile (default) gluster.org/glusterfile 3m -``` - -### Creating PVCs -The storage in the Gluster environment is limited to 10 GiB. This is because the data is stored in the Minikube VM (a sparse file `/srv/fake-disk.img`). - -The following `yaml` creates a PVC, starts a CentOS developer Pod that generates a website and deploys an NGINX webserver that provides access to the website: - -``` ---- -# -# Minimal PVC where a developer can build a website. -# -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: website -spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 2Mi - storageClassName: glusterfile ---- -# -# This pod will just download a fortune phrase and store it (as plain text) in -# index.html on the PVC. This is how we create websites? -# -# The root of the website stored on the above PVC is mounted on /mnt. -# -apiVersion: v1 -kind: Pod -metadata: - name: centos-webdev -spec: - containers: - - image: centos:latest - name: centos - args: - - curl - - -o/mnt/index.html - - https://api.ef.gy/fortune - volumeMounts: - - mountPath: /mnt - name: website - # once the website is created, the pod will exit - restartPolicy: Never - volumes: - - name: website - persistentVolumeClaim: - claimName: website ---- -# -# Start a NGINX webserver with the website. -# We'll skip creating a service, to keep things minimal. -# -apiVersion: v1 -kind: Pod -metadata: - name: website-nginx -spec: - containers: - - image: gcr.io/google_containers/nginx-slim:0.8 - name: nginx - ports: - - containerPort: 80 - name: web - volumeMounts: - - mountPath: /usr/share/nginx/html - name: website - volumes: - - name: website - persistentVolumeClaim: - claimName: website -``` - -Because the PVC has been created with the `ReadWriteMany` accessMode, both Pods can access the PVC at the same time. Other website developer Pods can use the same PVC to update the contents of the site. - -The above configuration does not expose the website on the Minikube VM. One way to see the contents of the website is to SSH into the Minikube VM and fetch the website there: - -``` -$ kubectl get pods -o wide -NAME READY STATUS RESTARTS AGE IP NODE -centos-webdev 0/1 Completed 0 1m 172.17.0.9 minikube -website-nginx 1/1 Running 0 24s 172.17.0.9 minikube -$ minikube ssh - _ _ - _ _ ( ) ( ) - ___ ___ (_) ___ (_)| |/') _ _ | |_ __ -/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\ -| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/ -(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____) - -$ curl http://172.17.0.9 -I came, I saw, I deleted all your files. -$ -``` - diff --git a/deploy/addons/storage-provisioner-gluster/glusterfs-daemonset.yaml.tmpl b/deploy/addons/storage-provisioner-gluster/glusterfs-daemonset.yaml.tmpl deleted file mode 100644 index df4f8d602e47..000000000000 --- a/deploy/addons/storage-provisioner-gluster/glusterfs-daemonset.yaml.tmpl +++ /dev/null @@ -1,140 +0,0 @@ ---- -kind: DaemonSet -apiVersion: apps/v1 -metadata: - namespace: storage-gluster - name: glusterfs - labels: - glusterfs: daemonset - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile - annotations: - description: GlusterFS DaemonSet - tags: glusterfs -spec: - selector: - matchLabels: - glusterfs: pod - glusterfs-node: pod - k8s-app: storage-provisioner-gluster - template: - metadata: - namespace: storage-gluster - name: glusterfs - labels: - glusterfs: pod - glusterfs-node: pod - k8s-app: storage-provisioner-gluster - spec: - #nodeSelector: - # kubernetes.io/hostname: minikube - hostNetwork: true - containers: - - image: {{.CustomRegistries.GlusterfsServer | default .ImageRepository | default .Registries.GlusterfsServer }}{{.Images.GlusterfsServer}} - imagePullPolicy: IfNotPresent - name: glusterfs - env: - - name: USE_FAKE_DISK - value: "enabled" - #- name: USE_FAKE_FILE - # value: "/srv/fake-disk.img" - #- name: USE_FAKE_SIZE - # value: "10G" - #- name: USE_FAKE_DEV - # value: "/dev/fake" - resources: - requests: - memory: 100Mi - cpu: 100m - volumeMounts: - # default location for fake-disk.img, it needs to be persistent - - name: fake-disk - mountPath: /srv - # the fstab for the bricks is under /var/lib/heketi - - name: glusterfs-heketi - mountPath: "/var/lib/heketi" - - name: glusterfs-run - mountPath: "/run" - - name: glusterfs-lvm - mountPath: "/run/lvm" - #- name: glusterfs-etc - # mountPath: "/etc/glusterfs" - - name: glusterfs-logs - mountPath: "/var/log/glusterfs" - - name: glusterfs-config - mountPath: "/var/lib/glusterd" - - name: glusterfs-dev - mountPath: "/dev" - # glusterfind uses /var/lib/misc/glusterfsd, yuck - - name: glusterfs-misc - mountPath: "/var/lib/misc/glusterfsd" - - name: glusterfs-cgroup - mountPath: "/sys/fs/cgroup" - readOnly: true - - name: glusterfs-ssl - mountPath: "/etc/ssl" - readOnly: true - - name: kernel-modules - mountPath: "/usr/lib/modules" - readOnly: true - securityContext: - capabilities: {} - privileged: true - readinessProbe: - timeoutSeconds: 3 - initialDelaySeconds: 40 - exec: - command: - - "/bin/bash" - - "-c" - - systemctl status glusterd.service - periodSeconds: 25 - successThreshold: 1 - failureThreshold: 50 - livenessProbe: - timeoutSeconds: 3 - initialDelaySeconds: 40 - exec: - command: - - "/bin/bash" - - "-c" - - systemctl status glusterd.service - periodSeconds: 25 - successThreshold: 1 - failureThreshold: 50 - volumes: - - name: fake-disk - hostPath: - path: /srv - - name: glusterfs-heketi - hostPath: - path: "/var/lib/heketi" - - name: glusterfs-run - - name: glusterfs-lvm - hostPath: - path: "/run/lvm" - - name: glusterfs-etc - hostPath: - path: "/etc/glusterfs" - - name: glusterfs-logs - hostPath: - path: "/var/log/glusterfs" - - name: glusterfs-config - hostPath: - path: "/var/lib/glusterd" - - name: glusterfs-dev - hostPath: - path: "/dev" - - name: glusterfs-misc - hostPath: - path: "/var/lib/misc/glusterfsd" - - name: glusterfs-cgroup - hostPath: - path: "/sys/fs/cgroup" - - name: glusterfs-ssl - hostPath: - path: "/etc/ssl" - - name: kernel-modules - hostPath: - path: "/usr/lib/modules" diff --git a/deploy/addons/storage-provisioner-gluster/heketi-deployment.yaml.tmpl b/deploy/addons/storage-provisioner-gluster/heketi-deployment.yaml.tmpl deleted file mode 100644 index db8970bd4738..000000000000 --- a/deploy/addons/storage-provisioner-gluster/heketi-deployment.yaml.tmpl +++ /dev/null @@ -1,163 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - namespace: storage-gluster - name: heketi-service-account - labels: - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - labels: - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile - name: heketi-sa-view -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: edit -subjects: -- kind: ServiceAccount - namespace: storage-gluster - name: heketi-service-account ---- -kind: Service -apiVersion: v1 -metadata: - namespace: storage-gluster - name: heketi - labels: - glusterfs: heketi-service - heketi: service - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile - annotations: - description: Exposes Heketi Service -spec: - selector: - glusterfs: heketi-pod - ports: - - name: heketi - port: 8080 - targetPort: 8080 ---- -apiVersion: v1 -kind: ConfigMap -metadata: - namespace: storage-gluster - name: heketi-topology - labels: - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile -data: - minikube.json: |+ - { - "clusters": [ - { - "nodes": [ - { - "node": { - "hostnames": { - "manage": [ - "minikube" - ], - "storage": [ - "172.17.0.1" - ] - }, - "zone": 1 - }, - "devices": [ - "/dev/fake" - ] - } - ] - } - ] - } - - ---- -kind: Deployment -apiVersion: apps/v1 -metadata: - namespace: storage-gluster - name: heketi - labels: - glusterfs: heketi-deployment - heketi: deployment - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile - annotations: - description: Defines how to deploy Heketi -spec: - replicas: 1 - selector: - matchLabels: - glusterfs: heketi-pod - heketi: pod - k8s-app: storage-provisioner-gluster - template: - metadata: - namespace: storage-gluster - name: heketi - labels: - glusterfs: heketi-pod - heketi: pod - k8s-app: storage-provisioner-gluster - spec: - serviceAccountName: heketi-service-account - containers: - - image: {{.CustomRegistries.Heketi | default .ImageRepository | default .Registries.Heketi }}{{.Images.Heketi}} - imagePullPolicy: IfNotPresent - name: heketi - env: - - name: HEKETI_EXECUTOR - value: "kubernetes" - - name: HEKETI_FSTAB - value: "/var/lib/heketi/fstab" - - name: HEKETI_SNAPSHOT_LIMIT - value: '14' - - name: HEKETI_KUBE_GLUSTER_DAEMONSET - value: "y" - - name: HEKETI_IGNORE_STALE_OPERATIONS - value: "true" - - name: HEKETI_GLUSTERAPP_LOGLEVEL - value: "debug" - # initial topology.json in case the db does not exist - - name: HEKETI_TOPOLOGY_FILE - value: "/etc/heketi/topology/minikube.json" - ports: - - containerPort: 8080 - volumeMounts: - - name: db - mountPath: "/var/lib/heketi" - - name: initial-topology - mountPath: "/etc/heketi/topology" - readinessProbe: - timeoutSeconds: 3 - initialDelaySeconds: 3 - httpGet: - path: "/hello" - port: 8080 - livenessProbe: - timeoutSeconds: 3 - initialDelaySeconds: 30 - httpGet: - path: "/hello" - port: 8080 - volumes: - - name: db - hostPath: - path: "/var/lib/heketi" - - name: initial-topology - configMap: - name: heketi-topology diff --git a/deploy/addons/storage-provisioner-gluster/storage-gluster-ns.yaml.tmpl b/deploy/addons/storage-provisioner-gluster/storage-gluster-ns.yaml.tmpl deleted file mode 100644 index 6e192f48b85a..000000000000 --- a/deploy/addons/storage-provisioner-gluster/storage-gluster-ns.yaml.tmpl +++ /dev/null @@ -1,9 +0,0 @@ ---- -apiVersion: v1 -kind: Namespace -metadata: - name: storage-gluster - labels: - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile diff --git a/deploy/addons/storage-provisioner-gluster/storage-provisioner-glusterfile.yaml.tmpl b/deploy/addons/storage-provisioner-gluster/storage-provisioner-glusterfile.yaml.tmpl deleted file mode 100644 index 11048d25b92b..000000000000 --- a/deploy/addons/storage-provisioner-gluster/storage-provisioner-glusterfile.yaml.tmpl +++ /dev/null @@ -1,113 +0,0 @@ ---- -kind: StorageClass -apiVersion: storage.k8s.io/v1beta1 -metadata: - name: glusterfile - labels: - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: EnsureExists - annotations: - storageclass.kubernetes.io/is-default-class: "true" -provisioner: gluster.org/glusterfile -reclaimPolicy: Delete -parameters: - resturl: "http://heketi.storage-gluster.svc.cluster.local:8080" - restuser: admin ---- -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: glusterfile-provisioner-runner - labels: - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile -rules: - - apiGroups: [""] - resources: ["persistentvolumes"] - verbs: ["get", "list", "watch", "create", "delete"] - - apiGroups: [""] - resources: ["persistentvolumeclaims"] - verbs: ["get", "list", "watch", "update"] - - apiGroups: ["storage.k8s.io"] - resources: ["storageclasses"] - verbs: ["get", "list", "watch"] - - apiGroups: [""] - resources: ["events"] - verbs: ["list", "watch", "create", "update", "patch"] - - apiGroups: [""] - resources: ["services"] - verbs: ["get","create","delete"] - - apiGroups: [""] - resources: ["secrets"] - verbs: ["get"] - - apiGroups: [""] - resources: ["routes"] - verbs: ["get", "list"] - - apiGroups: [""] - resources: ["endpoints"] - verbs: ["get", "create","delete"] ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - namespace: storage-gluster - name: glusterfile-provisioner - labels: - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: glusterfile-provisioner - labels: - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile -roleRef: - kind: ClusterRole - name: glusterfile-provisioner-runner - apiGroup: rbac.authorization.k8s.io -subjects: -- kind: ServiceAccount - namespace: storage-gluster - name: glusterfile-provisioner ---- -kind: Deployment -apiVersion: apps/v1 -metadata: - namespace: storage-gluster - name: glusterfile-provisioner - labels: - k8s-app: storage-provisioner-gluster - kubernetes.io/minikube-addons: storage-provisioner-gluster - addonmanager.kubernetes.io/mode: Reconcile - annotations: - description: Defines how to deploy the glusterfile provisioner pod. -spec: - replicas: 1 - selector: - matchLabels: - glusterfs: file-provisioner-pod - glusterfile: provisioner-pod - strategy: - type: Recreate - template: - metadata: - namespace: storage-gluster - name: glusterfile-provisioner - labels: - glusterfs: file-provisioner-pod - glusterfile: provisioner-pod - spec: - serviceAccountName: glusterfile-provisioner - containers: - - name: glusterfile-provisioner - image: {{.CustomRegistries.GlusterfileProvisioner | default .ImageRepository | default .Registries.GlusterfileProvisioner }}{{.Images.GlusterfileProvisioner}} - imagePullPolicy: IfNotPresent - env: - - name: PROVISIONER_NAME - value: gluster.org/glusterfile diff --git a/deploy/addons/storage-provisioner-rancher/storage-provisioner-rancher.yaml.tmpl b/deploy/addons/storage-provisioner-rancher/storage-provisioner-rancher.yaml.tmpl new file mode 100644 index 000000000000..e19a18092043 --- /dev/null +++ b/deploy/addons/storage-provisioner-rancher/storage-provisioner-rancher.yaml.tmpl @@ -0,0 +1,131 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: local-path-storage + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: local-path-provisioner-service-account + namespace: local-path-storage + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: local-path-provisioner-role +rules: + - apiGroups: [ "" ] + resources: [ "nodes", "persistentvolumeclaims", "configmaps" ] + verbs: [ "get", "list", "watch" ] + - apiGroups: [ "" ] + resources: [ "endpoints", "persistentvolumes", "pods" ] + verbs: [ "*" ] + - apiGroups: [ "" ] + resources: [ "events" ] + verbs: [ "create", "patch" ] + - apiGroups: [ "storage.k8s.io" ] + resources: [ "storageclasses" ] + verbs: [ "get", "list", "watch" ] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: local-path-provisioner-bind +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: local-path-provisioner-role +subjects: + - kind: ServiceAccount + name: local-path-provisioner-service-account + namespace: local-path-storage + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: local-path-provisioner + namespace: local-path-storage +spec: + replicas: 1 + selector: + matchLabels: + app: local-path-provisioner + template: + metadata: + labels: + app: local-path-provisioner + spec: + serviceAccountName: local-path-provisioner-service-account + containers: + - name: local-path-provisioner + image: {{.CustomRegistries.LocalPathProvisioner | default .ImageRepository | default .Registries.LocalPathProvisioner }}{{ .Images.LocalPathProvisioner }} + imagePullPolicy: IfNotPresent + command: + - local-path-provisioner + - --debug + - start + - --config + - /etc/config/config.json + volumeMounts: + - name: config-volume + mountPath: /etc/config/ + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumes: + - name: config-volume + configMap: + name: local-path-config + +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: local-path +provisioner: rancher.io/local-path +volumeBindingMode: WaitForFirstConsumer +reclaimPolicy: Delete + +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: local-path-config + namespace: local-path-storage +data: + config.json: |- + { + "nodePathMap":[ + { + "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES", + "paths":["/opt/local-path-provisioner"] + } + ] + } + setup: |- + #!/bin/sh + set -eu + mkdir -m 0777 -p "$VOL_DIR" + teardown: |- + #!/bin/sh + set -eu + rm -rf "$VOL_DIR" + helperPod.yaml: |- + apiVersion: v1 + kind: Pod + metadata: + name: helper-pod + spec: + containers: + - name: helper-pod + image: {{.CustomRegistries.Helper | default .ImageRepository | default .Registries.Helper }}{{ .Images.Helper }} + imagePullPolicy: IfNotPresent + + + diff --git a/deploy/addons/storageclass/storageclass.yaml.tmpl b/deploy/addons/storageclass/storageclass.yaml similarity index 100% rename from deploy/addons/storageclass/storageclass.yaml.tmpl rename to deploy/addons/storageclass/storageclass.yaml diff --git a/deploy/addons/volcano/volcano-development.yaml.tmpl b/deploy/addons/volcano/volcano-development.yaml.tmpl new file mode 100644 index 000000000000..8ec252f3183e --- /dev/null +++ b/deploy/addons/volcano/volcano-development.yaml.tmpl @@ -0,0 +1,17944 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: volcano-system + labels: + kubernetes.io/metadata.name: volcano-system +--- +apiVersion: v1 +kind: Namespace +metadata: + name: volcano-monitoring + labels: + kubernetes.io/metadata.name: volcano-monitoring +--- +# Source: volcano/templates/admission.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: volcano-admission + namespace: volcano-system +--- +# Source: volcano/templates/admission.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: volcano-admission-configmap + namespace: volcano-system +data: + volcano-admission.conf: | + #resourceGroups: + #- resourceGroup: management # set the resource group name + # object: + # key: namespace # set the field and the value to be matched + # value: + # - mng-ns-1 + # schedulerName: default-scheduler # set the scheduler for patching + # tolerations: # set the tolerations for patching + # - effect: NoSchedule + # key: taint + # operator: Exists + # labels: + # volcano.sh/nodetype: management # set the nodeSelector for patching + #- resourceGroup: cpu + # object: + # key: annotation + # value: + # - "volcano.sh/resource-group: cpu" + # schedulerName: volcano + # labels: + # volcano.sh/nodetype: cpu + #- resourceGroup: gpu # if the object is unsetted, default is: the key is annotation, + # schedulerName: volcano # the annotation key is fixed and is "volcano.sh/resource-group", The corresponding value is the resourceGroup field + # labels: + # volcano.sh/nodetype: gpu +--- +# Source: volcano/templates/admission.yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: volcano-admission +rules: + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list", "watch"] + - apiGroups: ["admissionregistration.k8s.io"] + resources: ["mutatingwebhookconfigurations", "validatingwebhookconfigurations"] + verbs: ["get", "list", "watch", "create", "update"] + # Rules below is used generate admission service secret + - apiGroups: ["certificates.k8s.io"] + resources: ["certificatesigningrequests"] + verbs: ["get", "list", "create", "delete"] + - apiGroups: ["certificates.k8s.io"] + resources: ["certificatesigningrequests/approval"] + verbs: ["create", "update"] + - apiGroups: ["scheduling.incubator.k8s.io", "scheduling.volcano.sh"] + resources: ["queues"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["services"] + verbs: ["get"] + - apiGroups: ["scheduling.incubator.k8s.io", "scheduling.volcano.sh"] + resources: ["podgroups"] + verbs: ["get", "list", "watch"] +--- +# Source: volcano/templates/admission.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: volcano-admission-role +subjects: + - kind: ServiceAccount + name: volcano-admission + namespace: volcano-system +roleRef: + kind: ClusterRole + name: volcano-admission + apiGroup: rbac.authorization.k8s.io +--- +# Source: volcano/templates/admission.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app: volcano-admission + name: volcano-admission-service + namespace: volcano-system +spec: + ports: + - port: 443 + protocol: TCP + targetPort: 8443 + selector: + app: volcano-admission + sessionAffinity: None +--- +# Source: volcano/templates/admission.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: volcano-admission + name: volcano-admission + namespace: volcano-system +spec: + replicas: 1 + selector: + matchLabels: + app: volcano-admission + template: + metadata: + annotations: + rollme/helm-revision: "1" + labels: + app: volcano-admission + spec: + securityContext: + seLinuxOptions: + level: s0:c123,c456 + seccompProfile: + type: RuntimeDefault + serviceAccount: volcano-admission + priorityClassName: system-cluster-critical + containers: + - args: + - --enabled-admission=/jobs/mutate,/jobs/validate,/podgroups/validate,/queues/mutate,/queues/validate,/hypernodes/validate,/cronjobs/validate + - --tls-cert-file=/admission.local.config/certificates/tls.crt + - --tls-private-key-file=/admission.local.config/certificates/tls.key + - --ca-cert-file=/admission.local.config/certificates/ca.crt + - --admission-conf=/admission.local.config/configmap/volcano-admission.conf + - --webhook-namespace=volcano-system + - --webhook-service-name=volcano-admission-service + - --enable-healthz=true + - --logtostderr + - --port=8443 + - -v=4 + - 2>&1 + image: {{.CustomRegistries.vc_webhook_manager | default .ImageRepository | default .Registries.vc_webhook_manager}}{{.Images.vc_webhook_manager}} + imagePullPolicy: Always + name: admission + volumeMounts: + - mountPath: /admission.local.config/certificates + name: admission-certs + readOnly: true + - mountPath: /admission.local.config/configmap + name: admission-config + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - DAC_OVERRIDE + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + volumes: + - name: admission-certs + secret: + defaultMode: 420 + secretName: volcano-admission-secret + - name: admission-config + configMap: + name: volcano-admission-configmap +--- +# Source: volcano/templates/admission-init.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: volcano-admission-init + namespace: volcano-system + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "helm.sh/hook-weight": "0" +--- +# Source: volcano/templates/admission-init.yaml +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: volcano-admission-init + namespace: volcano-system + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "helm.sh/hook-weight": "0" +rules: + - apiGroups: [""] + resources: ["secrets"] + verbs: ["create", "patch", "get"] +--- +# Source: volcano/templates/admission-init.yaml +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: volcano-admission-init-role + namespace: volcano-system + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "helm.sh/hook-weight": "0" +subjects: + - kind: ServiceAccount + name: volcano-admission-init + namespace: volcano-system +roleRef: + kind: Role + name: volcano-admission-init + apiGroup: rbac.authorization.k8s.io +--- +# Source: volcano/templates/admission-init.yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: volcano-admission-init + namespace: volcano-system + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "helm.sh/hook-weight": "5" # set a higher weight to reserve buffers. + labels: + app: volcano-admission-init +spec: + backoffLimit: 3 + template: + spec: + securityContext: + seLinuxOptions: + level: s0:c123,c456 + seccompProfile: + type: RuntimeDefault + serviceAccountName: volcano-admission-init + priorityClassName: system-cluster-critical + restartPolicy: Never + containers: + - name: main + image: {{.CustomRegistries.vc_webhook_manager | default .ImageRepository | default .Registries.vc_webhook_manager}}{{.Images.vc_webhook_manager}} + imagePullPolicy: Always + command: ["./gen-admission-secret.sh", "--service", "volcano-admission-service", "--namespace", + "volcano-system", "--secret", "volcano-admission-secret"] + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - DAC_OVERRIDE + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 +--- +# Source: volcano/templates/batch_v1alpha1_job.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: jobs.batch.volcano.sh +spec: + group: batch.volcano.sh + names: + kind: Job + listKind: JobList + plural: jobs + shortNames: + - vcjob + - vj + singular: job + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.state.phase + name: STATUS + type: string + - jsonPath: .status.minAvailable + name: minAvailable + type: integer + - jsonPath: .status.running + name: RUNNINGS + type: integer + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + - jsonPath: .spec.queue + name: QUEUE + priority: 1 + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + maxRetry: + default: 3 + format: int32 + type: integer + minAvailable: + format: int32 + type: integer + minSuccess: + format: int32 + minimum: 1 + type: integer + networkTopology: + properties: + highestTierAllowed: + default: 1 + type: integer + mode: + default: hard + enum: + - hard + - soft + type: string + type: object + plugins: + additionalProperties: + items: + type: string + type: array + type: object + policies: + items: + properties: + action: + type: string + event: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + events: + items: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + type: array + exitCode: + format: int32 + type: integer + timeout: + type: string + type: object + type: array + priorityClassName: + type: string + queue: + type: string + runningEstimate: + type: string + schedulerName: + type: string + tasks: + items: + properties: + dependsOn: + properties: + iteration: + type: string + name: + items: + type: string + type: array + type: object + maxRetry: + format: int32 + type: integer + minAvailable: + format: int32 + type: integer + name: + type: string + policies: + items: + properties: + action: + type: string + event: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + events: + items: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + type: array + exitCode: + format: int32 + type: integer + timeout: + type: string + type: object + type: array + replicas: + format: int32 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-type: atomic + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + x-kubernetes-list-type: atomic + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + searches: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + x-kubernetes-list-type: atomic + ip: + type: string + required: + - ip + type: object + type: array + x-kubernetes-list-map-keys: + - ip + x-kubernetes-list-type: map + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostUsers: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + initContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + x-kubernetes-list-type: atomic + resourceClaims: + items: + properties: + name: + type: string + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + schedulingGates: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxChangePolicy: + type: string + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + x-kubernetes-list-type: atomic + supplementalGroupsPolicy: + type: string + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + default: ext4 + type: string + kind: + type: string + readOnly: + default: false + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + x-kubernetes-list-type: atomic + wwids: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + default: default + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + x-kubernetes-list-type: atomic + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + clusterTrustBundle: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + x-kubernetes-list-type: atomic + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + default: /etc/ceph/keyring + type: string + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + pool: + default: rbd + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + default: admin + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + default: xfs + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + default: ThinProvisioned + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + required: + - containers + type: object + type: object + topologyPolicy: + enum: + - none + - best-effort + - restricted + - single-numa-node + type: string + type: object + type: array + ttlSecondsAfterFinished: + format: int32 + type: integer + volumes: + items: + properties: + mountPath: + type: string + volumeClaim: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + volumeClaimName: + type: string + required: + - mountPath + type: object + type: array + type: object + status: + properties: + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + status: + type: string + required: + - status + type: object + type: array + controlledResources: + additionalProperties: + type: string + type: object + failed: + format: int32 + type: integer + minAvailable: + format: int32 + type: integer + pending: + format: int32 + type: integer + retryCount: + format: int32 + type: integer + running: + format: int32 + type: integer + runningDuration: + type: string + state: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + phase: + type: string + reason: + type: string + type: object + succeeded: + format: int32 + type: integer + taskStatusCount: + additionalProperties: + properties: + phase: + additionalProperties: + format: int32 + type: integer + type: object + type: object + type: object + terminating: + format: int32 + type: integer + unknown: + format: int32 + type: integer + version: + format: int32 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +# Source: volcano/templates/batch_v1alpha1_cronjob.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: cronjobs.batch.volcano.sh +spec: + group: batch.volcano.sh + names: + kind: CronJob + listKind: CronJobList + plural: cronjobs + shortNames: + - cronvcjob + - cronvj + singular: cronjob + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + concurrencyPolicy: + default: Allow + enum: + - Allow + - Forbid + - Replace + type: string + failedJobsHistoryLimit: + default: 1 + format: int32 + minimum: 0 + type: integer + jobTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + maxRetry: + default: 3 + format: int32 + type: integer + minAvailable: + format: int32 + type: integer + minSuccess: + format: int32 + minimum: 1 + type: integer + networkTopology: + properties: + highestTierAllowed: + default: 1 + type: integer + mode: + default: hard + enum: + - hard + - soft + type: string + type: object + plugins: + additionalProperties: + items: + type: string + type: array + type: object + policies: + items: + properties: + action: + type: string + event: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + events: + items: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + type: array + exitCode: + format: int32 + type: integer + timeout: + type: string + type: object + type: array + priorityClassName: + type: string + queue: + type: string + runningEstimate: + type: string + schedulerName: + type: string + tasks: + items: + properties: + dependsOn: + properties: + iteration: + type: string + name: + items: + type: string + type: array + type: object + maxRetry: + format: int32 + type: integer + minAvailable: + format: int32 + type: integer + name: + type: string + policies: + items: + properties: + action: + type: string + event: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + events: + items: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + type: array + exitCode: + format: int32 + type: integer + timeout: + type: string + type: object + type: array + replicas: + format: int32 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-type: atomic + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + x-kubernetes-list-type: atomic + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + searches: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + x-kubernetes-list-type: atomic + ip: + type: string + required: + - ip + type: object + type: array + x-kubernetes-list-map-keys: + - ip + x-kubernetes-list-type: map + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostUsers: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + initContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + x-kubernetes-list-type: atomic + resourceClaims: + items: + properties: + name: + type: string + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + schedulingGates: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxChangePolicy: + type: string + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + x-kubernetes-list-type: atomic + supplementalGroupsPolicy: + type: string + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + default: ext4 + type: string + kind: + type: string + readOnly: + default: false + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + x-kubernetes-list-type: atomic + wwids: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + default: default + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + x-kubernetes-list-type: atomic + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + clusterTrustBundle: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + x-kubernetes-list-type: atomic + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + default: /etc/ceph/keyring + type: string + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + pool: + default: rbd + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + default: admin + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + default: xfs + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + default: ThinProvisioned + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + required: + - containers + type: object + type: object + topologyPolicy: + enum: + - none + - best-effort + - restricted + - single-numa-node + type: string + type: object + type: array + ttlSecondsAfterFinished: + format: int32 + type: integer + volumes: + items: + properties: + mountPath: + type: string + volumeClaim: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + volumeClaimName: + type: string + required: + - mountPath + type: object + type: array + type: object + type: object + schedule: + type: string + startingDeadlineSeconds: + format: int64 + minimum: 0 + type: integer + successfulJobsHistoryLimit: + default: 3 + format: int32 + minimum: 0 + type: integer + suspend: + default: false + type: boolean + timeZone: + type: string + required: + - jobTemplate + - schedule + type: object + status: + properties: + active: + items: + properties: + apiVersion: + type: string + fieldPath: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + resourceVersion: + type: string + uid: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-type: atomic + lastScheduleTime: + format: date-time + type: string + lastSuccessfulTime: + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +# Source: volcano/templates/bus_v1alpha1_command.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: commands.bus.volcano.sh +spec: + group: bus.volcano.sh + names: + kind: Command + listKind: CommandList + plural: commands + singular: command + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: Command defines command structure. + properties: + action: + description: Action defines the action that will be took to the target + object. + type: string + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + message: + description: Human-readable message indicating details of this command. + type: string + metadata: + type: object + reason: + description: Unique, one-word, CamelCase reason for this command. + type: string + target: + description: TargetObject defines the target object of this command. + properties: + apiVersion: + description: API version of the referent. + type: string + blockOwnerDeletion: + description: |- + If true, AND if the owner has the "foregroundDeletion" finalizer, then + the owner cannot be deleted from the key-value store until this + reference is removed. + See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion + for how the garbage collector interacts with this field and enforces the foreground deletion. + Defaults to false. + To set this field, a user needs "delete" permission of the owner, + otherwise 422 (Unprocessable Entity) will be returned. + type: boolean + controller: + description: If true, this reference points to the managing controller. + type: boolean + kind: + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + name: + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names + type: string + uid: + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids + type: string + required: + - apiVersion + - kind + - name + - uid + type: object + x-kubernetes-map-type: atomic + type: object + served: true + storage: true +--- +# Source: volcano/templates/controllers.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: volcano-controllers + namespace: volcano-system +--- +# Source: volcano/templates/controllers.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: volcano-controller-configmap + namespace: volcano-system +data: + volcano-controller.conf: | +--- +# Source: volcano/templates/controllers.yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: volcano-controllers +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["create", "get", "list", "watch", "delete"] + - apiGroups: ["batch.volcano.sh"] + resources: ["jobs"] + verbs: ["create", "get", "list", "watch", "update", "delete"] + - apiGroups: ["batch.volcano.sh"] + resources: ["jobs/status", "jobs/finalizers"] + verbs: ["update", "patch"] + - apiGroups: ["batch.volcano.sh"] + resources: ["cronjobs"] + verbs: ["create", "get", "list", "watch", "update", "delete"] + - apiGroups: ["batch.volcano.sh"] + resources: ["cronjobs/status", "cronjobs/finalizers"] + verbs: ["update", "patch"] + - apiGroups: ["bus.volcano.sh"] + resources: ["commands"] + verbs: ["get", "list", "watch", "delete"] + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "list", "watch", "update", "patch"] + - apiGroups: [""] + resources: ["pods"] + verbs: ["create", "get", "list", "watch", "delete", "patch"] + - apiGroups: [""] + resources: ["pods/finalizers"] + verbs: ["update", "patch"] + - apiGroups: [""] + resources: ["persistentvolumeclaims"] + verbs: ["get", "list", "watch", "create"] + - apiGroups: [""] + resources: ["services"] + verbs: ["get", "list", "watch", "create", "delete"] + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list", "watch", "create", "delete", "update"] + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "create", "delete", "update"] + - apiGroups: ["scheduling.incubator.k8s.io", "scheduling.volcano.sh"] + resources: ["podgroups", "queues", "queues/status"] + verbs: ["get", "list", "watch", "create", "delete", "update", "patch"] + - apiGroups: ["flow.volcano.sh"] + resources: ["jobflows", "jobtemplates"] + verbs: ["get", "list", "watch", "create", "delete", "update"] + - apiGroups: [ "flow.volcano.sh" ] + resources: [ "jobflows/status", "jobs/finalizers","jobtemplates/status", "jobtemplates/finalizers" ] + verbs: [ "update", "patch" ] + - apiGroups: ["scheduling.k8s.io"] + resources: ["priorityclasses"] + verbs: ["get", "list", "watch", "create", "delete"] + - apiGroups: ["networking.k8s.io"] + resources: ["networkpolicies"] + verbs: ["get", "create", "delete"] + - apiGroups: ["apps"] + resources: ["daemonsets"] + verbs: ["get"] + - apiGroups: ["apps"] + resources: ["replicasets", "statefulsets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["get"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "create", "update", "watch"] + - apiGroups: ["topology.volcano.sh"] + resources: ["hypernodes", "hypernodes/status"] + verbs: ["list", "watch", "get", "create", "delete", "update", "patch"] + - apiGroups: [ "" ] + resources: [ "nodes" ] + verbs: [ "list", "watch" ] +--- +# Source: volcano/templates/controllers.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: volcano-controllers-role +subjects: + - kind: ServiceAccount + name: volcano-controllers + namespace: volcano-system +roleRef: + kind: ClusterRole + name: volcano-controllers + apiGroup: rbac.authorization.k8s.io +--- +# Source: volcano/templates/controllers.yaml +apiVersion: v1 +kind: Service +metadata: + annotations: + prometheus.io/path: /metrics + prometheus.io/port: "8081" + prometheus.io/scrape: "true" + name: volcano-controllers-service + namespace: volcano-system + labels: + app: volcano-controller +spec: + ports: + - port: 8081 + protocol: TCP + targetPort: 8081 + name: "metrics" + selector: + app: volcano-controller + type: ClusterIP +--- +# Source: volcano/templates/controllers.yaml +kind: Deployment +apiVersion: apps/v1 +metadata: + name: volcano-controllers + namespace: volcano-system + labels: + app: volcano-controller +spec: + replicas: 1 + selector: + matchLabels: + app: volcano-controller + template: + metadata: + labels: + app: volcano-controller + spec: + securityContext: + seLinuxOptions: + level: s0:c123,c456 + seccompProfile: + type: RuntimeDefault + serviceAccount: volcano-controllers + priorityClassName: system-cluster-critical + containers: + - name: volcano-controllers + image: {{.CustomRegistries.vc_controller_manager | default .ImageRepository | default .Registries.vc_controller_manager}}{{.Images.vc_controller_manager}} + args: + - --logtostderr + - --enable-healthz=true + - --enable-metrics=true + - --leader-elect=false + - --kube-api-qps=50 + - --kube-api-burst=100 + - --worker-threads=3 + - --worker-threads-for-gc=5 + - --worker-threads-for-podgroup=5 + - -v=4 + - 2>&1 + imagePullPolicy: Always + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - DAC_OVERRIDE + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + env: + - name: KUBE_POD_NAMESPACE + value: volcano-system + - name: HELM_RELEASE_NAME + value: volcano +--- +# Source: volcano/templates/scheduler.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: volcano-scheduler + namespace: volcano-system +--- +# Source: volcano/templates/scheduler.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: volcano-scheduler-configmap + namespace: volcano-system +data: + volcano-scheduler.conf: | + actions: "enqueue, allocate, backfill" + tiers: + - plugins: + - name: priority + - name: gang + enablePreemptable: false + - name: conformance + - plugins: + - name: overcommit + - name: drf + enablePreemptable: false + - name: predicates + - name: proportion + - name: nodeorder + - name: binpack +--- +# Source: volcano/templates/scheduler.yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: volcano-scheduler +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["create", "get", "list", "watch", "delete"] + - apiGroups: ["batch.volcano.sh"] + resources: ["jobs"] + verbs: ["get", "list", "watch", "update", "delete"] + - apiGroups: ["batch.volcano.sh"] + resources: ["jobs/status"] + verbs: ["update", "patch"] + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "list", "watch", "update", "patch"] + - apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list", "watch", "patch", "delete"] + - apiGroups: [""] + resources: ["pods/status"] + verbs: ["update"] + - apiGroups: [""] + resources: ["pods/binding"] + verbs: ["create"] + - apiGroups: [""] + resources: ["persistentvolumeclaims"] + verbs: ["list", "watch", "update"] + - apiGroups: [""] + resources: ["persistentvolumes"] + verbs: ["list", "watch", "update"] + - apiGroups: [""] + resources: ["namespaces", "services", "replicationcontrollers"] + verbs: ["list", "watch", "get"] + - apiGroups: [""] + resources: ["resourcequotas"] + verbs: ["list", "watch"] + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get","list", "watch","update","patch"] + - apiGroups: [ "storage.k8s.io" ] + resources: ["storageclasses", "csinodes", "csidrivers", "csistoragecapacities", "volumeattachments"] + verbs: [ "list", "watch" ] + - apiGroups: ["policy"] + resources: ["poddisruptionbudgets"] + verbs: ["list", "watch"] + - apiGroups: ["scheduling.k8s.io"] + resources: ["priorityclasses"] + verbs: ["get", "list", "watch"] + - apiGroups: ["scheduling.incubator.k8s.io", "scheduling.volcano.sh"] + resources: ["queues"] + verbs: ["get", "list", "watch", "create", "delete", "update"] + - apiGroups: ["scheduling.incubator.k8s.io", "scheduling.volcano.sh"] + resources: ["queues/status"] + verbs: ["update"] + - apiGroups: ["scheduling.incubator.k8s.io", "scheduling.volcano.sh"] + resources: ["podgroups"] + verbs: ["list", "watch", "update"] + - apiGroups: ["nodeinfo.volcano.sh"] + resources: ["numatopologies"] + verbs: ["get", "list", "watch", "delete"] + - apiGroups: ["topology.volcano.sh"] + resources: ["hypernodes", "hypernodes/status"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "create", "delete", "update"] + - apiGroups: ["apps"] + resources: ["daemonsets", "replicasets", "statefulsets"] + verbs: ["list", "watch", "get"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "create", "update", "watch"] + - apiGroups: ["resource.k8s.io"] + resources: ["resourceclaims"] + verbs: ["get", "list", "watch", "create", "update", "patch"] + - apiGroups: ["resource.k8s.io"] + resources: ["resourceclaims/status"] + verbs: ["update"] + - apiGroups: ["resource.k8s.io"] + resources: ["deviceclasses","resourceslices"] + verbs: ["get", "list", "watch", "create"] + - apiGroups: [ "resource.k8s.io" ] + resources: [ "devicetaintrules" ] + verbs: [ "get", "list", "watch" ] +--- +# Source: volcano/templates/scheduler.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: volcano-scheduler-role +subjects: + - kind: ServiceAccount + name: volcano-scheduler + namespace: volcano-system +roleRef: + kind: ClusterRole + name: volcano-scheduler + apiGroup: rbac.authorization.k8s.io +--- +# Source: volcano/templates/scheduler.yaml +apiVersion: v1 +kind: Service +metadata: + annotations: + prometheus.io/path: /metrics + prometheus.io/port: "8080" + prometheus.io/scrape: "true" + name: volcano-scheduler-service + namespace: volcano-system + labels: + app: volcano-scheduler +spec: + ports: + - port: 8080 + protocol: TCP + targetPort: 8080 + name: "metrics" + selector: + app: volcano-scheduler + type: ClusterIP +--- +# Source: volcano/templates/scheduler.yaml +kind: Deployment +apiVersion: apps/v1 +metadata: + name: volcano-scheduler + namespace: volcano-system + labels: + app: volcano-scheduler +spec: + replicas: 1 + selector: + matchLabels: + app: volcano-scheduler + template: + metadata: + labels: + app: volcano-scheduler + spec: + securityContext: + seLinuxOptions: + level: s0:c123,c456 + seccompProfile: + type: RuntimeDefault + serviceAccount: volcano-scheduler + priorityClassName: system-cluster-critical + containers: + - name: volcano-scheduler + image: {{.CustomRegistries.vc_scheduler | default .ImageRepository | default .Registries.vc_scheduler}}{{.Images.vc_scheduler}} + args: + - --logtostderr + - --scheduler-conf=/volcano.scheduler/volcano-scheduler.conf + - --enable-healthz=true + - --enable-metrics=true + - --leader-elect=false + - --kube-api-qps=2000 + - --kube-api-burst=2000 + - --schedule-period=1s + - --node-worker-threads=20 + - -v=3 + - 2>&1 + env: + - name: DEBUG_SOCKET_DIR + value: /tmp/klog-socks + imagePullPolicy: Always + volumeMounts: + - name: scheduler-config + mountPath: /volcano.scheduler + - name: klog-sock + mountPath: /tmp/klog-socks + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - DAC_OVERRIDE + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + volumes: + - name: scheduler-config + configMap: + name: volcano-scheduler-configmap + - name: klog-sock + emptyDir: {} +--- +# Source: volcano/templates/scheduling_v1beta1_podgroup.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: podgroups.scheduling.volcano.sh +spec: + group: scheduling.volcano.sh + names: + kind: PodGroup + listKind: PodGroupList + plural: podgroups + shortNames: + - pg + - podgroup-v1beta1 + singular: podgroup + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.phase + name: STATUS + type: string + - jsonPath: .spec.minMember + name: minMember + type: integer + - jsonPath: .status.running + name: RUNNINGS + type: integer + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + - jsonPath: .spec.queue + name: QUEUE + priority: 1 + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: PodGroup is a collection of Pod; used for batch workload. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + Specification of the desired behavior of the pod group. + More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + properties: + minMember: + description: |- + MinMember defines the minimal number of members/tasks to run the pod group; + if there's not enough resources to start all tasks, the scheduler + will not start anyone. + format: int32 + type: integer + minResources: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: |- + MinResources defines the minimal resource of members/tasks to run the pod group; + if there's not enough resources to start all tasks, the scheduler + will not start anyone. + type: object + minTaskMember: + additionalProperties: + format: int32 + type: integer + description: |- + MinTaskMember defines the minimal number of pods to run each task in the pod group; + if there's not enough resources to start each task, the scheduler + will not start anyone. + type: object + networkTopology: + description: NetworkTopology defines the NetworkTopology config, this + field works in conjunction with network topology feature and hyperNode + CRD. + properties: + highestTierAllowed: + default: 1 + description: HighestTierAllowed specifies the highest tier that + a job allowed to cross when scheduling. + type: integer + mode: + default: hard + description: Mode specifies the mode of the network topology constrain. + enum: + - hard + - soft + type: string + type: object + priorityClassName: + description: |- + If specified, indicates the PodGroup's priority. "system-node-critical" and + "system-cluster-critical" are two special keywords which indicate the + highest priorities with the former being the highest priority. Any other + name must be defined by creating a PriorityClass object with that name. + If not specified, the PodGroup priority will be default or zero if there is no + default. + type: string + queue: + default: default + description: |- + Queue defines the queue to allocate resource for PodGroup; if queue does not exist, + the PodGroup will not be scheduled. Defaults to `default` Queue with the lowest weight. + type: string + type: object + status: + description: |- + Status represents the current information about a pod group. + This data may not be up to date. + properties: + conditions: + description: The conditions of PodGroup. + items: + description: PodGroupCondition contains details for the current + state of this pod group. + properties: + lastTransitionTime: + description: Last time the phase transitioned from another to + current phase. + format: date-time + type: string + message: + description: Human-readable message indicating details about + last transition. + type: string + reason: + description: Unique, one-word, CamelCase reason for the phase's + last transition. + type: string + status: + description: Status is the status of the condition. + type: string + transitionID: + description: The ID of condition transition. + type: string + type: + description: Type is the type of the condition + type: string + type: object + type: array + failed: + description: The number of pods which reached phase Failed. + format: int32 + type: integer + phase: + description: Current phase of PodGroup. + type: string + running: + description: The number of actively running pods. + format: int32 + type: integer + succeeded: + description: The number of pods which reached phase Succeeded. + format: int32 + type: integer + type: object + type: object + served: true + storage: true + subresources: {} +--- +# Source: volcano/templates/scheduling_v1beta1_queue.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: queues.scheduling.volcano.sh +spec: + group: scheduling.volcano.sh + names: + kind: Queue + listKind: QueueList + plural: queues + shortNames: + - q + - queue-v1beta1 + singular: queue + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .spec.parent + name: PARENT + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: Queue is a queue of PodGroup. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + Specification of the desired behavior of the queue. + More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + properties: + affinity: + description: If specified, the pod owned by the queue will be scheduled + with constraint + properties: + nodeGroupAffinity: + description: Describes nodegroup affinity scheduling rules for + the queue(e.g. putting pods of the queue in the nodes of the + nodegroup) + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + type: string + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + type: string + type: array + type: object + nodeGroupAntiAffinity: + description: Describes nodegroup anti-affinity scheduling rules + for the queue(e.g. avoid putting pods of the queue in the nodes + of the nodegroup). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + type: string + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + type: string + type: array + type: object + type: object + capability: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: ResourceList is a set of (resource name, quantity) pairs. + type: object + deserved: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: The amount of resources configured by the user. This + part of resource can be shared with other queues and reclaimed back. + type: object + extendClusters: + description: extendCluster indicate the jobs in this Queue will be + dispatched to these clusters. + items: + description: CluterSpec represents the template of Cluster + properties: + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: ResourceList is a set of (resource name, quantity) + pairs. + type: object + name: + type: string + weight: + format: int32 + type: integer + type: object + type: array + guarantee: + description: Guarantee indicate configuration about resource reservation + properties: + resource: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: The amount of cluster resource reserved for queue. + Just set either `percentage` or `resource` + type: object + type: object + parent: + description: Parent define the parent of queue + type: string + priority: + description: Priority define the priority of queue. Higher values + are prioritized for scheduling and considered later during reclamation. + format: int32 + type: integer + reclaimable: + description: Reclaimable indicate whether the queue can be reclaimed + by other queue + type: boolean + type: + description: Type define the type of queue + type: string + weight: + default: 1 + format: int32 + maximum: 65535 + minimum: 1 + type: integer + type: object + status: + description: The status of queue. + properties: + allocated: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Allocated is allocated resources in queue + type: object + completed: + description: The number of `Completed` PodGroup in this queue. + format: int32 + type: integer + inqueue: + description: The number of `Inqueue` PodGroup in this queue. + format: int32 + type: integer + pending: + description: The number of 'Pending' PodGroup in this queue. + format: int32 + type: integer + reservation: + description: Reservation is the profile of resource reservation for + queue + properties: + nodes: + description: Nodes are Locked nodes for queue + items: + type: string + type: array + resource: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Resource is a list of total idle resource in locked + nodes. + type: object + type: object + running: + description: The number of 'Running' PodGroup in this queue. + format: int32 + type: integer + state: + description: State is state of queue + type: string + unknown: + description: The number of 'Unknown' PodGroup in this queue. + format: int32 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +# Source: volcano/templates/nodeinfo_v1alpha1_numatopologies.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: numatopologies.nodeinfo.volcano.sh +spec: + group: nodeinfo.volcano.sh + names: + kind: Numatopology + listKind: NumatopologyList + plural: numatopologies + shortNames: + - numatopo + singular: numatopology + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: Numatopology is the Schema for the Numatopologies API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: Specification of the numa information of the worker node + properties: + cpuDetail: + additionalProperties: + description: CPUInfo is the cpu topology detail + properties: + core: + minimum: 0 + type: integer + numa: + minimum: 0 + type: integer + socket: + minimum: 0 + type: integer + type: object + description: |- + Specifies the cpu topology info + Key is cpu id + type: object + numares: + additionalProperties: + description: ResourceInfo is the sets about resource capacity and + allocatable + properties: + allocatable: + type: string + capacity: + type: integer + type: object + description: |- + Specifies the numa info for the resource + Key is resource name + type: object + policies: + additionalProperties: + type: string + description: Specifies the policy of the manager + type: object + resReserved: + additionalProperties: + type: string + description: |- + Specifies the reserved resource of the node + Key is resource name + type: object + type: object + type: object + served: true + storage: true +--- +# Source: volcano/templates/topology_v1alpha1_hypernodes.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: hypernodes.topology.volcano.sh +spec: + group: topology.volcano.sh + names: + kind: HyperNode + listKind: HyperNodeList + plural: hypernodes + shortNames: + - hn + singular: hypernode + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .spec.tier + name: Tier + type: string + - jsonPath: .status.nodeCount + name: NodeCount + type: integer + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: HyperNode represents a collection of nodes sharing similar network + topology or performance characteristics. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: Spec defines the desired configuration of the HyperNode. + properties: + members: + description: Members defines a list of node groups or individual nodes + included in the HyperNode. + items: + description: MemberSpec represents a specific node or a hyperNodes + in the hyperNode. + properties: + selector: + description: Selector defines the selection rules for this member. + properties: + exactMatch: + description: ExactMatch defines the exact match criteria. + properties: + name: + description: Name specifies the exact name of the node + to match. + type: string + type: object + labelMatch: + description: LabelMatch defines the labels match criteria + (only take effect when Member Type is "Node"). + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + regexMatch: + description: RegexMatch defines the regex match criteria. + properties: + pattern: + description: Pattern defines the regex pattern to match + node names. + type: string + type: object + type: object + x-kubernetes-validations: + - message: Either ExactMatch or RegexMatch or LabelMatch must + be specified + rule: has(self.exactMatch) || has(self.regexMatch) || has(self.labelMatch) + - message: Only one of ExactMatch, RegexMatch, or LabelMatch + can be specified + rule: '(has(self.exactMatch) ? 1 : 0) + (has(self.regexMatch) + ? 1 : 0) + (has(self.labelMatch) ? 1 : 0) <= 1' + type: + description: Type specifies the member type. + enum: + - Node + - HyperNode + type: string + required: + - type + type: object + type: array + tier: + description: Tier categorizes the performance level of the HyperNode. + type: integer + required: + - tier + type: object + status: + description: Status provides the current state of the HyperNode. + properties: + conditions: + description: Conditions provide details about the current state of + the HyperNode. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + nodeCount: + description: NodeCount is the total number of nodes currently in the + HyperNode. + format: int64 + minimum: 0 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +# Source: volcano/templates/webhooks.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: volcano-admission-service-queues-mutate +webhooks: + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: volcano-admission-service + namespace: volcano-system + path: /queues/mutate + port: 443 + failurePolicy: Fail + matchPolicy: Equivalent + name: mutatequeue.volcano.sh + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: NotIn + values: + - volcano-system + - kube-system + objectSelector: {} + reinvocationPolicy: Never + rules: + - apiGroups: + - scheduling.volcano.sh + apiVersions: + - v1beta1 + operations: + - CREATE + resources: + - queues + scope: '*' + sideEffects: NoneOnDryRun + timeoutSeconds: 10 +--- +# Source: volcano/templates/webhooks.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: volcano-admission-service-jobs-mutate +webhooks: + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: volcano-admission-service + namespace: volcano-system + path: /jobs/mutate + port: 443 + failurePolicy: Fail + matchPolicy: Equivalent + name: mutatejob.volcano.sh + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: NotIn + values: + - volcano-system + - kube-system + objectSelector: {} + reinvocationPolicy: Never + rules: + - apiGroups: + - batch.volcano.sh + apiVersions: + - v1alpha1 + operations: + - CREATE + resources: + - jobs + scope: '*' + sideEffects: NoneOnDryRun + timeoutSeconds: 10 +--- +# Source: volcano/templates/webhooks.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: volcano-admission-service-jobs-validate +webhooks: + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: volcano-admission-service + namespace: volcano-system + path: /jobs/validate + port: 443 + failurePolicy: Fail + matchPolicy: Equivalent + name: validatejob.volcano.sh + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: NotIn + values: + - volcano-system + - kube-system + objectSelector: {} + rules: + - apiGroups: + - batch.volcano.sh + apiVersions: + - v1alpha1 + operations: + - CREATE + - UPDATE + resources: + - jobs + scope: '*' + sideEffects: NoneOnDryRun + timeoutSeconds: 10 +--- +# Source: volcano/templates/webhooks.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: volcano-admission-service-queues-validate +webhooks: + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: volcano-admission-service + namespace: volcano-system + path: /queues/validate + port: 443 + failurePolicy: Fail + matchPolicy: Equivalent + name: validatequeue.volcano.sh + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: NotIn + values: + - volcano-system + - kube-system + objectSelector: {} + rules: + - apiGroups: + - scheduling.volcano.sh + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + - DELETE + resources: + - queues + scope: '*' + sideEffects: NoneOnDryRun + timeoutSeconds: 10 +--- +# Source: volcano/templates/webhooks.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: volcano-admission-service-podgroups-validate +webhooks: + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: volcano-admission-service + namespace: volcano-system + path: /podgroups/validate + port: 443 + failurePolicy: Fail + matchPolicy: Equivalent + name: validatepodgroup.volcano.sh + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: NotIn + values: + - volcano-system + - kube-system + objectSelector: {} + rules: + - apiGroups: + - scheduling.volcano.sh + apiVersions: + - v1beta1 + operations: + - CREATE + resources: + - podgroups + scope: '*' + sideEffects: NoneOnDryRun + timeoutSeconds: 10 +--- +# Source: volcano/templates/webhooks.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: volcano-admission-service-hypernodes-validate +webhooks: + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: volcano-admission-service + namespace: volcano-system + path: /hypernodes/validate + port: 443 + failurePolicy: Fail + matchPolicy: Equivalent + name: validatehypernodes.volcano.sh + rules: + - apiGroups: + - topology.volcano.sh + apiVersions: + - v1alpha1 + operations: + - CREATE + - UPDATE + resources: + - hypernodes + sideEffects: None + timeoutSeconds: 10 +--- +# Source: volcano/templates/webhooks.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: volcano-admission-service-cronjobs-validate +webhooks: + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: volcano-admission-service + namespace: volcano-system + path: /cronjobs/validate + port: 443 + failurePolicy: Fail + matchPolicy: Equivalent + name: validatecronjob.volcano.sh + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: NotIn + values: + - volcano-system + - kube-system + objectSelector: {} + rules: + - apiGroups: + - batch.volcano.sh + apiVersions: + - v1alpha1 + operations: + - CREATE + - UPDATE + resources: + - cronjobs + scope: '*' + sideEffects: NoneOnDryRun + timeoutSeconds: 10 +--- +# Source: jobflow/templates/flow_v1alpha1_jobflows.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: jobtemplates.flow.volcano.sh +spec: + group: flow.volcano.sh + names: + kind: JobTemplate + listKind: JobTemplateList + plural: jobtemplates + shortNames: + - jt + singular: jobtemplate + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + maxRetry: + default: 3 + format: int32 + type: integer + minAvailable: + format: int32 + type: integer + minSuccess: + format: int32 + minimum: 1 + type: integer + networkTopology: + properties: + highestTierAllowed: + default: 1 + type: integer + mode: + default: hard + enum: + - hard + - soft + type: string + type: object + plugins: + additionalProperties: + items: + type: string + type: array + type: object + policies: + items: + properties: + action: + type: string + event: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + events: + items: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + type: array + exitCode: + format: int32 + type: integer + timeout: + type: string + type: object + type: array + priorityClassName: + type: string + queue: + type: string + runningEstimate: + type: string + schedulerName: + type: string + tasks: + items: + properties: + dependsOn: + properties: + iteration: + type: string + name: + items: + type: string + type: array + type: object + maxRetry: + format: int32 + type: integer + minAvailable: + format: int32 + type: integer + name: + type: string + policies: + items: + properties: + action: + type: string + event: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + events: + items: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + type: array + exitCode: + format: int32 + type: integer + timeout: + type: string + type: object + type: array + replicas: + format: int32 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-type: atomic + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + x-kubernetes-list-type: atomic + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + searches: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + x-kubernetes-list-type: atomic + ip: + type: string + required: + - ip + type: object + type: array + x-kubernetes-list-map-keys: + - ip + x-kubernetes-list-type: map + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostUsers: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + initContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + x-kubernetes-list-type: atomic + resourceClaims: + items: + properties: + name: + type: string + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + schedulingGates: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxChangePolicy: + type: string + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + x-kubernetes-list-type: atomic + supplementalGroupsPolicy: + type: string + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + default: ext4 + type: string + kind: + type: string + readOnly: + default: false + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + x-kubernetes-list-type: atomic + wwids: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + default: default + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + x-kubernetes-list-type: atomic + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + clusterTrustBundle: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + x-kubernetes-list-type: atomic + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + default: /etc/ceph/keyring + type: string + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + pool: + default: rbd + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + default: admin + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + default: xfs + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + default: ThinProvisioned + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + required: + - containers + type: object + type: object + topologyPolicy: + enum: + - none + - best-effort + - restricted + - single-numa-node + type: string + type: object + type: array + ttlSecondsAfterFinished: + format: int32 + type: integer + volumes: + items: + properties: + mountPath: + type: string + volumeClaim: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + volumeClaimName: + type: string + required: + - mountPath + type: object + type: array + type: object + status: + properties: + jobDependsOnList: + items: + type: string + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +# Source: jobflow/templates/flow_v1alpha1_jobtemplates.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + name: jobflows.flow.volcano.sh +spec: + group: flow.volcano.sh + names: + kind: JobFlow + listKind: JobFlowList + plural: jobflows + shortNames: + - jf + singular: jobflow + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.state.phase + name: Status + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + flows: + items: + properties: + dependsOn: + properties: + probe: + properties: + httpGetList: + items: + properties: + httpHeader: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + path: + type: string + port: + maximum: 65535 + minimum: 0 + type: integer + taskName: + type: string + type: object + type: array + taskStatusList: + items: + properties: + phase: + type: string + taskName: + type: string + type: object + type: array + tcpSocketList: + items: + properties: + port: + maximum: 65535 + minimum: 0 + type: integer + taskName: + type: string + required: + - port + type: object + type: array + type: object + targets: + items: + type: string + type: array + type: object + name: + minLength: 1 + type: string + patch: + properties: + jobSpec: + properties: + maxRetry: + default: 3 + format: int32 + type: integer + minAvailable: + format: int32 + type: integer + minSuccess: + format: int32 + minimum: 1 + type: integer + networkTopology: + properties: + highestTierAllowed: + default: 1 + type: integer + mode: + default: hard + enum: + - hard + - soft + type: string + type: object + plugins: + additionalProperties: + items: + type: string + type: array + type: object + policies: + items: + properties: + action: + type: string + event: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + events: + items: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + type: array + exitCode: + format: int32 + type: integer + timeout: + type: string + type: object + type: array + priorityClassName: + type: string + queue: + type: string + runningEstimate: + type: string + schedulerName: + type: string + tasks: + items: + properties: + dependsOn: + properties: + iteration: + type: string + name: + items: + type: string + type: array + type: object + maxRetry: + format: int32 + type: integer + minAvailable: + format: int32 + type: integer + name: + type: string + policies: + items: + properties: + action: + type: string + event: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + events: + items: + enum: + - '*' + - PodPending + - PodRunning + - PodFailed + - PodEvicted + - Unknown + - TaskCompleted + - OutOfSync + - CommandIssued + - JobUpdated + - TaskFailed + type: string + type: array + exitCode: + format: int32 + type: integer + timeout: + type: string + type: object + type: array + replicas: + format: int32 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-type: atomic + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + x-kubernetes-list-type: atomic + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + searches: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + x-kubernetes-list-type: atomic + ip: + type: string + required: + - ip + type: object + type: array + x-kubernetes-list-map-keys: + - ip + x-kubernetes-list-type: map + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostUsers: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + initContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + stopSignal: + type: string + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + default: "" + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + x-kubernetes-list-type: atomic + resourceClaims: + items: + properties: + name: + type: string + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + schedulingGates: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxChangePolicy: + type: string + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + x-kubernetes-list-type: atomic + supplementalGroupsPolicy: + type: string + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + default: ext4 + type: string + kind: + type: string + readOnly: + default: false + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + x-kubernetes-list-type: atomic + wwids: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + default: default + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + x-kubernetes-list-type: atomic + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + clusterTrustBundle: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + x-kubernetes-list-type: atomic + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + default: /etc/ceph/keyring + type: string + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + pool: + default: rbd + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + default: admin + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + default: xfs + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + default: ThinProvisioned + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + required: + - containers + type: object + type: object + topologyPolicy: + enum: + - none + - best-effort + - restricted + - single-numa-node + type: string + type: object + type: array + ttlSecondsAfterFinished: + format: int32 + type: integer + volumes: + items: + properties: + mountPath: + type: string + volumeClaim: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + volumeClaimName: + type: string + required: + - mountPath + type: object + type: array + type: object + type: object + required: + - name + type: object + type: array + jobRetainPolicy: + enum: + - retain + - delete + type: string + type: object + status: + properties: + completedJobs: + items: + type: string + type: array + conditions: + additionalProperties: + properties: + createTime: + format: date-time + type: string + phase: + type: string + runningDuration: + type: string + taskStatusCount: + additionalProperties: + properties: + phase: + additionalProperties: + format: int32 + type: integer + type: object + type: object + type: object + type: object + type: object + failedJobs: + items: + type: string + type: array + jobStatusList: + items: + properties: + endTimestamp: + format: date-time + type: string + name: + type: string + restartCount: + format: int32 + type: integer + runningHistories: + items: + properties: + endTimestamp: + format: date-time + type: string + startTimestamp: + format: date-time + type: string + state: + type: string + type: object + type: array + startTimestamp: + format: date-time + type: string + state: + type: string + type: object + type: array + pendingJobs: + items: + type: string + type: array + runningJobs: + items: + type: string + type: array + state: + properties: + phase: + type: string + type: object + terminatedJobs: + items: + type: string + type: array + unKnowJobs: + items: + type: string + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/deploy/addons/volumesnapshots/csi-hostpath-snapshotclass.yaml.tmpl b/deploy/addons/volumesnapshots/csi-hostpath-snapshotclass.yaml similarity index 100% rename from deploy/addons/volumesnapshots/csi-hostpath-snapshotclass.yaml.tmpl rename to deploy/addons/volumesnapshots/csi-hostpath-snapshotclass.yaml diff --git a/deploy/addons/volumesnapshots/rbac-volume-snapshot-controller.yaml.tmpl b/deploy/addons/volumesnapshots/rbac-volume-snapshot-controller.yaml similarity index 92% rename from deploy/addons/volumesnapshots/rbac-volume-snapshot-controller.yaml.tmpl rename to deploy/addons/volumesnapshots/rbac-volume-snapshot-controller.yaml index f8064c7f8c9f..ddc4e5dcc5ce 100644 --- a/deploy/addons/volumesnapshots/rbac-volume-snapshot-controller.yaml.tmpl +++ b/deploy/addons/volumesnapshots/rbac-volume-snapshot-controller.yaml @@ -44,9 +44,6 @@ rules: - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "update"] - - apiGroups: ["storage.k8s.io"] - resources: ["storageclasses"] - verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["list", "watch", "create", "update", "patch"] @@ -55,13 +52,19 @@ rules: verbs: ["get", "list", "watch"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshotcontents"] - verbs: ["create", "get", "list", "watch", "update", "delete"] + verbs: ["create", "get", "list", "watch", "update", "delete", "patch"] + - apiGroups: ["snapshot.storage.k8s.io"] + resources: ["volumesnapshotcontents/status"] + verbs: ["patch"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshots"] - verbs: ["get", "list", "watch", "update"] + verbs: ["get", "list", "watch", "update", "patch"] - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshots/status"] - verbs: ["update"] + verbs: ["update", "patch"] + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get", "list", "watch"] --- kind: ClusterRoleBinding diff --git a/deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotclasses.yaml.tmpl b/deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotclasses.yaml similarity index 100% rename from deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotclasses.yaml.tmpl rename to deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotclasses.yaml diff --git a/deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotcontents.yaml.tmpl b/deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotcontents.yaml similarity index 100% rename from deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotcontents.yaml.tmpl rename to deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshotcontents.yaml diff --git a/deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshots.yaml.tmpl b/deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshots.yaml similarity index 98% rename from deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshots.yaml.tmpl rename to deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshots.yaml index 9153c660e2b6..9111ecc00939 100644 --- a/deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshots.yaml.tmpl +++ b/deploy/addons/volumesnapshots/snapshot.storage.k8s.io_volumesnapshots.yaml @@ -107,7 +107,7 @@ spec: format: date-time type: string error: - description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurrs during the snapshot creation. Upon success, this error field will be cleared. + description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurs during the snapshot creation. Upon success, this error field will be cleared. properties: message: description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' @@ -206,7 +206,7 @@ spec: format: date-time type: string error: - description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurrs during the snapshot creation. Upon success, this error field will be cleared. + description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurs during the snapshot creation. Upon success, this error field will be cleared. properties: message: description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' diff --git a/deploy/addons/volumesnapshots/volume-snapshot-controller-deployment.yaml.tmpl b/deploy/addons/volumesnapshots/volume-snapshot-controller-deployment.yaml.tmpl index 6c0e3ac8fbd9..2061d393ae1a 100644 --- a/deploy/addons/volumesnapshots/volume-snapshot-controller-deployment.yaml.tmpl +++ b/deploy/addons/volumesnapshots/volume-snapshot-controller-deployment.yaml.tmpl @@ -18,6 +18,15 @@ spec: selector: matchLabels: app: snapshot-controller + # the snapshot controller won't be marked as ready if the v1 CRDs are unavailable + # in #504 the snapshot-controller will exit after around 7.5 seconds if it + # can't find the v1 CRDs so this value should be greater than that + minReadySeconds: 15 + strategy: + rollingUpdate: + maxSurge: 0 + maxUnavailable: 1 + type: RollingUpdate template: metadata: labels: @@ -30,4 +39,5 @@ spec: args: - "--v=5" - "--leader-election=true" + - "--enable-distributed-snapshotting" imagePullPolicy: IfNotPresent diff --git a/deploy/addons/yakd/yakd-crb.yaml b/deploy/addons/yakd/yakd-crb.yaml new file mode 100644 index 000000000000..abace7a20d56 --- /dev/null +++ b/deploy/addons/yakd/yakd-crb.yaml @@ -0,0 +1,16 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: yakd-dashboard + labels: + app.kubernetes.io/name: yakd-dashboard + kubernetes.io/minikube-addons: yakd-dashboard + addonmanager.kubernetes.io/mode: Reconcile +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- kind: ServiceAccount + name: yakd-dashboard + namespace: yakd-dashboard diff --git a/deploy/addons/yakd/yakd-dp.yaml.tmpl b/deploy/addons/yakd/yakd-dp.yaml.tmpl new file mode 100644 index 000000000000..3f00b2fa6c16 --- /dev/null +++ b/deploy/addons/yakd/yakd-dp.yaml.tmpl @@ -0,0 +1,69 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + labels: + app.kubernetes.io/name: yakd-dashboard + app.kubernetes.io/instance: yakd-dashboard + kubernetes.io/minikube-addons: yakd-dashboard + addonmanager.kubernetes.io/mode: Reconcile + name: yakd-dashboard + namespace: yakd-dashboard +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: yakd-dashboard + app.kubernetes.io/instance: yakd-dashboard + template: + metadata: + labels: + app.kubernetes.io/name: yakd-dashboard + app.kubernetes.io/instance: yakd-dashboard + gcp-auth-skip-secret: "true" + spec: + containers: + - name: yakd + image: {{.CustomRegistries.Yakd | default .ImageRepository | default .Registries.Yakd }}{{.Images.Yakd}} + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 8080 + protocol: TCP + env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: HOSTNAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + resources: + limits: + memory: 256Mi + requests: + memory: 128Mi + securityContext: + allowPrivilegeEscalation: false + privileged: false + runAsUser: 1001 + runAsGroup: 2001 + livenessProbe: + httpGet: + path: / + port: 8080 + initialDelaySeconds: 10 + timeoutSeconds: 10 + readinessProbe: + httpGet: + path: / + port: 8080 + initialDelaySeconds: 10 + timeoutSeconds: 10 + restartPolicy: Always + serviceAccountName: yakd-dashboard + nodeSelector: + "kubernetes.io/os": linux diff --git a/deploy/addons/yakd/yakd-ns.yaml b/deploy/addons/yakd/yakd-ns.yaml new file mode 100644 index 000000000000..a4bbd8e69f90 --- /dev/null +++ b/deploy/addons/yakd/yakd-ns.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: yakd-dashboard + labels: + kubernetes.io/minikube-addons: yakd-dashboard + addonmanager.kubernetes.io/mode: Reconcile diff --git a/deploy/addons/yakd/yakd-sa.yaml b/deploy/addons/yakd/yakd-sa.yaml new file mode 100644 index 000000000000..56666980fca0 --- /dev/null +++ b/deploy/addons/yakd/yakd-sa.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/name: yakd-dashboard + kubernetes.io/minikube-addons: yakd-dashboard + addonmanager.kubernetes.io/mode: Reconcile + name: yakd-dashboard + namespace: yakd-dashboard diff --git a/deploy/addons/yakd/yakd-svc.yaml b/deploy/addons/yakd/yakd-svc.yaml new file mode 100644 index 000000000000..6dd208173211 --- /dev/null +++ b/deploy/addons/yakd/yakd-svc.yaml @@ -0,0 +1,17 @@ +kind: Service +apiVersion: v1 +metadata: + labels: + app.kubernetes.io/name: yakd-dashboard + kubernetes.io/minikube-addons: yakd-dashboard + addonmanager.kubernetes.io/mode: Reconcile + name: yakd-dashboard + namespace: yakd-dashboard +spec: + type: NodePort + ports: + - port: 80 + targetPort: 8080 + selector: + app.kubernetes.io/name: yakd-dashboard + app.kubernetes.io/instance: yakd-dashboard diff --git a/deploy/gvisor/Dockerfile b/deploy/gvisor/Dockerfile index dbe6d37aa938..db062b917f44 100644 --- a/deploy/gvisor/Dockerfile +++ b/deploy/gvisor/Dockerfile @@ -12,8 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. +FROM golang:1.25.5 AS builder +WORKDIR /app +COPY go.mod go.sum ./ +RUN go mod download +COPY ./ ./ +RUN GOOS=linux CGO_ENABLED=0 go build -o gvisor-addon cmd/gvisor/gvisor.go + # Need an image with chroot FROM alpine:3 RUN apk -U add ca-certificates -COPY out/gvisor-addon /gvisor-addon +COPY --from=builder /app/gvisor-addon /gvisor-addon CMD ["/gvisor-addon"] diff --git a/deploy/image/kubernetes-bootcamp/Dockerfile b/deploy/image/kubernetes-bootcamp/Dockerfile new file mode 100644 index 000000000000..22aae33362b6 --- /dev/null +++ b/deploy/image/kubernetes-bootcamp/Dockerfile @@ -0,0 +1,5 @@ +FROM node:slim +RUN apt-get update && apt-get install curl -y +EXPOSE 8080 +COPY server.js . +CMD [ "node", "server.js" ] diff --git a/deploy/image/kubernetes-bootcamp/server.js b/deploy/image/kubernetes-bootcamp/server.js new file mode 100644 index 000000000000..f62a963174ee --- /dev/null +++ b/deploy/image/kubernetes-bootcamp/server.js @@ -0,0 +1,19 @@ +var http = require('http'); +var requests = 0; +var podname = process.env.HOSTNAME; +var startTime; +var host; +var handleRequest = function(request, response) { + response.setHeader('Content-Type', 'text/plain'); + response.writeHead(200); + response.write('Hello Kubernetes bootcamp! | Hostname: '); + response.write(host); + response.end(' | v=2\n'); + console.log('Hostname:', host, '| Total Requests:', ++requests, '| App Uptime:', (new Date() - startTime)/1000 , 'seconds', '| Log Time:', new Date()); +} +var www = http.createServer(handleRequest); +www.listen(8080, function () { + startTime = new Date(); + host = process.env.HOSTNAME; + console.log('Kubernetes Bootcamp App Started At:', startTime, '| Running On:', host, '\n'); +}); diff --git a/deploy/iso/minikube-iso/Config.in b/deploy/iso/minikube-iso/Config.in deleted file mode 100644 index 0f5c2d952e76..000000000000 --- a/deploy/iso/minikube-iso/Config.in +++ /dev/null @@ -1 +0,0 @@ -source "$BR2_EXTERNAL_MINIKUBE_PATH/package/Config.in" diff --git a/deploy/iso/minikube-iso/Dockerfile b/deploy/iso/minikube-iso/Dockerfile index 3b9a94f96b8f..c80d575aef8a 100644 --- a/deploy/iso/minikube-iso/Dockerfile +++ b/deploy/iso/minikube-iso/Dockerfile @@ -12,20 +12,22 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM ubuntu:18.04 +FROM ubuntu:22.04 RUN apt-get update \ - && apt-get install -y apt dpkg apt-utils ca-certificates \ + && apt-get install -y apt dpkg apt-utils ca-certificates software-properties-common \ + && add-apt-repository -y ppa:longsleep/golang-backports \ && apt-get upgrade -y \ + && if [ "$(uname -ms)" = "Linux x86_64" ]; then apt-get install -y gcc-multilib; fi \ && apt-get install -y \ build-essential \ git \ wget \ cpio \ - python \ + python3 \ unzip \ bc \ - gcc-multilib \ + gcc \ automake \ libtool \ gnupg2 \ @@ -35,10 +37,14 @@ RUN apt-get update \ dumb-init \ golang-go \ libpcre3-dev \ + mkisofs \ && rm -rf /var/lib/apt/lists/* +RUN mkdir /app +RUN chmod 777 /app + RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 -ENV LANG en_US.utf8 +ENV LANG=en_US.utf8 # dumb init will allow us to interrupt the build with ^C ENTRYPOINT ["/usr/bin/dumb-init", "--"] diff --git a/deploy/iso/minikube-iso/arch/aarch64/Config.in.tmpl b/deploy/iso/minikube-iso/arch/aarch64/Config.in.tmpl new file mode 100644 index 000000000000..2d808316dfea --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/Config.in.tmpl @@ -0,0 +1,2 @@ +source "$BR2_EXTERNAL_MINIKUBE_PATH/package/Config.in" +source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/aarch64/package/Config.in" diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/Config.in b/deploy/iso/minikube-iso/arch/aarch64/package/Config.in new file mode 100644 index 000000000000..c3b8d524801d --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/Config.in @@ -0,0 +1,10 @@ +menu "System tools aarch64" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/aarch64/package/buildkit-bin-aarch64/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/aarch64/package/cni-plugins-latest-aarch64/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/aarch64/package/containerd-bin-aarch64/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/aarch64/package/cri-dockerd-aarch64/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/aarch64/package/crictl-bin-aarch64/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/aarch64/package/docker-bin-aarch64/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/aarch64/package/docker-buildx-aarch64/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/aarch64/package/nerdctl-bin-aarch64/Config.in" +endmenu diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/51-buildkit.preset b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/51-buildkit.preset new file mode 100644 index 000000000000..37de892c7105 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/51-buildkit.preset @@ -0,0 +1 @@ +disable buildkit.service diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/Config.in b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/Config.in new file mode 100644 index 000000000000..eabff319b0bf --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_BUILDKIT_BIN_AARCH64 + bool "buildkit-bin" + default y + depends on BR2_aarch64 diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.hash b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.hash new file mode 100644 index 000000000000..80a2997cb2b0 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.hash @@ -0,0 +1,18 @@ +sha256 0a834a749e86525e0eb16e7e80ce726e7c6a8e8d26fc5cc36c712305024da4e7 buildkit-v0.9.0.linux-arm64.tar.gz +sha256 27e974e2b07e087f66f0c9c2b43b6f3df6f7e1746a6252580f164427337d668c buildkit-v0.10.3.linux-arm64.tar.gz +sha256 8a8c2274852ea4bac6ccf1862a46679e93c013de8c5c0434a3040bab2e0a42a7 buildkit-v0.11.2.linux-arm64.tar.gz +sha256 252408105ef1c2256980a105f727912603a831d6c57d3243b5d4cbb25fafb1b1 buildkit-v0.11.4.linux-arm64.tar.gz +sha256 82b7452ffea166d3ef445597f9dbe3fa57c4d651e51ca7a9a581199116905524 buildkit-v0.11.6.linux-arm64.tar.gz +sha256 78846e12435f00e0ee5b9ca0af28ec78691fa712ebe7d2c799ec8a074c791969 buildkit-v0.12.2.linux-arm64.tar.gz +sha256 a6809c7983834f5a4dd3a92a421a9ff9a306e774ce2866d53636e8d5a3f2e82b buildkit-v0.12.3.linux-arm64.tar.gz +sha256 9166eeaff11721122b9398d6385c7b73d6e4df86797e537c16ac6b6d05eab899 buildkit-v0.12.4.linux-arm64.tar.gz +sha256 265f9756102de5fe3b8f299b7e96a9ef4ff69763805642676129c2713477071d buildkit-v0.13.0.linux-arm64.tar.gz +sha256 9e1478af43ba7ac6635cae30a8dda3ebce4dca70a8def939ac64ee395d03d647 buildkit-v0.13.1.linux-arm64.tar.gz +sha256 bcc4cb4fec79847682fbb2ce8f612e5e854636ae6c262cee4b657d2b5c2fd46c buildkit-v0.13.2.linux-arm64.tar.gz +sha256 e1caad39f0bc5848a5687d7a0e8e344d20724133365596e5d881d8fbe5594b32 buildkit-v0.14.1.linux-arm64.tar.gz +sha256 dfa15ef3f194afc0f588de1e78053cdcd553e7de2f9692efe964c9aa7e9d621e buildkit-v0.15.0.linux-arm64.tar.gz +sha256 608539ed0686f6533504ab43ed1005ab9c7bb45daec1cc5caa99de0c6314408c buildkit-v0.15.1.linux-arm64.tar.gz +sha256 15329adaa5e5b2bea0580f3e5e33765f84504075710bb791e362c3b160ca7e61 buildkit-v0.15.2.linux-arm64.tar.gz +sha256 1b70bb7955ddda66537d4bf9aa540e79e79e19aa989901613da58f5f133a53ef buildkit-v0.16.0.linux-arm64.tar.gz +sha256 484a725519bd15a3b3d1f84c2dfc37749af6f06bc6c40d83395312e4d1fb18f1 buildkit-v0.18.1.linux-arm64.tar.gz +sha256 a98829f1b1b9ec596eb424dd03f03b9c7b596edac83e6700adf83ba0cb0d5f80 buildkit-v0.26.3.linux-arm64.tar.gz diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.mk b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.mk new file mode 100644 index 000000000000..f3ba5d09da89 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# buildkit-bin +# +################################################################################ + +BUILDKIT_BIN_AARCH64_VERSION = v0.26.3 +BUILDKIT_BIN_AARCH64_COMMIT = c70e8e666f8f6ee3c0d83b20c338be5aedeaa97a +BUILDKIT_BIN_AARCH64_SITE = https://github.com/moby/buildkit/releases/download/$(BUILDKIT_BIN_AARCH64_VERSION) +BUILDKIT_BIN_AARCH64_SOURCE = buildkit-$(BUILDKIT_BIN_AARCH64_VERSION).linux-arm64.tar.gz + +# https://github.com/opencontainers/runc.git +BUILDKIT_RUNC_VERSION = 5fd4c4d144137e991c4acebb2146ab1483a97925 + +define BUILDKIT_BIN_AARCH64_USERS + - -1 buildkit -1 - - - - - +endef + +define BUILDKIT_BIN_AARCH64_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 \ + $(@D)/buildctl \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -D -m 0755 \ + $(@D)/buildkit-runc \ + $(TARGET_DIR)/usr/sbin + $(INSTALL) -D -m 0755 \ + $(@D)/buildkit-qemu-* \ + $(TARGET_DIR)/usr/sbin + $(INSTALL) -D -m 0755 \ + $(@D)/buildkitd \ + $(TARGET_DIR)/usr/sbin + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_AARCH64_PKGDIR)/buildkit.conf \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/buildkit.conf + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_AARCH64_PKGDIR)/buildkitd.toml \ + $(TARGET_DIR)/etc/buildkit/buildkitd.toml +endef + +define BUILDKIT_BIN_AARCH64_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_AARCH64_PKGDIR)/buildkit.service \ + $(TARGET_DIR)/usr/lib/systemd/system/buildkit.service + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_AARCH64_PKGDIR)/buildkit.socket \ + $(TARGET_DIR)/usr/lib/systemd/system/buildkit.socket + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_AARCH64_PKGDIR)/51-buildkit.preset \ + $(TARGET_DIR)/usr/lib/systemd/system-preset/51-buildkit.preset +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit.conf b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit.conf new file mode 100644 index 000000000000..006273ce91b5 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit.conf @@ -0,0 +1 @@ +d /run/buildkit 0770 root buildkit diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit.service b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit.service new file mode 100644 index 000000000000..c1dad527ec0c --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit.service @@ -0,0 +1,11 @@ +[Unit] +Description=BuildKit +Requires=buildkit.socket +After=buildkit.socket +Documentation=https://github.com/moby/buildkit + +[Service] +ExecStart=/usr/sbin/buildkitd --addr fd:// + +[Install] +WantedBy=multi-user.target diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit.socket b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit.socket new file mode 100644 index 000000000000..776b23762718 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit.socket @@ -0,0 +1,12 @@ +[Unit] +Description=BuildKit +Documentation=https://github.com/moby/buildkit + +[Socket] +ListenStream=%t/buildkit/buildkitd.sock +SocketMode=0660 +SocketUser=root +SocketGroup=buildkit + +[Install] +WantedBy=sockets.target diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkitd.toml b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkitd.toml new file mode 100644 index 000000000000..62158d44d72a --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkitd.toml @@ -0,0 +1,5 @@ +[worker.oci] + enabled = false +[worker.containerd] + enabled = true + namespace = "k8s.io" diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/cni-plugins-latest-aarch64/Config.in b/deploy/iso/minikube-iso/arch/aarch64/package/cni-plugins-latest-aarch64/Config.in new file mode 100644 index 000000000000..799758208f64 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/cni-plugins-latest-aarch64/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_CNI_PLUGINS_LATEST_AARCH64 + bool "cni-plugins-latest" + default y + depends on BR2_aarch64 + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/cni-plugins-latest-aarch64/cni-plugins-latest.hash b/deploy/iso/minikube-iso/arch/aarch64/package/cni-plugins-latest-aarch64/cni-plugins-latest.hash new file mode 100644 index 000000000000..b018eb2ebfc3 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/cni-plugins-latest-aarch64/cni-plugins-latest.hash @@ -0,0 +1,11 @@ +sha256 a7881ec37e592c897bdfd2a225b4ed74caa981e3c4cdcf8f45574f8d2f111bce cni-plugins-linux-arm64-v0.8.5.tgz +sha256 de7a666fd6ad83a228086bd55756db62ef335a193d1b143d910b69f079e30598 cni-plugins-linux-arm64-v1.3.0.tgz +sha256 304d4389d5b732b7a73513d002c4895f731d030682d40653f411e10e39114194 cni-plugins-linux-arm64-v1.4.0.tgz +sha256 56fe62d73942cffd8f119d2b8ecb6a062e85f529a3dbfc7aa5cd83c2c01929a7 cni-plugins-linux-arm64-v1.4.1.tgz +sha256 ab38507efe50c34bc2242a25c5783c19fdfe0376c65a2a91d48174d4f39f1fc2 cni-plugins-linux-arm64-v1.5.0.tgz +sha256 c2a292714d0fad98a3491ae43df8ad58354b3c0bdf5d5a3e281777967c70fcff cni-plugins-linux-arm64-v1.5.1.tgz +sha256 db09ab057ecf60b05ba05cbec38d55b95cc139c7f1078e2e4857cc13af158cee cni-plugins-linux-arm64-v1.6.0.tgz +sha256 f0f440b968ab50ad13d9d42d993ba98ec30b2ec666846f4ef1bddc7646a701cc cni-plugins-linux-arm64-v1.6.1.tgz +sha256 01e0e22acc7f7004e4588c1fe1871cc86d7ab562cd858e1761c4641d89ebfaa4 cni-plugins-linux-arm64-v1.6.2.tgz +sha256 119fcb508d1ac2149e49a550752f9cd64d023a1d70e189b59c476e4d2bf7c497 cni-plugins-linux-arm64-v1.7.1.tgz +sha256 57ce466fc3b79db1f19b8f4c63e07a1112306efa53c94fe810a2150dd9e07ddb cni-plugins-linux-arm64-v1.8.0.tgz diff --git a/deploy/iso/minikube-iso/package/cni-plugins/cni-plugins.mk b/deploy/iso/minikube-iso/arch/aarch64/package/cni-plugins-latest-aarch64/cni-plugins-latest.mk similarity index 62% rename from deploy/iso/minikube-iso/package/cni-plugins/cni-plugins.mk rename to deploy/iso/minikube-iso/arch/aarch64/package/cni-plugins-latest-aarch64/cni-plugins-latest.mk index 659e186e87ea..f7911e2f0d9b 100644 --- a/deploy/iso/minikube-iso/package/cni-plugins/cni-plugins.mk +++ b/deploy/iso/minikube-iso/arch/aarch64/package/cni-plugins-latest-aarch64/cni-plugins-latest.mk @@ -1,32 +1,18 @@ ################################################################################ # -# cni-plugins +# cni-plugins-latest # ################################################################################ -CNI_PLUGINS_VERSION = v0.8.5 -CNI_PLUGINS_SITE = https://github.com/containernetworking/plugins/archive -CNI_PLUGINS_SOURCE = $(CNI_PLUGINS_VERSION).tar.gz -CNI_PLUGINS_LICENSE = Apache-2.0 -CNI_PLUGINS_LICENSE_FILES = LICENSE +CNI_PLUGINS_LATEST_AARCH64_VERSION = v1.8.0 +CNI_PLUGINS_LATEST_AARCH64_SITE = https://github.com/containernetworking/plugins/releases/download/$(CNI_PLUGINS_LATEST_AARCH64_VERSION) +CNI_PLUGINS_LATEST_AARCH64_SOURCE = cni-plugins-linux-arm64-$(CNI_PLUGINS_LATEST_AARCH64_VERSION).tgz +CNI_PLUGINS_LATEST_AARCH64_LICENSE = Apache-2.0 +CNI_PLUGINS_LATEST_AARCH64_LICENSE_FILES = LICENSE -CNI_PLUGINS_DEPENDENCIES = host-go - -CNI_PLUGINS_MAKE_ENV = \ - $(GO_TARGET_ENV) \ - CGO_ENABLED=0 \ - GO111MODULE=off - -CNI_PLUGINS_BUILDFLAGS = -a -ldflags '-extldflags -static -X github.com/containernetworking/plugins/pkg/utils/buildversion.BuildVersion=$(CNI_PLUGINS_VERSION)' - - -define CNI_PLUGINS_BUILD_CMDS - (cd $(@D); $(CNI_PLUGINS_MAKE_ENV) ./build_linux.sh $(CNI_PLUGINS_BUILDFLAGS)) -endef - -define CNI_PLUGINS_INSTALL_TARGET_CMDS +define CNI_PLUGINS_LATEST_AARCH64_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 \ - $(@D)/bin/bandwidth \ + $(@D)/bandwidth \ $(TARGET_DIR)/opt/cni/bin/bandwidth ln -sf \ @@ -34,7 +20,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/bandwidth $(INSTALL) -D -m 0755 \ - $(@D)/bin/bridge \ + $(@D)/bridge \ $(TARGET_DIR)/opt/cni/bin/bridge ln -sf \ @@ -42,7 +28,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/bridge $(INSTALL) -D -m 0755 \ - $(@D)/bin/vlan \ + $(@D)/vlan \ $(TARGET_DIR)/opt/cni/bin/vlan ln -sf \ @@ -50,7 +36,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/vlan $(INSTALL) -D -m 0755 \ - $(@D)/bin/tuning \ + $(@D)/tuning \ $(TARGET_DIR)/opt/cni/bin/tuning ln -sf \ @@ -58,7 +44,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/tuning $(INSTALL) -D -m 0755 \ - $(@D)/bin/ptp \ + $(@D)/ptp \ $(TARGET_DIR)/opt/cni/bin/ptp ln -sf \ @@ -66,7 +52,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/ptp $(INSTALL) -D -m 0755 \ - $(@D)/bin/portmap \ + $(@D)/portmap \ $(TARGET_DIR)/opt/cni/bin/portmap ln -sf \ @@ -74,7 +60,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/portmap $(INSTALL) -D -m 0755 \ - $(@D)/bin/macvlan \ + $(@D)/macvlan \ $(TARGET_DIR)/opt/cni/bin/macvlan ln -sf \ @@ -82,7 +68,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/macvlan $(INSTALL) -D -m 0755 \ - $(@D)/bin/loopback \ + $(@D)/loopback \ $(TARGET_DIR)/opt/cni/bin/loopback ln -sf \ @@ -90,7 +76,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/loopback $(INSTALL) -D -m 0755 \ - $(@D)/bin/ipvlan \ + $(@D)/ipvlan \ $(TARGET_DIR)/opt/cni/bin/ipvlan ln -sf \ @@ -98,7 +84,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/ipvlan $(INSTALL) -D -m 0755 \ - $(@D)/bin/host-local \ + $(@D)/host-local \ $(TARGET_DIR)/opt/cni/bin/host-local ln -sf \ @@ -106,16 +92,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/host-local $(INSTALL) -D -m 0755 \ - $(@D)/bin/flannel \ - $(TARGET_DIR)/opt/cni/bin/flannel - - ln -sf \ - ../../opt/cni/bin/flannel \ - $(TARGET_DIR)/usr/bin/flannel - - - $(INSTALL) -D -m 0755 \ - $(@D)/bin/dhcp \ + $(@D)/dhcp \ $(TARGET_DIR)/opt/cni/bin/dhcp ln -sf \ @@ -123,7 +100,7 @@ define CNI_PLUGINS_INSTALL_TARGET_CMDS $(TARGET_DIR)/usr/bin/dhcp $(INSTALL) -D -m 0755 \ - $(@D)/bin/firewall \ + $(@D)/firewall \ $(TARGET_DIR)/opt/cni/bin/firewall ln -sf \ diff --git a/deploy/iso/minikube-iso/package/containerd-bin/50-minikube.preset b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/50-minikube.preset similarity index 100% rename from deploy/iso/minikube-iso/package/containerd-bin/50-minikube.preset rename to deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/50-minikube.preset diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/Config.in b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/Config.in new file mode 100644 index 000000000000..0c4b9224f47c --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_CONTAINERD_BIN_AARCH64 + bool "containerd-bin" + default y + depends on BR2_aarch64 diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/config.toml b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/config.toml new file mode 100644 index 000000000000..873cee549d02 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/config.toml @@ -0,0 +1,68 @@ +version = 2 +root = "/var/lib/containerd" +state = "/run/containerd" +oom_score = 0 +# imports + +[grpc] + address = "/run/containerd/containerd.sock" + uid = 0 + gid = 0 + max_recv_message_size = 16777216 + max_send_message_size = 16777216 + +[debug] + address = "" + uid = 0 + gid = 0 + level = "" + +[metrics] + address = "" + grpc_histogram = false + +[cgroup] + path = "" + +[plugins] + [plugins."io.containerd.monitor.v1.cgroups"] + no_prometheus = false + [plugins."io.containerd.grpc.v1.cri"] + stream_server_address = "" + stream_server_port = "10010" + enable_selinux = false + sandbox_image = "registry.k8s.io/pause:3.6" + stats_collect_period = 10 + enable_tls_streaming = false + max_container_log_line_size = 16384 + restrict_oom_score_adj = false + + [plugins."io.containerd.grpc.v1.cri".containerd] + discard_unpacked_layers = true + snapshotter = "overlayfs" + default_runtime_name = "runc" + [plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime] + runtime_type = "" + runtime_engine = "" + runtime_root = "" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = false + + [plugins."io.containerd.grpc.v1.cri".cni] + bin_dir = "/opt/cni/bin" + conf_dir = "/etc/cni/net.d" + conf_template = "" + [plugins."io.containerd.grpc.v1.cri".registry] + config_path = "/etc/containerd/certs.d" + + [plugins."io.containerd.service.v1.diff-service"] + default = ["walking"] + [plugins."io.containerd.gc.v1.scheduler"] + pause_threshold = 0.02 + deletion_threshold = 0 + mutation_threshold = 100 + schedule_delay = "0s" + startup_delay = "100ms" diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd-bin.hash b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd-bin.hash new file mode 100644 index 000000000000..3ee0b61ef8ae --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd-bin.hash @@ -0,0 +1,2 @@ +sha256 846d13bc2bf1c01ae2f20d13beb9b3a1e50b52c86e955b4ac7d658f5847f2b0e containerd-2.1.4-linux-arm64.tar.gz +sha256 8805c2123d3b7c7ee2030e9f8fc07a1167d8a3f871d6a7d7ec5d1deb0b51a4a7 containerd-2.2.0-linux-arm64.tar.gz diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd-bin.mk b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd-bin.mk new file mode 100644 index 000000000000..5cd0eb8a0451 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd-bin.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# containerd-bin +# +################################################################################ + +CONTAINERD_BIN_AARCH64_VERSION = 2.2.0 +CONTAINERD_BIN_AARCH64_SITE = https://github.com/containerd/containerd/releases/download/v$(CONTAINERD_BIN_AARCH64_VERSION) +CONTAINERD_BIN_AARCH64_SOURCE = containerd-$(CONTAINERD_BIN_AARCH64_VERSION)-linux-arm64.tar.gz +CONTAINERD_BIN_AARCH64_STRIP_COMPONENTS = 0 + +define CONTAINERD_BIN_AARCH64_INSTALL_TARGET_CMDS + $(INSTALL) -Dm755 \ + $(@D)/bin/containerd \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -Dm755 \ + $(@D)/bin/containerd-shim-runc-v2 \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -Dm755 \ + $(@D)/bin/ctr \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -Dm755 \ + $(@D)/bin/containerd-stress \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -Dm644 \ + $(CONTAINERD_BIN_PKGDIR)/config.toml \ + $(TARGET_DIR)/etc/containerd/config.toml + $(INSTALL) -Dm644 \ + $(CONTAINERD_BIN_PKGDIR)/containerd_docker_io_hosts.toml \ + $(TARGET_DIR)/etc/containerd/certs.d/docker.io/hosts.toml +endef + +define CONTAINERD_BIN_AARCH64_INSTALL_INIT_SYSTEMD + $(INSTALL) -Dm644 \ + $(CONTAINERD_BIN_PKGDIR)/containerd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/containerd.service + $(INSTALL) -Dm644 \ + $(CONTAINERD_BIN_PKGDIR)/50-minikube.preset \ + $(TARGET_DIR)/usr/lib/systemd/system-preset/50-minikube.preset +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/package/containerd-bin/containerd.service b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd.service similarity index 89% rename from deploy/iso/minikube-iso/package/containerd-bin/containerd.service rename to deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd.service index 2d3d1e5ec9fb..282f34725b76 100644 --- a/deploy/iso/minikube-iso/package/containerd-bin/containerd.service +++ b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd.service @@ -15,8 +15,9 @@ ExecStart=/usr/bin/containerd \ $CONTAINERD_MINIKUBE_OPTIONS \ --root ${PERSISTENT_DIR}/var/lib/containerd TasksMax=8192 +# ref: https://github.com/containerd/containerd/blob/main/docs/ops.md#systemd Delegate=yes -KillMode=mixed +KillMode=process LimitNOFILE=1048576 # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd_docker_io_hosts.toml b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd_docker_io_hosts.toml new file mode 100644 index 000000000000..00df747eba97 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/containerd-bin-aarch64/containerd_docker_io_hosts.toml @@ -0,0 +1 @@ +server = "https://registry-1.docker.io" \ No newline at end of file diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/Config.in b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/Config.in new file mode 100644 index 000000000000..ee257ae4f76a --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_CRI_DOCKERD_AARCH64 + bool "cri-dockerd" + default y + depends on BR2_aarch64 + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_DOCKER_BIN diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.hash b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.hash new file mode 100644 index 000000000000..70dddb0142cc --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.hash @@ -0,0 +1,13 @@ +sha256 4acd7605a0cb95a6ad50314d1f2497b92ee0f07382062d0c18a5434c1a3b9513 542e27dee12db61d6e96d2a83a20359474a5efa2.tar.gz +sha256 b2a082a8846ac74b8482ee6353d480cea0dec017bbec2b59b16e3f91efa2f5ca eb0c48ef49856f7d098ec005ddebcae197e08e49.tar.gz +sha256 ceb99430633f75f354c0e9fea1f3cf0e5138ac5ee3c2691a1a70811fd2feeeef a4d1895a2659ea9974bd7528a706592ab8b74181.tar.gz +sha256 cb90ff5fd4de69cc9cf2a63408d42b605f1d4e70b92012729c0a3bd9a4cfa197 0737013d3c48992724283d151e8a2a767a1839e9.tar.gz +sha256 a2e31a5c8ef122a91c4d4107ba2e0cb4950940f9bbf02ee3020715ba051caef9 0de30fc57b659cf23b1212d6516e0cceab9c91d1.tar.gz +sha256 fc467606256ef13d89365df00a1c4b4b4226628c1a6fd68d2c3fda32bdf36291 9a87d6ae274ecf0f23776920964d6484bd679282.tar.gz +sha256 b01ec9f9953d0017e8728927ebcc46c7ee63e435027b7e67106eb93fc83c387f 23513f4cfe8f02bc02130b4edba2c9d2c8fd320b.tar.gz +sha256 2d491257fb767a413069c7e4e85454c08a9f3456454a8fd840474d44135f5570 b58acf8f78f9d7bce1241d1cddb0932e7101f278.tar.gz +sha256 d83e2c9c7b678e2a2ec7e902e9cf46928e42ef72686f003ae5c85d6dc32ed380 c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742.tar.gz +sha256 4a56bba890eb6591a2ff2d28f93f3b4eb606b371b91ff0c8b5be3f9bb92b5c45 683f70f69901e66d49dfac802841ff843171f131.tar.gz +sha256 7951c46c206026f0b4c9e2b88d7f9fb67927abcfde37a1f4be5d16c83dc7a30b c1c566e0cc84abe6972f0bf857ecd8fe306258d9.tar.gz +sha256 2311f48aa6cada72dfcbea452472d18f09c6b64d48cd074f1ba6675658a9cd7c b9b889355f3002c01db294427964e454dfbc3feb.tar.gz +sha256 28d0e2b0ecbdef16909e5880f5fceee6e2caf2f555e7024b5468ff94181d0efb 55d6e1a1d6f2ee58949e13a0c66afe7d779ac942.tar.gz diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.mk b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.mk new file mode 100644 index 000000000000..d36dd7fe4614 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.mk @@ -0,0 +1,59 @@ +################################################################################ +# +# cri-dockerd +# +################################################################################ + +CRI_DOCKERD_AARCH64_VER = 0.4.1 +CRI_DOCKERD_AARCH64_REV = 55d6e1a +CRI_DOCKERD_AARCH64_VERSION = 55d6e1a1d6f2ee58949e13a0c66afe7d779ac942 +CRI_DOCKERD_AARCH64_SITE = https://github.com/Mirantis/cri-dockerd/archive +CRI_DOCKERD_AARCH64_SOURCE = $(CRI_DOCKERD_AARCH64_VERSION).tar.gz + +CRI_DOCKERD_AARCH64_DEPENDENCIES = host-go +CRI_DOCKERD_AARCH64_GOPATH = $(@D)/_output +CRI_DOCKERD_AARCH64_ENV = \ + $(GO_TARGET_ENV) \ + CGO_ENABLED=0 \ + GO111MODULE=on \ + GOPATH="$(CRI_DOCKERD_AARCH64_GOPATH)" \ + PATH=$(CRI_DOCKERD_AARCH64_GOPATH)/bin:$(BR_PATH) \ + GOARCH=arm64 \ + GOPROXY="https://proxy.golang.org,direct" \ + GOSUMDB='sum.golang.org'\ + GOOS=linux + +CRI_DOCKERD_AARCH64_COMPILE_SRC = $(CRI_DOCKERD_AARCH64_GOPATH)/src/github.com/Mirantis/cri-dockerd +CRI_DOCKERD_AARCH64_BUILDFLAGS = "-ldflags '-X github.com/Mirantis/cri-dockerd/version.Version=$(CRI_DOCKERD_AARCH64_VER) -X github.com/Mirantis/cri-dockerd/version.GitCommit=$(CRI_DOCKERD_AARCH64_REV)'" + +define CRI_DOCKERD_AARCH64_POST_EXTRACT_WORKAROUNDS + # Set -buildvcs=false to disable VCS stamping (fails in buildroot) + sed -i 's|go build |go build -buildvcs=false |' -i $(@D)/packaging/static/Makefile + # Use the GOARCH environment variable that we set + sed -i 's|GOARCH=$(ARCH) go build|GOARCH=$(GOARCH) go build|' -i $(@D)/packaging/static/Makefile +endef + +CRI_DOCKERD_AARCH64_POST_EXTRACT_HOOKS += CRI_DOCKERD_AARCH64_POST_EXTRACT_WORKAROUNDS + +# If https://github.com/Mirantis/cri-dockerd/blob/master/packaging/Makefile changes, then this will almost certainly need to change +# This uses the static make target at the top level Makefile, since that builds everything, then picks out the arm64 binary +define CRI_DOCKERD_AARCH64_BUILD_CMDS + $(CRI_DOCKERD_AARCH64_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) LDFLAGS=$(CRI_DOCKERD_AARCH64_BUILDFLAGS) GO_VERSION=$(GO_VERSION) -C $(@D) VERSION=$(CRI_DOCKERD_AARCH64_VER) REVISION=$(CRI_DOCKERD_AARCH64_REV) static +endef + +define CRI_DOCKERD_AARCH64_INSTALL_TARGET_CMDS + $(INSTALL) -Dm755 \ + $(@D)/packaging/static/build/arm/cri-dockerd/cri-dockerd \ + $(TARGET_DIR)/usr/bin/cri-dockerd +endef + +define CRI_DOCKERD_AARCH64_INSTALL_INIT_SYSTEMD + $(INSTALL) -Dm644 \ + $(@D)/packaging/systemd/cri-docker.service \ + $(TARGET_DIR)/usr/lib/systemd/system/cri-docker.service + $(INSTALL) -Dm644 \ + $(@D)/packaging/systemd/cri-docker.socket \ + $(TARGET_DIR)/usr/lib/systemd/system/cri-docker.socket +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/crictl-bin-aarch64/Config.in b/deploy/iso/minikube-iso/arch/aarch64/package/crictl-bin-aarch64/Config.in new file mode 100644 index 000000000000..26baaf3d93a5 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/crictl-bin-aarch64/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_CRICTL_BIN_AARCH64 + bool "crictl-bin" + default y + depends on BR2_aarch64 diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/crictl-bin-aarch64/crictl-bin.hash b/deploy/iso/minikube-iso/arch/aarch64/package/crictl-bin-aarch64/crictl-bin.hash new file mode 100644 index 000000000000..7880e13805d2 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/crictl-bin-aarch64/crictl-bin.hash @@ -0,0 +1,3 @@ +sha256 454eecd29fe636282339af5b73c60234a7d10e4b11b9e18937e33056763d72cf crictl-v1.21.0-linux-arm64.tar.gz +sha256 06e9224e42bc5e23085751e93cccdac89f7930ba6f7a45b8f8fc70ef663c37c4 crictl-v1.28.0-linux-arm64.tar.gz +sha256 c31d252e203df5f4cf37f314bd3092eb79087e791631c1e607087c74b6d0423f crictl-v1.34.0-linux-arm64.tar.gz diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/crictl-bin-aarch64/crictl-bin.mk b/deploy/iso/minikube-iso/arch/aarch64/package/crictl-bin-aarch64/crictl-bin.mk new file mode 100644 index 000000000000..ae477c4b5dfc --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/crictl-bin-aarch64/crictl-bin.mk @@ -0,0 +1,18 @@ +################################################################################ +# +# crictl-bin +# +################################################################################ + +CRICTL_BIN_AARCH64_VERSION = v1.34.0 +CRICTL_BIN_AARCH64_SITE = https://github.com/kubernetes-sigs/cri-tools/releases/download/$(CRICTL_BIN_AARCH64_VERSION) +CRICTL_BIN_AARCH64_SOURCE = crictl-$(CRICTL_BIN_AARCH64_VERSION)-linux-arm64.tar.gz +CRICTL_BIN_AARCH64_STRIP_COMPONENTS = 0 + +define CRICTL_BIN_AARCH64_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 \ + $(@D)/crictl \ + $(TARGET_DIR)/usr/bin/crictl +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/Config.in b/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/Config.in new file mode 100644 index 000000000000..312c5f148ae9 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_DOCKER_BIN_AARCH64 + bool "docker-bin" + default y + depends on BR2_aarch64 diff --git a/deploy/iso/minikube-iso/package/docker-bin/daemon.json b/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/daemon.json similarity index 100% rename from deploy/iso/minikube-iso/package/docker-bin/daemon.json rename to deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/daemon.json diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/docker-bin.hash b/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/docker-bin.hash new file mode 100644 index 000000000000..651b0b8af23f --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/docker-bin.hash @@ -0,0 +1,41 @@ +sha256 ea971edc1179088bfd25edd04a0c12848143d15cb8202ebb93a6a08973464fd0 docker-20.10.14.tgz +sha256 46102273fab8d6b8a7cf248a928ebaa4bee43114001c593b0d07092a34a439e1 docker-20.10.15.tgz +sha256 2f35d8d422b63a59279084c159c9092b63b6d974a7fcd868167aee4cc5f79f3b docker-20.10.16.tgz +sha256 249244024b507a6599084522cc73e73993349d13264505b387593f2b2ed603e6 docker-20.10.17.tgz +sha256 aa2b2da571fb9160df87fd5a831f203fb97655e35fb9c4e8d46e72078ae16acf docker-20.10.18.tgz +sha256 a04414b3fcf537f0cff17cf01e2b7cb3e39013c10d12e7959547f11aaf71f63c docker-20.10.19.tgz +sha256 ef69a2a8ddb87026a8b19e240b2ae3087764b7285860df7faee24e04024f2eb7 docker-20.10.20.tgz +sha256 b4ceb6151d4dd1bfc7557f5fe0317e29cfcac91f798c34fae7dee891a811f8ee docker-20.10.21.tgz +sha256 2c75cd6c3dc9b81cb5bde664c882e4339a2054e09cf09606f9f7dd6970e7f078 docker-20.10.22.tgz +sha256 5c40bb7dcd1aad94be49ad75d24e7fd409119ed0eaad04f5d13c4fddfb397c8a docker-20.10.23.tgz +sha256 7856c7ab0bc5f324391a2922781bbda503bcfbdea1d71eb2b8d871ffc7f8b468 docker-24.0.1.tgz +sha256 0031d3dc42d94df846743ab59c07e3303bccf3bc26fc6d3e981b13e035babf81 docker-24.0.2.tgz +sha256 193a8e1f051adce6a30a4c8486ce9b39929b9633a0da8c96444c9239859f4354 docker-24.0.4.tgz +sha256 ba911d9ff8a54a7afc8f91e998984f78a704bcb4932134c4dda2c401209a9921 docker-24.0.5.tgz +sha256 d9f58aecc42451503e82e6e0562cafa1812b334c92186a7f486e111e70a0f5bd docker-24.0.6.tgz +sha256 fe6cf4b509307665af542a89454c2ecfbbd62670fc5a5d17bac7150a6f6a6776 docker-24.0.7.tgz +sha256 ce7b2ffb522cde59f2bb4b67a17db4aaf66b058532effcd583ab85d02ede529f docker-25.0.4.tgz +sha256 f01642695115d8ceca64772ea65336ef7210ddc36096f1e533145f443bc718b3 docker-26.0.0.tgz +sha256 ffb86d77f764e544fe9dcf1c10296adebb7db01a18a5b9bce7d41814d852a8f4 docker-26.0.1.tgz +sha256 daf6326d790e114db759733f88ebe8a4d0dc56abf0e810fe62548c5f8e054b56 docker-26.0.2.tgz +sha256 751e0806aa8e80aa16b076ff91e4311f41b69394fdab84ca57cf5115192c3f52 docker-26.1.3.tgz +sha256 6f1a5fb161aef875d305ee4f79e65492b3c13e90dbe0a339df2ad6515e4f6849 docker-26.1.4.tgz +sha256 8ee4de2ee8598c5d549a181d89eede9ac325c3c9df93da04e557253e487e68b0 docker-27.0.1.tgz +sha256 4973e5e5bb2aeded816b9df4d281652535e82d6a8341653ae96ba7b7832dbb0c docker-27.0.2.tgz +sha256 b6705031e453bd3754b14da5bf0160458322e4927733d31f1e8e6e4d63d391c1 docker-27.0.3.tgz +sha256 f28bd10be2841063bdd2cc5354eae265df124835f841c1843e1264bab93c91a8 docker-27.1.0.tgz +sha256 86a395f67a5a23d8eb207ab5a9ab32a51f7fccd8b18dae40887e738db95c6bc4 docker-27.1.1.tgz +sha256 13ec868bc1df9d6a0bf6ed7c148e7d4fd6778fb254d823f62b8f6ce9bc8c9822 docker-27.1.2.tgz +sha256 6a95310ef7bf48c9f138c325ba7085919e97327d08f18e8973892549fb080a6c docker-27.2.0.tgz +sha256 4e2a2ad6b888cfef5a82ab3d3299daf598a6d0bd2e4ee6c56b87b6a76bb80e34 docker-27.2.1.tgz +sha256 0d11fabe8248d4be69cd6d4bf97beefbabb7d107fbdcfd267223b74993458c7c docker-27.3.0.tgz +sha256 4da6a6c7502b7ab561675a5ff5ac192d9b49d76d0b8847cf17ade246122279f4 docker-27.3.1.tgz +sha256 30885dd4e0dec8451d7e089242da77a5612822dcb5151c44d3d7193cb1e4d378 docker-27.4.0.tgz +sha256 2d8671dc70f5d71415ea9add4daa14b022b134fa5bac248cdbc3dfa5e88c0a5a docker-28.0.0.tgz +sha256 914f0aba14ef51dd76ef3f1f71a24e6bcf12d55bbb033289a0404988a2c3ab28 docker-28.0.1.tgz +sha256 d3291093e8ed576ed9e237b24dc4556a9ed21ff25d4c26578df612cb6fe0480f docker-28.0.4.tgz +sha256 61c65bddb74ea73ba9644769ae673b9cb05b8ae66902393d6123d05a5b07ee01 docker-28.3.2.tgz +sha256 db69fed523677c5a24bbc6ef2e85db07205a6af2fe8838c4db652bfff8227cfa docker-28.3.3.tgz +sha256 059416f4fe7465bdedbabd6d34db524e6e3bef65f3b61caa42a3d8ca94150ed2 docker-28.4.0.tgz +sha256 de54e37157f45a43f42f6271302372d95c0eb992cc35ecaee74989bb14058c94 docker-28.5.1.tgz +sha256 9e4f82996ab790724094475ebed33a736434bfe5d45231b676fef22ffb80044d docker-28.5.2.tgz diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/docker-bin.mk b/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/docker-bin.mk new file mode 100644 index 000000000000..6ec0dd294e0f --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/docker-bin.mk @@ -0,0 +1,55 @@ +################################################################################ +# +# docker-bin +# +################################################################################ + +DOCKER_BIN_AARCH64_VERSION = 28.5.2 +DOCKER_BIN_AARCH64_SITE = https://download.docker.com/linux/static/stable/aarch64 +DOCKER_BIN_AARCH64_SOURCE = docker-$(DOCKER_BIN_AARCH64_VERSION).tgz + +define DOCKER_BIN_AARCH64_USERS + - -1 docker -1 - - - - - +endef + +define DOCKER_BIN_AARCH64_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 \ + $(@D)/docker \ + $(TARGET_DIR)/bin/docker + + # As of 2019-05, we use upstream containerd so that we may update it independently of docker. + + # As of 2019-01, we use upstream runc so that we may update it independently of docker. + + # As of 2019-05, we use upstream ctr so that we may update it independently of docker. + + $(INSTALL) -D -m 0755 \ + $(@D)/dockerd \ + $(TARGET_DIR)/bin/dockerd + + $(INSTALL) -D -m 0755 \ + $(@D)/docker-init \ + $(TARGET_DIR)/bin/docker-init + + $(INSTALL) -D -m 0755 \ + $(@D)/docker-proxy \ + $(TARGET_DIR)/bin/docker-proxy + + # https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker + + $(INSTALL) -Dm644 \ + $(DOCKER_BIN_AARCH64_PKGDIR)/daemon.json \ + $(TARGET_DIR)/etc/docker/daemon.json +endef + +define DOCKER_BIN_AARCH64_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 \ + $(DOCKER_BIN_AARCH64_PKGDIR)/docker.socket \ + $(TARGET_DIR)/usr/lib/systemd/system/docker.socket + + $(INSTALL) -D -m 644 \ + $(DOCKER_BIN_AARCH64_PKGDIR)/forward.conf \ + $(TARGET_DIR)/etc/sysctl.d/forward.conf +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/package/docker-bin/docker.socket b/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/docker.socket similarity index 100% rename from deploy/iso/minikube-iso/package/docker-bin/docker.socket rename to deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/docker.socket diff --git a/deploy/iso/minikube-iso/package/docker-bin/forward.conf b/deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/forward.conf similarity index 100% rename from deploy/iso/minikube-iso/package/docker-bin/forward.conf rename to deploy/iso/minikube-iso/arch/aarch64/package/docker-bin-aarch64/forward.conf diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/docker-buildx-aarch64/Config.in b/deploy/iso/minikube-iso/arch/aarch64/package/docker-buildx-aarch64/Config.in new file mode 100644 index 000000000000..cd460bba1fe1 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/docker-buildx-aarch64/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_DOCKER_BUILDX_AARCH64 + bool "docker-buildx" + default y + depends on BR2_aarch64 diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/docker-buildx-aarch64/docker-buildx.hash b/deploy/iso/minikube-iso/arch/aarch64/package/docker-buildx-aarch64/docker-buildx.hash new file mode 100644 index 000000000000..4722d2ced010 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/docker-buildx-aarch64/docker-buildx.hash @@ -0,0 +1,3 @@ +sha256 8c9dd3fb18ccba399223ba0f623c9fe09fa38fb2a05283131be8e4e139b2d8fa v0.16.1.tar.gz +sha256 f314635765f3dc5efe089244280cd24a577e83d339fec1970fed16977bf28382 v0.16.2.tar.gz +sha256 a1c81f386142908d4984836fae75b5aa37e1921e7186ec8a548c54be62fece43 v0.17.1.tar.gz diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/docker-buildx-aarch64/docker-buildx.mk b/deploy/iso/minikube-iso/arch/aarch64/package/docker-buildx-aarch64/docker-buildx.mk new file mode 100644 index 000000000000..3dcaa252c205 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/docker-buildx-aarch64/docker-buildx.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# docker-buildx +# +################################################################################ + +DOCKER_BUILDX_AARCH64_VERSION = v0.17.1 +DOCKER_BUILDX_AARCH64_COMMIT = 257815a6fbaee88976808020bf04274388275ae8 +DOCKER_BUILDX_AARCH64_SITE = https://github.com/docker/buildx/archive +DOCKER_BUILDX_AARCH64_SOURCE = $(DOCKER_BUILDX_AARCH64_VERSION).tar.gz +DOCKER_BUILDX_AARCH64_GOPATH = $(@D)/_output +DOCKER_BUILDX_AARCH64_ENV = \ + $(GO_TARGET_ENV) \ + CGO_ENABLED=1 \ + GO111MODULE=on \ + GOPATH="$(DOCKER_BUILDX_AARCH64_GOPATH)" \ + GOBIN="$(DOCKER_BUILDX_AARCH64_GOPATH)/bin" \ + PATH=$(DOCKER_BUILDX_AARCH64_GOPATH)/bin:$(BR_PATH) \ + GOARCH=arm64 \ + GOPROXY="https://proxy.golang.org,direct" \ + GOSUMDB='sum.golang.org'\ + GOOS=linux + +DOCKER_BUILDX_AARCH64_COMPILE_SRC = $(DOCKER_BUILDX_AARCH64_GOPATH)/src/github.com/docker/buildx + +define DOCKER_BUILDX_AARCH64_POST_EXTRACT_WORKAROUNDS + # Set -buildvcs=false to disable VCS stamping (fails in buildroot) + sed -i 's|go build |go build -buildvcs=false |' -i $(@D)/hack/build +endef + +DOCKER_BUILDX_AARCH64_POST_EXTRACT_HOOKS += DOCKER_BUILDX_AARCH64_POST_EXTRACT_WORKAROUNDS + +define DOCKER_BUILDX_AARCH64_CONFIGURE_CMDS + mkdir -p $(TARGET_DIR)/usr/libexec/docker/cli-plugins +endef + +define DOCKER_BUILDX_AARCH64_BUILD_CMDS + PWD=$(DOCKER_BUILDX_AARCH64_COMPILE_SRC) $(DOCKER_BUILDX_AARCH64_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) VERSION=$(DOCKER_BUILDX_AARCH64_VERSION) REVISION=$(DOCKER_BUILDX_AARCH64_COMMIT) -C $(@D) build +endef + +define DOCKER_BUILDX_AARCH64_INSTALL_TARGET_CMDS + $(INSTALL) -Dm755 \ + $(@D)/bin/build/docker-buildx \ + $(TARGET_DIR)/usr/libexec/docker/cli-plugins/docker-buildx +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/nerdctl-bin-aarch64/Config.in b/deploy/iso/minikube-iso/arch/aarch64/package/nerdctl-bin-aarch64/Config.in new file mode 100644 index 000000000000..e95b666f215e --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/nerdctl-bin-aarch64/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_NERDCTL_BIN_AARCH64 + bool "nerdctl-bin" + default y + depends on BR2_aarch64 diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/nerdctl-bin-aarch64/nerdctl-bin.hash b/deploy/iso/minikube-iso/arch/aarch64/package/nerdctl-bin-aarch64/nerdctl-bin.hash new file mode 100644 index 000000000000..dc9c038689b2 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/nerdctl-bin-aarch64/nerdctl-bin.hash @@ -0,0 +1,13 @@ +sha256 0edb064a7d68d0425152ed59472ce7566700b4e547afb300481498d4c7fc6cf1 nerdctl-1.4.0-linux-arm64.tar.gz +sha256 1bb613049a91871614d407273e883057040e8393ef7be9508598a92b2efda4b7 nerdctl-1.5.0-linux-arm64.tar.gz +sha256 d5f1ed3cda151385d313f9007afc708cae0018c9da581088b092328db154d0c6 nerdctl-1.6.0-linux-arm64.tar.gz +sha256 ece848045290dd61f542942248587e91125563af46c0ea972a7c908d0d39c96c nerdctl-1.6.2-linux-arm64.tar.gz +sha256 1255eea5bc2dbac9339d0a9acfb0651dda117504d52cd52b38cf3c2251db4f39 nerdctl-1.7.0-linux-arm64.tar.gz +sha256 46affa0564bb74f595a817e7d5060140099d9cfd9e00e1272b4dbe8b0b85c655 nerdctl-1.7.1-linux-arm64.tar.gz +sha256 de68d5380d65604cd26c164988547cf46b698f7819a5d51d98e3a0f031f5594d nerdctl-1.7.2-linux-arm64.tar.gz +sha256 d8df47708ca57b9cd7f498055126ba7dcfc811d9ba43aae1830c93a09e70e22d nerdctl-1.7.4-linux-arm64.tar.gz +sha256 a53d87fc7d1f4ffeec55e5e08d2397b02ada0d334874c3cece306ad36f828a6c nerdctl-1.7.5-linux-arm64.tar.gz +sha256 4fa0a6e936c7a9cb9bb81e784fddaa593cb00afb48b08842e3f0503748c21348 nerdctl-1.7.6-linux-arm64.tar.gz +sha256 230ad8f4f88100774d123213a427d3d43071e0dcf9f70efbea50ab9efff1cd4c nerdctl-1.7.7-linux-arm64.tar.gz +sha256 62e34ce6156c942368968c0d88c731cb2f3b341785d584e56a2c175916d5f88d nerdctl-2.1.3-linux-arm64.tar.gz +sha256 37b353122e0785578d1680fb1d7be546f4c64d0a4aed7875d3a216b2c44be76d nerdctl-2.2.0-linux-arm64.tar.gz diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/nerdctl-bin-aarch64/nerdctl-bin.mk b/deploy/iso/minikube-iso/arch/aarch64/package/nerdctl-bin-aarch64/nerdctl-bin.mk new file mode 100644 index 000000000000..a8acffaf2354 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/aarch64/package/nerdctl-bin-aarch64/nerdctl-bin.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# nerdctl-bin +# +################################################################################ + +NERDCTL_BIN_AARCH64_VERSION = 2.2.0 +NERDCTL_BIN_AARCH64_COMMIT = 4eb4cbdb6b7ae82ab864a9829d1162a20eb61f81 +NERDCTL_BIN_AARCH64_SITE = https://github.com/containerd/nerdctl/releases/download/v$(NERDCTL_BIN_AARCH64_VERSION) +NERDCTL_BIN_AARCH64_SOURCE = nerdctl-$(NERDCTL_BIN_AARCH64_VERSION)-linux-arm64.tar.gz +NERDCTL_BIN_AARCH64_STRIP_COMPONENTS = 0 + +define NERDCTL_BIN_AARCH64_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 \ + $(@D)/nerdctl \ + $(TARGET_DIR)/usr/bin/nerdctl +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/arch/x86_64/Config.in.tmpl b/deploy/iso/minikube-iso/arch/x86_64/Config.in.tmpl new file mode 100644 index 000000000000..ff29c1b53e26 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/Config.in.tmpl @@ -0,0 +1,2 @@ +source "$BR2_EXTERNAL_MINIKUBE_PATH/package/Config.in" +source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/Config.in" diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/Config.in new file mode 100644 index 000000000000..f1a936b24060 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/Config.in @@ -0,0 +1,12 @@ +menu "System tools x86_64" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/buildkit-bin/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/cni-plugins-latest/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/containerd-bin/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/cri-dockerd/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/crictl-bin/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/docker-bin/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/docker-buildx/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/hyperv-daemons/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/nerdctl-bin/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/arch/x86_64/package/vbox-mount-service/Config.in" +endmenu diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/51-buildkit.preset b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/51-buildkit.preset new file mode 100644 index 000000000000..37de892c7105 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/51-buildkit.preset @@ -0,0 +1 @@ +disable buildkit.service diff --git a/deploy/iso/minikube-iso/package/buildkit-bin/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/Config.in similarity index 100% rename from deploy/iso/minikube-iso/package/buildkit-bin/Config.in rename to deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/Config.in diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.hash b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.hash new file mode 100644 index 000000000000..906ab8eb544b --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.hash @@ -0,0 +1,22 @@ +sha256 33bcaa49b31bc3a277ac75d32fce3f5442d39f53a1799b8624e985279b579f74 buildkit-v0.7.2.linux-amd64.tar.gz +sha256 28005748fae926edf8c93b7cb1df53ec49df65dec67105b94e7fb9c513fa78a4 buildkit-v0.8.0.linux-amd64.tar.gz +sha256 e0438a701d4192f80b2211b0a333984ee4f097c547904e40fc941daad57fe153 buildkit-v0.8.1.linux-amd64.tar.gz +sha256 d6d1ebc68806e626f31dd4ea17a406a93dcff14763971cd91b28cbaf3bfffcd4 buildkit-v0.8.2.linux-amd64.tar.gz +sha256 1b307268735c8f8e68b55781a6f4c03af38acc1bc29ba39ebaec6d422bccfb25 buildkit-v0.9.0.linux-amd64.tar.gz +sha256 fbc9c433cf77c5c00db6f797155edc60b44463524ae59a4961699dca15bcee00 buildkit-v0.10.3.linux-amd64.tar.gz +sha256 6d0fe3f1ec2dce4ed2a5c9baf05fb279225b3b0e3bbee4092304fe284ca7fc47 buildkit-v0.11.2.linux-amd64.tar.gz +sha256 6de87c88b1da0b1e899371dd4c0b883581401e2ddfb21a065510eeb3a8ac8743 buildkit-v0.11.4.linux-amd64.tar.gz +sha256 3f66f5bfbe509aadf1c21a26acfa472fe4c19046aa00a2d59b99733da867cd76 buildkit-v0.11.6.linux-amd64.tar.gz +sha256 c856bb4e6584d75ca6b2a7b6e946b7b14628e82bf1eccb4a43bc731bbc8e67ea buildkit-v0.12.2.linux-amd64.tar.gz +sha256 01682ab9e8e7cada519396b5f7b72c964c0c30da0c2eb7ee46caf30622717fa1 buildkit-v0.12.3.linux-amd64.tar.gz +sha256 75ffe406e4284b77af35447d829767cfa935eb7dd2ea2e3407223d6885bd8ebd buildkit-v0.12.4.linux-amd64.tar.gz +sha256 0893f55180c3da895ad998af25305f32413676a72a36b4372607ff7396f607e8 buildkit-v0.13.0.linux-amd64.tar.gz +sha256 5d4a6ef438851d7a0b22d17c7e806651c24c0982ddd6af8c02117fca84f167ec buildkit-v0.13.1.linux-amd64.tar.gz +sha256 9cd121931b015f05d7e4337f08272e36a83f69724c40141947eb11246ca0bb9d buildkit-v0.13.2.linux-amd64.tar.gz +sha256 836208f50ab8856a91aa5bba455b8451bbe261318cbc92e9c0ca3e786135756c buildkit-v0.14.1.linux-amd64.tar.gz +sha256 803de21f1656b2f0398e09204abcff2943c17b6b5951fe5ccfc8300012fcb838 buildkit-v0.15.0.linux-amd64.tar.gz +sha256 e433c3d3484ad5c13a74435a28ba96334369c9ecce13b4ed0e310ad5f90f7060 buildkit-v0.15.1.linux-amd64.tar.gz +sha256 59279df5853bef19a03ec15c5c31b772e59d91d079ab0221e1bafa023cf41c35 buildkit-v0.15.2.linux-amd64.tar.gz +sha256 a07a01da821d39bdb6e03a2f98ee407bb861cc61ece2e69e2ea4d61b3a4ab7f1 buildkit-v0.16.0.linux-amd64.tar.gz +sha256 02b986569330f09dc837486f80d9818812aba1ac8bd892b337adeb56eafe3794 buildkit-v0.18.1.linux-amd64.tar.gz +sha256 249ae16ba4be59fadb51a49ff4d632bbf37200e2b6e187fa8574f0f1bce8166b buildkit-v0.26.3.linux-amd64.tar.gz diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.mk b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.mk new file mode 100644 index 000000000000..09c91df8ada9 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.mk @@ -0,0 +1,53 @@ +################################################################################ +# +# buildkit-bin +# +################################################################################ + +BUILDKIT_BIN_VERSION = v0.26.3 +BUILDKIT_BIN_COMMIT = c70e8e666f8f6ee3c0d83b20c338be5aedeaa97a +BUILDKIT_BIN_SITE = https://github.com/moby/buildkit/releases/download/$(BUILDKIT_BIN_VERSION) +BUILDKIT_BIN_SOURCE = buildkit-$(BUILDKIT_BIN_VERSION).linux-amd64.tar.gz + +# https://github.com/opencontainers/runc.git +BUILDKIT_RUNC_VERSION = v1.1.4 +BUILDKIT_RUNC_COMMIT = 5fd4c4d144137e991c4acebb2146ab1483a97925 + +define BUILDKIT_BIN_USERS + - -1 buildkit -1 - - - - - +endef + +define BUILDKIT_BIN_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 \ + $(@D)/buildctl \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -D -m 0755 \ + $(@D)/buildkit-runc \ + $(TARGET_DIR)/usr/sbin + $(INSTALL) -D -m 0755 \ + $(@D)/buildkit-qemu-* \ + $(TARGET_DIR)/usr/sbin + $(INSTALL) -D -m 0755 \ + $(@D)/buildkitd \ + $(TARGET_DIR)/usr/sbin + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_PKGDIR)/buildkit.conf \ + $(TARGET_DIR)/usr/lib/tmpfiles.d/buildkit.conf + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_PKGDIR)/buildkitd.toml \ + $(TARGET_DIR)/etc/buildkit/buildkitd.toml +endef + +define BUILDKIT_BIN_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_PKGDIR)/buildkit.service \ + $(TARGET_DIR)/usr/lib/systemd/system/buildkit.service + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_PKGDIR)/buildkit.socket \ + $(TARGET_DIR)/usr/lib/systemd/system/buildkit.socket + $(INSTALL) -D -m 644 \ + $(BUILDKIT_BIN_PKGDIR)/51-buildkit.preset \ + $(TARGET_DIR)/usr/lib/systemd/system-preset/51-buildkit.preset +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit.conf b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit.conf new file mode 100644 index 000000000000..006273ce91b5 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit.conf @@ -0,0 +1 @@ +d /run/buildkit 0770 root buildkit diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit.service b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit.service new file mode 100644 index 000000000000..c1dad527ec0c --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit.service @@ -0,0 +1,11 @@ +[Unit] +Description=BuildKit +Requires=buildkit.socket +After=buildkit.socket +Documentation=https://github.com/moby/buildkit + +[Service] +ExecStart=/usr/sbin/buildkitd --addr fd:// + +[Install] +WantedBy=multi-user.target diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit.socket b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit.socket new file mode 100644 index 000000000000..776b23762718 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit.socket @@ -0,0 +1,12 @@ +[Unit] +Description=BuildKit +Documentation=https://github.com/moby/buildkit + +[Socket] +ListenStream=%t/buildkit/buildkitd.sock +SocketMode=0660 +SocketUser=root +SocketGroup=buildkit + +[Install] +WantedBy=sockets.target diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkitd.toml b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkitd.toml new file mode 100644 index 000000000000..62158d44d72a --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkitd.toml @@ -0,0 +1,5 @@ +[worker.oci] + enabled = false +[worker.containerd] + enabled = true + namespace = "k8s.io" diff --git a/deploy/iso/minikube-iso/package/cni-plugins/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/cni-plugins-latest/Config.in similarity index 57% rename from deploy/iso/minikube-iso/package/cni-plugins/Config.in rename to deploy/iso/minikube-iso/arch/x86_64/package/cni-plugins-latest/Config.in index cdca8f72dd28..f0b1955b56b0 100644 --- a/deploy/iso/minikube-iso/package/cni-plugins/Config.in +++ b/deploy/iso/minikube-iso/arch/x86_64/package/cni-plugins-latest/Config.in @@ -1,5 +1,5 @@ -config BR2_PACKAGE_CNI_PLUGINS - bool "cni-plugins" +config BR2_PACKAGE_CNI_PLUGINS_LATEST + bool "cni-plugins-latest" default y depends on BR2_x86_64 depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/cni-plugins-latest/cni-plugins-latest.hash b/deploy/iso/minikube-iso/arch/x86_64/package/cni-plugins-latest/cni-plugins-latest.hash new file mode 100644 index 000000000000..90ead47fbde3 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/cni-plugins-latest/cni-plugins-latest.hash @@ -0,0 +1,15 @@ +sha256 f04339a21b8edf76d415e7f17b620e63b8f37a76b2f706671587ab6464411f2d cni-plugins-amd64-v0.6.0.tgz +sha256 8589670f7f9b211a351dfcd211d4fe0b961d77283a7415443dc188f3dbf05668 v0.6.0.tar.gz +sha256 92c7599918be0a720ac020f137cdeac746dfa03da6b26e08a37132c5728c091f v0.7.5.tar.gz +sha256 9d1526ed965ac6562fd95a931ab2346b3c5efd58c2f569038ba3c530f7e66472 v0.8.5.tar.gz +sha256 bd682ffcf701e8f83283cdff7281aad0c83b02a56084d6e601216210732833f9 cni-plugins-linux-amd64-v0.8.5.tgz +sha256 754a71ed60a4bd08726c3af705a7d55ee3df03122b12e389fdba4bea35d7dd7e cni-plugins-linux-amd64-v1.3.0.tgz +sha256 c2485ddb3ffc176578ae30ae58137f0b88e50f7c7f2af7d53a569276b2949a33 cni-plugins-linux-amd64-v1.4.0.tgz +sha256 2a0ea7072d1806b8526489bcd3b4847a06ab010ee32ba3c3d4e5a3235d3eb138 cni-plugins-linux-amd64-v1.4.1.tgz +sha256 57a18478422cb321370e30a5ee6ce026321289cd9c94353ca697dddd7714f1a5 cni-plugins-linux-amd64-v1.5.0.tgz +sha256 77baa2f669980a82255ffa2f2717de823992480271ee778aa51a9c60ae89ff9b cni-plugins-linux-amd64-v1.5.1.tgz +sha256 682b49ff8933a997a52107161f1745f8312364b4c7f605ccdf7a77499130d89d cni-plugins-linux-amd64-v1.6.0.tgz +sha256 2503ce29ac445715ebe146073f45468153f9e28f45fa173cb060cfd9e735f563 cni-plugins-linux-amd64-v1.6.1.tgz +sha256 b8e811578fb66023f90d2e238d80cec3bdfca4b44049af74c374d4fae0f9c090 cni-plugins-linux-amd64-v1.6.2.tgz +sha256 1a28a0506bfe5bcdc981caf1a49eeab7e72da8321f1119b7be85f22621013098 cni-plugins-linux-amd64-v1.7.1.tgz +sha256 ab3bda535f9d90766cccc90d3dddb5482003dd744d7f22bcf98186bf8eea8be6 cni-plugins-linux-amd64-v1.8.0.tgz diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/cni-plugins-latest/cni-plugins-latest.mk b/deploy/iso/minikube-iso/arch/x86_64/package/cni-plugins-latest/cni-plugins-latest.mk new file mode 100644 index 000000000000..25472d9a74f8 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/cni-plugins-latest/cni-plugins-latest.mk @@ -0,0 +1,111 @@ +################################################################################ +# +# cni-plugins-latest +# +################################################################################ + +CNI_PLUGINS_LATEST_VERSION = v1.8.0 +CNI_PLUGINS_LATEST_SITE = https://github.com/containernetworking/plugins/releases/download/$(CNI_PLUGINS_LATEST_VERSION) +CNI_PLUGINS_LATEST_SOURCE = cni-plugins-linux-amd64-$(CNI_PLUGINS_LATEST_VERSION).tgz +CNI_PLUGINS_LATEST_LICENSE = Apache-2.0 +CNI_PLUGINS_LATEST_LICENSE_FILES = LICENSE + +define CNI_PLUGINS_LATEST_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 \ + $(@D)/bandwidth \ + $(TARGET_DIR)/opt/cni/bin/bandwidth + + ln -sf \ + ../../opt/cni/bin/bandwidth \ + $(TARGET_DIR)/usr/bin/bandwidth + + $(INSTALL) -D -m 0755 \ + $(@D)/bridge \ + $(TARGET_DIR)/opt/cni/bin/bridge + + ln -sf \ + ../../opt/cni/bin/bridge \ + $(TARGET_DIR)/usr/bin/bridge + + $(INSTALL) -D -m 0755 \ + $(@D)/vlan \ + $(TARGET_DIR)/opt/cni/bin/vlan + + ln -sf \ + ../../opt/cni/bin/vlan \ + $(TARGET_DIR)/usr/bin/vlan + + $(INSTALL) -D -m 0755 \ + $(@D)/tuning \ + $(TARGET_DIR)/opt/cni/bin/tuning + + ln -sf \ + ../../opt/cni/bin/tuning \ + $(TARGET_DIR)/usr/bin/tuning + + $(INSTALL) -D -m 0755 \ + $(@D)/ptp \ + $(TARGET_DIR)/opt/cni/bin/ptp + + ln -sf \ + ../../opt/cni/bin/ptp \ + $(TARGET_DIR)/usr/bin/ptp + + $(INSTALL) -D -m 0755 \ + $(@D)/portmap \ + $(TARGET_DIR)/opt/cni/bin/portmap + + ln -sf \ + ../../opt/cni/bin/portmap \ + $(TARGET_DIR)/usr/bin/portmap + + $(INSTALL) -D -m 0755 \ + $(@D)/macvlan \ + $(TARGET_DIR)/opt/cni/bin/macvlan + + ln -sf \ + ../../opt/cni/bin/macvlan \ + $(TARGET_DIR)/usr/bin/macvlan + + $(INSTALL) -D -m 0755 \ + $(@D)/loopback \ + $(TARGET_DIR)/opt/cni/bin/loopback + + ln -sf \ + ../../opt/cni/bin/loopback \ + $(TARGET_DIR)/usr/bin/loopback + + $(INSTALL) -D -m 0755 \ + $(@D)/ipvlan \ + $(TARGET_DIR)/opt/cni/bin/ipvlan + + ln -sf \ + ../../opt/cni/bin/ipvlan \ + $(TARGET_DIR)/usr/bin/ipvlan + + $(INSTALL) -D -m 0755 \ + $(@D)/host-local \ + $(TARGET_DIR)/opt/cni/bin/host-local + + ln -sf \ + ../../opt/cni/bin/host-local \ + $(TARGET_DIR)/usr/bin/host-local + + $(INSTALL) -D -m 0755 \ + $(@D)/dhcp \ + $(TARGET_DIR)/opt/cni/bin/dhcp + + ln -sf \ + ../../opt/cni/bin/dhcp \ + $(TARGET_DIR)/usr/bin/dhcp + + $(INSTALL) -D -m 0755 \ + $(@D)/firewall \ + $(TARGET_DIR)/opt/cni/bin/firewall + + ln -sf \ + ../../opt/cni/bin/firewall \ + $(TARGET_DIR)/usr/bin/firewall +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/50-minikube.preset b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/50-minikube.preset new file mode 100644 index 000000000000..1f46632a804b --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/50-minikube.preset @@ -0,0 +1 @@ +disable containerd.service diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/Config.in new file mode 100644 index 000000000000..c37bd25a8a2f --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_CONTAINERD_BIN + bool "containerd-bin" + default y + depends on BR2_x86_64 diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/config.toml b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/config.toml new file mode 100644 index 000000000000..873cee549d02 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/config.toml @@ -0,0 +1,68 @@ +version = 2 +root = "/var/lib/containerd" +state = "/run/containerd" +oom_score = 0 +# imports + +[grpc] + address = "/run/containerd/containerd.sock" + uid = 0 + gid = 0 + max_recv_message_size = 16777216 + max_send_message_size = 16777216 + +[debug] + address = "" + uid = 0 + gid = 0 + level = "" + +[metrics] + address = "" + grpc_histogram = false + +[cgroup] + path = "" + +[plugins] + [plugins."io.containerd.monitor.v1.cgroups"] + no_prometheus = false + [plugins."io.containerd.grpc.v1.cri"] + stream_server_address = "" + stream_server_port = "10010" + enable_selinux = false + sandbox_image = "registry.k8s.io/pause:3.6" + stats_collect_period = 10 + enable_tls_streaming = false + max_container_log_line_size = 16384 + restrict_oom_score_adj = false + + [plugins."io.containerd.grpc.v1.cri".containerd] + discard_unpacked_layers = true + snapshotter = "overlayfs" + default_runtime_name = "runc" + [plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime] + runtime_type = "" + runtime_engine = "" + runtime_root = "" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = false + + [plugins."io.containerd.grpc.v1.cri".cni] + bin_dir = "/opt/cni/bin" + conf_dir = "/etc/cni/net.d" + conf_template = "" + [plugins."io.containerd.grpc.v1.cri".registry] + config_path = "/etc/containerd/certs.d" + + [plugins."io.containerd.service.v1.diff-service"] + default = ["walking"] + [plugins."io.containerd.gc.v1.scheduler"] + pause_threshold = 0.02 + deletion_threshold = 0 + mutation_threshold = 100 + schedule_delay = "0s" + startup_delay = "100ms" diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd-bin.hash b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd-bin.hash new file mode 100644 index 000000000000..41a8c17fb089 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd-bin.hash @@ -0,0 +1,2 @@ +sha256 316d510a0428276d931023f72c09fdff1a6ba81d6cc36f31805fea6a3c88f515 containerd-2.1.4-linux-amd64.tar.gz +sha256 b9626a94ab93b00bcbcbf13d98deef972c6fb064690e57940632df54ad39ee71 containerd-2.2.0-linux-amd64.tar.gz diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd-bin.mk b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd-bin.mk new file mode 100644 index 000000000000..2cab31f17c50 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd-bin.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# containerd-bin +# +################################################################################ + +CONTAINERD_BIN_VERSION = 2.2.0 +CONTAINERD_BIN_SITE = https://github.com/containerd/containerd/releases/download/v$(CONTAINERD_BIN_VERSION) +CONTAINERD_BIN_SOURCE = containerd-$(CONTAINERD_BIN_VERSION)-linux-amd64.tar.gz +CONTAINERD_BIN_STRIP_COMPONENTS = 0 + +define CONTAINERD_BIN_INSTALL_TARGET_CMDS + $(INSTALL) -Dm755 \ + $(@D)/bin/containerd \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -Dm755 \ + $(@D)/bin/containerd-shim-runc-v2 \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -Dm755 \ + $(@D)/bin/ctr \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -Dm755 \ + $(@D)/bin/containerd-stress \ + $(TARGET_DIR)/usr/bin + $(INSTALL) -Dm644 \ + $(CONTAINERD_BIN_PKGDIR)/config.toml \ + $(TARGET_DIR)/etc/containerd/config.toml + $(INSTALL) -Dm644 \ + $(CONTAINERD_BIN_PKGDIR)/containerd_docker_io_hosts.toml \ + $(TARGET_DIR)/etc/containerd/certs.d/docker.io/hosts.toml +endef + +define CONTAINERD_BIN_INSTALL_INIT_SYSTEMD + $(INSTALL) -Dm644 \ + $(CONTAINERD_BIN_PKGDIR)/containerd.service \ + $(TARGET_DIR)/usr/lib/systemd/system/containerd.service + $(INSTALL) -Dm644 \ + $(CONTAINERD_BIN_PKGDIR)/50-minikube.preset \ + $(TARGET_DIR)/usr/lib/systemd/system-preset/50-minikube.preset +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd.service b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd.service new file mode 100644 index 000000000000..282f34725b76 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd.service @@ -0,0 +1,30 @@ +[Unit] +Description=containerd container runtime +Documentation=https://containerd.io +After=network-online.target minikube-automount.service +Requires=minikube-automount.service + +[Service] +EnvironmentFile=-/etc/sysconfig/containerd +EnvironmentFile=-/etc/sysconfig/containerd.minikube +EnvironmentFile=/var/run/minikube/env +Environment=GOTRACEBACK=crash +ExecStartPre=/sbin/modprobe overlay +ExecStart=/usr/bin/containerd \ + $CONTAINERD_OPTIONS \ + $CONTAINERD_MINIKUBE_OPTIONS \ + --root ${PERSISTENT_DIR}/var/lib/containerd +TasksMax=8192 +# ref: https://github.com/containerd/containerd/blob/main/docs/ops.md#systemd +Delegate=yes +KillMode=process +LimitNOFILE=1048576 +# Having non-zero Limit*s causes performance problems due to accounting overhead +# in the kernel. We recommend using cgroups to do container-local accounting. +LimitNPROC=infinity +LimitCORE=infinity +TimeoutStartSec=0 +Restart=on-abnormal + +[Install] +WantedBy=multi-user.target diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd_docker_io_hosts.toml b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd_docker_io_hosts.toml new file mode 100644 index 000000000000..00df747eba97 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/containerd-bin/containerd_docker_io_hosts.toml @@ -0,0 +1 @@ +server = "https://registry-1.docker.io" \ No newline at end of file diff --git a/deploy/iso/minikube-iso/package/conmon/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/Config.in similarity index 56% rename from deploy/iso/minikube-iso/package/conmon/Config.in rename to deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/Config.in index 6d4df09cf9ca..460971d045d4 100644 --- a/deploy/iso/minikube-iso/package/conmon/Config.in +++ b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/Config.in @@ -1,7 +1,8 @@ -config BR2_PACKAGE_CONMON - bool "conmon" +config BR2_PACKAGE_CRI_DOCKERD + bool "cri-dockerd" + default y + depends on BR2_x86_64 depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS depends on BR2_TOOLCHAIN_HAS_THREADS - select BR2_PACKAGE_LIBGLIB2 - select BR2_PACKAGE_SYSTEMD + select BR2_PACKAGE_DOCKER_BIN diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.hash b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.hash new file mode 100644 index 000000000000..70dddb0142cc --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.hash @@ -0,0 +1,13 @@ +sha256 4acd7605a0cb95a6ad50314d1f2497b92ee0f07382062d0c18a5434c1a3b9513 542e27dee12db61d6e96d2a83a20359474a5efa2.tar.gz +sha256 b2a082a8846ac74b8482ee6353d480cea0dec017bbec2b59b16e3f91efa2f5ca eb0c48ef49856f7d098ec005ddebcae197e08e49.tar.gz +sha256 ceb99430633f75f354c0e9fea1f3cf0e5138ac5ee3c2691a1a70811fd2feeeef a4d1895a2659ea9974bd7528a706592ab8b74181.tar.gz +sha256 cb90ff5fd4de69cc9cf2a63408d42b605f1d4e70b92012729c0a3bd9a4cfa197 0737013d3c48992724283d151e8a2a767a1839e9.tar.gz +sha256 a2e31a5c8ef122a91c4d4107ba2e0cb4950940f9bbf02ee3020715ba051caef9 0de30fc57b659cf23b1212d6516e0cceab9c91d1.tar.gz +sha256 fc467606256ef13d89365df00a1c4b4b4226628c1a6fd68d2c3fda32bdf36291 9a87d6ae274ecf0f23776920964d6484bd679282.tar.gz +sha256 b01ec9f9953d0017e8728927ebcc46c7ee63e435027b7e67106eb93fc83c387f 23513f4cfe8f02bc02130b4edba2c9d2c8fd320b.tar.gz +sha256 2d491257fb767a413069c7e4e85454c08a9f3456454a8fd840474d44135f5570 b58acf8f78f9d7bce1241d1cddb0932e7101f278.tar.gz +sha256 d83e2c9c7b678e2a2ec7e902e9cf46928e42ef72686f003ae5c85d6dc32ed380 c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742.tar.gz +sha256 4a56bba890eb6591a2ff2d28f93f3b4eb606b371b91ff0c8b5be3f9bb92b5c45 683f70f69901e66d49dfac802841ff843171f131.tar.gz +sha256 7951c46c206026f0b4c9e2b88d7f9fb67927abcfde37a1f4be5d16c83dc7a30b c1c566e0cc84abe6972f0bf857ecd8fe306258d9.tar.gz +sha256 2311f48aa6cada72dfcbea452472d18f09c6b64d48cd074f1ba6675658a9cd7c b9b889355f3002c01db294427964e454dfbc3feb.tar.gz +sha256 28d0e2b0ecbdef16909e5880f5fceee6e2caf2f555e7024b5468ff94181d0efb 55d6e1a1d6f2ee58949e13a0c66afe7d779ac942.tar.gz diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.mk b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.mk new file mode 100644 index 000000000000..cd2e35d37d39 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.mk @@ -0,0 +1,57 @@ +################################################################################ +# +# cri-dockerd +# +################################################################################ + +CRI_DOCKERD_VER = 0.4.1 +CRI_DOCKERD_REV = 55d6e1a +CRI_DOCKERD_VERSION = 55d6e1a1d6f2ee58949e13a0c66afe7d779ac942 +CRI_DOCKERD_SITE = https://github.com/Mirantis/cri-dockerd/archive +CRI_DOCKERD_SOURCE = $(CRI_DOCKERD_VERSION).tar.gz + +CRI_DOCKERD_DEPENDENCIES = host-go +CRI_DOCKERD_GOPATH = $(@D)/_output +CRI_DOCKERD_ENV = \ + $(GO_TARGET_ENV) \ + CGO_ENABLED=0 \ + GO111MODULE=on \ + GOPATH="$(CRI_DOCKERD_GOPATH)" \ + PATH=$(CRI_DOCKERD_GOPATH)/bin:$(BR_PATH) \ + GOARCH=amd64 \ + GOPROXY="https://proxy.golang.org,direct" \ + GOSUMDB='sum.golang.org'\ + GOOS=linux + +CRI_DOCKERD_COMPILE_SRC = $(CRI_DOCKERD_GOPATH)/src/github.com/Mirantis/cri-dockerd +CRI_DOCKERD_BUILDFLAGS = "-ldflags '-X github.com/Mirantis/cri-dockerd/version.Version=$(CRI_DOCKERD_VER) -X github.com/Mirantis/cri-dockerd/version.GitCommit=$(CRI_DOCKERD_REV)'" + +define CRI_DOCKERD_POST_EXTRACT_WORKAROUNDS + # Set -buildvcs=false to disable VCS stamping (fails in buildroot) + sed -i 's|go build |go build -buildvcs=false |' -i $(@D)/packaging/static/Makefile + # Use the GOARCH environment variable that we set + sed -i 's|GOARCH=$(ARCH) go build|GOARCH=$(GOARCH) go build|' -i $(@D)/packaging/static/Makefile +endef + +CRI_DOCKERD_POST_EXTRACT_HOOKS += CRI_DOCKERD_POST_EXTRACT_WORKAROUNDS + +define CRI_DOCKERD_BUILD_CMDS + $(CRI_DOCKERD_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) LDFLAGS=$(CRI_DOCKERD_BUILDFLAGS) GO_VERSION=$(GO_VERSION) -C $(@D) VERSION=$(CRI_DOCKERD_VER) REVISION=$(CRI_DOCKERD_REV) static-linux +endef + +define CRI_DOCKERD_INSTALL_TARGET_CMDS + $(INSTALL) -Dm755 \ + $(@D)/packaging/static/build/linux/cri-dockerd/cri-dockerd \ + $(TARGET_DIR)/usr/bin/cri-dockerd +endef + +define CRI_DOCKERD_INSTALL_INIT_SYSTEMD + $(INSTALL) -Dm644 \ + $(@D)/packaging/systemd/cri-docker.service \ + $(TARGET_DIR)/usr/lib/systemd/system/cri-docker.service + $(INSTALL) -Dm644 \ + $(@D)/packaging/systemd/cri-docker.socket \ + $(TARGET_DIR)/usr/lib/systemd/system/cri-docker.socket +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/package/crictl-bin/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/crictl-bin/Config.in similarity index 100% rename from deploy/iso/minikube-iso/package/crictl-bin/Config.in rename to deploy/iso/minikube-iso/arch/x86_64/package/crictl-bin/Config.in diff --git a/deploy/iso/minikube-iso/package/crictl-bin/crictl-bin.hash b/deploy/iso/minikube-iso/arch/x86_64/package/crictl-bin/crictl-bin.hash similarity index 81% rename from deploy/iso/minikube-iso/package/crictl-bin/crictl-bin.hash rename to deploy/iso/minikube-iso/arch/x86_64/package/crictl-bin/crictl-bin.hash index 432a95b281f5..7603b6b0320a 100644 --- a/deploy/iso/minikube-iso/package/crictl-bin/crictl-bin.hash +++ b/deploy/iso/minikube-iso/arch/x86_64/package/crictl-bin/crictl-bin.hash @@ -7,3 +7,5 @@ sha256 876dd2b3d0d1c2590371f940fb1bf1fbd5f15aebfbe456703ee465d959700f4a crictl- sha256 87d8ef70b61f2fe3d8b4a48f6f712fd798c6e293ed3723c1e4bbb5052098f0ae crictl-v1.19.0-linux-amd64.tar.gz sha256 44d5f550ef3f41f9b53155906e0229ffdbee4b19452b4df540265e29572b899c crictl-v1.20.0-linux-amd64.tar.gz sha256 85c78a35584971625bf1c3bcd46e5404a90396f979d7586f18b11119cb623e24 crictl-v1.21.0-linux-amd64.tar.gz +sha256 8dc78774f7cbeaf787994d386eec663f0a3cf24de1ea4893598096cb39ef2508 crictl-v1.28.0-linux-amd64.tar.gz +sha256 a8ff2a3edb37a98daf3aba7c3b284fe0aa5bff24166d896ab9ef64c8913c9f51 crictl-v1.34.0-linux-amd64.tar.gz diff --git a/deploy/iso/minikube-iso/package/crictl-bin/crictl-bin.mk b/deploy/iso/minikube-iso/arch/x86_64/package/crictl-bin/crictl-bin.mk similarity index 94% rename from deploy/iso/minikube-iso/package/crictl-bin/crictl-bin.mk rename to deploy/iso/minikube-iso/arch/x86_64/package/crictl-bin/crictl-bin.mk index 16331a6c01b4..9251c990c4b9 100644 --- a/deploy/iso/minikube-iso/package/crictl-bin/crictl-bin.mk +++ b/deploy/iso/minikube-iso/arch/x86_64/package/crictl-bin/crictl-bin.mk @@ -4,7 +4,7 @@ # ################################################################################ -CRICTL_BIN_VERSION = v1.21.0 +CRICTL_BIN_VERSION = v1.34.0 CRICTL_BIN_SITE = https://github.com/kubernetes-sigs/cri-tools/releases/download/$(CRICTL_BIN_VERSION) CRICTL_BIN_SOURCE = crictl-$(CRICTL_BIN_VERSION)-linux-amd64.tar.gz CRICTL_BIN_STRIP_COMPONENTS = 0 diff --git a/deploy/iso/minikube-iso/package/docker-bin/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/Config.in similarity index 100% rename from deploy/iso/minikube-iso/package/docker-bin/Config.in rename to deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/Config.in diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/daemon.json b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/daemon.json new file mode 100644 index 000000000000..46c2107f11ad --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/daemon.json @@ -0,0 +1,10 @@ +{ + "exec-opts": [ + "native.cgroupdriver=systemd" + ], + "log-driver": "json-file", + "log-opts": { + "max-size": "100m" + }, + "storage-driver": "overlay2" +} diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/docker-bin.hash b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/docker-bin.hash new file mode 100644 index 000000000000..85a6753bf8bf --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/docker-bin.hash @@ -0,0 +1,77 @@ +sha256 893e3c6e89c0cd2c5f1e51ea41bc2dd97f5e791fcfa3cee28445df277836339d docker-1.11.1.tgz +sha256 cadc6025c841e034506703a06cf54204e51d0cadfae4bae62628ac648d82efdd docker-1.12.6.tgz +sha256 e582486c9db0f4229deba9f8517145f8af6c5fae7a1243e6b07876bd3e706620 docker-17.06.0-ce.tgz +sha256 a9e90a73c3cdfbf238f148e1ec0eaff5eb181f92f35bdd938fd7dab18e1c4647 docker-17.09.0-ce.tgz +sha256 77d3eaa72f2b63c94ea827b548f4a8b572b754a431c59258e3f2730411f64be7 docker-17.09.1-ce.tgz +sha256 692e1c72937f6214b1038def84463018d8e320c8eaf8530546c84c2f8f9c767d docker-17.12.0-ce.tgz +sha256 1270dce1bd7e1838d62ae21d2505d87f16efc1d9074645571daaefdfd0c14054 docker-17.12.1-ce.tgz +sha256 83be159cf0657df9e1a1a4a127d181725a982714a983b2bdcc0621244df93687 docker-18.06.1-ce.tgz +sha256 a979d9a952fae474886c7588da692ee00684cb2421d2c633c7ed415948cf0b10 docker-18.06.2-ce.tgz +sha256 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822 docker-18.06.3-ce.tgz +sha256 99ca9395e9c7ffbf75537de71aa828761f492491d02bc6e29db2920fa582c6c5 docker-18.09.5.tgz +sha256 1f3f6774117765279fce64ee7f76abbb5f260264548cf80631d68fb2d795bb09 docker-18.09.6.tgz +sha256 e106ccfa2b1f60794faaa6bae57a2dac9dc4cb33e5541fad6a826ea525d01cc4 docker-18.09.7.tgz +sha256 12277eff64363f51ba2f20dd258bdc2c3248022996c0251921193ec6fd179e52 docker-18.09.8.tgz +sha256 82a362af7689038c51573e0fd0554da8703f0d06f4dfe95dd5bda5acf0ae45fb docker-18.09.9.tgz +sha256 50cdf38749642ec43d6ac50f4a3f1f7f6ac688e8d8b4e1c5b7be06e1a82f06e9 docker-19.03.5.tgz +sha256 34ff89ce917796594cd81149b1777d07786d297ffd0fef37a796b5897052f7cc docker-19.03.6.tgz +sha256 033e97ae6b31e21c598fd089ea034c08d75dc744ceb787898d63dfc4e45ead03 docker-19.03.7.tgz +sha256 7f4115dc6a3c19c917f8b9664d7b51c904def1c984e082c4600097433323cf6f docker-19.03.8.tgz +sha256 1c03c78be198d9085e7dd6806fc5d93264baaf0c7ea17f584d00af48eae508ee docker-19.03.9.tgz +sha256 7c1576a0bc749418d1423d2b78c8920b5d61f849789904612862dd118742e82b docker-19.03.10.tgz +sha256 0f4336378f61ed73ed55a356ac19e46699a995f2aff34323ba5874d131548b9e docker-19.03.11.tgz +sha256 88de1b87b8a2582fe827154899475a72fb707c5793cfb39d2a24813ba1f31197 docker-19.03.12.tgz +sha256 ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8 docker-19.03.13.tgz +sha256 9f1ec28e357a8f18e9561129239caf9c0807d74756e21cc63637c7fdeaafe847 docker-19.03.14.tgz +sha256 02936a3585f12f13b21b95e02ae722d74eaf1870b536997e914659ee307b2ac4 docker-20.10.0.tgz +sha256 8790f3b94ee07ca69a9fdbd1310cbffc729af0a07e5bf9f34a79df1e13d2e50e docker-20.10.1.tgz +sha256 97017e32a8ecbdd1826bb3c7b1424303ee0dea3f900d33591b1df5e394ed4eed docker-20.10.2.tgz +sha256 47065a47f0692cd5af03073c7386fe090d9ef5ac88a7d8455a884d8e15809be5 docker-20.10.3.tgz +sha256 6ec28b6a251e093f5cf32569c4bfce4821eda02923b33c060694e6ca2c851daa docker-20.10.4.tgz +sha256 3f18edc66e1faae607d428349e77f9800bdea554528521f0f6c49fc3f1de6abf docker-20.10.5.tgz +sha256 e3b6c3b11518281a51fb0eee73138482b83041e908f01adf8abd3a24b34ea21e docker-20.10.6.tgz +sha256 34ad50146fce29b28e5115a1e8510dd5232459c9a4a9f28f65909f92cca314d9 docker-20.10.7.tgz +sha256 7ea11ecb100fdc085dbfd9ab1ff380e7f99733c890ed815510a5952e5d6dd7e0 docker-20.10.8.tgz +sha256 ee9b5be14e54bf92f48c82c2e6a83fbdd1c5329e8f247525a9ed2fe90d9f89a5 docker-20.10.12.tgz +sha256 39edf7c8d773939ff5e4d318ae565691a9c7e754ed768e172757e58898fb7079 docker-20.10.13.tgz +sha256 7ca4aeeed86619909ae584ce3405da3766d495f98904ffbd9d859add26b83af5 docker-20.10.14.tgz +sha256 9ccfc39305ae1d8882d18c9c431544fca82913d6df717409ac2244ac58c4f070 docker-20.10.15.tgz +sha256 b43ac6c4d2f0b64e445c6564860e4fccd6331f4a61815a60642c7748b53c59ff docker-20.10.16.tgz +sha256 969210917b5548621a2b541caf00f86cc6963c6cf0fb13265b9731c3b98974d9 docker-20.10.17.tgz +sha256 0629b063fa3aa5660f3fb96f67edb0e20e92d5050b82403f95faf1c142177401 docker-20.10.18.tgz +sha256 ddcd732baaa03958cc8f326a5dca09bcd8f348bb7d2737aaf67bbdd7d80302d1 docker-20.10.19.tgz +sha256 a303cee9125c89abbbb6c4f044b3e2c01c7895e373b90d8de16a7ed25bb2530a docker-20.10.20.tgz +sha256 2582bed8772b283bda9d4565c0af76ee653c93d93dc6b8d0aad795d731a1bb81 docker-20.10.21.tgz +sha256 945c3a3ddcb79ee7307496c2f39eb3d8372466e8654e63d60bbb462e4a3c1427 docker-20.10.22.tgz +sha256 0ee39f72cc434137d294c14d30897826bad6e24979e421f51a252769ad37e6d1 docker-20.10.23.tgz +sha256 298da71767e61b5b9bd40dda26e926d439106eab92df2cf66df6265d4046e3cf docker-24.0.1.tgz +sha256 fc07577bc0abdcdc02948493cd30b36cf0b096213fade9a7e699132c06c2e34c docker-24.0.2.tgz +sha256 0ab79ae5f19e2ef5bdc3c3009c8b770dea6189e0f1e0ef4935d78fd30519b11d docker-24.0.4.tgz +sha256 0a5f3157ce25532c5c1261a97acf3b25065cfe25940ef491fa01d5bea18ddc86 docker-24.0.5.tgz +sha256 99792dec613df93169a118b05312a722a63604b868e4c941b1b436abcf3bb70f docker-24.0.6.tgz +sha256 984d59a77fa6acab97ea725a966facd33725e0e09c2fee975397fe1c6379bd3d docker-24.0.7.tgz +sha256 23db817b99aac6d5d7fcb1f706e50b5a412d78a9438975d6b4a54c58dc409bfb docker-25.0.4.tgz +sha256 d69e8eedc72d6d219933ab53b8e7f2dbd9e64695d5db68a2df17333db433c456 docker-26.0.0.tgz +sha256 d362e648f6a7cccbe313145864d2316ab3114abb22c15a685427ebd5cb306078 docker-26.0.1.tgz +sha256 118a556898671cceb4d5d726b9114ca5cbbae5b5956716eb92f465932f1c6363 docker-26.0.2.tgz +sha256 a50076d372d3bbe955664707af1a4ce4f5df6b2d896e68b12ecc74e724d1db31 docker-26.1.3.tgz +sha256 a9cede81aa3337f310132c2c920dba2edc8d29b7d97065b63ba41cf47ae1ca4f docker-26.1.4.tgz +sha256 1e65f8bd3ac5ba8a4267a680a5427b59f8af1c1a3853bdbf77cdcaa33d5f6504 docker-27.0.1.tgz +sha256 cc0dc835067509b7bedb31ed5db5b44f54666f820dd33f5191a9f9f5c68d4fe8 docker-27.0.2.tgz +sha256 f6299aeada422d527cba35061fe56df5e2294776f6d39b7830d699335054b1e6 docker-27.0.3.tgz +sha256 bc4c2d3ebbfdad92d64eb95a9d77ebe4afcbb9acdfd052cea7e74a71767ba727 docker-27.1.0.tgz +sha256 118da6b8fc8e8b6c086ab0dd5e64ee549376c3a3f963723bbc9a46db475bf21f docker-27.1.1.tgz +sha256 a7fff574037af22bd0239e7e5601c312d9fe9c55e2b9cf5ddea86d5499a4de88 docker-27.1.2.tgz +sha256 3bd24d57ad188013d3ea3cc9366055452bf7a6e21756fdc0a682e80779d3c3bc docker-27.2.0.tgz +sha256 afa9895e15bd7c0cac3c57979edc5706a4d5e7ac78c902d22e3b426fedf0c8a8 docker-27.2.1.tgz +sha256 1d47501a8fd99923ad655b1b85bb24f12b66db3b0e28c6dd12000d397b4f20d6 docker-27.3.0.tgz +sha256 9b4f6fe406e50f9085ee474c451e2bb5adb119a03591f467922d3b4e2ddf31d3 docker-27.3.1.tgz +sha256 64bb136b612a7bca537ef99b50504e4250cb71117c2d26552d20cda122b6c5b4 docker-27.4.0.tgz +sha256 0ac653c8d2503ee814471ac1df4a82c14c6d3ac69f6cef175d7a88a4ceeb6cfc docker-28.0.0.tgz +sha256 5ed6d86b5d78199eac0dbcd4d81e6de6545bc8c8a575b6efc1d4a4b292824746 docker-28.0.1.tgz +sha256 6b130fa5fb13516620d5ece0b63f63a495cede428bb2f9e24449022e9d72e0cb docker-28.0.4.tgz +sha256 9d274a3f330764ebd9cc82fe29e5dd5d0569bc34f9f53e3ac8905444cd88b413 docker-28.3.2.tgz +sha256 40c16bcf324f354b382d07e845e6a79e3493fc0c09b252dff9e1a46125589bff docker-28.3.3.tgz +sha256 21516934188f06d0e5f232cbde8112701f6d82899016240bc7a5d619f6b0059c docker-28.4.0.tgz +sha256 5c0d19f31fece1accd0358bb8cff591fe25d7b6cba19f0fd412cbfdc07f75ff6 docker-28.5.1.tgz +sha256 ea90cfd12e1eeb12aa1c971741adb8bd4ed88e2a574eaac13f5029a1dbc6300d docker-28.5.2.tgz diff --git a/deploy/iso/minikube-iso/package/docker-bin/docker-bin.mk b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/docker-bin.mk similarity index 94% rename from deploy/iso/minikube-iso/package/docker-bin/docker-bin.mk rename to deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/docker-bin.mk index 726209627d5c..bc3618fea107 100644 --- a/deploy/iso/minikube-iso/package/docker-bin/docker-bin.mk +++ b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/docker-bin.mk @@ -4,7 +4,7 @@ # ################################################################################ -DOCKER_BIN_VERSION = 20.10.8 +DOCKER_BIN_VERSION = 28.5.2 DOCKER_BIN_SITE = https://download.docker.com/linux/static/stable/x86_64 DOCKER_BIN_SOURCE = docker-$(DOCKER_BIN_VERSION).tgz @@ -44,7 +44,7 @@ endef define DOCKER_BIN_INSTALL_INIT_SYSTEMD $(INSTALL) -D -m 644 \ - $(BR2_EXTERNAL)/package/docker-bin/docker.socket \ + $(DOCKER_BIN_PKGDIR)/docker.socket \ $(TARGET_DIR)/usr/lib/systemd/system/docker.socket $(INSTALL) -D -m 644 \ diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/docker.socket b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/docker.socket new file mode 100644 index 000000000000..7dd95098e4ad --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/docker.socket @@ -0,0 +1,12 @@ +[Unit] +Description=Docker Socket for the API +PartOf=docker.service + +[Socket] +ListenStream=/var/run/docker.sock +SocketMode=0660 +SocketUser=root +SocketGroup=docker + +[Install] +WantedBy=sockets.target diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/forward.conf b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/forward.conf new file mode 100644 index 000000000000..250ee89118fa --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/docker-bin/forward.conf @@ -0,0 +1,2 @@ +net.ipv4.ip_forward=1 + diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/docker-buildx/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/docker-buildx/Config.in new file mode 100644 index 000000000000..fe34adf1f482 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/docker-buildx/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_DOCKER_BUILDX + bool "docker-buildx" + default y + depends on BR2_x86_64 diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/docker-buildx/docker-buildx.hash b/deploy/iso/minikube-iso/arch/x86_64/package/docker-buildx/docker-buildx.hash new file mode 100644 index 000000000000..4722d2ced010 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/docker-buildx/docker-buildx.hash @@ -0,0 +1,3 @@ +sha256 8c9dd3fb18ccba399223ba0f623c9fe09fa38fb2a05283131be8e4e139b2d8fa v0.16.1.tar.gz +sha256 f314635765f3dc5efe089244280cd24a577e83d339fec1970fed16977bf28382 v0.16.2.tar.gz +sha256 a1c81f386142908d4984836fae75b5aa37e1921e7186ec8a548c54be62fece43 v0.17.1.tar.gz diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/docker-buildx/docker-buildx.mk b/deploy/iso/minikube-iso/arch/x86_64/package/docker-buildx/docker-buildx.mk new file mode 100644 index 000000000000..3fe8e9ac2558 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/docker-buildx/docker-buildx.mk @@ -0,0 +1,47 @@ +################################################################################ +# +# docker-buildx +# +################################################################################ + +DOCKER_BUILDX_VERSION = v0.17.1 +DOCKER_BUILDX_COMMIT = 257815a6fbaee88976808020bf04274388275ae8 +DOCKER_BUILDX_SITE = https://github.com/docker/buildx/archive +DOCKER_BUILDX_SOURCE = $(DOCKER_BUILDX_VERSION).tar.gz +DOCKER_BUILDX_GOPATH = $(@D)/_output +DOCKER_BUILDX_ENV = \ + $(GO_TARGET_ENV) \ + CGO_ENABLED=1 \ + GO111MODULE=on \ + GOPATH="$(DOCKER_BUILDX_GOPATH)" \ + GOBIN="$(DOCKER_BUILDX_GOPATH)/bin" \ + PATH=$(DOCKER_BUILDX_GOPATH)/bin:$(BR_PATH) \ + GOARCH=amd64 \ + GOPROXY="https://proxy.golang.org,direct" \ + GOSUMDB='sum.golang.org'\ + GOOS=linux + +DOCKER_BUILDX_COMPILE_SRC = $(DOCKER_BUILDX_GOPATH)/src/github.com/docker/buildx + +define DOCKER_BUILDX_POST_EXTRACT_WORKAROUNDS + # Set -buildvcs=false to disable VCS stamping (fails in buildroot) + sed -i 's|go build |go build -buildvcs=false |' -i $(@D)/hack/build +endef + +DOCKER_BUILDX_POST_EXTRACT_HOOKS += DOCKER_BUILDX_POST_EXTRACT_WORKAROUNDS + +define DOCKER_BUILDX_CONFIGURE_CMDS + mkdir -p $(TARGET_DIR)/usr/libexec/docker/cli-plugins +endef + +define DOCKER_BUILDX_BUILD_CMDS + PWD=$(DOCKER_BUILDX_COMPILE_SRC) $(DOCKER_BUILDX_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) VERSION=$(DOCKER_BUILDX_VERSION) REVISION=$(DOCKER_BUILDX_COMMIT) -C $(@D) build +endef + +define DOCKER_BUILDX_INSTALL_TARGET_CMDS + $(INSTALL) -Dm755 \ + $(@D)/bin/build/docker-buildx \ + $(TARGET_DIR)/usr/libexec/docker/cli-plugins/docker-buildx +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/package/hyperv-daemons/70-hv_fcopy.rules b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/70-hv_fcopy.rules similarity index 100% rename from deploy/iso/minikube-iso/package/hyperv-daemons/70-hv_fcopy.rules rename to deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/70-hv_fcopy.rules diff --git a/deploy/iso/minikube-iso/package/hyperv-daemons/70-hv_kvp.rules b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/70-hv_kvp.rules similarity index 100% rename from deploy/iso/minikube-iso/package/hyperv-daemons/70-hv_kvp.rules rename to deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/70-hv_kvp.rules diff --git a/deploy/iso/minikube-iso/package/hyperv-daemons/70-hv_vss.rules b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/70-hv_vss.rules similarity index 100% rename from deploy/iso/minikube-iso/package/hyperv-daemons/70-hv_vss.rules rename to deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/70-hv_vss.rules diff --git a/deploy/iso/minikube-iso/package/hyperv-daemons/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/Config.in similarity index 100% rename from deploy/iso/minikube-iso/package/hyperv-daemons/Config.in rename to deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/Config.in index 834b31bdcb64..fc31001b0160 100644 --- a/deploy/iso/minikube-iso/package/hyperv-daemons/Config.in +++ b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/Config.in @@ -1,4 +1,4 @@ config BR2_PACKAGE_HYPERV_DAEMONS bool "hyperv-daemons" - default y depends on BR2_x86_64 + default y diff --git a/deploy/iso/minikube-iso/package/hyperv-daemons/hv_fcopy_daemon.service b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hv_fcopy_daemon.service similarity index 56% rename from deploy/iso/minikube-iso/package/hyperv-daemons/hv_fcopy_daemon.service rename to deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hv_fcopy_daemon.service index 88fed6f5ada0..26ac294258fb 100644 --- a/deploy/iso/minikube-iso/package/hyperv-daemons/hv_fcopy_daemon.service +++ b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hv_fcopy_daemon.service @@ -1,6 +1,6 @@ [Unit] Description=Hyper-V FCOPY Daemon -Documentation=https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/integration-services#hyper-v-guest-service-interface +Documentation=https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/integration-services#hyper-v-guest-service-interface BindsTo=sys-devices-virtual-misc-vmbus\x21hv_fcopy.device [Service] diff --git a/deploy/iso/minikube-iso/package/hyperv-daemons/hv_kvp_daemon.service b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hv_kvp_daemon.service similarity index 56% rename from deploy/iso/minikube-iso/package/hyperv-daemons/hv_kvp_daemon.service rename to deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hv_kvp_daemon.service index 6cd7e9d6c127..3c87531fc3c4 100644 --- a/deploy/iso/minikube-iso/package/hyperv-daemons/hv_kvp_daemon.service +++ b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hv_kvp_daemon.service @@ -1,6 +1,6 @@ [Unit] Description=Hyper-V Key Value Pair Daemon -Documentation=https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/integration-services#hyper-v-data-exchange-service-kvp +Documentation=https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/integration-services#hyper-v-data-exchange-service-kvp BindsTo=sys-devices-virtual-misc-vmbus\x21hv_kvp.device [Service] diff --git a/deploy/iso/minikube-iso/package/hyperv-daemons/hv_vss_daemon.service b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hv_vss_daemon.service similarity index 54% rename from deploy/iso/minikube-iso/package/hyperv-daemons/hv_vss_daemon.service rename to deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hv_vss_daemon.service index d12aa1dded2c..745044e8a7ad 100644 --- a/deploy/iso/minikube-iso/package/hyperv-daemons/hv_vss_daemon.service +++ b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hv_vss_daemon.service @@ -1,6 +1,6 @@ [Unit] Description=Hyper-V VSS Daemon -Documentation=https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/integration-services#hyper-v-volume-shadow-copy-requestor +Documentation=https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/integration-services#hyper-v-volume-shadow-copy-requestor BindsTo=sys-devices-virtual-misc-vmbus\x21hv_vss.device [Service] diff --git a/deploy/iso/minikube-iso/package/hyperv-daemons/hyperv-daemons.mk b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hyperv-daemons.mk similarity index 97% rename from deploy/iso/minikube-iso/package/hyperv-daemons/hyperv-daemons.mk rename to deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hyperv-daemons.mk index 3ea36bbbb00c..1bbd4201bfe4 100644 --- a/deploy/iso/minikube-iso/package/hyperv-daemons/hyperv-daemons.mk +++ b/deploy/iso/minikube-iso/arch/x86_64/package/hyperv-daemons/hyperv-daemons.mk @@ -5,7 +5,7 @@ ################################################################################ HYPERV_DAEMONS_VERSION = $(call qstrip,$(BR2_LINUX_KERNEL_VERSION)) -HYPERV_DAEMONS_SITE = https://www.kernel.org/pub/linux/kernel/v4.x +HYPERV_DAEMONS_SITE = https://www.kernel.org/pub/linux/kernel/v6.x HYPERV_DAEMONS_SOURCE = linux-$(HYPERV_DAEMONS_VERSION).tar.xz define HYPERV_DAEMONS_BUILD_CMDS diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/nerdctl-bin/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/nerdctl-bin/Config.in new file mode 100644 index 000000000000..1f6cc92c99dd --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/nerdctl-bin/Config.in @@ -0,0 +1,4 @@ +config BR2_PACKAGE_NERDCTL_BIN + bool "nerdctl-bin" + default y + depends on BR2_x86_64 diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/nerdctl-bin/nerdctl-bin.hash b/deploy/iso/minikube-iso/arch/x86_64/package/nerdctl-bin/nerdctl-bin.hash new file mode 100644 index 000000000000..4c85f252fa73 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/nerdctl-bin/nerdctl-bin.hash @@ -0,0 +1,13 @@ +sha256 d8dcd4e270ae76ab294be3a451a2d8299010e69dce6ae559bc3193535610e4cc nerdctl-1.4.0-linux-amd64.tar.gz +sha256 6dc945e3dfdc38e77ceafd2ec491af753366a3cf83fefccb1debaed3459829f1 nerdctl-1.5.0-linux-amd64.tar.gz +sha256 fc3e7eef775eff85eb6c16b2761a574e83de444831312bc92e755a1f5577872d nerdctl-1.6.0-linux-amd64.tar.gz +sha256 67991fc144b03596f15be6c20ca112d10bd92ad467414e95b0f1d60d332ae34e nerdctl-1.6.2-linux-amd64.tar.gz +sha256 844c47b175a3d6bc8eaad0c51f23624a5ef10c09e55607803ec2bc846fb04df9 nerdctl-1.7.0-linux-amd64.tar.gz +sha256 5fc0a6e8c3a71cbba95fbdb6833fb8a7cd8e78f53de10988362d4029c14b905a nerdctl-1.7.1-linux-amd64.tar.gz +sha256 aed7d33d645bfb97c8df978d952a1e1f7e02b0b3ed2c0089ee4285af7f8f971b nerdctl-1.7.2-linux-amd64.tar.gz +sha256 71aee9d987b7fad0ff2ade50b038ad7e2356324edc02c54045960a3521b3e6a7 nerdctl-1.7.4-linux-amd64.tar.gz +sha256 775f8bddd5e93acc4162c568dd6b84d5925549180991b83cfd4b7e33d4844921 nerdctl-1.7.5-linux-amd64.tar.gz +sha256 0326d6a42dbec5c104ed9d7aa8cbc62727433dbe000cf21cc29d06b22507e0f0 nerdctl-1.7.6-linux-amd64.tar.gz +sha256 298bb95aee485b24d566115ef7e4e90951dd232447b05de5646a652a23db70a9 nerdctl-1.7.7-linux-amd64.tar.gz +sha256 227390fb16c20d6ab3a7588e5ce72202df1bec7960a2a091599ce3c1bf3fd1d8 nerdctl-2.1.3-linux-amd64.tar.gz +sha256 1b3390a832eaeaa1459cf42357da983205da2dd72300a015ad018b3499fc455e nerdctl-2.2.0-linux-amd64.tar.gz diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/nerdctl-bin/nerdctl-bin.mk b/deploy/iso/minikube-iso/arch/x86_64/package/nerdctl-bin/nerdctl-bin.mk new file mode 100644 index 000000000000..5f05eabdda32 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/nerdctl-bin/nerdctl-bin.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# nerdctl-bin +# +################################################################################ + +NERDCTL_BIN_VERSION = 2.2.0 +NERDCTL_BIN_COMMIT = 4eb4cbdb6b7ae82ab864a9829d1162a20eb61f81 +NERDCTL_BIN_SITE = https://github.com/containerd/nerdctl/releases/download/v$(NERDCTL_BIN_VERSION) +NERDCTL_BIN_SOURCE = nerdctl-$(NERDCTL_BIN_AARCH64_VERSION)-linux-amd64.tar.gz +NERDCTL_BIN_STRIP_COMPONENTS = 0 + +define NERDCTL_BIN_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 \ + $(@D)/nerdctl \ + $(TARGET_DIR)/usr/bin/nerdctl +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/Config.in b/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/Config.in new file mode 100644 index 000000000000..66e7719129a4 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_VBOX_MOUNT_SERVICE + bool "vbox-mount-service" + depends on BR2_x86_64 + depends on BR2_LINUX_KERNEL + default y \ No newline at end of file diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/vbox-mount-service.hash b/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/vbox-mount-service.hash new file mode 100644 index 000000000000..fa02bd26d729 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/vbox-mount-service.hash @@ -0,0 +1,3 @@ +# From http://download.virtualbox.org/virtualbox/5.2.42/SHA256SUMS +sha256 e5bee2e34f349aac115ee93974febfe3213ad5e94045fa36b9f04b5f8caa3720 VirtualBox-5.2.42.tar.bz2 +sha256 ff784417295e48e3cee80a596faf05e3b0976e1b94d3b88427939912b0c1fc45 VBoxGuestAdditions_5.2.42.iso diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/vbox-mount-service.mk b/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/vbox-mount-service.mk new file mode 100644 index 000000000000..aa09819df1e6 --- /dev/null +++ b/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/vbox-mount-service.mk @@ -0,0 +1,42 @@ +################################################################################ +# +# VirtualBox Mount Service +# +################################################################################ +VBOX_MOUNT_SERVICE_VERSION = 5.2.42 +VBOX_MOUNT_SERVICE_SITE = http://download.virtualbox.org/virtualbox/$(VBOX_MOUNT_SERVICE_VERSION) +VBOX_MOUNT_SERVICE_LICENSE = GPLv2 +VBOX_MOUNT_SERVICE_LICENSE_FILES = COPYING +VBOX_MOUNT_SERVICE_SOURCE = VirtualBox-$(VBOX_MOUNT_SERVICE_VERSION).tar.bz2 +VBOX_MOUNT_SERVICE_EXTRA_DOWNLOADS = http://download.virtualbox.org/virtualbox/${VBOX_MOUNT_SERVICE_VERSION}/VBoxGuestAdditions_${VBOX_MOUNT_SERVICE_VERSION}.iso + +define VBOX_MOUNT_SERVICE_USERS + - -1 vboxsf -1 - - - - - +endef + +define VBOX_MOUNT_SERVICE_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 \ + $(VBOX_MOUNT_SERVICE_PKGDIR)/vboxservice.service \ + $(TARGET_DIR)/usr/lib/systemd/system/vboxservice.service + + ln -fs /usr/lib/systemd/system/vboxservice.service \ + $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/vboxservice.service +endef + +define VBOX_MOUNT_SERVICE_BUILD_CMDS + 7z x -aoa $(BR2_DL_DIR)/vbox-mount-service/VBoxGuestAdditions_${VBOX_MOUNT_SERVICE_VERSION}.iso -ir'!VBoxLinuxAdditions.run' -o"$(@D)" + sh $(@D)/VBoxLinuxAdditions.run --noexec --target $(@D) + tar --overwrite -C $(@D) -xjf $(@D)/VBoxGuestAdditions-amd64.tar.bz2 sbin/VBoxService + tar --overwrite -C $(@D) -xjf $(@D)/VBoxGuestAdditions-amd64.tar.bz2 bin/VBoxControl +endef + +define VBOX_MOUNT_SERVICE_INSTALL_TARGET_CMDS + $(INSTALL) -D -m755 \ + $(@D)/sbin/VBoxService \ + $(TARGET_DIR)/sbin + $(INSTALL) -D -m755 \ + $(@D)/bin/VBoxControl \ + $(TARGET_DIR)/sbin +endef + +$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/package/vbox-guest/vboxservice.service b/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/vboxservice.service similarity index 79% rename from deploy/iso/minikube-iso/package/vbox-guest/vboxservice.service rename to deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/vboxservice.service index 5f05bd3d20d1..98102a202544 100644 --- a/deploy/iso/minikube-iso/package/vbox-guest/vboxservice.service +++ b/deploy/iso/minikube-iso/arch/x86_64/package/vbox-mount-service/vboxservice.service @@ -4,11 +4,8 @@ ConditionVirtualization=oracle [Service] ExecStartPre=-/usr/sbin/modprobe vboxguest - -# Broken and probably unused: Unknown symbol ttm_bo_del_sub_from_lru -# ExecStartPre=-/usr/sbin/modprobe vboxvideo - ExecStartPre=-/usr/sbin/modprobe vboxsf + # Normally, VirtualBox only syncs every 20 minutes. This syncs on start, and # forces an immediate sync if VM time is over 5 seconds off. ExecStart=/usr/sbin/VBoxService -f --disable-automount --timesync-set-start --timesync-set-threshold 5000 diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/users b/deploy/iso/minikube-iso/board/coreos/minikube/users deleted file mode 100644 index cdff9ff1f997..000000000000 --- a/deploy/iso/minikube-iso/board/coreos/minikube/users +++ /dev/null @@ -1 +0,0 @@ -docker 1000 docker 1000 =tcuser /home/docker /bin/bash wheel,vboxsf,podman - diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/genimage.cfg b/deploy/iso/minikube-iso/board/minikube/aarch64/genimage.cfg new file mode 100644 index 000000000000..309c4b25efa4 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/genimage.cfg @@ -0,0 +1,9 @@ +image efiboot.img { + vfat { + label = "EFIBOOTISO" + file EFI { + image = "efi-part/EFI" + } + } + size = 1474560 +} diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/grub-stub.cfg b/deploy/iso/minikube-iso/board/minikube/aarch64/grub-stub.cfg new file mode 100644 index 000000000000..e0b01cf7f51a --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/grub-stub.cfg @@ -0,0 +1,6 @@ +insmod iso9660 +insmod udf + +search --no-floppy --label EFIBOOTISO --set root + +# used to find the cd diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/grub.cfg b/deploy/iso/minikube-iso/board/minikube/aarch64/grub.cfg new file mode 100644 index 000000000000..90b7df259543 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/grub.cfg @@ -0,0 +1,10 @@ +set default="0" +set timeout="0" + +menuentry "Buildroot" { + # The console depends on the driver: + # qemu: console=ttyAMA0 + # vfkit,krunkit: console=hvc0 + linux /boot/bzimage console=ttyAMA0 console=hvc0 + initrd /boot/initrd # rootfs +} diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/linux_aarch64_defconfig b/deploy/iso/minikube-iso/board/minikube/aarch64/linux_aarch64_defconfig new file mode 100644 index 000000000000..ff7a0e62ecb8 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/linux_aarch64_defconfig @@ -0,0 +1,964 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_AUDIT=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_PREEMPT=y +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_IKHEADERS=y +CONFIG_NUMA_BALANCING=y +CONFIG_MEMCG=y +CONFIG_BLK_CGROUP=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y +CONFIG_USER_NS=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_KALLSYMS_ALL=y +CONFIG_PROFILING=y +CONFIG_KEXEC=y +CONFIG_KEXEC_FILE=y +CONFIG_CRASH_DUMP=y +CONFIG_ARM64_VA_BITS_48=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_SMT=y +CONFIG_NUMA=y +CONFIG_XEN=y +CONFIG_COMPAT=y +CONFIG_RANDOMIZE_BASE=y +CONFIG_HIBERNATION=y +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +CONFIG_ENERGY_MODEL=y +CONFIG_ARM_PSCI_CPUIDLE=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m +CONFIG_CPUFREQ_DT=y +CONFIG_ACPI_CPPC_CPUFREQ=m +CONFIG_ARM_SCPI_CPUFREQ=y +CONFIG_ARM_SCMI_CPUFREQ=y +CONFIG_ACPI=y +CONFIG_ACPI_HOTPLUG_MEMORY=y +CONFIG_ACPI_HMAT=y +CONFIG_ACPI_APEI=y +CONFIG_ACPI_APEI_GHES=y +CONFIG_ACPI_APEI_PCIEAER=y +CONFIG_ACPI_APEI_MEMORY_FAILURE=y +CONFIG_ACPI_APEI_EINJ=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=y +CONFIG_JUMP_LABEL=y +# CONFIG_GCC_PLUGINS is not set +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_BINFMT_MISC=y +# CONFIG_COMPAT_BRK is not set +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_KSM=y +CONFIG_MEMORY_FAILURE=y +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_XFRM_USER=m +CONFIG_XFRM_STATISTICS=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IPV6=m +CONFIG_NETFILTER=y +CONFIG_BRIDGE_NETFILTER=m +CONFIG_NETFILTER_NETLINK_ACCT=y +CONFIG_NETFILTER_NETLINK_QUEUE=y +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_TIMEOUT=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XT_SET=m +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_HMARK=m +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m +CONFIG_NETFILTER_XT_TARGET_LED=m +CONFIG_NETFILTER_XT_TARGET_LOG=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +CONFIG_NETFILTER_XT_TARGET_TEE=m +CONFIG_NETFILTER_XT_TARGET_TPROXY=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_CPU=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ECN=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_L2TP=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_NFACCT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +CONFIG_NETFILTER_XT_MATCH_OWNER=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_RATEEST=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_SOCKET=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_IP_SET=y +CONFIG_IP_SET_BITMAP_IP=m +CONFIG_IP_SET_BITMAP_IPMAC=m +CONFIG_IP_SET_BITMAP_PORT=m +CONFIG_IP_SET_HASH_IP=m +CONFIG_IP_SET_HASH_IPMARK=m +CONFIG_IP_SET_HASH_IPPORT=m +CONFIG_IP_SET_HASH_IPPORTIP=m +CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_IPMAC=m +CONFIG_IP_SET_HASH_MAC=m +CONFIG_IP_SET_HASH_NETPORTNET=m +CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETNET=m +CONFIG_IP_SET_HASH_NETPORT=m +CONFIG_IP_SET_HASH_NETIFACE=m +CONFIG_IP_SET_LIST_SET=m +CONFIG_IP_VS=m +CONFIG_IP_VS_IPV6=y +CONFIG_IP_VS_DEBUG=y +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_SCTP=y +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_FO=m +CONFIG_IP_VS_OVF=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_NQ=m +CONFIG_IP_VS_NFCT=y +CONFIG_NF_LOG_ARP=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_RPFILTER=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_RAW=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_NAT=m +CONFIG_IP6_NF_TARGET_MASQUERADE=m +CONFIG_BRIDGE=m +CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_NET_DSA=m +CONFIG_NET_DSA_TAG_OCELOT=m +CONFIG_NET_DSA_TAG_OCELOT_8021Q=m +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_CBS=m +CONFIG_NET_SCH_ETF=m +CONFIG_NET_SCH_TAPRIO=m +CONFIG_NET_SCH_MQPRIO=m +CONFIG_NET_SCH_FQ_CODEL=y +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_INGRESS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_BPF=y +CONFIG_NET_CLS_FLOWER=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_GACT=m +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_GATE=m +CONFIG_QRTR_SMD=m +CONFIG_QRTR_TUN=m +CONFIG_CAN=m +CONFIG_BT=m +CONFIG_BT_HIDP=m +# CONFIG_BT_LE is not set +CONFIG_BT_LEDS=y +# CONFIG_BT_DEBUGFS is not set +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTUSB_MTK=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_BCM=y +CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HCIUART_MRVL=y +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_NXPUART=m +CONFIG_CFG80211=m +CONFIG_MAC80211=m +CONFIG_MAC80211_LEDS=y +CONFIG_RFKILL=m +CONFIG_NET_9P=y +CONFIG_NET_9P_VIRTIO=y +CONFIG_CEPH_LIB=y +CONFIG_NFC=m +CONFIG_NFC_NCI=m +CONFIG_NFC_S3FWRN5_I2C=m +CONFIG_PAGE_POOL_STATS=y +CONFIG_PCI=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCIEAER=y +CONFIG_PCI_IOV=y +CONFIG_PCI_PASID=y +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_ACPI=y +CONFIG_PCIE_ALTERA=y +CONFIG_PCIE_ALTERA_MSI=y +CONFIG_PCI_HOST_THUNDER_PEM=y +CONFIG_PCI_HOST_THUNDER_ECAM=y +CONFIG_PCI_HOST_GENERIC=y +CONFIG_PCI_XGENE=y +CONFIG_PCI_MESON=m +CONFIG_PCI_HISI=y +CONFIG_PCIE_KIRIN=y +CONFIG_PCI_ENDPOINT=y +CONFIG_PCI_ENDPOINT_CONFIGFS=y +CONFIG_PCI_EPF_TEST=m +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_BRCMSTB_GISB_ARB=y +CONFIG_VEXPRESS_CONFIG=y +CONFIG_MHI_BUS_PCI_GENERIC=m +CONFIG_ARM_SCMI_PROTOCOL=y +CONFIG_ARM_SCPI_PROTOCOL=y +CONFIG_DMI_SYSFS=y +CONFIG_EFI_CAPSULE_LOADER=y +CONFIG_GNSS=m +CONFIG_GNSS_MTK_SERIAL=m +CONFIG_MTD=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_STAA=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_OF=y +CONFIG_MTD_DATAFLASH=y +CONFIG_MTD_SST25L=y +CONFIG_MTD_RAW_NAND=y +CONFIG_MTD_NAND_DENALI_DT=y +CONFIG_MTD_NAND_BRCMNAND=m +CONFIG_MTD_NAND_BRCMNAND_BCMBCA=m +CONFIG_MTD_NAND_BRCMNAND_BRCMSTB=m +CONFIG_MTD_NAND_BRCMNAND_IPROC=m +CONFIG_MTD_SPI_NOR=y +CONFIG_MTD_UBI=m +CONFIG_OF_OVERLAY=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_NBD=m +CONFIG_VIRTIO_BLK=y +CONFIG_BLK_DEV_RBD=m +CONFIG_BLK_DEV_NVME=m +CONFIG_SRAM=y +CONFIG_PCI_ENDPOINT_TEST=m +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_UACCE=m +# CONFIG_SCSI_PROC_FS is not set +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_HISI_SAS=y +CONFIG_SCSI_HISI_SAS_PCI=y +CONFIG_MEGARAID_SAS=y +CONFIG_SCSI_MPT3SAS=m +CONFIG_ATA=y +CONFIG_SATA_AHCI=y +CONFIG_SATA_AHCI_PLATFORM=y +CONFIG_AHCI_DWC=m +CONFIG_AHCI_CEVA=y +CONFIG_SATA_SIL24=y +CONFIG_PATA_OF_PLATFORM=y +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_BLK_DEV_DM=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_NETDEVICES=y +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_VXLAN=y +CONFIG_GENEVE=m +CONFIG_TUN=y +CONFIG_VETH=m +CONFIG_VIRTIO_NET=y +CONFIG_MHI_NET=m +CONFIG_B53_SRAB_DRIVER=m +CONFIG_NET_DSA_BCM_SF2=m +CONFIG_AMD_XGBE=y +CONFIG_ATL1C=m +CONFIG_BCMGENET=m +CONFIG_BNX2X=m +CONFIG_SYSTEMPORT=m +CONFIG_MACB=y +CONFIG_THUNDER_NIC_PF=y +CONFIG_HIX5HD2_GMAC=y +CONFIG_HNS_DSAF=y +CONFIG_HNS_ENET=y +CONFIG_HNS3=y +CONFIG_HNS3_HCLGE=y +CONFIG_HNS3_ENET=y +CONFIG_E1000=y +CONFIG_E1000E=y +CONFIG_IGB=y +CONFIG_IGBVF=y +CONFIG_MVMDIO=y +CONFIG_SKY2=y +CONFIG_MLX4_EN=m +CONFIG_MLX5_CORE=m +CONFIG_MLX5_CORE_EN=y +CONFIG_QCOM_EMAC=m +CONFIG_RMNET=m +CONFIG_R8169=m +CONFIG_SMC91X=y +CONFIG_SMSC911X=y +CONFIG_STMMAC_ETH=m +CONFIG_AQUANTIA_PHY=y +CONFIG_BROADCOM_PHY=m +CONFIG_BCM54140_PHY=m +CONFIG_MARVELL_PHY=m +CONFIG_MARVELL_10G_PHY=m +CONFIG_MICREL_PHY=y +CONFIG_MICROSEMI_PHY=y +CONFIG_AT803X_PHY=y +CONFIG_ROCKCHIP_PHY=y +CONFIG_DP83867_PHY=y +CONFIG_DP83869_PHY=m +CONFIG_DP83TD510_PHY=y +CONFIG_VITESSE_PHY=y +CONFIG_CAN_FLEXCAN=m +CONFIG_CAN_M_CAN=m +CONFIG_CAN_M_CAN_PLATFORM=m +CONFIG_CAN_MCP251XFD=m +CONFIG_MDIO_BITBANG=y +CONFIG_MDIO_BCM_UNIMAC=y +CONFIG_MDIO_GPIO=y +CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y +CONFIG_MDIO_BUS_MUX_MMIOREG=y +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=m +CONFIG_USB_LAN78XX=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9800=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_ATH10K=m +CONFIG_ATH10K_PCI=m +CONFIG_ATH10K_SDIO=m +CONFIG_WCN36XX=m +CONFIG_ATH11K=m +CONFIG_ATH11K_AHB=m +CONFIG_ATH11K_PCI=m +CONFIG_BRCMFMAC=m +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m +CONFIG_MWIFIEX_PCIE=m +CONFIG_MT7921E=m +CONFIG_RSI_91X=m +CONFIG_WL18XX=m +CONFIG_WLCORE_SDIO=m +CONFIG_WWAN=m +CONFIG_MHI_WWAN_CTRL=m +CONFIG_MHI_WWAN_MBIM=m +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_ADC=m +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_CROS_EC=y +CONFIG_KEYBOARD_MTK_PMIC=m +CONFIG_MOUSE_ELAN_I2C=m +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMEL_MXT=m +CONFIG_TOUCHSCREEN_GOODIX=m +CONFIG_TOUCHSCREEN_ELAN=m +CONFIG_TOUCHSCREEN_EDT_FT5X06=m +CONFIG_INPUT_MISC=y +CONFIG_INPUT_TPS65219_PWRBUTTON=m +CONFIG_INPUT_PWM_BEEPER=m +CONFIG_INPUT_PWM_VIBRA=m +CONFIG_INPUT_RK805_PWRKEY=m +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_AMBAKMI=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_XILINX_PS_UART=y +CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y +CONFIG_SERIAL_FSL_LPUART=y +CONFIG_SERIAL_FSL_LPUART_CONSOLE=y +CONFIG_SERIAL_FSL_LINFLEXUART=y +CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_IPMI_HANDLER=m +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_VIRTIO=y +CONFIG_TCG_TPM=y +CONFIG_TCG_TIS=m +CONFIG_TCG_TIS_SPI=m +CONFIG_TCG_TIS_SPI_CR50=y +CONFIG_TCG_TIS_I2C_CR50=m +CONFIG_TCG_TIS_I2C_INFINEON=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y +CONFIG_I2C_MUX_PCA954x=y +CONFIG_I2C_CADENCE=m +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_GPIO=m +CONFIG_I2C_RK3X=y +CONFIG_I2C_CROS_EC_TUNNEL=y +CONFIG_I2C_SLAVE=y +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m +CONFIG_SPI_CADENCE_QUADSPI=y +CONFIG_SPI_DESIGNWARE=m +CONFIG_SPI_DW_DMA=y +CONFIG_SPI_DW_MMIO=m +CONFIG_SPI_PL022=y +CONFIG_SPI_SPIDEV=m +CONFIG_SPMI=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_MAX77620=y +CONFIG_PINCTRL_RK805=m +CONFIG_PINCTRL_SINGLE=y +CONFIG_GPIO_ALTERA=m +CONFIG_GPIO_DWAPB=y +CONFIG_GPIO_MB86S7X=y +CONFIG_GPIO_PL061=y +CONFIG_GPIO_SYSCON=y +CONFIG_GPIO_WCD934X=m +CONFIG_GPIO_XGENE=y +CONFIG_GPIO_MAX732X=y +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y +CONFIG_GPIO_BD9571MWV=m +CONFIG_GPIO_MAX77620=y +CONFIG_POWER_RESET_BRCMSTB=y +CONFIG_POWER_RESET_XGENE=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_POWER_RESET_SYSCON_POWEROFF=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_NVMEM_REBOOT_MODE=m +CONFIG_BATTERY_QCOM_BATTMGR=m +CONFIG_BATTERY_SBS=m +CONFIG_BATTERY_BQ27XXX=y +CONFIG_BATTERY_MAX17042=m +CONFIG_CHARGER_MT6360=m +CONFIG_CHARGER_BQ25890=m +CONFIG_CHARGER_BQ25980=m +CONFIG_CHARGER_RK817=m +CONFIG_SENSORS_ARM_SCMI=y +CONFIG_SENSORS_ARM_SCPI=y +CONFIG_SENSORS_GPIO_FAN=m +CONFIG_SENSORS_JC42=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_PWM_FAN=m +CONFIG_SENSORS_INA2XX=m +CONFIG_SENSORS_INA3221=m +CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y +CONFIG_CPU_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_THERMAL_EMULATION=y +CONFIG_GENERIC_ADC_THERMAL=m +CONFIG_WATCHDOG=y +CONFIG_ARM_SP805_WATCHDOG=y +CONFIG_ARM_SBSA_WATCHDOG=y +CONFIG_DW_WATCHDOG=y +CONFIG_ARM_SMC_WATCHDOG=y +CONFIG_MFD_BD9571MWV=y +CONFIG_MFD_AXP20X_I2C=y +CONFIG_MFD_HI6421_PMIC=y +CONFIG_MFD_MAX77620=y +CONFIG_MFD_MT6360=y +CONFIG_MFD_MT6397=y +CONFIG_MFD_RK8XX_I2C=y +CONFIG_MFD_RK8XX_SPI=y +CONFIG_MFD_SEC_CORE=y +CONFIG_MFD_TPS65219=y +CONFIG_MFD_WM8994=m +CONFIG_MFD_ROHM_BD718XX=y +CONFIG_MFD_WCD934X=m +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_AXP20X=y +CONFIG_REGULATOR_BD718XX=y +CONFIG_REGULATOR_BD9571MWV=y +CONFIG_REGULATOR_CROS_EC=y +CONFIG_REGULATOR_FAN53555=y +CONFIG_REGULATOR_GPIO=y +CONFIG_REGULATOR_HI6421V530=y +CONFIG_REGULATOR_MAX77620=y +CONFIG_REGULATOR_MAX8973=y +CONFIG_REGULATOR_MP8859=y +CONFIG_REGULATOR_MT6315=m +CONFIG_REGULATOR_MT6357=y +CONFIG_REGULATOR_MT6358=y +CONFIG_REGULATOR_MT6359=y +CONFIG_REGULATOR_MT6360=y +CONFIG_REGULATOR_MT6397=y +CONFIG_REGULATOR_PCA9450=y +CONFIG_REGULATOR_PF8X00=y +CONFIG_REGULATOR_PFUZE100=y +CONFIG_REGULATOR_PWM=y +CONFIG_REGULATOR_QCOM_SPMI=y +CONFIG_REGULATOR_RAA215300=y +CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_S2MPS11=y +CONFIG_REGULATOR_TPS65132=m +CONFIG_REGULATOR_TPS65219=y +CONFIG_REGULATOR_VCTRL=m +CONFIG_RC_CORE=m +CONFIG_RC_DECODERS=y +CONFIG_RC_DEVICES=y +CONFIG_IR_GPIO_CIR=m +CONFIG_DRM=m +CONFIG_DRM_I2C_NXP_TDA998X=m +CONFIG_DRM_HDLCD=m +CONFIG_DRM_MALI_DISPLAY=m +CONFIG_DRM_KOMEDA=m +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_VIRTIO_GPU=m +CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m +CONFIG_DRM_PANEL_LVDS=m +CONFIG_DRM_PANEL_SIMPLE=m +CONFIG_DRM_PANEL_EDP=m +CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m +CONFIG_DRM_PANEL_RAYDIUM_RM67191=m +CONFIG_DRM_PANEL_SITRONIX_ST7703=m +CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m +CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m +CONFIG_DRM_DISPLAY_CONNECTOR=m +CONFIG_DRM_LONTIUM_LT8912B=m +CONFIG_DRM_LONTIUM_LT9611=m +CONFIG_DRM_LONTIUM_LT9611UXC=m +CONFIG_DRM_ITE_IT66121=m +CONFIG_DRM_NWL_MIPI_DSI=m +CONFIG_DRM_PARADE_PS8640=m +CONFIG_DRM_SAMSUNG_DSIM=m +CONFIG_DRM_SII902X=m +CONFIG_DRM_SIMPLE_BRIDGE=m +CONFIG_DRM_THINE_THC63LVD1024=m +CONFIG_DRM_TOSHIBA_TC358768=m +CONFIG_DRM_TI_TFP410=m +CONFIG_DRM_TI_SN65DSI83=m +CONFIG_DRM_TI_SN65DSI86=m +CONFIG_DRM_ANALOGIX_ANX7625=m +CONFIG_DRM_I2C_ADV7511=m +CONFIG_DRM_CDNS_MHDP8546=m +CONFIG_DRM_ETNAVIV=m +CONFIG_DRM_HISI_HIBMC=m +CONFIG_DRM_HISI_KIRIN=m +CONFIG_DRM_PL111=m +CONFIG_DRM_LIMA=m +CONFIG_DRM_PANFROST=m +CONFIG_DRM_TIDSS=m +CONFIG_FB=y +CONFIG_FB_EFI=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_PWM=m +CONFIG_BACKLIGHT_LP855X=m +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_HID_MULTITOUCH=m +CONFIG_I2C_HID=m +CONFIG_I2C_HID_ACPI=m +CONFIG_I2C_HID_OF=m +CONFIG_USB_CONN_GPIO=y +CONFIG_USB=y +CONFIG_USB_OTG=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI_RENESAS=m +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_ACM=m +CONFIG_USB_STORAGE=y +CONFIG_USB_CDNS_SUPPORT=m +CONFIG_USB_CDNS3=m +CONFIG_USB_CDNS3_GADGET=y +CONFIG_USB_CDNS3_HOST=y +CONFIG_USB_MUSB_HDRC=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC2=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_ISP1760=y +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_HSIC_USB3503=y +CONFIG_USB_ONBOARD_HUB=m +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_ULPI=y +CONFIG_USB_GADGET=y +CONFIG_USB_SNP_UDC_PLAT=y +CONFIG_USB_BDC_UDC=y +CONFIG_USB_CONFIGFS=m +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_OBEX=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_TYPEC=m +CONFIG_TYPEC_TCPM=m +CONFIG_TYPEC_TCPCI=m +CONFIG_TYPEC_FUSB302=m +CONFIG_TYPEC_UCSI=m +CONFIG_UCSI_CCG=m +CONFIG_UCSI_PMIC_GLINK=m +CONFIG_TYPEC_TPS6598X=m +CONFIG_TYPEC_HD3SS3220=m +CONFIG_TYPEC_MUX_FSA4480=m +CONFIG_TYPEC_MUX_GPIO_SBU=m +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=32 +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_ACPI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_OF_ARASAN=y +CONFIG_MMC_SDHCI_OF_DWCMSHC=y +CONFIG_MMC_SDHCI_CADENCE=y +CONFIG_MMC_SDHCI_F_SDH30=y +CONFIG_MMC_SPI=y +CONFIG_MMC_DW=y +CONFIG_MMC_DW_EXYNOS=y +CONFIG_MMC_DW_HI3798CV200=y +CONFIG_MMC_DW_K3=y +CONFIG_MMC_MTK=y +CONFIG_MMC_SDHCI_XENON=y +CONFIG_SCSI_UFSHCD=y +CONFIG_SCSI_UFS_BSG=y +CONFIG_SCSI_UFSHCD_PLATFORM=y +CONFIG_SCSI_UFS_CDNS_PLATFORM=m +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_MULTICOLOR=m +CONFIG_LEDS_LM3692X=m +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_PWM=y +CONFIG_LEDS_SYSCON=y +CONFIG_LEDS_QCOM_LPG=m +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_DISK=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_LEDS_TRIGGER_PANIC=y +CONFIG_EDAC=y +CONFIG_EDAC_GHES=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_HYM8563=m +CONFIG_RTC_DRV_MAX77686=y +CONFIG_RTC_DRV_RK808=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_PCF85063=m +CONFIG_RTC_DRV_PCF85363=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_BQ32K=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_RV3028=m +CONFIG_RTC_DRV_RV8803=m +CONFIG_RTC_DRV_S5M=y +CONFIG_RTC_DRV_DS3232=y +CONFIG_RTC_DRV_PCF2127=m +CONFIG_RTC_DRV_EFI=y +CONFIG_RTC_DRV_CROS_EC=y +CONFIG_RTC_DRV_PL031=y +CONFIG_RTC_DRV_MT6397=m +CONFIG_DMADEVICES=y +CONFIG_BCM_SBA_RAID=m +CONFIG_FSL_EDMA=y +CONFIG_MV_XOR_V2=y +CONFIG_PL330_DMA=y +CONFIG_QCOM_HIDMA_MGMT=y +CONFIG_QCOM_HIDMA=y +CONFIG_VFIO=y +CONFIG_VFIO_PCI=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_MMIO=y +CONFIG_XEN_GNTDEV=y +CONFIG_XEN_GRANT_DEV_ALLOC=y +CONFIG_STAGING=y +CONFIG_STAGING_MEDIA=y +CONFIG_CHROME_PLATFORMS=y +CONFIG_CROS_EC=y +CONFIG_CROS_EC_I2C=y +CONFIG_CROS_EC_RPMSG=m +CONFIG_CROS_EC_SPI=y +CONFIG_CROS_EC_CHARDEV=m +CONFIG_CLK_VEXPRESS_OSC=y +CONFIG_COMMON_CLK_RK808=y +CONFIG_COMMON_CLK_SCMI=y +CONFIG_COMMON_CLK_SCPI=y +CONFIG_COMMON_CLK_CS2000_CP=y +CONFIG_COMMON_CLK_S2MPS11=y +CONFIG_COMMON_CLK_XGENE=y +CONFIG_COMMON_CLK_PWM=y +CONFIG_COMMON_CLK_RS9_PCIE=y +CONFIG_COMMON_CLK_VC5=y +CONFIG_COMMON_CLK_BD718XX=m +CONFIG_HWSPINLOCK=y +CONFIG_ARM_TIMER_SP804=y +CONFIG_ARM_MHU=y +CONFIG_PLATFORM_MHU=y +CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y +CONFIG_IOMMU_IO_PGTABLE_DART=y +CONFIG_ARM_SMMU=y +CONFIG_ARM_SMMU_V3=y +CONFIG_REMOTEPROC=y +CONFIG_RPMSG_CHAR=m +CONFIG_RPMSG_CTRL=m +CONFIG_RPMSG_QCOM_GLINK_RPM=y +CONFIG_RPMSG_VIRTIO=y +CONFIG_SOUNDWIRE=m +CONFIG_SOC_BRCMSTB=y +CONFIG_FSL_RCPM=y +CONFIG_QCOM_PMIC_GLINK=m +CONFIG_SOC_TI=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_DEVFREQ_GOV_PASSIVE=m +CONFIG_EXTCON_PTN5150=m +CONFIG_EXTCON_USB_GPIO=y +CONFIG_EXTCON_USBC_CROS_EC=y +CONFIG_MEMORY=y +CONFIG_IIO=y +CONFIG_MAX9611=m +CONFIG_QCOM_SPMI_VADC=m +CONFIG_QCOM_SPMI_ADC5=m +CONFIG_TI_ADS1015=m +CONFIG_IIO_CROS_EC_SENSORS_CORE=m +CONFIG_IIO_CROS_EC_SENSORS=m +CONFIG_IIO_ST_LSM6DSX=m +CONFIG_IIO_CROS_EC_LIGHT_PROX=m +CONFIG_SENSORS_ISL29018=m +CONFIG_VCNL4000=m +CONFIG_IIO_ST_MAGN_3AXIS=m +CONFIG_IIO_CROS_EC_BARO=m +CONFIG_MPL3115=m +CONFIG_PWM=y +CONFIG_PWM_CROS_EC=m +CONFIG_PHY_CAN_TRANSCEIVER=m +CONFIG_PHY_CADENCE_TORRENT=m +CONFIG_PHY_CADENCE_SIERRA=m +CONFIG_PHY_QCOM_USB_HS=y +CONFIG_PHY_SAMSUNG_USB2=y +CONFIG_ARM_CCI_PMU=m +CONFIG_ARM_CCN=m +CONFIG_ARM_CMN=m +CONFIG_ARM_SMMU_V3_PMU=m +CONFIG_ARM_DSU_PMU=m +CONFIG_ARM_SPE_PMU=m +CONFIG_ARM_DMC620_PMU=m +CONFIG_HISI_PMU=y +CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU=m +CONFIG_NVMEM_LAYOUT_SL28_VPD=m +CONFIG_NVMEM_RMEM=m +CONFIG_NVMEM_SPMI_SDAM=m +CONFIG_FPGA=y +CONFIG_FPGA_MGR_ALTERA_CVP=m +CONFIG_FPGA_BRIDGE=m +CONFIG_ALTERA_FREEZE_BRIDGE=m +CONFIG_FPGA_REGION=m +CONFIG_OF_FPGA_REGION=m +CONFIG_TEE=y +CONFIG_OPTEE=y +CONFIG_MUX_GPIO=m +CONFIG_MUX_MMIO=y +CONFIG_SLIMBUS=m +CONFIG_SLIM_QCOM_CTRL=m +CONFIG_INTERCONNECT=y +CONFIG_COUNTER=m +CONFIG_HTE=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_FS_ENCRYPTION=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +CONFIG_QFMT_V2=y +CONFIG_AUTOFS_FS=y +CONFIG_FUSE_FS=m +CONFIG_CUSE=m +CONFIG_VIRTIO_FS=m +CONFIG_OVERLAY_FS=m +CONFIG_VFAT_FS=y +CONFIG_PROC_CHILDREN=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_HUGETLBFS=y +CONFIG_EFIVAR_FS=y +CONFIG_UBIFS_FS=m +CONFIG_SQUASHFS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V4=y +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_ROOT_NFS=y +CONFIG_NFSD=y +CONFIG_CEPH_FS=m +CONFIG_CEPH_FS_POSIX_ACL=y +CONFIG_9P_FS=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_SECURITY=y +CONFIG_INIT_STACK_NONE=y +CONFIG_CRYPTO_USER=y +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_SEQIV=m +CONFIG_CRYPTO_ECHAINIV=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRYPTO_USER_API_HASH=y +CONFIG_CRYPTO_USER_API_RNG=m +CONFIG_CRYPTO_CHACHA20_NEON=m +CONFIG_CRYPTO_GHASH_ARM64_CE=y +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_SHA512_ARM64_CE=m +CONFIG_CRYPTO_SHA3_ARM64=m +CONFIG_CRYPTO_SM3_ARM64_CE=m +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +CONFIG_CRYPTO_AES_ARM64_BS=m +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=m +CONFIG_CRYPTO_DEV_CCREE=m +CONFIG_CRYPTO_DEV_HISI_SEC2=m +CONFIG_CRYPTO_DEV_HISI_ZIP=m +CONFIG_CRYPTO_DEV_HISI_HPRE=m +CONFIG_CRYPTO_DEV_HISI_TRNG=m +CONFIG_CRYPTO_DEV_AMLOGIC_GXL=m +CONFIG_INDIRECT_PIO=y +CONFIG_CRC_CCITT=m +CONFIG_DMA_RESTRICTED_POOL=y +CONFIG_CMA_SIZE_MBYTES=32 +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y +CONFIG_DEBUG_INFO_BTF=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_FS=y +# CONFIG_SCHED_DEBUG is not set +CONFIG_SCHEDSTATS=y +# CONFIG_FTRACE is not set +CONFIG_CORESIGHT=m +CONFIG_CORESIGHT_LINK_AND_SINK_TMC=m +CONFIG_CORESIGHT_CATU=m +CONFIG_CORESIGHT_SINK_TPIU=m +CONFIG_CORESIGHT_SINK_ETBV10=m +CONFIG_CORESIGHT_STM=m +CONFIG_CORESIGHT_CPU_DEBUG=m +CONFIG_CORESIGHT_CTI=m +CONFIG_MEMTEST=y diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/patches/go/1.15.15/dist-generate-stub-go.mod-in-workdir.patch b/deploy/iso/minikube-iso/board/minikube/aarch64/patches/go/1.15.15/dist-generate-stub-go.mod-in-workdir.patch new file mode 100644 index 000000000000..1cdd0b593658 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/patches/go/1.15.15/dist-generate-stub-go.mod-in-workdir.patch @@ -0,0 +1,78 @@ +From 2b512af2ddaae01926fdcc9056b71017cac2a8d2 Mon Sep 17 00:00:00 2001 +From: Tamir Duberstein +Date: Thu, 25 Feb 2021 16:44:46 -0500 +Subject: [PATCH] dist: generate stub go.mod in workdir + +(cherry picked from commit c6374f516206c02b905d0d76ee1a66dab6fcd212) +--- + src/cmd/dist/build.go | 26 ++++++-------------------- + 1 file changed, 6 insertions(+), 20 deletions(-) + +diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go +index 9e2b4f33b8..e5a7f9e9c4 100644 +--- a/src/cmd/dist/build.go ++++ b/src/cmd/dist/build.go +@@ -110,9 +110,6 @@ func xinit() { + fatalf("$GOROOT must be set") + } + goroot = filepath.Clean(b) +- if modRoot := findModuleRoot(goroot); modRoot != "" { +- fatalf("found go.mod file in %s: $GOROOT must not be inside a module", modRoot) +- } + + b = os.Getenv("GOROOT_FINAL") + if b == "" { +@@ -244,6 +241,9 @@ func xinit() { + os.Setenv("LANGUAGE", "en_US.UTF8") + + workdir = xworkdir() ++ if err := ioutil.WriteFile(pathf("%s/go.mod", workdir), []byte("module bootstrap"), 0666); err != nil { ++ fatalf("cannot write stub go.mod: %s", err) ++ } + xatexit(rmworkdir) + + tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch) +@@ -1484,11 +1484,11 @@ func goCmd(goBinary string, cmd string, args ...string) { + goCmd = append(goCmd, "-p=1") + } + +- run(goroot, ShowOutput|CheckExit, append(goCmd, args...)...) ++ run(workdir, ShowOutput|CheckExit, append(goCmd, args...)...) + } + + func checkNotStale(goBinary string, targets ...string) { +- out := run(goroot, CheckExit, ++ out := run(workdir, CheckExit, + append([]string{ + goBinary, + "list", "-gcflags=all=" + gogcflags, "-ldflags=all=" + goldflags, +@@ -1498,7 +1498,7 @@ func checkNotStale(goBinary string, targets ...string) { + os.Setenv("GODEBUG", "gocachehash=1") + for _, target := range []string{"runtime/internal/sys", "cmd/dist", "cmd/link"} { + if strings.Contains(out, "STALE "+target) { +- run(goroot, ShowOutput|CheckExit, goBinary, "list", "-f={{.ImportPath}} {{.Stale}}", target) ++ run(workdir, ShowOutput|CheckExit, goBinary, "list", "-f={{.ImportPath}} {{.Stale}}", target) + break + } + } +@@ -1590,20 +1590,6 @@ func checkCC() { + } + } + +-func findModuleRoot(dir string) (root string) { +- for { +- if fi, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil && !fi.IsDir() { +- return dir +- } +- d := filepath.Dir(dir) +- if d == dir { +- break +- } +- dir = d +- } +- return "" +-} +- + func defaulttarg() string { + // xgetwd might return a path with symlinks fully resolved, and if + // there happens to be symlinks in goroot, then the hasprefix test diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/patches/sysdig/0.23.1/driver.patch b/deploy/iso/minikube-iso/board/minikube/aarch64/patches/sysdig/0.23.1/driver.patch similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/patches/sysdig/0.23.1/driver.patch rename to deploy/iso/minikube-iso/board/minikube/aarch64/patches/sysdig/0.23.1/driver.patch diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/patches/sysdig/0.23.1/luajit.patch b/deploy/iso/minikube-iso/board/minikube/aarch64/patches/sysdig/0.23.1/luajit.patch similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/patches/sysdig/0.23.1/luajit.patch rename to deploy/iso/minikube-iso/board/minikube/aarch64/patches/sysdig/0.23.1/luajit.patch diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/patches/systemd/240/dhcp-multiple-addresses-for-router.patch b/deploy/iso/minikube-iso/board/minikube/aarch64/patches/systemd/240/dhcp-multiple-addresses-for-router.patch similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/patches/systemd/240/dhcp-multiple-addresses-for-router.patch rename to deploy/iso/minikube-iso/board/minikube/aarch64/patches/systemd/240/dhcp-multiple-addresses-for-router.patch diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/patches/systemd/240/rdrand-workaround-on-amd.patch b/deploy/iso/minikube-iso/board/minikube/aarch64/patches/systemd/240/rdrand-workaround-on-amd.patch similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/patches/systemd/240/rdrand-workaround-on-amd.patch rename to deploy/iso/minikube-iso/board/minikube/aarch64/patches/systemd/240/rdrand-workaround-on-amd.patch diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/patches/varlink/19/ctags.patch b/deploy/iso/minikube-iso/board/minikube/aarch64/patches/varlink/19/ctags.patch similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/patches/varlink/19/ctags.patch rename to deploy/iso/minikube-iso/board/minikube/aarch64/patches/varlink/19/ctags.patch diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/permissions b/deploy/iso/minikube-iso/board/minikube/aarch64/permissions similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/permissions rename to deploy/iso/minikube-iso/board/minikube/aarch64/permissions diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/post-build.sh b/deploy/iso/minikube-iso/board/minikube/aarch64/post-build.sh new file mode 100755 index 000000000000..38ce764f90dc --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/post-build.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Copyright 2021 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +BOARD_DIR=$(dirname "$0") + +cp -f "$BOARD_DIR/grub.cfg" "$BINARIES_DIR/efi-part/EFI/BOOT/grub.cfg" diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/post-image.sh b/deploy/iso/minikube-iso/board/minikube/aarch64/post-image.sh new file mode 100755 index 000000000000..ade1610b780b --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/post-image.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +# Copyright 2021 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +GENIMAGE_CFG="$2" + +support/scripts/genimage.sh -c "$GENIMAGE_CFG" + +cd "$BINARIES_DIR" +mkdir -p root/boot +cp Image root/boot/bzimage +cp rootfs.cpio.lz4 root/boot/initrd +mkdir -p root/EFI/BOOT +cp efi-part/EFI/BOOT/* root/EFI/BOOT/ +cp efiboot.img root/EFI/BOOT/ + +mkisofs \ + -o boot.iso \ + -R -J -v -d -N \ + -hide-rr-moved \ + -no-emul-boot \ + -eltorito-platform=efi \ + -eltorito-boot EFI/BOOT/efiboot.img \ + -V "EFIBOOTISO" \ + -A "EFI Boot ISO" \ + root +cd - diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/cni/net.d/.keep b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/cni/net.d/.keep similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/cni/net.d/.keep rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/cni/net.d/.keep diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/docker/.keep b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/docker/.keep similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/docker/.keep rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/docker/.keep diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/fstab b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/fstab similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/fstab rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/fstab diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/motd b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/motd similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/motd rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/motd diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/ssh/sshd_config b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/ssh/sshd_config similarity index 94% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/ssh/sshd_config rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/ssh/sshd_config index d5ece8f30c2a..b7ab4a59a66a 100644 --- a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/ssh/sshd_config +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/ssh/sshd_config @@ -117,3 +117,8 @@ Subsystem sftp /usr/libexec/sftp-server # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server + +# Temporarily accept ssh-rsa algorithm for openssh >= 8.8, +# until most ssh clients could deprecate ssh-rsa. +HostkeyAlgorithms +ssh-rsa +PubkeyAcceptedAlgorithms +ssh-rsa diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/sudoers b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sudoers similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/sudoers rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sudoers diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/sysctl.d/11-tcp-mtu-probing.conf b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/11-tcp-mtu-probing.conf similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/sysctl.d/11-tcp-mtu-probing.conf rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/11-tcp-mtu-probing.conf diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/50-fs-inotify.conf b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/50-fs-inotify.conf new file mode 100644 index 000000000000..e4697d577029 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/50-fs-inotify.conf @@ -0,0 +1,4 @@ +# Avoid failures with kubevirt vms +# https://github.com/kubernetes/minikube/issues/18831 +fs.inotify.max_user_instances = 8192 +fs.inotify.max_user_watches = 65536 diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/90-cilium-rp_filter.conf b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/90-cilium-rp_filter.conf new file mode 100644 index 000000000000..aa285916a512 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/90-cilium-rp_filter.conf @@ -0,0 +1,2 @@ +net.ipv4.conf.lxc*.rp_filter = 0 +net.ipv4.conf.cilium_*.rp_filter = 0 diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/sysctl.d/disable-ipv6.conf b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/disable-ipv6.conf similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/sysctl.d/disable-ipv6.conf rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/sysctl.d/disable-ipv6.conf diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/journald.conf b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/journald.conf similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/journald.conf rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/journald.conf diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/network/10-eth1.network b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/network/10-eth1.network similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/network/10-eth1.network rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/network/10-eth1.network diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/network/20-dhcp.network b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/network/20-dhcp.network similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/network/20-dhcp.network rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/network/20-dhcp.network diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/resolved.conf.d/50-dnssec.conf b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/resolved.conf.d/50-dnssec.conf new file mode 100644 index 000000000000..d43d54a9daf7 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/resolved.conf.d/50-dnssec.conf @@ -0,0 +1,2 @@ +[Resolve] +DNSSEC=no diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/system/getty.target.wants/getty@tty1.service b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/system/getty.target.wants/getty@tty1.service similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/system/getty.target.wants/getty@tty1.service rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/system/getty.target.wants/getty@tty1.service diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/system/systemd-timesyncd.service.d/disable-virtualbox.conf b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/system/systemd-timesyncd.service.d/disable-virtualbox.conf similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/systemd/system/systemd-timesyncd.service.d/disable-virtualbox.conf rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/systemd/system/systemd-timesyncd.service.d/disable-virtualbox.conf diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/udev/rules.d/80-net-setup-link.rules b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/udev/rules.d/80-net-setup-link.rules similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/etc/udev/rules.d/80-net-setup-link.rules rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/etc/udev/rules.d/80-net-setup-link.rules diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/init b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/init similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/init rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/init diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/bin/toolbox b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/usr/bin/toolbox similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/usr/bin/toolbox rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/usr/bin/toolbox diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/var/lib/boot2docker/.keep b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/var/lib/boot2docker/.keep similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/var/lib/boot2docker/.keep rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/var/lib/boot2docker/.keep diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/var/log/.keep b/deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/var/log/.keep similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/rootfs-overlay/var/log/.keep rename to deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/var/log/.keep diff --git a/deploy/iso/minikube-iso/board/minikube/aarch64/users b/deploy/iso/minikube-iso/board/minikube/aarch64/users new file mode 100644 index 000000000000..9294fedde046 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/aarch64/users @@ -0,0 +1 @@ +docker 1000 docker 1000 * /home/docker /bin/bash wheel,vboxsf,podman,buildkit - diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/genimage.cfg b/deploy/iso/minikube-iso/board/minikube/x86_64/genimage.cfg new file mode 100644 index 000000000000..309c4b25efa4 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/genimage.cfg @@ -0,0 +1,9 @@ +image efiboot.img { + vfat { + label = "EFIBOOTISO" + file EFI { + image = "efi-part/EFI" + } + } + size = 1474560 +} diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/grub-stub.cfg b/deploy/iso/minikube-iso/board/minikube/x86_64/grub-stub.cfg new file mode 100644 index 000000000000..e0b01cf7f51a --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/grub-stub.cfg @@ -0,0 +1,6 @@ +insmod iso9660 +insmod udf + +search --no-floppy --label EFIBOOTISO --set root + +# used to find the cd diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/grub.cfg b/deploy/iso/minikube-iso/board/minikube/x86_64/grub.cfg new file mode 100644 index 000000000000..9f630e596e63 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/grub.cfg @@ -0,0 +1,7 @@ +set default="0" +set timeout="0" + +menuentry "Buildroot" { + linux /boot/bzimage console=tty0 rw # kernel + initrd /boot/initrd # rootfs +} diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/isolinux.cfg b/deploy/iso/minikube-iso/board/minikube/x86_64/isolinux.cfg similarity index 100% rename from deploy/iso/minikube-iso/board/coreos/minikube/isolinux.cfg rename to deploy/iso/minikube-iso/board/minikube/x86_64/isolinux.cfg diff --git a/deploy/iso/minikube-iso/board/coreos/minikube/linux_defconfig b/deploy/iso/minikube-iso/board/minikube/x86_64/linux_x86_64_defconfig similarity index 93% rename from deploy/iso/minikube-iso/board/coreos/minikube/linux_defconfig rename to deploy/iso/minikube-iso/board/minikube/x86_64/linux_x86_64_defconfig index 1871f86d8b11..f8703e38fbf3 100644 --- a/deploy/iso/minikube-iso/board/coreos/minikube/linux_defconfig +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/linux_x86_64_defconfig @@ -5,20 +5,20 @@ CONFIG_POSIX_MQUEUE=y CONFIG_AUDIT=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_BPF_LSM=y CONFIG_PREEMPT_VOLUNTARY=y CONFIG_BSD_PROCESS_ACCT=y -CONFIG_TASK_XACCT=y -CONFIG_TASK_IO_ACCOUNTING=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y +CONFIG_IKHEADERS=y CONFIG_LOG_BUF_SHIFT=18 CONFIG_CGROUPS=y CONFIG_MEMCG=y -CONFIG_MEMCG_SWAP=y CONFIG_BLK_CGROUP=y CONFIG_CGROUP_SCHED=y CONFIG_CFS_BANDWIDTH=y -CONFIG_RT_GROUP_SCHED=y CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_HUGETLB=y @@ -29,16 +29,13 @@ CONFIG_CGROUP_PERF=y CONFIG_CGROUP_BPF=y CONFIG_USER_NS=y CONFIG_BLK_DEV_INITRD=y -CONFIG_BPF_SYSCALL=y -# CONFIG_COMPAT_BRK is not set CONFIG_PROFILING=y +CONFIG_KEXEC=y +CONFIG_CRASH_DUMP=y CONFIG_SMP=y CONFIG_HYPERVISOR_GUEST=y CONFIG_PARAVIRT_SPINLOCKS=y -CONFIG_KVM_DEBUG_FS=y -CONFIG_CALGARY_IOMMU=y CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y -CONFIG_MICROCODE_AMD=y CONFIG_X86_MSR=y CONFIG_X86_CPUID=y CONFIG_NUMA=y @@ -46,32 +43,24 @@ CONFIG_X86_CHECK_BIOS_CORRUPTION=y # CONFIG_MTRR_SANITIZER is not set CONFIG_EFI=y CONFIG_HZ_1000=y -CONFIG_KEXEC=y -CONFIG_CRASH_DUMP=y CONFIG_HIBERNATION=y CONFIG_PM_DEBUG=y CONFIG_PM_TRACE_RTC=y CONFIG_ACPI_DOCK=y CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_X86_ACPI_CPUFREQ=y -CONFIG_PCIEPORTBUS=y -CONFIG_HOTPLUG_PCI=y -CONFIG_PCCARD=y -CONFIG_YENTA=y CONFIG_IA32_EMULATION=y -CONFIG_EFI_VARS=y CONFIG_KVM=m CONFIG_KVM_INTEL=m CONFIG_KVM_AMD=m -CONFIG_VHOST_NET=m -CONFIG_VHOST_VSOCK=m CONFIG_KPROBES=y CONFIG_JUMP_LABEL=y +# CONFIG_GCC_PLUGINS is not set CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y CONFIG_PARTITION_ADVANCED=y CONFIG_OSF_PARTITION=y CONFIG_AMIGA_PARTITION=y @@ -84,13 +73,12 @@ CONFIG_SGI_PARTITION=y CONFIG_SUN_PARTITION=y CONFIG_KARMA_PARTITION=y CONFIG_BINFMT_MISC=y +# CONFIG_COMPAT_BRK is not set CONFIG_TRANSPARENT_HUGEPAGE=y CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y CONFIG_NET=y CONFIG_PACKET=y -CONFIG_UNIX=y CONFIG_XFRM_USER=y -CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y CONFIG_IP_MULTIPLE_TABLES=y @@ -105,9 +93,6 @@ CONFIG_IP_MROUTE=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y CONFIG_SYN_COOKIES=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set # CONFIG_INET_DIAG is not set CONFIG_TCP_CONG_ADVANCED=y # CONFIG_TCP_CONG_BIC is not set @@ -119,6 +104,7 @@ CONFIG_INET6_ESP=y CONFIG_IPV6_MULTIPLE_TABLES=y CONFIG_NETLABEL=y CONFIG_NETFILTER=y +CONFIG_BRIDGE_NETFILTER=m CONFIG_NETFILTER_NETLINK_ACCT=y CONFIG_NETFILTER_NETLINK_QUEUE=y CONFIG_NF_CONNTRACK=m @@ -272,6 +258,7 @@ CONFIG_BRIDGE_EBT_REDIRECT=m CONFIG_BRIDGE_EBT_SNAT=m CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE_EBT_NFLOG=m +CONFIG_IP_SCTP=y CONFIG_BRIDGE=m CONFIG_NET_SCHED=y CONFIG_NET_SCH_HTB=y @@ -279,6 +266,7 @@ CONFIG_NET_SCH_PRIO=y CONFIG_NET_SCH_SFQ=y CONFIG_NET_SCH_TBF=y CONFIG_NET_SCH_NETEM=y +CONFIG_NET_SCH_FQ_CODEL=y CONFIG_NET_SCH_INGRESS=m CONFIG_NET_CLS_BASIC=m CONFIG_NET_CLS_FW=y @@ -296,7 +284,6 @@ CONFIG_OPENVSWITCH=m CONFIG_VSOCKETS=m CONFIG_VIRTIO_VSOCKETS=m CONFIG_CGROUP_NET_PRIO=y -CONFIG_BPF_JIT=y CONFIG_HAMRADIO=y CONFIG_CFG80211=y CONFIG_MAC80211=y @@ -305,11 +292,16 @@ CONFIG_RFKILL=y CONFIG_NET_9P=m CONFIG_NET_9P_VIRTIO=m CONFIG_CEPH_LIB=y -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_PCI=y +CONFIG_PCIEPORTBUS=y +CONFIG_HOTPLUG_PCI=y +CONFIG_PCCARD=y +CONFIG_YENTA=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y CONFIG_DEBUG_DEVRES=y CONFIG_CONNECTOR=y +CONFIG_DMI_SYSFS=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_NBD=m CONFIG_VIRTIO_BLK=y @@ -343,6 +335,7 @@ CONFIG_DM_SNAPSHOT=y CONFIG_DM_THIN_PROVISIONING=y CONFIG_DM_MIRROR=y CONFIG_DM_ZERO=y +CONFIG_DM_MULTIPATH=y CONFIG_FUSION=y CONFIG_FUSION_SPI=m CONFIG_FUSION_FC=m @@ -358,6 +351,7 @@ CONFIG_MACVLAN=y CONFIG_MACVTAP=y CONFIG_IPVLAN=m CONFIG_VXLAN=y +CONFIG_GENEVE=m CONFIG_NETCONSOLE=y CONFIG_TUN=y CONFIG_VETH=y @@ -378,14 +372,12 @@ CONFIG_8139TOO=y CONFIG_FDDI=y CONFIG_VMXNET3=y CONFIG_HYPERV_NET=m -CONFIG_INPUT_POLLDEV=y CONFIG_INPUT_EVDEV=y CONFIG_INPUT_JOYSTICK=y CONFIG_INPUT_TABLET=y CONFIG_INPUT_TOUCHSCREEN=y CONFIG_INPUT_MISC=y # CONFIG_LEGACY_PTYS is not set -CONFIG_SERIAL_NONSTANDARD=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_NR_UARTS=32 @@ -394,6 +386,7 @@ CONFIG_SERIAL_8250_MANY_PORTS=y CONFIG_SERIAL_8250_SHARE_IRQ=y CONFIG_SERIAL_8250_DETECT_IRQ=y CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_NONSTANDARD=y CONFIG_HW_RANDOM=y # CONFIG_HW_RANDOM_INTEL is not set # CONFIG_HW_RANDOM_AMD is not set @@ -409,13 +402,7 @@ CONFIG_AGP_INTEL=y CONFIG_DRM=y CONFIG_DRM_I915=y CONFIG_DRM_VIRTIO_GPU=y -CONFIG_FB_MODE_HELPERS=y -CONFIG_FB_TILEBLITTING=y -CONFIG_FB_EFI=y -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_LOGO=y -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_DRM_VBOXVIDEO=m CONFIG_SOUND=y CONFIG_SND=y CONFIG_SND_HRTIMER=y @@ -445,12 +432,14 @@ CONFIG_USB_OHCI_HCD=y CONFIG_USB_UHCI_HCD=y CONFIG_USB_PRINTER=y CONFIG_USB_STORAGE=y -CONFIG_EDAC=y CONFIG_RTC_CLASS=y # CONFIG_RTC_HCTOSYS is not set CONFIG_DMADEVICES=y CONFIG_VIRT_DRIVERS=y +CONFIG_VBOXGUEST=m CONFIG_VIRTIO_PCI=y +CONFIG_VHOST_NET=m +CONFIG_VHOST_VSOCK=m CONFIG_HYPERV=m CONFIG_HYPERV_UTILS=m CONFIG_HYPERV_BALLOON=m @@ -466,12 +455,15 @@ CONFIG_XFS_QUOTA=y CONFIG_XFS_POSIX_ACL=y CONFIG_BTRFS_FS=m CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_FS_ENCRYPTION=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y CONFIG_QUOTA=y CONFIG_QUOTA_NETLINK_INTERFACE=y -# CONFIG_PRINT_QUOTA_WARNING is not set CONFIG_QFMT_V2=y -CONFIG_AUTOFS4_FS=y +CONFIG_AUTOFS_FS=y CONFIG_FUSE_FS=y +CONFIG_VIRTIO_FS=m CONFIG_OVERLAY_FS=m CONFIG_ISO9660_FS=y CONFIG_JOLIET=y @@ -479,8 +471,10 @@ CONFIG_ZISOFS=y CONFIG_MSDOS_FS=y CONFIG_VFAT_FS=y CONFIG_PROC_KCORE=y +CONFIG_PROC_CHILDREN=y CONFIG_TMPFS_POSIX_ACL=y CONFIG_HUGETLBFS=y +CONFIG_VBOXSF_FS=m CONFIG_NFS_FS=y CONFIG_NFS_V4=y CONFIG_NFS_SWAP=y @@ -503,23 +497,22 @@ CONFIG_SECURITY=y CONFIG_SECURITY_NETWORK=y CONFIG_SECURITY_SELINUX=y CONFIG_SECURITY_SELINUX_BOOTPARAM=y -CONFIG_SECURITY_SELINUX_DISABLE=y -CONFIG_CRYPTO_XTS=y -CONFIG_CRYPTO_AES_NI_INTEL=y CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_CRYPTO_AES_NI_INTEL=y CONFIG_PRINTK_TIME=y -# CONFIG_UNUSED_SYMBOLS is not set -CONFIG_MAGIC_SYSRQ=y CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y +CONFIG_DEBUG_INFO_BTF=y +CONFIG_MAGIC_SYSRQ=y CONFIG_DEBUG_STACK_USAGE=y -CONFIG_DEBUG_STACKOVERFLOW=y # CONFIG_SCHED_DEBUG is not set CONFIG_SCHEDSTATS=y CONFIG_FUNCTION_TRACER=y CONFIG_FTRACE_SYSCALLS=y CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_BPF_KPROBE_OVERRIDE=y CONFIG_PROVIDE_OHCI1394_DMA_INIT=y CONFIG_EARLY_PRINTK_DBGP=y CONFIG_DEBUG_BOOT_PARAMS=y -CONFIG_OPTIMIZE_INLINING=y +CONFIG_FUNCTION_ERROR_INJECTION=y diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/patches/go/1.15.15/dist-generate-stub-go.mod-in-workdir.patch b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/go/1.15.15/dist-generate-stub-go.mod-in-workdir.patch new file mode 100644 index 000000000000..1cdd0b593658 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/go/1.15.15/dist-generate-stub-go.mod-in-workdir.patch @@ -0,0 +1,78 @@ +From 2b512af2ddaae01926fdcc9056b71017cac2a8d2 Mon Sep 17 00:00:00 2001 +From: Tamir Duberstein +Date: Thu, 25 Feb 2021 16:44:46 -0500 +Subject: [PATCH] dist: generate stub go.mod in workdir + +(cherry picked from commit c6374f516206c02b905d0d76ee1a66dab6fcd212) +--- + src/cmd/dist/build.go | 26 ++++++-------------------- + 1 file changed, 6 insertions(+), 20 deletions(-) + +diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go +index 9e2b4f33b8..e5a7f9e9c4 100644 +--- a/src/cmd/dist/build.go ++++ b/src/cmd/dist/build.go +@@ -110,9 +110,6 @@ func xinit() { + fatalf("$GOROOT must be set") + } + goroot = filepath.Clean(b) +- if modRoot := findModuleRoot(goroot); modRoot != "" { +- fatalf("found go.mod file in %s: $GOROOT must not be inside a module", modRoot) +- } + + b = os.Getenv("GOROOT_FINAL") + if b == "" { +@@ -244,6 +241,9 @@ func xinit() { + os.Setenv("LANGUAGE", "en_US.UTF8") + + workdir = xworkdir() ++ if err := ioutil.WriteFile(pathf("%s/go.mod", workdir), []byte("module bootstrap"), 0666); err != nil { ++ fatalf("cannot write stub go.mod: %s", err) ++ } + xatexit(rmworkdir) + + tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch) +@@ -1484,11 +1484,11 @@ func goCmd(goBinary string, cmd string, args ...string) { + goCmd = append(goCmd, "-p=1") + } + +- run(goroot, ShowOutput|CheckExit, append(goCmd, args...)...) ++ run(workdir, ShowOutput|CheckExit, append(goCmd, args...)...) + } + + func checkNotStale(goBinary string, targets ...string) { +- out := run(goroot, CheckExit, ++ out := run(workdir, CheckExit, + append([]string{ + goBinary, + "list", "-gcflags=all=" + gogcflags, "-ldflags=all=" + goldflags, +@@ -1498,7 +1498,7 @@ func checkNotStale(goBinary string, targets ...string) { + os.Setenv("GODEBUG", "gocachehash=1") + for _, target := range []string{"runtime/internal/sys", "cmd/dist", "cmd/link"} { + if strings.Contains(out, "STALE "+target) { +- run(goroot, ShowOutput|CheckExit, goBinary, "list", "-f={{.ImportPath}} {{.Stale}}", target) ++ run(workdir, ShowOutput|CheckExit, goBinary, "list", "-f={{.ImportPath}} {{.Stale}}", target) + break + } + } +@@ -1590,20 +1590,6 @@ func checkCC() { + } + } + +-func findModuleRoot(dir string) (root string) { +- for { +- if fi, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil && !fi.IsDir() { +- return dir +- } +- d := filepath.Dir(dir) +- if d == dir { +- break +- } +- dir = d +- } +- return "" +-} +- + func defaulttarg() string { + // xgetwd might return a path with symlinks fully resolved, and if + // there happens to be symlinks in goroot, then the hasprefix test diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/patches/sysdig/0.23.1/driver.patch b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/sysdig/0.23.1/driver.patch new file mode 100644 index 000000000000..71a73033a3f1 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/sysdig/0.23.1/driver.patch @@ -0,0 +1,1614 @@ +From e272b73e703e5691f79d3a15005ba2c937d203eb Mon Sep 17 00:00:00 2001 +From: Nathan Baker <7409217+nathan-b@users.noreply.github.com> +Date: Thu, 23 May 2019 09:59:06 -0400 +Subject: [PATCH] Changes to build the kmod with 5.1 kernels [SMAGENT-1643] + (#1413) + +[SMAGENT-1643] Changes to build the kmod with 5.1 kernels + +* The syscall_get_arguments function changed its parameters. +* The mmap symbols changed header locations +* Wrapped the kernel version check in a function + +(cherry picked from commit a6ab1e66fc05a02178e051ea2441633996d5871e) +--- + driver/main.c | 21 ++- + driver/ppm.h | 2 + + driver/ppm_events.c | 47 +++--- + driver/ppm_fillers.c | 333 ++++++++++++++++++++------------------ + driver/ppm_flag_helpers.h | 3 +- + 5 files changed, 221 insertions(+), 185 deletions(-) + +diff --git a/driver/main.c b/driver/main.c +index a9febf28..e2bdf992 100644 +--- a/driver/main.c ++++ b/driver/main.c +@@ -225,6 +225,15 @@ do { \ + pr_info(fmt, ##__VA_ARGS__); \ + } while (0) + ++inline void ppm_syscall_get_arguments(struct task_struct *task, struct pt_regs *regs, unsigned long *args) ++{ ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)) ++ syscall_get_arguments(task, regs, 0, 6, args); ++#else ++ syscall_get_arguments(task, regs, args); ++#endif ++} ++ + /* compat tracepoint functions */ + static int compat_register_trace(void *func, const char *probename, struct tracepoint *tp) + { +@@ -1275,11 +1284,10 @@ static const unsigned char compat_nas[21] = { + #ifdef _HAS_SOCKETCALL + static enum ppm_event_type parse_socketcall(struct event_filler_arguments *filler_args, struct pt_regs *regs) + { +- unsigned long __user args[2]; ++ unsigned long __user args[6] = {}; + unsigned long __user *scargs; + int socketcall_id; +- +- syscall_get_arguments(current, regs, 0, 2, args); ++ ppm_syscall_get_arguments(current, regs, args); + socketcall_id = args[0]; + scargs = (unsigned long __user *)args[1]; + +@@ -1394,6 +1402,7 @@ static inline void record_drop_x(struct ppm_consumer_t *consumer, struct timespe + static inline int drop_nostate_event(enum ppm_event_type event_type, + struct pt_regs *regs) + { ++ unsigned long args[6] = {}; + unsigned long arg = 0; + int close_fd = -1; + struct files_struct *files; +@@ -1415,7 +1424,8 @@ static inline int drop_nostate_event(enum ppm_event_type event_type, + * The invalid fd events don't matter to userspace in dropping mode, + * so we do this before the UF_NEVER_DROP check + */ +- syscall_get_arguments(current, regs, 0, 1, &arg); ++ ppm_syscall_get_arguments(current, regs, args); ++ arg = args[0]; + close_fd = (int)arg; + + files = current->files; +@@ -1435,7 +1445,8 @@ static inline int drop_nostate_event(enum ppm_event_type event_type, + case PPME_SYSCALL_FCNTL_E: + case PPME_SYSCALL_FCNTL_X: + // cmd arg +- syscall_get_arguments(current, regs, 1, 1, &arg); ++ ppm_syscall_get_arguments(current, regs, args); ++ arg = args[1]; + if (arg != F_DUPFD && arg != F_DUPFD_CLOEXEC) + drop = true; + break; +diff --git a/driver/ppm.h b/driver/ppm.h +index fa8f3378..dede196f 100644 +--- a/driver/ppm.h ++++ b/driver/ppm.h +@@ -120,4 +120,6 @@ extern const struct syscall_evt_pair g_syscall_ia32_table[]; + extern const enum ppm_syscall_code g_syscall_ia32_code_routing_table[]; + #endif + ++extern void ppm_syscall_get_arguments(struct task_struct *task, struct pt_regs *regs, unsigned long *args); ++ + #endif /* PPM_H_ */ +diff --git a/driver/ppm_events.c b/driver/ppm_events.c +index 7b0a9ba3..7be81657 100644 +--- a/driver/ppm_events.c ++++ b/driver/ppm_events.c +@@ -249,14 +249,16 @@ inline u32 compute_snaplen(struct event_filler_arguments *args, char *buf, u32 l + if (err == 0) { + if(args->event_type == PPME_SOCKET_SENDTO_X) + { ++ unsigned long syscall_args[6] = {}; + unsigned long val; + struct sockaddr __user * usrsockaddr; + /* + * Get the address + */ +- if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 4, 1, &val); +- else ++ if (!args->is_socketcall) { ++ ppm_syscall_get_arguments(current, args->regs, syscall_args); ++ val = syscall_args[4]; ++ } else + val = args->socketcall_args[4]; + + usrsockaddr = (struct sockaddr __user *)val; +@@ -270,9 +272,10 @@ inline u32 compute_snaplen(struct event_filler_arguments *args, char *buf, u32 l + /* + * Get the address len + */ +- if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 5, 1, &val); +- else ++ if (!args->is_socketcall) { ++ ppm_syscall_get_arguments(current, args->regs, syscall_args); ++ val = syscall_args[5]; ++ } else + val = args->socketcall_args[5]; + + if (val != 0) { +@@ -288,6 +291,7 @@ inline u32 compute_snaplen(struct event_filler_arguments *args, char *buf, u32 l + } + } + } else if (args->event_type == PPME_SOCKET_SENDMSG_X) { ++ unsigned long syscall_args[6] = {}; + unsigned long val; + struct sockaddr __user * usrsockaddr; + int addrlen; +@@ -300,9 +304,10 @@ inline u32 compute_snaplen(struct event_filler_arguments *args, char *buf, u32 l + struct msghdr mh; + #endif + +- if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 1, 1, &val); +- else ++ if (!args->is_socketcall) { ++ ppm_syscall_get_arguments(current, args->regs, syscall_args); ++ val = syscall_args[1]; ++ } else + val = args->socketcall_args[1]; + + #ifdef CONFIG_COMPAT +@@ -1102,6 +1107,7 @@ int32_t parse_readv_writev_bufs(struct event_filler_arguments *args, const struc + unsigned long bufsize; + char *targetbuf = args->str_storage; + u32 targetbuflen = STR_STORAGE_SIZE; ++ unsigned long syscall_args[6] = {}; + unsigned long val; + u32 notcopied_len; + size_t tocopy_len; +@@ -1147,9 +1153,10 @@ int32_t parse_readv_writev_bufs(struct event_filler_arguments *args, const struc + /* + * Retrieve the FD. It will be used for dynamic snaplen calculation. + */ +- if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 0, 1, &val); +- else ++ if (!args->is_socketcall) { ++ ppm_syscall_get_arguments(current, args->regs, syscall_args); ++ val = syscall_args[0]; ++ } else + val = args->socketcall_args[0]; + args->fd = (int)val; + +@@ -1233,6 +1240,7 @@ int32_t compat_parse_readv_writev_bufs(struct event_filler_arguments *args, cons + unsigned long bufsize; + char *targetbuf = args->str_storage; + u32 targetbuflen = STR_STORAGE_SIZE; ++ unsigned long syscall_args[6] = {}; + unsigned long val; + u32 notcopied_len; + compat_size_t tocopy_len; +@@ -1278,9 +1286,10 @@ int32_t compat_parse_readv_writev_bufs(struct event_filler_arguments *args, cons + /* + * Retrieve the FD. It will be used for dynamic snaplen calculation. + */ +- if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 0, 1, &val); +- else ++ if (!args->is_socketcall) { ++ ppm_syscall_get_arguments(current, args->regs, syscall_args); ++ val = syscall_args[0]; ++ } else + val = args->socketcall_args[0]; + args->fd = (int)val; + +@@ -1364,6 +1373,7 @@ int32_t compat_parse_readv_writev_bufs(struct event_filler_arguments *args, cons + int f_sys_autofill(struct event_filler_arguments *args) + { + int res; ++ unsigned long syscall_args[6] = {}; + unsigned long val; + u32 j; + int64_t retval; +@@ -1382,11 +1392,8 @@ int f_sys_autofill(struct event_filler_arguments *args) + /* + * Regular argument + */ +- syscall_get_arguments(current, +- args->regs, +- evinfo->autofill_args[j].id, +- 1, +- &val); ++ ppm_syscall_get_arguments(current, args->regs, syscall_args); ++ val = syscall_args[evinfo->autofill_args[j].id]; + } + + res = val_to_ring(args, val, 0, true, 0); +diff --git a/driver/ppm_fillers.c b/driver/ppm_fillers.c +index e595c0f0..4770fe49 100644 +--- a/driver/ppm_fillers.c ++++ b/driver/ppm_fillers.c +@@ -56,6 +56,23 @@ along with sysdig. If not, see . + + #define merge_64(hi, lo) ((((unsigned long long)(hi)) << 32) + ((lo) & 0xffffffffUL)) + ++/* ++ * Linux 5.1 kernels modify the syscall_get_arguments function to always ++ * return all arguments rather than allowing the caller to select which ++ * arguments are desired. This wrapper replicates the original ++ * functionality. ++ */ ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)) ++#define syscall_get_arguments_deprecated syscall_get_arguments ++#else ++#define syscall_get_arguments_deprecated(_task, _reg, _start, _len, _args) \ ++ do { \ ++ unsigned long _sga_args[6] = {}; \ ++ syscall_get_arguments(_task, _reg, _sga_args); \ ++ memcpy(_args, &_sga_args[_start], _len); \ ++ } while(0) ++#endif ++ + int f_sys_generic(struct event_filler_arguments *args) + { + int res; +@@ -115,7 +132,7 @@ int f_sys_single(struct event_filler_arguments *args) + int res; + unsigned long val; + +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -155,7 +172,7 @@ int f_sys_open_x(struct event_filler_arguments *args) + /* + * name + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -164,7 +181,7 @@ int f_sys_open_x(struct event_filler_arguments *args) + * Flags + * Note that we convert them into the ppm portable representation before pushing them to the ring + */ +- syscall_get_arguments(current, args->regs, 1, 1, &flags); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &flags); + res = val_to_ring(args, open_flags_to_scap(flags), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -172,7 +189,7 @@ int f_sys_open_x(struct event_filler_arguments *args) + /* + * mode + */ +- syscall_get_arguments(current, args->regs, 2, 1, &modes); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &modes); + res = val_to_ring(args, open_modes_to_scap(flags, modes), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -190,7 +207,7 @@ int f_sys_read_x(struct event_filler_arguments *args) + /* + * Retrieve the FD. It will be used for dynamic snaplen calculation. + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + args->fd = (int)val; + + /* +@@ -211,7 +228,7 @@ int f_sys_read_x(struct event_filler_arguments *args) + val = 0; + bufsize = 0; + } else { +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + + /* + * The return value can be lower than the value provided by the user, +@@ -241,7 +258,7 @@ int f_sys_write_x(struct event_filler_arguments *args) + /* + * Retrieve the FD. It will be used for dynamic snaplen calculation. + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + args->fd = (int)val; + + /* +@@ -256,13 +273,13 @@ int f_sys_write_x(struct event_filler_arguments *args) + /* + * data + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + bufsize = val; + + /* + * Copy the buffer + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + args->enforce_snaplen = true; + res = val_to_ring(args, val, bufsize, true, 0); + if (unlikely(res != PPM_SUCCESS)) +@@ -701,7 +718,7 @@ int f_proc_startupdate(struct event_filler_arguments *args) + */ + args->str_storage[0] = 0; + +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + #ifdef CONFIG_COMPAT + if (unlikely(args->compat)) + args_len = compat_accumulate_argv_or_env((compat_uptr_t)val, +@@ -873,9 +890,9 @@ cgroups_error: + */ + if (args->event_type == PPME_SYSCALL_CLONE_20_X) { + #ifdef CONFIG_S390 +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + #else +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + #endif + } else + val = 0; +@@ -948,7 +965,7 @@ cgroups_error: + /* + * The call failed, so get the env from the arguments + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + #ifdef CONFIG_COMPAT + if (unlikely(args->compat)) + env_len = compat_accumulate_argv_or_env((compat_uptr_t)val, +@@ -1003,7 +1020,7 @@ int f_sys_execve_e(struct event_filler_arguments *args) + /* + * filename + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (res == PPM_FAILURE_INVALID_USER_MEMORY) + res = val_to_ring(args, (unsigned long)"", 0, false, 0); +@@ -1035,7 +1052,7 @@ int f_sys_socket_bind_x(struct event_filler_arguments *args) + * addr + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + else + val = args->socketcall_args[1]; + +@@ -1045,7 +1062,7 @@ int f_sys_socket_bind_x(struct event_filler_arguments *args) + * Get the address len + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + else + val = args->socketcall_args[2]; + +@@ -1103,7 +1120,7 @@ int f_sys_connect_x(struct event_filler_arguments *args) + * in the stack, and therefore we can consume them. + */ + if (!args->is_socketcall) { +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + fd = (int)val; + } else + fd = (int)args->socketcall_args[0]; +@@ -1113,7 +1130,7 @@ int f_sys_connect_x(struct event_filler_arguments *args) + * Get the address + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + else + val = args->socketcall_args[1]; + +@@ -1123,7 +1140,7 @@ int f_sys_connect_x(struct event_filler_arguments *args) + * Get the address len + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + else + val = args->socketcall_args[2]; + +@@ -1188,7 +1205,7 @@ int f_sys_socketpair_x(struct event_filler_arguments *args) + * fds + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + else + val = args->socketcall_args[3]; + #ifdef CONFIG_COMPAT +@@ -1308,7 +1325,7 @@ int f_sys_accept_x(struct event_filler_arguments *args) + * queuepct + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 0, 1, &srvskfd); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &srvskfd); + else + srvskfd = args->socketcall_args[0]; + +@@ -1350,7 +1367,7 @@ int f_sys_send_e_common(struct event_filler_arguments *args, int *fd) + * fd + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + else + val = args->socketcall_args[0]; + +@@ -1364,7 +1381,7 @@ int f_sys_send_e_common(struct event_filler_arguments *args, int *fd) + * size + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 2, 1, &size); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &size); + else + size = args->socketcall_args[2]; + +@@ -1411,7 +1428,7 @@ int f_sys_sendto_e(struct event_filler_arguments *args) + * Get the address + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 4, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &val); + else + val = args->socketcall_args[4]; + +@@ -1421,7 +1438,7 @@ int f_sys_sendto_e(struct event_filler_arguments *args) + * Get the address len + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 5, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 5, 1, &val); + else + val = args->socketcall_args[5]; + +@@ -1469,7 +1486,7 @@ int f_sys_send_x(struct event_filler_arguments *args) + * Retrieve the FD. It will be used for dynamic snaplen calculation. + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + else + val = args->socketcall_args[0]; + +@@ -1494,7 +1511,7 @@ int f_sys_send_x(struct event_filler_arguments *args) + bufsize = 0; + } else { + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + else + val = args->socketcall_args[1]; + +@@ -1523,7 +1540,7 @@ int f_sys_recv_x_common(struct event_filler_arguments *args, int64_t *retval) + * Retrieve the FD. It will be used for dynamic snaplen calculation. + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + else + val = args->socketcall_args[1]; + +@@ -1548,7 +1565,7 @@ int f_sys_recv_x_common(struct event_filler_arguments *args, int64_t *retval) + bufsize = 0; + } else { + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + else + val = args->socketcall_args[1]; + +@@ -1604,7 +1621,7 @@ int f_sys_recvfrom_x(struct event_filler_arguments *args) + * Get the fd + */ + if (!args->is_socketcall) { +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + fd = (int)val; + } else + fd = (int)args->socketcall_args[0]; +@@ -1613,7 +1630,7 @@ int f_sys_recvfrom_x(struct event_filler_arguments *args) + * Get the address + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 4, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &val); + else + val = args->socketcall_args[4]; + usrsockaddr = (struct sockaddr __user *)val; +@@ -1622,7 +1639,7 @@ int f_sys_recvfrom_x(struct event_filler_arguments *args) + * Get the address len + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 5, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 5, 1, &val); + else + val = args->socketcall_args[5]; + if (usrsockaddr != NULL && val != 0) { +@@ -1698,7 +1715,7 @@ int f_sys_sendmsg_e(struct event_filler_arguments *args) + * fd + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + else + val = args->socketcall_args[0]; + +@@ -1711,7 +1728,7 @@ int f_sys_sendmsg_e(struct event_filler_arguments *args) + * Retrieve the message header + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + else + val = args->socketcall_args[1]; + +@@ -1823,7 +1840,7 @@ int f_sys_sendmsg_x(struct event_filler_arguments *args) + * Retrieve the message header + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + else + val = args->socketcall_args[1]; + +@@ -1896,7 +1913,7 @@ int f_sys_recvmsg_x(struct event_filler_arguments *args) + * Retrieve the message header + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + else + val = args->socketcall_args[1]; + +@@ -1940,7 +1957,7 @@ int f_sys_recvmsg_x(struct event_filler_arguments *args) + * Get the fd + */ + if (!args->is_socketcall) { +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + fd = (int)val; + } else + fd = (int)args->socketcall_args[0]; +@@ -2002,7 +2019,7 @@ int f_sys_pipe_x(struct event_filler_arguments *args) + /* + * fds + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + + #ifdef CONFIG_COMPAT + if (!args->compat) { +@@ -2050,7 +2067,7 @@ int f_sys_eventfd_e(struct event_filler_arguments *args) + /* + * initval + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2059,7 +2076,7 @@ int f_sys_eventfd_e(struct event_filler_arguments *args) + * flags + * XXX not implemented yet + */ +- /* syscall_get_arguments(current, args->regs, 1, 1, &val); */ ++ /* syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); */ + val = 0; + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) +@@ -2077,7 +2094,7 @@ int f_sys_shutdown_e(struct event_filler_arguments *args) + * fd + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + else + val = args->socketcall_args[0]; + +@@ -2089,7 +2106,7 @@ int f_sys_shutdown_e(struct event_filler_arguments *args) + * how + */ + if (!args->is_socketcall) +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + else + val = args->socketcall_args[1]; + +@@ -2108,7 +2125,7 @@ int f_sys_futex_e(struct event_filler_arguments *args) + /* + * addr + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2116,7 +2133,7 @@ int f_sys_futex_e(struct event_filler_arguments *args) + /* + * op + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, (unsigned long)futex_op_to_scap(val), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2124,7 +2141,7 @@ int f_sys_futex_e(struct event_filler_arguments *args) + /* + * val + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2140,7 +2157,7 @@ int f_sys_lseek_e(struct event_filler_arguments *args) + /* + * fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2148,7 +2165,7 @@ int f_sys_lseek_e(struct event_filler_arguments *args) + /* + * offset + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2156,7 +2173,7 @@ int f_sys_lseek_e(struct event_filler_arguments *args) + /* + * whence + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + res = val_to_ring(args, lseek_whence_to_scap(val), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2175,7 +2192,7 @@ int f_sys_llseek_e(struct event_filler_arguments *args) + /* + * fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2184,8 +2201,8 @@ int f_sys_llseek_e(struct event_filler_arguments *args) + * offset + * We build it by combining the offset_high and offset_low system call arguments + */ +- syscall_get_arguments(current, args->regs, 1, 1, &oh); +- syscall_get_arguments(current, args->regs, 2, 1, &ol); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &oh); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &ol); + offset = (((uint64_t)oh) << 32) + ((uint64_t)ol); + res = val_to_ring(args, offset, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) +@@ -2194,7 +2211,7 @@ int f_sys_llseek_e(struct event_filler_arguments *args) + /* + * whence + */ +- syscall_get_arguments(current, args->regs, 4, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &val); + res = val_to_ring(args, lseek_whence_to_scap(val), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2218,7 +2235,7 @@ static int poll_parse_fds(struct event_filler_arguments *args, bool enter_event) + * + * Get the number of fds + */ +- syscall_get_arguments(current, args->regs, 1, 1, &nfds); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &nfds); + + /* + * Check if we have enough space to store both the fd list +@@ -2228,7 +2245,7 @@ static int poll_parse_fds(struct event_filler_arguments *args, bool enter_event) + return PPM_FAILURE_BUFFER_FULL; + + /* Get the fds pointer */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + + fds = (struct pollfd *)args->str_storage; + #ifdef CONFIG_COMPAT +@@ -2285,7 +2302,7 @@ int f_sys_poll_e(struct event_filler_arguments *args) + /* + * timeout + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2340,7 +2357,7 @@ int f_sys_ppoll_e(struct event_filler_arguments *args) + /* + * timeout + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + /* NULL timeout specified as 0xFFFFFF.... */ + if (val == (unsigned long)NULL) + res = val_to_ring(args, (uint64_t)(-1), 0, false, 0); +@@ -2352,7 +2369,7 @@ int f_sys_ppoll_e(struct event_filler_arguments *args) + /* + * sigmask + */ +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + if (val != (unsigned long)NULL) + if (0 != ppm_copy_from_user(&val, (void __user *)val, sizeof(val))) + return PPM_FAILURE_INVALID_USER_MEMORY; +@@ -2394,7 +2411,7 @@ int f_sys_mount_e(struct event_filler_arguments *args) + * Fix mount flags in arg 3. + * See http://lxr.free-electrons.com/source/fs/namespace.c?v=4.2#L2650 + */ +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + if ((val & PPM_MS_MGC_MSK) == PPM_MS_MGC_VAL) + val &= ~PPM_MS_MGC_MSK; + res = val_to_ring(args, val, 0, false, 0); +@@ -2420,7 +2437,7 @@ int f_sys_openat_x(struct event_filler_arguments *args) + /* + * dirfd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + + if ((int)val == AT_FDCWD) + val = PPM_AT_FDCWD; +@@ -2432,7 +2449,7 @@ int f_sys_openat_x(struct event_filler_arguments *args) + /* + * name + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2441,7 +2458,7 @@ int f_sys_openat_x(struct event_filler_arguments *args) + * Flags + * Note that we convert them into the ppm portable representation before pushing them to the ring + */ +- syscall_get_arguments(current, args->regs, 2, 1, &flags); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &flags); + res = val_to_ring(args, open_flags_to_scap(flags), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2449,7 +2466,7 @@ int f_sys_openat_x(struct event_filler_arguments *args) + /* + * mode + */ +- syscall_get_arguments(current, args->regs, 3, 1, &modes); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &modes); + res = val_to_ring(args, open_modes_to_scap(flags, modes), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2471,7 +2488,7 @@ int f_sys_unlinkat_x(struct event_filler_arguments *args) + /* + * dirfd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + + if ((int)val == AT_FDCWD) + val = PPM_AT_FDCWD; +@@ -2483,7 +2500,7 @@ int f_sys_unlinkat_x(struct event_filler_arguments *args) + /* + * name + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2492,7 +2509,7 @@ int f_sys_unlinkat_x(struct event_filler_arguments *args) + * flags + * Note that we convert them into the ppm portable representation before pushing them to the ring + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + res = val_to_ring(args, unlinkat_flags_to_scap(val), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2515,7 +2532,7 @@ int f_sys_linkat_x(struct event_filler_arguments *args) + /* + * olddir + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + + if ((int)val == AT_FDCWD) + val = PPM_AT_FDCWD; +@@ -2527,7 +2544,7 @@ int f_sys_linkat_x(struct event_filler_arguments *args) + /* + * oldpath + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2535,7 +2552,7 @@ int f_sys_linkat_x(struct event_filler_arguments *args) + /* + * newdir + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + + if ((int)val == AT_FDCWD) + val = PPM_AT_FDCWD; +@@ -2547,7 +2564,7 @@ int f_sys_linkat_x(struct event_filler_arguments *args) + /* + * newpath + */ +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2556,7 +2573,7 @@ int f_sys_linkat_x(struct event_filler_arguments *args) + * Flags + * Note that we convert them into the ppm portable representation before pushing them to the ring + */ +- syscall_get_arguments(current, args->regs, 4, 1, &flags); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &flags); + res = val_to_ring(args, linkat_flags_to_scap(flags), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2577,7 +2594,7 @@ int f_sys_pread64_e(struct event_filler_arguments *args) + /* + * fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2585,7 +2602,7 @@ int f_sys_pread64_e(struct event_filler_arguments *args) + /* + * size + */ +- syscall_get_arguments(current, args->regs, 2, 1, &size); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &size); + res = val_to_ring(args, size, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2594,11 +2611,11 @@ int f_sys_pread64_e(struct event_filler_arguments *args) + * pos + */ + #if defined CONFIG_X86 +- syscall_get_arguments(current, args->regs, 3, 1, &pos0); +- syscall_get_arguments(current, args->regs, 4, 1, &pos1); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &pos0); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &pos1); + #elif defined CONFIG_ARM && CONFIG_AEABI +- syscall_get_arguments(current, args->regs, 4, 1, &pos0); +- syscall_get_arguments(current, args->regs, 5, 1, &pos1); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &pos0); ++ syscall_get_arguments_deprecated(current, args->regs, 5, 1, &pos1); + #else + #error This architecture/abi not yet supported + #endif +@@ -2628,7 +2645,7 @@ int f_sys_pwrite64_e(struct event_filler_arguments *args) + /* + * fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2636,7 +2653,7 @@ int f_sys_pwrite64_e(struct event_filler_arguments *args) + /* + * size + */ +- syscall_get_arguments(current, args->regs, 2, 1, &size); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &size); + res = val_to_ring(args, size, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2647,17 +2664,17 @@ int f_sys_pwrite64_e(struct event_filler_arguments *args) + * separate registers that we need to merge. + */ + #ifdef _64BIT_ARGS_SINGLE_REGISTER +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; + #else + #if defined CONFIG_X86 +- syscall_get_arguments(current, args->regs, 3, 1, &pos0); +- syscall_get_arguments(current, args->regs, 4, 1, &pos1); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &pos0); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &pos1); + #elif defined CONFIG_ARM && CONFIG_AEABI +- syscall_get_arguments(current, args->regs, 4, 1, &pos0); +- syscall_get_arguments(current, args->regs, 5, 1, &pos1); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &pos0); ++ syscall_get_arguments_deprecated(current, args->regs, 5, 1, &pos1); + #else + #error This architecture/abi not yet supported + #endif +@@ -2695,8 +2712,8 @@ int f_sys_readv_preadv_x(struct event_filler_arguments *args) + /* + * data and size + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); +- syscall_get_arguments(current, args->regs, 2, 1, &iovcnt); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &iovcnt); + + #ifdef CONFIG_COMPAT + if (unlikely(args->compat)) { +@@ -2727,7 +2744,7 @@ int f_sys_writev_e(struct event_filler_arguments *args) + /* + * fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2735,12 +2752,12 @@ int f_sys_writev_e(struct event_filler_arguments *args) + /* + * size + */ +- syscall_get_arguments(current, args->regs, 2, 1, &iovcnt); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &iovcnt); + + /* + * Copy the buffer + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + #ifdef CONFIG_COMPAT + if (unlikely(args->compat)) { + compat_iov = (const struct compat_iovec __user *)compat_ptr(val); +@@ -2783,13 +2800,13 @@ int f_sys_writev_pwritev_x(struct event_filler_arguments *args) + /* + * data and size + */ +- syscall_get_arguments(current, args->regs, 2, 1, &iovcnt); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &iovcnt); + + + /* + * Copy the buffer + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + #ifdef CONFIG_COMPAT + if (unlikely(args->compat)) { + compat_iov = (const struct compat_iovec __user *)compat_ptr(val); +@@ -2818,7 +2835,7 @@ int f_sys_preadv64_e(struct event_filler_arguments *args) + /* + * fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2833,8 +2850,8 @@ int f_sys_preadv64_e(struct event_filler_arguments *args) + * requirements apply here. For an overly-detailed discussion about + * this, see https://lwn.net/Articles/311630/ + */ +- syscall_get_arguments(current, args->regs, 3, 1, &pos0); +- syscall_get_arguments(current, args->regs, 4, 1, &pos1); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &pos0); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &pos1); + + pos64 = merge_64(pos1, pos0); + +@@ -2864,7 +2881,7 @@ int f_sys_pwritev_e(struct event_filler_arguments *args) + /* + * fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2872,12 +2889,12 @@ int f_sys_pwritev_e(struct event_filler_arguments *args) + /* + * size + */ +- syscall_get_arguments(current, args->regs, 2, 1, &iovcnt); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &iovcnt); + + /* + * Copy the buffer + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + #ifdef CONFIG_COMPAT + if (unlikely(args->compat)) { + compat_iov = (const struct compat_iovec __user *)compat_ptr(val); +@@ -2900,7 +2917,7 @@ int f_sys_pwritev_e(struct event_filler_arguments *args) + * separate registers that we need to merge. + */ + #ifdef _64BIT_ARGS_SINGLE_REGISTER +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2911,8 +2928,8 @@ int f_sys_pwritev_e(struct event_filler_arguments *args) + * requirements apply here. For an overly-detailed discussion about + * this, see https://lwn.net/Articles/311630/ + */ +- syscall_get_arguments(current, args->regs, 3, 1, &pos0); +- syscall_get_arguments(current, args->regs, 4, 1, &pos1); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &pos0); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &pos1); + + pos64 = merge_64(pos1, pos0); + +@@ -2929,7 +2946,7 @@ int f_sys_nanosleep_e(struct event_filler_arguments *args) + unsigned long val; + int res; + +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = timespec_parse(args, val); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -2946,7 +2963,7 @@ int f_sys_getrlimit_setrlimit_e(struct event_filler_arguments *args) + /* + * resource + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + + ppm_resource = rlimit_resource_to_scap(val); + +@@ -2981,7 +2998,7 @@ int f_sys_getrlimit_setrlrimit_x(struct event_filler_arguments *args) + * Copy the user structure and extract cur and max + */ + if (retval >= 0 || args->event_type == PPME_SYSCALL_SETRLIMIT_X) { +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + + #ifdef CONFIG_COMPAT + if (!args->compat) { +@@ -3029,7 +3046,7 @@ int f_sys_prlimit_e(struct event_filler_arguments *args) + /* + * pid + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) +@@ -3038,7 +3055,7 @@ int f_sys_prlimit_e(struct event_filler_arguments *args) + /* + * resource + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + + ppm_resource = rlimit_resource_to_scap(val); + +@@ -3075,7 +3092,7 @@ int f_sys_prlimit_x(struct event_filler_arguments *args) + * Copy the user structure and extract cur and max + */ + if (retval >= 0) { +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + + #ifdef CONFIG_COMPAT + if (!args->compat) { +@@ -3103,7 +3120,7 @@ int f_sys_prlimit_x(struct event_filler_arguments *args) + newmax = -1; + } + +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + + #ifdef CONFIG_COMPAT + if (!args->compat) { +@@ -3258,7 +3275,7 @@ int f_sys_fcntl_e(struct event_filler_arguments *args) + /* + * fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3266,7 +3283,7 @@ int f_sys_fcntl_e(struct event_filler_arguments *args) + /* + * cmd + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, fcntl_cmd_to_scap(val), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3280,7 +3297,7 @@ static inline int parse_ptrace_addr(struct event_filler_arguments *args, u16 req + uint64_t dst; + u8 idx; + +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + switch (request) { + default: + idx = PPM_PTRACE_IDX_UINT64; +@@ -3297,7 +3314,7 @@ static inline int parse_ptrace_data(struct event_filler_arguments *args, u16 req + uint64_t dst; + u8 idx; + +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + switch (request) { + case PPM_PTRACE_PEEKTEXT: + case PPM_PTRACE_PEEKDATA: +@@ -3345,7 +3362,7 @@ int f_sys_ptrace_e(struct event_filler_arguments *args) + /* + * request + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, ptrace_requests_to_scap(val), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3353,7 +3370,7 @@ int f_sys_ptrace_e(struct event_filler_arguments *args) + /* + * pid + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3391,7 +3408,7 @@ int f_sys_ptrace_x(struct event_filler_arguments *args) + /* + * request + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + request = ptrace_requests_to_scap(val); + + res = parse_ptrace_addr(args, request); +@@ -3457,7 +3474,7 @@ int f_sys_mmap_e(struct event_filler_arguments *args) + /* + * addr + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3465,7 +3482,7 @@ int f_sys_mmap_e(struct event_filler_arguments *args) + /* + * length + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3473,7 +3490,7 @@ int f_sys_mmap_e(struct event_filler_arguments *args) + /* + * prot + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + res = val_to_ring(args, prot_flags_to_scap(val), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3481,7 +3498,7 @@ int f_sys_mmap_e(struct event_filler_arguments *args) + /* + * flags + */ +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + res = val_to_ring(args, mmap_flags_to_scap(val), 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3489,7 +3506,7 @@ int f_sys_mmap_e(struct event_filler_arguments *args) + /* + * fd + */ +- syscall_get_arguments(current, args->regs, 4, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 4, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3497,7 +3514,7 @@ int f_sys_mmap_e(struct event_filler_arguments *args) + /* + * offset/pgoffset + */ +- syscall_get_arguments(current, args->regs, 5, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 5, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3519,7 +3536,7 @@ int f_sys_renameat_x(struct event_filler_arguments *args) + /* + * olddirfd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + + if ((int)val == AT_FDCWD) + val = PPM_AT_FDCWD; +@@ -3531,7 +3548,7 @@ int f_sys_renameat_x(struct event_filler_arguments *args) + /* + * oldpath + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3539,7 +3556,7 @@ int f_sys_renameat_x(struct event_filler_arguments *args) + /* + * newdirfd + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + + if ((int)val == AT_FDCWD) + val = PPM_AT_FDCWD; +@@ -3551,7 +3568,7 @@ int f_sys_renameat_x(struct event_filler_arguments *args) + /* + * newpath + */ +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3573,7 +3590,7 @@ int f_sys_symlinkat_x(struct event_filler_arguments *args) + /* + * oldpath + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3581,7 +3598,7 @@ int f_sys_symlinkat_x(struct event_filler_arguments *args) + /* + * newdirfd + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + + if ((int)val == AT_FDCWD) + val = PPM_AT_FDCWD; +@@ -3593,7 +3610,7 @@ int f_sys_symlinkat_x(struct event_filler_arguments *args) + /* + * newpath + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3629,7 +3646,7 @@ int f_sys_sendfile_e(struct event_filler_arguments *args) + /* + * out_fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3637,7 +3654,7 @@ int f_sys_sendfile_e(struct event_filler_arguments *args) + /* + * in_fd + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3645,7 +3662,7 @@ int f_sys_sendfile_e(struct event_filler_arguments *args) + /* + * offset + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + + if (val != 0) { + #ifdef CONFIG_COMPAT +@@ -3670,7 +3687,7 @@ int f_sys_sendfile_e(struct event_filler_arguments *args) + /* + * size + */ +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3696,7 +3713,7 @@ int f_sys_sendfile_x(struct event_filler_arguments *args) + /* + * offset + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + + if (val != 0) { + #ifdef CONFIG_COMPAT +@@ -3732,7 +3749,7 @@ int f_sys_quotactl_e(struct event_filler_arguments *args) + /* + * extract cmd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + cmd = quotactl_cmd_to_scap(val); + res = val_to_ring(args, cmd, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) +@@ -3749,7 +3766,7 @@ int f_sys_quotactl_e(struct event_filler_arguments *args) + * extract id + */ + id = 0; +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + if ((cmd == PPM_Q_GETQUOTA) || + (cmd == PPM_Q_SETQUOTA) || + (cmd == PPM_Q_XGETQUOTA) || +@@ -3792,7 +3809,7 @@ int f_sys_quotactl_x(struct event_filler_arguments *args) + /* + * extract cmd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + cmd = quotactl_cmd_to_scap(val); + + /* +@@ -3806,7 +3823,7 @@ int f_sys_quotactl_x(struct event_filler_arguments *args) + /* + * Add special + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -3814,7 +3831,7 @@ int f_sys_quotactl_x(struct event_filler_arguments *args) + /* + * get addr + */ +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + + /* + * get quotafilepath only for QUOTAON +@@ -3992,7 +4009,7 @@ int f_sys_getresuid_and_gid_x(struct event_filler_arguments *args) + /* + * ruid + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + #ifdef CONFIG_COMPAT + if (!args->compat) { + #endif +@@ -4012,7 +4029,7 @@ int f_sys_getresuid_and_gid_x(struct event_filler_arguments *args) + /* + * euid + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + len = ppm_copy_from_user(&uid, (void *)val, sizeof(uint32_t)); + if (unlikely(len != 0)) + return PPM_FAILURE_INVALID_USER_MEMORY; +@@ -4024,7 +4041,7 @@ int f_sys_getresuid_and_gid_x(struct event_filler_arguments *args) + /* + * suid + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + len = ppm_copy_from_user(&uid, (void *)val, sizeof(uint32_t)); + if (unlikely(len != 0)) + return PPM_FAILURE_INVALID_USER_MEMORY; +@@ -4042,12 +4059,12 @@ int f_sys_flock_e(struct event_filler_arguments *args) + int res; + u32 flags; + +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; + +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + flags = flock_flags_to_scap(val); + res = val_to_ring(args, flags, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) +@@ -4065,7 +4082,7 @@ int f_sys_setns_e(struct event_filler_arguments *args) + /* + * parse fd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4073,7 +4090,7 @@ int f_sys_setns_e(struct event_filler_arguments *args) + /* + * get type, parse as clone flags as it's a subset of it + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + flags = clone_flags_to_scap(val); + res = val_to_ring(args, flags, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) +@@ -4091,7 +4108,7 @@ int f_sys_unshare_e(struct event_filler_arguments *args) + /* + * get type, parse as clone flags as it's a subset of it + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + flags = clone_flags_to_scap(val); + res = val_to_ring(args, flags, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) +@@ -4192,7 +4209,7 @@ int f_sys_semop_x(struct event_filler_arguments *args) + * actually this could be read in the enter function but + * we also need to know the value to access the sembuf structs + */ +- syscall_get_arguments(current, args->regs, 2, 1, &nsops); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &nsops); + res = val_to_ring(args, nsops, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4200,7 +4217,7 @@ int f_sys_semop_x(struct event_filler_arguments *args) + /* + * sembuf + */ +- syscall_get_arguments(current, args->regs, 1, 1, (unsigned long *) &ptr); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, (unsigned long *) &ptr); + + if (nsops && ptr) { + /* max length of sembuf array in g_event_info = 2 */ +@@ -4239,7 +4256,7 @@ int f_sys_semget_e(struct event_filler_arguments *args) + /* + * key + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4247,7 +4264,7 @@ int f_sys_semget_e(struct event_filler_arguments *args) + /* + * nsems + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4255,7 +4272,7 @@ int f_sys_semget_e(struct event_filler_arguments *args) + /* + * semflg + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + res = val_to_ring(args, semget_flags_to_scap(val), 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4271,7 +4288,7 @@ int f_sys_semctl_e(struct event_filler_arguments *args) + /* + * semid + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4279,7 +4296,7 @@ int f_sys_semctl_e(struct event_filler_arguments *args) + /* + * semnum + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4287,7 +4304,7 @@ int f_sys_semctl_e(struct event_filler_arguments *args) + /* + * cmd + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + res = val_to_ring(args, semctl_cmd_to_scap(val), 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4296,7 +4313,7 @@ int f_sys_semctl_e(struct event_filler_arguments *args) + * optional argument semun/val + */ + if (val == SETVAL) +- syscall_get_arguments(current, args->regs, 3, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 3, 1, &val); + else + val = 0; + res = val_to_ring(args, val, 0, true, 0); +@@ -4314,7 +4331,7 @@ int f_sys_access_e(struct event_filler_arguments *args) + /* + * mode + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, access_flags_to_scap(val), 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4342,7 +4359,7 @@ int f_sys_bpf_x(struct event_filler_arguments *args) + /* + * fd, depending on cmd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &cmd); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &cmd); + #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0) + if(cmd == BPF_MAP_CREATE || cmd == BPF_PROG_LOAD) + #else +@@ -4375,7 +4392,7 @@ int f_sys_mkdirat_x(struct event_filler_arguments *args) + /* + * dirfd + */ +- syscall_get_arguments(current, args->regs, 0, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 0, 1, &val); + + if ((int)val == AT_FDCWD) + val = PPM_AT_FDCWD; +@@ -4387,7 +4404,7 @@ int f_sys_mkdirat_x(struct event_filler_arguments *args) + /* + * path + */ +- syscall_get_arguments(current, args->regs, 1, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 1, 1, &val); + res = val_to_ring(args, val, 0, true, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +@@ -4395,7 +4412,7 @@ int f_sys_mkdirat_x(struct event_filler_arguments *args) + /* + * mode + */ +- syscall_get_arguments(current, args->regs, 2, 1, &val); ++ syscall_get_arguments_deprecated(current, args->regs, 2, 1, &val); + res = val_to_ring(args, val, 0, false, 0); + if (unlikely(res != PPM_SUCCESS)) + return res; +diff --git a/driver/ppm_flag_helpers.h b/driver/ppm_flag_helpers.h +index 92aaa1a4..00f11ec9 100644 +--- a/driver/ppm_flag_helpers.h ++++ b/driver/ppm_flag_helpers.h +@@ -18,8 +18,7 @@ along with sysdig. If not, see . + + #ifndef PPM_FLAG_HELPERS_H_ + #define PPM_FLAG_HELPERS_H_ +- +-#include ++#include + #include + #include + +-- +2.26.2 + +diff --git a/driver/ppm_events.c b/driver/ppm_events.c +index 7be81657..3b94e651 100644 +--- a/driver/ppm_events.c ++++ b/driver/ppm_events.c +@@ -55,7 +55,11 @@ along with sysdig. If not, see . + #ifdef access_ok_noprefault + #define ppm_access_ok access_ok_noprefault + #else ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 0, 0) + #define ppm_access_ok access_ok ++#else ++#define ppm_access_ok(type,addr,size) access_ok(addr,size) ++#endif + #endif + + extern bool g_tracers_enabled; diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/patches/sysdig/0.23.1/luajit.patch b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/sysdig/0.23.1/luajit.patch new file mode 100644 index 000000000000..1945908ba74b --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/sysdig/0.23.1/luajit.patch @@ -0,0 +1,56 @@ +# hack taken from CMakeLists.txt +# PATCH_COMMAND sed -i "s/luaL_reg/luaL_Reg/g" ${PROJECT_SOURCE_DIR}/userspace/libsinsp/chisel.cpp && sed -i "s/luaL_reg/luaL_Reg/g" ${PROJECT_SOURCE_DIR}/userspace/libsinsp/lua_parser.cpp && sed -i "s/luaL_getn/lua_objlen /g" ${PROJECT_SOURCE_DIR}/userspace/libsinsp/lua_parser_api.cpp +diff -ur sysdig-0.23.1.orig/userspace/libsinsp/chisel.cpp sysdig-0.23.1/userspace/libsinsp/chisel.cpp +--- sysdig-0.23.1.orig/userspace/libsinsp/chisel.cpp 2018-08-14 22:58:06.000000000 +0200 ++++ sysdig-0.23.1/userspace/libsinsp/chisel.cpp 2020-05-17 12:33:38.871530253 +0200 +@@ -96,7 +96,7 @@ + // Lua callbacks + /////////////////////////////////////////////////////////////////////////////// + #ifdef HAS_LUA_CHISELS +-const static struct luaL_reg ll_sysdig [] = ++const static struct luaL_Reg ll_sysdig [] = + { + {"set_filter", &lua_cbacks::set_global_filter}, + {"set_snaplen", &lua_cbacks::set_snaplen}, +@@ -132,7 +132,7 @@ + {NULL,NULL} + }; + +-const static struct luaL_reg ll_chisel [] = ++const static struct luaL_Reg ll_chisel [] = + { + {"request_field", &lua_cbacks::request_field}, + {"set_filter", &lua_cbacks::set_filter}, +@@ -144,7 +144,7 @@ + {NULL,NULL} + }; + +-const static struct luaL_reg ll_evt [] = ++const static struct luaL_Reg ll_evt [] = + { + {"field", &lua_cbacks::field}, + {"get_num", &lua_cbacks::get_num}, +diff -ur sysdig-0.23.1.orig/userspace/libsinsp/lua_parser_api.cpp sysdig-0.23.1/userspace/libsinsp/lua_parser_api.cpp +--- sysdig-0.23.1.orig/userspace/libsinsp/lua_parser_api.cpp 2018-08-14 22:58:06.000000000 +0200 ++++ sysdig-0.23.1/userspace/libsinsp/lua_parser_api.cpp 2020-05-17 12:33:53.019534358 +0200 +@@ -235,7 +235,7 @@ + fprintf(stderr, "%s\n", err.c_str()); + throw sinsp_exception("parser API error"); + } +- int n = luaL_getn(ls, 3); /* get size of table */ ++ int n = lua_objlen (ls, 3); /* get size of table */ + for (i=1; i<=n; i++) + { + lua_rawgeti(ls, 3, i); +diff -ur sysdig-0.23.1.orig/userspace/libsinsp/lua_parser.cpp sysdig-0.23.1/userspace/libsinsp/lua_parser.cpp +--- sysdig-0.23.1.orig/userspace/libsinsp/lua_parser.cpp 2018-08-14 22:58:06.000000000 +0200 ++++ sysdig-0.23.1/userspace/libsinsp/lua_parser.cpp 2020-05-17 12:33:46.343532385 +0200 +@@ -14,7 +14,7 @@ + #include "lauxlib.h" + } + +-const static struct luaL_reg ll_filter [] = ++const static struct luaL_Reg ll_filter [] = + { + {"rel_expr", &lua_parser_cbacks::rel_expr}, + {"bool_op", &lua_parser_cbacks::bool_op}, diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/patches/systemd/240/dhcp-multiple-addresses-for-router.patch b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/systemd/240/dhcp-multiple-addresses-for-router.patch new file mode 100644 index 000000000000..10be45fdf5c1 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/systemd/240/dhcp-multiple-addresses-for-router.patch @@ -0,0 +1,470 @@ +From 398f9301fd2db3b15407a62e90d416914f94c669 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Mon, 11 Feb 2019 21:25:13 +0900 +Subject: [PATCH 1/3] network: minor coding style update + +(cherry picked from commit 860e636cf6855260634ef2f7f52af4635b1271c3) +--- + src/network/networkd-dhcp4.c | 16 +++++++--------- + 1 file changed, 7 insertions(+), 9 deletions(-) + +diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c +index 980d49e..61f767a 100644 +--- a/src/network/networkd-dhcp4.c ++++ b/src/network/networkd-dhcp4.c +@@ -70,7 +70,7 @@ static int link_set_dhcp_routes(Link *link) { + /* When the interface is part of an VRF use the VRFs routing table, unless + * there is a another table specified. */ + table = link->network->dhcp_route_table; +- if (!link->network->dhcp_route_table_set && link->network->vrf != NULL) ++ if (!link->network->dhcp_route_table_set && link->network->vrf) + table = VRF(link->network->vrf)->table; + + r = sd_dhcp_lease_get_address(link->dhcp_lease, &address); +@@ -135,14 +135,7 @@ static int link_set_dhcp_routes(Link *link) { + log_link_warning(link, "Classless static routes received from DHCP server: ignoring static-route option and router option"); + + if (r >= 0 && !classless_route) { +- _cleanup_(route_freep) Route *route = NULL; +- _cleanup_(route_freep) Route *route_gw = NULL; +- +- r = route_new(&route); +- if (r < 0) +- return log_link_error_errno(link, r, "Could not allocate route: %m"); +- +- route->protocol = RTPROT_DHCP; ++ _cleanup_(route_freep) Route *route = NULL, *route_gw = NULL; + + r = route_new(&route_gw); + if (r < 0) +@@ -166,9 +159,14 @@ static int link_set_dhcp_routes(Link *link) { + + link->dhcp4_messages++; + ++ r = route_new(&route); ++ if (r < 0) ++ return log_link_error_errno(link, r, "Could not allocate route: %m"); ++ + route->family = AF_INET; + route->gw.in = gateway; + route->prefsrc.in = address; ++ route->protocol = RTPROT_DHCP; + route->priority = link->network->dhcp_route_metric; + route->table = table; + +-- +2.7.4 + +From 8fac545db140bd5c29113d13caa2d0d7cb8bb49b Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Fri, 14 Dec 2018 11:10:57 +0100 +Subject: [PATCH 2/3] dhcp: handle multiple addresses for "Router" (option 3) + in DHCP library + +The Router DHCP option may contain a list of one or more +routers ([1]). Extend the API of sd_dhcp_lease to return a +list instead of only the first. + +Note that networkd still only uses the first router (if present). +Aside from extending the internal API of the DHCP client, there +is almost no change in behavior. The only visible difference in +behavior is that the "ROUTER" variable in the lease file is now a +list of addresses. + +Note how RFC 2132 does not define certain IP addresses as invalid for the +router option. Still, previously sd_dhcp_lease_get_router() would never +return a "0.0.0.0" address. In fact, the previous API could not +differenciate whether no router option was present, whether it +was invalid, or whether its first router was "0.0.0.0". No longer let +the DHCP client library impose additional restrictions that are not +part of RFC. Instead, the caller should handle this. The patch does +that, and networkd only consideres the first router entry if it is not +"0.0.0.0". + +[1] https://tools.ietf.org/html/rfc2132#section-3.5 + +(cherry picked from commit f8862395e8f802e4106a07ceaaf02b6a1faa5a6d) +--- + src/libsystemd-network/dhcp-lease-internal.h | 4 ++- + src/libsystemd-network/sd-dhcp-lease.c | 50 +++++++++++++++------------- + src/libsystemd-network/test-dhcp-client.c | 7 ++-- + src/network/networkd-dhcp4.c | 37 ++++++++++---------- + src/systemd/sd-dhcp-lease.h | 2 +- + 5 files changed, 54 insertions(+), 46 deletions(-) + +diff --git a/src/libsystemd-network/dhcp-lease-internal.h b/src/libsystemd-network/dhcp-lease-internal.h +index 9d245a9..122042a 100644 +--- a/src/libsystemd-network/dhcp-lease-internal.h ++++ b/src/libsystemd-network/dhcp-lease-internal.h +@@ -41,7 +41,6 @@ struct sd_dhcp_lease { + /* each 0 if unset */ + be32_t address; + be32_t server_address; +- be32_t router; + be32_t next_server; + + bool have_subnet_mask; +@@ -50,6 +49,9 @@ struct sd_dhcp_lease { + bool have_broadcast; + be32_t broadcast; + ++ struct in_addr *router; ++ size_t router_size; ++ + struct in_addr *dns; + size_t dns_size; + +diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c +index 13badbf..406188c 100644 +--- a/src/libsystemd-network/sd-dhcp-lease.c ++++ b/src/libsystemd-network/sd-dhcp-lease.c +@@ -151,15 +151,15 @@ int sd_dhcp_lease_get_root_path(sd_dhcp_lease *lease, const char **root_path) { + return 0; + } + +-int sd_dhcp_lease_get_router(sd_dhcp_lease *lease, struct in_addr *addr) { ++int sd_dhcp_lease_get_router(sd_dhcp_lease *lease, const struct in_addr **addr) { + assert_return(lease, -EINVAL); + assert_return(addr, -EINVAL); + +- if (lease->router == 0) ++ if (lease->router_size <= 0) + return -ENODATA; + +- addr->s_addr = lease->router; +- return 0; ++ *addr = lease->router; ++ return (int) lease->router_size; + } + + int sd_dhcp_lease_get_netmask(sd_dhcp_lease *lease, struct in_addr *addr) { +@@ -261,6 +261,7 @@ static sd_dhcp_lease *dhcp_lease_free(sd_dhcp_lease *lease) { + } + + free(lease->root_path); ++ free(lease->router); + free(lease->timezone); + free(lease->hostname); + free(lease->domainname); +@@ -387,7 +388,7 @@ static void filter_bogus_addresses(struct in_addr *addresses, size_t *n) { + *n = j; + } + +-static int lease_parse_in_addrs(const uint8_t *option, size_t len, struct in_addr **ret, size_t *n_ret) { ++static int lease_parse_in_addrs(const uint8_t *option, size_t len, bool filter_bogus, struct in_addr **ret, size_t *n_ret) { + assert(option); + assert(ret); + assert(n_ret); +@@ -408,7 +409,8 @@ static int lease_parse_in_addrs(const uint8_t *option, size_t len, struct in_add + if (!addresses) + return -ENOMEM; + +- filter_bogus_addresses(addresses, &n_addresses); ++ if (filter_bogus) ++ filter_bogus_addresses(addresses, &n_addresses); + + free(*ret); + *ret = addresses; +@@ -554,21 +556,19 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const void *option, void + break; + + case SD_DHCP_OPTION_ROUTER: +- if (len >= 4) { +- r = lease_parse_be32(option, 4, &lease->router); +- if (r < 0) +- log_debug_errno(r, "Failed to parse router address, ignoring: %m"); +- } ++ r = lease_parse_in_addrs(option, len, false, &lease->router, &lease->router_size); ++ if (r < 0) ++ log_debug_errno(r, "Failed to parse router addresses, ignoring: %m"); + break; + + case SD_DHCP_OPTION_DOMAIN_NAME_SERVER: +- r = lease_parse_in_addrs(option, len, &lease->dns, &lease->dns_size); ++ r = lease_parse_in_addrs(option, len, true, &lease->dns, &lease->dns_size); + if (r < 0) + log_debug_errno(r, "Failed to parse DNS server, ignoring: %m"); + break; + + case SD_DHCP_OPTION_NTP_SERVER: +- r = lease_parse_in_addrs(option, len, &lease->ntp, &lease->ntp_size); ++ r = lease_parse_in_addrs(option, len, true, &lease->ntp, &lease->ntp_size); + if (r < 0) + log_debug_errno(r, "Failed to parse NTP server, ignoring: %m"); + break; +@@ -820,7 +820,6 @@ int dhcp_lease_new(sd_dhcp_lease **ret) { + if (!lease) + return -ENOMEM; + +- lease->router = INADDR_ANY; + lease->n_ref = 1; + + *ret = lease; +@@ -863,9 +862,12 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { + if (r >= 0) + fprintf(f, "NETMASK=%s\n", inet_ntoa(address)); + +- r = sd_dhcp_lease_get_router(lease, &address); +- if (r >= 0) +- fprintf(f, "ROUTER=%s\n", inet_ntoa(address)); ++ r = sd_dhcp_lease_get_router(lease, &addresses); ++ if (r > 0) { ++ fputs("ROUTER=", f); ++ serialize_in_addrs(f, addresses, r); ++ fputc('\n', f); ++ } + + r = sd_dhcp_lease_get_server_identifier(lease, &address); + if (r >= 0) +@@ -899,14 +901,14 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { + if (r > 0) { + fputs("DNS=", f); + serialize_in_addrs(f, addresses, r); +- fputs("\n", f); ++ fputc('\n', f); + } + + r = sd_dhcp_lease_get_ntp(lease, &addresses); + if (r > 0) { + fputs("NTP=", f); + serialize_in_addrs(f, addresses, r); +- fputs("\n", f); ++ fputc('\n', f); + } + + r = sd_dhcp_lease_get_domainname(lease, &string); +@@ -917,7 +919,7 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { + if (r > 0) { + fputs("DOMAIN_SEARCH_LIST=", f); + fputstrv(f, search_domains, NULL, NULL); +- fputs("\n", f); ++ fputc('\n', f); + } + + r = sd_dhcp_lease_get_hostname(lease, &string); +@@ -1080,9 +1082,11 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) { + } + + if (router) { +- r = inet_pton(AF_INET, router, &lease->router); +- if (r <= 0) +- log_debug("Failed to parse router %s, ignoring.", router); ++ r = deserialize_in_addrs(&lease->router, router); ++ if (r < 0) ++ log_debug_errno(r, "Failed to deserialize router addresses %s, ignoring: %m", router); ++ else ++ lease->router_size = r; + } + + if (netmask) { +diff --git a/src/libsystemd-network/test-dhcp-client.c b/src/libsystemd-network/test-dhcp-client.c +index fe6788d..0431e2c 100644 +--- a/src/libsystemd-network/test-dhcp-client.c ++++ b/src/libsystemd-network/test-dhcp-client.c +@@ -423,6 +423,7 @@ static void test_addr_acq_acquired(sd_dhcp_client *client, int event, + sd_event *e = userdata; + sd_dhcp_lease *lease; + struct in_addr addr; ++ const struct in_addr *addrs; + + assert_se(client); + assert_se(event == SD_DHCP_CLIENT_EVENT_IP_ACQUIRE); +@@ -438,9 +439,9 @@ static void test_addr_acq_acquired(sd_dhcp_client *client, int event, + assert_se(memcmp(&addr.s_addr, &test_addr_acq_ack[285], + sizeof(addr.s_addr)) == 0); + +- assert_se(sd_dhcp_lease_get_router(lease, &addr) >= 0); +- assert_se(memcmp(&addr.s_addr, &test_addr_acq_ack[308], +- sizeof(addr.s_addr)) == 0); ++ assert_se(sd_dhcp_lease_get_router(lease, &addrs) == 1); ++ assert_se(memcmp(&addrs[0].s_addr, &test_addr_acq_ack[308], ++ sizeof(addrs[0].s_addr)) == 0); + + if (verbose) + printf(" DHCP address acquired\n"); +diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c +index 61f767a..56512e5 100644 +--- a/src/network/networkd-dhcp4.c ++++ b/src/network/networkd-dhcp4.c +@@ -52,7 +52,8 @@ static int route_scope_from_address(const Route *route, const struct in_addr *se + static int link_set_dhcp_routes(Link *link) { + _cleanup_free_ sd_dhcp_route **static_routes = NULL; + bool classless_route = false, static_route = false; +- struct in_addr gateway, address; ++ const struct in_addr *router; ++ struct in_addr address; + int r, n, i; + uint32_t table; + +@@ -123,18 +124,18 @@ static int link_set_dhcp_routes(Link *link) { + link->dhcp4_messages++; + } + +- r = sd_dhcp_lease_get_router(link->dhcp_lease, &gateway); +- if (r == -ENODATA) +- log_link_info_errno(link, r, "DHCP: No gateway received from DHCP server: %m"); +- else if (r < 0) ++ r = sd_dhcp_lease_get_router(link->dhcp_lease, &router); ++ if (r < 0 && r != -ENODATA) + log_link_warning_errno(link, r, "DHCP error: could not get gateway: %m"); ++ else if (r <= 0 || in4_addr_is_null(&router[0])) ++ log_link_info_errno(link, r, "DHCP: No gateway received from DHCP server: %m"); + + /* According to RFC 3442: If the DHCP server returns both a Classless Static Routes option and + a Router option, the DHCP client MUST ignore the Router option. */ + if (classless_route && static_route) + log_link_warning(link, "Classless static routes received from DHCP server: ignoring static-route option and router option"); + +- if (r >= 0 && !classless_route) { ++ if (r > 0 && !classless_route && !in4_addr_is_null(&router[0])) { + _cleanup_(route_freep) Route *route = NULL, *route_gw = NULL; + + r = route_new(&route_gw); +@@ -145,7 +146,7 @@ static int link_set_dhcp_routes(Link *link) { + * route for the gw host so that we can route no matter the + * netmask or existing kernel route tables. */ + route_gw->family = AF_INET; +- route_gw->dst.in = gateway; ++ route_gw->dst.in = router[0]; + route_gw->dst_prefixlen = 32; + route_gw->prefsrc.in = address; + route_gw->scope = RT_SCOPE_LINK; +@@ -164,7 +165,7 @@ static int link_set_dhcp_routes(Link *link) { + return log_link_error_errno(link, r, "Could not allocate route: %m"); + + route->family = AF_INET; +- route->gw.in = gateway; ++ route->gw.in = router[0]; + route->prefsrc.in = address; + route->protocol = RTPROT_DHCP; + route->priority = link->network->dhcp_route_metric; +@@ -185,9 +186,9 @@ static int link_set_dhcp_routes(Link *link) { + + static int dhcp_lease_lost(Link *link) { + _cleanup_(address_freep) Address *address = NULL; ++ const struct in_addr *router; + struct in_addr addr; + struct in_addr netmask; +- struct in_addr gateway; + unsigned prefixlen = 0; + int r; + +@@ -220,15 +221,15 @@ static int dhcp_lease_lost(Link *link) { + + r = address_new(&address); + if (r >= 0) { +- r = sd_dhcp_lease_get_router(link->dhcp_lease, &gateway); +- if (r >= 0) { ++ r = sd_dhcp_lease_get_router(link->dhcp_lease, &router); ++ if (r > 0 && !in4_addr_is_null(&router[0])) { + _cleanup_(route_freep) Route *route_gw = NULL; + _cleanup_(route_freep) Route *route = NULL; + + r = route_new(&route_gw); + if (r >= 0) { + route_gw->family = AF_INET; +- route_gw->dst.in = gateway; ++ route_gw->dst.in = router[0]; + route_gw->dst_prefixlen = 32; + route_gw->scope = RT_SCOPE_LINK; + +@@ -238,7 +239,7 @@ static int dhcp_lease_lost(Link *link) { + r = route_new(&route); + if (r >= 0) { + route->family = AF_INET; +- route->gw.in = gateway; ++ route->gw.in = router[0]; + + route_remove(route, link, NULL); + } +@@ -397,10 +398,10 @@ static int dhcp_lease_renew(sd_dhcp_client *client, Link *link) { + } + + static int dhcp_lease_acquired(sd_dhcp_client *client, Link *link) { ++ const struct in_addr *router; + sd_dhcp_lease *lease; + struct in_addr address; + struct in_addr netmask; +- struct in_addr gateway; + unsigned prefixlen; + uint32_t lifetime = CACHE_INFO_INFINITY_LIFE_TIME; + int r; +@@ -422,20 +423,20 @@ static int dhcp_lease_acquired(sd_dhcp_client *client, Link *link) { + + prefixlen = in4_addr_netmask_to_prefixlen(&netmask); + +- r = sd_dhcp_lease_get_router(lease, &gateway); ++ r = sd_dhcp_lease_get_router(lease, &router); + if (r < 0 && r != -ENODATA) + return log_link_error_errno(link, r, "DHCP error: Could not get gateway: %m"); + +- if (r >= 0) ++ if (r > 0 && !in4_addr_is_null(&router[0])) + log_struct(LOG_INFO, + LOG_LINK_INTERFACE(link), + LOG_LINK_MESSAGE(link, "DHCPv4 address %u.%u.%u.%u/%u via %u.%u.%u.%u", + ADDRESS_FMT_VAL(address), + prefixlen, +- ADDRESS_FMT_VAL(gateway)), ++ ADDRESS_FMT_VAL(router[0])), + "ADDRESS=%u.%u.%u.%u", ADDRESS_FMT_VAL(address), + "PREFIXLEN=%u", prefixlen, +- "GATEWAY=%u.%u.%u.%u", ADDRESS_FMT_VAL(gateway)); ++ "GATEWAY=%u.%u.%u.%u", ADDRESS_FMT_VAL(router[0])); + else + log_struct(LOG_INFO, + LOG_LINK_INTERFACE(link), +diff --git a/src/systemd/sd-dhcp-lease.h b/src/systemd/sd-dhcp-lease.h +index 4875f10..d299c79 100644 +--- a/src/systemd/sd-dhcp-lease.h ++++ b/src/systemd/sd-dhcp-lease.h +@@ -39,7 +39,7 @@ int sd_dhcp_lease_get_t1(sd_dhcp_lease *lease, uint32_t *t1); + int sd_dhcp_lease_get_t2(sd_dhcp_lease *lease, uint32_t *t2); + int sd_dhcp_lease_get_broadcast(sd_dhcp_lease *lease, struct in_addr *addr); + int sd_dhcp_lease_get_netmask(sd_dhcp_lease *lease, struct in_addr *addr); +-int sd_dhcp_lease_get_router(sd_dhcp_lease *lease, struct in_addr *addr); ++int sd_dhcp_lease_get_router(sd_dhcp_lease *lease, const struct in_addr **addr); + int sd_dhcp_lease_get_next_server(sd_dhcp_lease *lease, struct in_addr *addr); + int sd_dhcp_lease_get_server_identifier(sd_dhcp_lease *lease, struct in_addr *addr); + int sd_dhcp_lease_get_dns(sd_dhcp_lease *lease, const struct in_addr **addr); +-- +2.7.4 + +From da9adbb9539bee8886bb680e70616eac8281acd5 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 19 Feb 2019 15:09:28 +0900 +Subject: [PATCH 3/3] network: do not log wrong error cause + +If sd_dhcp_lease_get_router() returns a positive value and the first +router is null, then invalid error cause was logged. + +Follow-up for f8862395e8f802e4106a07ceaaf02b6a1faa5a6d. + +(cherry picked from commit 825ace96b1076ac367d2962e3979f62954145812) +--- + src/network/networkd-dhcp4.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c +index 56512e5..29ad323 100644 +--- a/src/network/networkd-dhcp4.c ++++ b/src/network/networkd-dhcp4.c +@@ -125,10 +125,12 @@ static int link_set_dhcp_routes(Link *link) { + } + + r = sd_dhcp_lease_get_router(link->dhcp_lease, &router); +- if (r < 0 && r != -ENODATA) ++ if (IN_SET(r, 0, -ENODATA)) ++ log_link_info(link, "DHCP: No gateway received from DHCP server."); ++ else if (r < 0) + log_link_warning_errno(link, r, "DHCP error: could not get gateway: %m"); +- else if (r <= 0 || in4_addr_is_null(&router[0])) +- log_link_info_errno(link, r, "DHCP: No gateway received from DHCP server: %m"); ++ else if (in4_addr_is_null(&router[0])) ++ log_link_info(link, "DHCP: Received gateway is null."); + + /* According to RFC 3442: If the DHCP server returns both a Classless Static Routes option and + a Router option, the DHCP client MUST ignore the Router option. */ +-- +2.7.4 + diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/patches/systemd/240/rdrand-workaround-on-amd.patch b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/systemd/240/rdrand-workaround-on-amd.patch new file mode 100644 index 000000000000..a209e58bfd78 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/systemd/240/rdrand-workaround-on-amd.patch @@ -0,0 +1,36 @@ +Index: systemd-240/src/basic/random-util.c +=================================================================== +--- systemd-240.orig/src/basic/random-util.c ++++ systemd-240/src/basic/random-util.c +@@ -37,6 +37,7 @@ int rdrand(unsigned long *ret) { + + #if defined(__i386__) || defined(__x86_64__) + static int have_rdrand = -1; ++ unsigned long v; + unsigned char err; + + if (have_rdrand < 0) { +@@ -56,9 +57,22 @@ int rdrand(unsigned long *ret) { + + asm volatile("rdrand %0;" + "setc %1" +- : "=r" (*ret), ++ : "=r" (v), + "=qm" (err)); + ++ /* Apparently on some AMD CPUs RDRAND will sometimes (after a suspend/resume cycle?) report success ++ * via the carry flag but nonetheless return the same fixed value -1 in all cases. This appears to be ++ * a bad bug in the CPU or firmware. Let's deal with that and work-around this by explicitly checking ++ * for this special value (and also 0, just to be sure) and filtering it out. This is a work-around ++ * only however and something AMD really should fix properly. The Linux kernel should probably work ++ * around this issue by turning off RDRAND altogether on those CPUs. See: ++ * https://github.com/systemd/systemd/issues/11810 */ ++ if (v == 0 || v == ULONG_MAX) ++ return log_debug_errno(SYNTHETIC_ERRNO(EUCLEAN), ++ "RDRAND returned suspicious value %lx, assuming bad hardware RNG, not using value.", v); ++ ++ *ret = v; ++ + #if HAS_FEATURE_MEMORY_SANITIZER + __msan_unpoison(&err, sizeof(err)); + #endif diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/patches/varlink/19/ctags.patch b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/varlink/19/ctags.patch new file mode 100644 index 000000000000..88642dcdd751 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/patches/varlink/19/ctags.patch @@ -0,0 +1,12 @@ +diff -ur libvarlink-19.orig/meson.build libvarlink-19/meson.build +--- libvarlink-19.orig/meson.build 2020-03-06 11:42:33.000000000 +0100 ++++ libvarlink-19/meson.build 2020-05-17 13:27:52.972980173 +0200 +@@ -96,8 +96,4 @@ + 'tags', + output : 'tags', + command : ['env', 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files) +- custom_target( +- 'ctags', +- output : 'ctags', +- command : ['env', 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files) + endif diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/permissions b/deploy/iso/minikube-iso/board/minikube/x86_64/permissions new file mode 100644 index 000000000000..02ad93232e96 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/permissions @@ -0,0 +1,4 @@ +# https://buildroot.org/downloads/manual/manual.html#makedev-syntax + +/usr/bin/toolbox f 755 0 0 - - - - - + diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/post-build.sh b/deploy/iso/minikube-iso/board/minikube/x86_64/post-build.sh new file mode 100755 index 000000000000..38ce764f90dc --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/post-build.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Copyright 2021 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +BOARD_DIR=$(dirname "$0") + +cp -f "$BOARD_DIR/grub.cfg" "$BINARIES_DIR/efi-part/EFI/BOOT/grub.cfg" diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/post-image.sh b/deploy/iso/minikube-iso/board/minikube/x86_64/post-image.sh new file mode 100755 index 000000000000..99c560f656db --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/post-image.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +# Copyright 2021 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +GENIMAGE_CFG="$2" + +support/scripts/genimage.sh -c "$GENIMAGE_CFG" + +cd "$BINARIES_DIR" +mkdir -p root/boot +cp bzImage root/boot/bzimage +cp rootfs.cpio.gz root/boot/initrd +mkdir -p root/EFI/BOOT +cp efi-part/EFI/BOOT/* root/EFI/BOOT/ +cp efiboot.img root/EFI/BOOT/ + +mkisofs \ + -o boot.iso \ + -R -J -v -d -N \ + -hide-rr-moved \ + -no-emul-boot \ + -eltorito-platform=efi \ + -eltorito-boot EFI/BOOT/efiboot.img \ + -V "EFIBOOTISO" \ + -A "EFI Boot ISO" \ + root +cd - diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/cni/net.d/.keep b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/cni/net.d/.keep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/docker/.keep b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/docker/.keep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/fstab b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/fstab new file mode 100644 index 000000000000..8c56808aa3c6 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/fstab @@ -0,0 +1,5 @@ +# +/dev/root / ext2 rw,noauto 0 1 +proc /proc proc defaults 0 0 +devpts /dev/pts devpts defaults,gid=5,mode=620 0 0 +sysfs /sys sysfs defaults 0 0 diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/motd b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/motd new file mode 100644 index 000000000000..d914a81ab431 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/motd @@ -0,0 +1,7 @@ + _ _ + _ _ ( ) ( ) + ___ ___ (_) ___ (_)| |/') _ _ | |_ __ +/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\ +| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/ +(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____) + diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/ssh/sshd_config b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/ssh/sshd_config new file mode 100644 index 000000000000..b7ab4a59a66a --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/ssh/sshd_config @@ -0,0 +1,124 @@ +# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_dsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +#PermitRootLogin prohibit-password +#StrictModes yes +#MaxAuthTries 6 +MaxSessions 1000 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#ChallengeResponseAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +GatewayPorts yes +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#UseLogin no +#UsePrivilegeSeparation sandbox +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /var/run/sshd.pid +#MaxStartups 10:30:100 +PermitTunnel yes +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/libexec/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server + +# Temporarily accept ssh-rsa algorithm for openssh >= 8.8, +# until most ssh clients could deprecate ssh-rsa. +HostkeyAlgorithms +ssh-rsa +PubkeyAcceptedAlgorithms +ssh-rsa diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sudoers b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sudoers new file mode 100644 index 000000000000..eb6a2d3d9237 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sudoers @@ -0,0 +1,2 @@ +root ALL=(ALL) ALL +%wheel ALL=(ALL) NOPASSWD: ALL diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/11-tcp-mtu-probing.conf b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/11-tcp-mtu-probing.conf new file mode 100644 index 000000000000..c34569dd8111 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/11-tcp-mtu-probing.conf @@ -0,0 +1,3 @@ +# Turn on MTU probing to avoid network hangs when the Docker MTU is larger than +# the host or upstream network MTU. +net.ipv4.tcp_mtu_probing=1 \ No newline at end of file diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/50-fs-inotify.conf b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/50-fs-inotify.conf new file mode 100644 index 000000000000..e4697d577029 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/50-fs-inotify.conf @@ -0,0 +1,4 @@ +# Avoid failures with kubevirt vms +# https://github.com/kubernetes/minikube/issues/18831 +fs.inotify.max_user_instances = 8192 +fs.inotify.max_user_watches = 65536 diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/90-cilium-rp_filter.conf b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/90-cilium-rp_filter.conf new file mode 100644 index 000000000000..aa285916a512 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/90-cilium-rp_filter.conf @@ -0,0 +1,2 @@ +net.ipv4.conf.lxc*.rp_filter = 0 +net.ipv4.conf.cilium_*.rp_filter = 0 diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/disable-ipv6.conf b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/disable-ipv6.conf new file mode 100644 index 000000000000..30b2d9b487d7 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/sysctl.d/disable-ipv6.conf @@ -0,0 +1,2 @@ +net.ipv6.conf.all.disable_ipv6=1 +net.ipv6.conf.default.disable_ipv6=1 diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/journald.conf b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/journald.conf new file mode 100644 index 000000000000..2e9d3eccd0dc --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/journald.conf @@ -0,0 +1,16 @@ +# Copyright 2018 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[Journal] +Storage=volatile diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/network/10-eth1.network b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/network/10-eth1.network new file mode 100644 index 000000000000..63a89ca2af8b --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/network/10-eth1.network @@ -0,0 +1,9 @@ +[Match] +Name=eth1 +Virtualization=qemu + +[Network] +DHCP=ipv4 + +[DHCP] +UseDNS=false diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/network/20-dhcp.network b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/network/20-dhcp.network new file mode 100644 index 000000000000..c9086ef0856a --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/network/20-dhcp.network @@ -0,0 +1,9 @@ +[Match] +Name=eth* + +[Network] +DHCP=ipv4 +LinkLocalAddressing=no + +[DHCP] +ClientIdentifier=mac diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/resolved.conf.d/50-dnssec.conf b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/resolved.conf.d/50-dnssec.conf new file mode 100644 index 000000000000..d43d54a9daf7 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/resolved.conf.d/50-dnssec.conf @@ -0,0 +1,2 @@ +[Resolve] +DNSSEC=no diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/system/getty.target.wants/getty@tty1.service b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/system/getty.target.wants/getty@tty1.service new file mode 120000 index 000000000000..7bfe0808b1e2 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/system/getty.target.wants/getty@tty1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/getty@.service \ No newline at end of file diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/system/systemd-timesyncd.service.d/disable-virtualbox.conf b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/system/systemd-timesyncd.service.d/disable-virtualbox.conf new file mode 100644 index 000000000000..c732fdedb2c5 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/systemd/system/systemd-timesyncd.service.d/disable-virtualbox.conf @@ -0,0 +1,2 @@ +[Unit] +ConditionVirtualization=!oracle diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/udev/rules.d/80-net-setup-link.rules b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/udev/rules.d/80-net-setup-link.rules new file mode 120000 index 000000000000..f69baf4515cc --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/etc/udev/rules.d/80-net-setup-link.rules @@ -0,0 +1 @@ +80-net-setup-link.rules \ No newline at end of file diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/init b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/init new file mode 100755 index 000000000000..d6f7a2987b29 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/init @@ -0,0 +1,13 @@ +#!/bin/sh +mkdir /sysroot +# the value 90% borrowed from tcl via boot2docker +mount -t tmpfs -o size=90% tmpfs /sysroot +# copy from rootfs, to be able to do switch_root(8) +tar -C / --exclude=sysroot -cf - . | tar -C /sysroot/ -xf - + +# devtmpfs does not get automounted for initramfs +/bin/mount -t devtmpfs devtmpfs /sysroot/dev +exec 0/sysroot/dev/console +exec 2>/sysroot/dev/console +exec /sbin/switch_root /sysroot /sbin/init "$@" diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/usr/bin/toolbox b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/usr/bin/toolbox new file mode 100644 index 000000000000..2f597cd80b20 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/usr/bin/toolbox @@ -0,0 +1,77 @@ +#!/bin/bash + +set -e +set -o pipefail + +machine=$(uname -m) + +case ${machine} in + aarch64 ) + TOOLBOX_DOCKER_IMAGE=arm64v8/fedora + TOOLBOX_DOCKER_TAG=latest + ;; + x86_64 ) + TOOLBOX_DOCKER_IMAGE=fedora + TOOLBOX_DOCKER_TAG=latest + ;; + * ) + echo "Warning: Unknown machine type ${machine}" >&2 + ;; +esac + +TOOLBOX_USER=root +TOOLBOX_DIRECTORY="/var/lib/toolbox" +TOOLBOX_BIND="--bind=/:/media/root --bind=/usr:/media/root/usr --bind=/run:/media/root/run" +# Ex: "--setenv=KEY=VALUE" +TOOLBOX_ENV="" + +toolboxrc="${HOME}"/.toolboxrc + +# System defaults +if [ -f "/etc/default/toolbox" ]; then + source "/etc/default/toolbox" +fi + +# User overrides +if [ -f "${toolboxrc}" ]; then + source "${toolboxrc}" +fi + +if [[ -n "${TOOLBOX_DOCKER_IMAGE}" ]] && [[ -n "${TOOLBOX_DOCKER_TAG}" ]]; then + TOOLBOX_NAME=${TOOLBOX_DOCKER_IMAGE}-${TOOLBOX_DOCKER_TAG} + have_docker_image="y" +fi + +machinename=$(echo "${USER}-${TOOLBOX_NAME}" | sed -r 's/[^a-zA-Z0-9_.-]/_/g') +machinepath="${TOOLBOX_DIRECTORY}/${machinename}" +osrelease="${machinepath}/etc/os-release" +if [ ! -f "${osrelease}" ] || systemctl is-failed -q "${machinename}" ; then + sudo mkdir -p "${machinepath}" + sudo chown "${USER}:" "${machinepath}" + + if [[ -n "${have_docker_image}" ]]; then + piid=$(sudo --preserve-env podman pull "docker://${TOOLBOX_DOCKER_IMAGE}:${TOOLBOX_DOCKER_TAG}") + pcid=$(sudo --preserve-env podman create "${piid}") + mnt=$(sudo --preserve-env podman mount "${pcid}") + sudo --preserve-env rsync -ax "${mnt}"/ "${machinepath}"/ + sudo --preserve-env podman unmount "${pcid}" + sudo --preserve-env podman rm "${pcid}" + sudo --preserve-env podman rmi "${piid}" + else + echo "Error: No toolbox filesystem specified." >&2 + exit 1 + fi + sudo touch "${osrelease}" +fi + +# Special case for when SSH tries to pass a shell command with -c +if [ "x${1-}" == x-c ]; then + set /bin/sh "$@" +fi + +sudo SYSTEMD_NSPAWN_SHARE_SYSTEM=1 systemd-nspawn \ + --directory="${machinepath}" \ + --capability=all \ + ${TOOLBOX_BIND} \ + ${TOOLBOX_ENV} \ + --user="${TOOLBOX_USER}" "$@" diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/var/lib/boot2docker/.keep b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/var/lib/boot2docker/.keep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/var/log/.keep b/deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/var/log/.keep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/deploy/iso/minikube-iso/board/minikube/x86_64/users b/deploy/iso/minikube-iso/board/minikube/x86_64/users new file mode 100644 index 000000000000..9294fedde046 --- /dev/null +++ b/deploy/iso/minikube-iso/board/minikube/x86_64/users @@ -0,0 +1 @@ +docker 1000 docker 1000 * /home/docker /bin/bash wheel,vboxsf,podman,buildkit - diff --git a/deploy/iso/minikube-iso/configs/minikube_aarch64_defconfig b/deploy/iso/minikube-iso/configs/minikube_aarch64_defconfig new file mode 100644 index 000000000000..103782e79965 --- /dev/null +++ b/deploy/iso/minikube-iso/configs/minikube_aarch64_defconfig @@ -0,0 +1,84 @@ +BR2_aarch64=y +BR2_TOOLCHAIN_BUILDROOT_VENDOR="minikube" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_6=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_CCACHE=y +BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/aarch64/patches" +BR2_TARGET_GENERIC_HOSTNAME="minikube" +BR2_TARGET_GENERIC_ISSUE="Welcome to minikube" +BR2_TARGET_GENERIC_PASSWD_SHA512=y +BR2_INIT_SYSTEMD=y +BR2_ROOTFS_DEVICE_TABLE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/aarch64/permissions" +BR2_SYSTEM_BIN_SH_BASH=y +BR2_TARGET_GENERIC_GETTY_PORT="tty1" +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_USERS_TABLES="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/aarch64/users" +BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/aarch64/rootfs-overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/aarch64/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/aarch64/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/aarch64/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.6.95" +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/aarch64/linux_aarch64_defconfig" +BR2_LINUX_KERNEL_LZ4=y +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y +BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE=y +BR2_PACKAGE_GZIP=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_STRACE=y +BR2_PACKAGE_FINDUTILS=y +BR2_PACKAGE_GIT=y +BR2_PACKAGE_CIFS_UTILS=y +BR2_PACKAGE_E2TOOLS=y +BR2_PACKAGE_NFS_UTILS=y +BR2_PACKAGE_SSHFS=y +BR2_PACKAGE_XFSPROGS=y +BR2_PACKAGE_ACPID=y +BR2_PACKAGE_PARTED=y +BR2_PACKAGE_SYSSTAT=y +BR2_PACKAGE_LUAJIT=y +BR2_PACKAGE_LZ4=y +BR2_PACKAGE_LZ4_PROGS=y +BR2_PACKAGE_CA_CERTIFICATES=y +BR2_PACKAGE_LIBOPENSSL_BIN=y +BR2_PACKAGE_LIBFUSE=y +BR2_PACKAGE_LIBCURL=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_TBB=y +BR2_PACKAGE_BRIDGE_UTILS=y +BR2_PACKAGE_CONNTRACK_TOOLS=y +BR2_PACKAGE_EBTABLES=y +BR2_PACKAGE_ETHTOOL=y +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IPTABLES=y +BR2_PACKAGE_RSYNC=y +BR2_PACKAGE_SOCAT=y +BR2_PACKAGE_SUDO=y +BR2_PACKAGE_ACL=y +BR2_PACKAGE_COREUTILS=y +BR2_PACKAGE_HTOP=y +BR2_PACKAGE_OPENVMTOOLS=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_PSMISC=y +BR2_PACKAGE_SYSTEMD_LOGIND=y +BR2_PACKAGE_SYSTEMD_MACHINED=y +BR2_PACKAGE_TAR=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y +BR2_PACKAGE_UTIL_LINUX_LOSETUP=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_NSENTER=y +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_LZ4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_GRUB2=y +BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI="boot linux ext2 fat squash4 part_msdos part_gpt normal efi_gop udf iso9660 search search_fs_file search_fs_uuid search_label" +BR2_TARGET_GRUB2_BUILTIN_CONFIG_EFI="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/aarch64/grub-stub.cfg" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2TOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/deploy/iso/minikube-iso/configs/minikube_defconfig b/deploy/iso/minikube-iso/configs/minikube_x86_64_defconfig similarity index 61% rename from deploy/iso/minikube-iso/configs/minikube_defconfig rename to deploy/iso/minikube-iso/configs/minikube_x86_64_defconfig index dcae296ff5f9..47fce0fa7e82 100644 --- a/deploy/iso/minikube-iso/configs/minikube_defconfig +++ b/deploy/iso/minikube-iso/configs/minikube_x86_64_defconfig @@ -1,33 +1,32 @@ BR2_x86_64=y -BR2_CCACHE=y -BR2_OPTIMIZE_2=y -BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/patches" BR2_TOOLCHAIN_BUILDROOT_VENDOR="minikube" -BR2_TOOLCHAIN_BUILDROOT_GLIBC=y -BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_6=y BR2_TOOLCHAIN_BUILDROOT_CXX=y -BR2_GCC_ENABLE_LTO=y +BR2_CCACHE=y +BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/x86_64/patches" BR2_TARGET_GENERIC_HOSTNAME="minikube" BR2_TARGET_GENERIC_ISSUE="Welcome to minikube" BR2_TARGET_GENERIC_PASSWD_SHA512=y BR2_INIT_SYSTEMD=y -BR2_ROOTFS_DEVICE_TABLE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/permissions" +BR2_ROOTFS_DEVICE_TABLE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/x86_64/permissions" BR2_SYSTEM_BIN_SH_BASH=y -# BR2_TARGET_GENERIC_GETTY is not set -BR2_ROOTFS_USERS_TABLES="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/users" -BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/rootfs-overlay" +BR2_TARGET_GENERIC_GETTY_PORT="tty1" +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_USERS_TABLES="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/x86_64/users" +BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/x86_64/rootfs-overlay" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y -BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.182" +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.6.95" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y -BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/linux_defconfig" +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/x86_64/linux_x86_64_defconfig" BR2_LINUX_KERNEL_LZ4=y +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y +BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE=y BR2_PACKAGE_GZIP=y -BR2_PACKAGE_LZ4=y BR2_PACKAGE_XZ=y BR2_PACKAGE_STRACE=y -BR2_PACKAGE_SYSDIG=y BR2_PACKAGE_FINDUTILS=y BR2_PACKAGE_GIT=y BR2_PACKAGE_CIFS_UTILS=y @@ -35,11 +34,18 @@ BR2_PACKAGE_E2TOOLS=y BR2_PACKAGE_NFS_UTILS=y BR2_PACKAGE_SSHFS=y BR2_PACKAGE_XFSPROGS=y +BR2_PACKAGE_ACPID=y BR2_PACKAGE_PARTED=y BR2_PACKAGE_SYSSTAT=y +BR2_PACKAGE_LUAJIT=y +BR2_PACKAGE_LZ4=y +BR2_PACKAGE_LZ4_PROGS=y BR2_PACKAGE_CA_CERTIFICATES=y BR2_PACKAGE_LIBOPENSSL_BIN=y +BR2_PACKAGE_LIBFUSE=y +BR2_PACKAGE_LIBCURL=y BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_TBB=y BR2_PACKAGE_BRIDGE_UTILS=y BR2_PACKAGE_CONNTRACK_TOOLS=y BR2_PACKAGE_EBTABLES=y @@ -58,12 +64,16 @@ BR2_PACKAGE_PSMISC=y BR2_PACKAGE_SYSTEMD_LOGIND=y BR2_PACKAGE_SYSTEMD_MACHINED=y BR2_PACKAGE_TAR=y +BR2_PACKAGE_UTIL_LINUX_BINARIES=y BR2_PACKAGE_UTIL_LINUX_LOSETUP=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_NSENTER=y BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y BR2_TARGET_ROOTFS_CPIO_GZIP=y BR2_TARGET_ROOTFS_ISO9660=y -BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/isolinux.cfg" +BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/minikube/x86_64/isolinux.cfg" BR2_TARGET_SYSLINUX=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y BR2_PACKAGE_HOST_E2TOOLS=y -BR2_PACKAGE_HOST_PYTHON=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y diff --git a/deploy/iso/minikube-iso/external.mk b/deploy/iso/minikube-iso/external.mk index d444740c8f14..5a8a5d065e82 100644 --- a/deploy/iso/minikube-iso/external.mk +++ b/deploy/iso/minikube-iso/external.mk @@ -1 +1,4 @@ +include $(sort $(wildcard $(BR2_EXTERNAL_MINIKUBE_PATH)/linux/*.mk)) include $(sort $(wildcard $(BR2_EXTERNAL_MINIKUBE_PATH)/package/*/*.mk)) +include $(sort $(wildcard $(BR2_EXTERNAL_MINIKUBE_PATH)/arch/x86_64/package/*/*.mk)) +include $(sort $(wildcard $(BR2_EXTERNAL_MINIKUBE_PATH)/arch/aarch64/package/*/*.mk)) diff --git a/deploy/iso/minikube-iso/go.hash b/deploy/iso/minikube-iso/go.hash new file mode 100644 index 000000000000..5d0328ceb64f --- /dev/null +++ b/deploy/iso/minikube-iso/go.hash @@ -0,0 +1,43 @@ +# From https://go.dev/dl/ +sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 LICENSE +sha256 3a70e5055509f347c0fb831ca07a2bf3b531068f349b14a3c652e9b5b67beb5d go1.17.src.tar.gz +sha256 0012386ddcbb5f3350e407c679923811dbd283fcdc421724931614a842ecbc2d go1.18.3.src.tar.gz +sha256 27871baa490f3401414ad793fba49086f6c855b1c584385ed7771e1204c7e179 go1.19.1.src.tar.gz +sha256 2ce930d70a931de660fdaf271d70192793b1b240272645bf0275779f6704df6b go1.19.2.src.tar.gz +sha256 18ac263e39210bcf68d85f4370e97fb1734166995a1f63fb38b4f6e07d90d212 go1.19.3.src.tar.gz +sha256 8e486e8e85a281fc5ce3f0bedc5b9d2dbf6276d7db0b25d3ec034f313da0375f go1.19.5.src.tar.gz +sha256 d7f0013f82e6d7f862cc6cb5c8cdb48eef5f2e239b35baa97e2f1a7466043767 go1.19.6.src.tar.gz +sha256 775bdf285ceaba940da8a2fe20122500efd7a0b65dbcee85247854a8d7402633 go1.19.7.src.tar.gz +sha256 1d7a67929dccafeaf8a29e55985bc2b789e0499cb1a17100039f084e3238da2f go1.19.8.src.tar.gz +sha256 131190a4697a70c5b1d232df5d3f55a3f9ec0e78e40516196ffb3f09ae6a5744 go1.19.9.src.tar.gz +sha256 3a29ff0421beaf6329292b8a46311c9fbf06c800077ceddef5fb7f8d5b1ace33 go1.20.src.tar.gz +sha256 b5c1a3af52c385a6d1c76aed5361cf26459023980d0320de7658bae3915831a2 go1.20.1.src.tar.gz +sha256 4d0e2850d197b4ddad3bdb0196300179d095bb3aefd4dfbc3b36702c3728f8ab go1.20.2.src.tar.gz +sha256 e447b498cde50215c4f7619e5124b0fc4e25fb5d16ea47271c47f278e7aa763a go1.20.3.src.tar.gz +sha256 9f34ace128764b7a3a4b238b805856cc1b2184304df9e5690825b0710f4202d6 go1.20.4.src.tar.gz +sha256 9a15c133ba2cfafe79652f4815b62e7cfc267f68df1b9454c6ab2a3ca8b96a88 go1.20.5.src.tar.gz +sha256 62ee5bc6fb55b8bae8f705e0cb8df86d6453626b4ecf93279e2867092e0b7f70 go1.20.6.src.tar.gz +sha256 2c5ee9c9ec1e733b0dbbc2bdfed3f62306e51d8172bf38f4f4e542b27520f597 go1.20.7.src.tar.gz +sha256 bfa36bf75e9a1e9cbbdb9abcf9d1707e479bd3a07880a8ae3564caee5711cb99 go1.21.1.src.tar.gz +sha256 45e59de173baec39481854490d665b726cec3e5b159f6b4172e5ec7780b2c201 go1.21.2.src.tar.gz +sha256 186f2b6f8c8b704e696821b09ab2041a5c1ee13dcbc3156a13adcf75931ee488 go1.21.3.src.tar.gz +sha256 47b26a83d2b65a3c1c1bcace273b69bee49a7a7b5168a7604ded3d26a37bd787 go1.21.4.src.tar.gz +sha256 285cbbdf4b6e6e62ed58f370f3f6d8c30825d6e56c5853c66d3c23bcdb09db19 go1.21.5.src.tar.gz +sha256 124926a62e45f78daabbaedb9c011d97633186a33c238ffc1e25320c02046248 go1.21.6.src.tar.gz +sha256 4d196c3d41a0d6c1dfc64d04e3cc1f608b0c436bd87b7060ce3e23234e1f4d5c go1.22.0.src.tar.gz +sha256 79c9b91d7f109515a25fc3ecdaad125d67e6bdb54f6d4d98580f46799caea321 go1.22.1.src.tar.gz +sha256 80648ef34f903193d72a59c0dff019f5f98ae0c9aa13ade0b0ecbff991a76f68 go1.22.3.src.tar.gz +sha256 fed720678e728a7ca30ba8d1ded1caafe27d16028fab0232b8ba8e22008fb784 go1.22.4.src.tar.gz +sha256 ac9c723f224969aee624bc34fd34c9e13f2a212d75c71c807de644bb46e112f6 go1.22.5.src.tar.gz +sha256 42b7a8e80d805daa03022ed3fde4321d4c3bf2c990a144165d01eeecd6f699c6 go1.23.0.src.tar.gz +sha256 6ee44e298379d146a5e5aa6b1c5b5d5f5d0a3365eabdd70741e6e21340ec3b0d go1.23.1.src.tar.gz +sha256 36930162a93df417d90bd22c6e14daff4705baac2b02418edda671cdfa9cd07f go1.23.2.src.tar.gz +sha256 8d6a77332487557c6afa2421131b50f83db4ae3c579c3bc72e670ee1f6968599 go1.23.3.src.tar.gz +sha256 ad345ac421e90814293a9699cca19dd5238251c3f687980bbcae28495b263531 go1.23.4.src.tar.gz +sha256 d14120614acb29d12bcab72bd689f257eb4be9e0b6f88a8fb7e41ac65f8556e5 go1.24.0.src.tar.gz +sha256 6924efde5de86fe277676e929dc9917d466efa02fb934197bc2eba35d5680971 go1.23.4.linux-amd64.tar.gz +sha256 e1cb5582aab588668bc04c07de18688070f6b8c9b2aaf361f821e19bd47cfdbd go1.24.6.src.tar.gz +sha256 a81a4ba593d0015e10c51e267de3ff07c7ac914dfca037d9517d029517097795 go1.25.3.src.tar.gz +sha256 22a5fd0a91efcd28a1b0537106b9959b2804b61f59c3758b51e8e5429c1a954f go1.25.5.src.tar.gz +sha256 9e9b755d63b36acf30c12a9a3fc379243714c1c6d3dd72861da637f336ebb35b go1.25.5.linux-amd64.tar.gz +sha256 b00b694903d126c588c378e72d3545549935d3982635ba3f7a964c9fa23fe3b9 go1.25.5.linux-arm64.tar.gz diff --git a/deploy/iso/minikube-iso/linux/install-module-symvers.mk b/deploy/iso/minikube-iso/linux/install-module-symvers.mk new file mode 100644 index 000000000000..b4cbf627aa8b --- /dev/null +++ b/deploy/iso/minikube-iso/linux/install-module-symvers.mk @@ -0,0 +1,7 @@ +LINUX_EXTENSIONS += install-module-symvers + +define LINUX_MODULE_SYMVERS_INSTALL_FILE + mkdir -p $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED) + cp $(LINUX_DIR)/Module.symvers $(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED)/ +endef +LINUX_TARGET_FINALIZE_HOOKS += LINUX_MODULE_SYMVERS_INSTALL_FILE diff --git a/deploy/iso/minikube-iso/package/Config.in b/deploy/iso/minikube-iso/package/Config.in index 954fbac1752c..4b6e0c80f9db 100644 --- a/deploy/iso/minikube-iso/package/Config.in +++ b/deploy/iso/minikube-iso/package/Config.in @@ -1,18 +1,10 @@ menu "System tools" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/runc-master/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/podman/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/conmon/Config.in" source "$BR2_EXTERNAL_MINIKUBE_PATH/package/crio-bin/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/crictl-bin/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/automount/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/docker-bin/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/package/sysdig/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/package/crun-latest/Config.in" source "$BR2_EXTERNAL_MINIKUBE_PATH/package/cni/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/cni-plugins/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/hyperv-daemons/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/gluster/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/vbox-guest/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/containerd-bin/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/buildkit-bin/Config.in" - source "$BR2_EXTERNAL_MINIKUBE_PATH/package/falco-module/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/package/automount/Config.in" source "$BR2_EXTERNAL_MINIKUBE_PATH/package/scheduled-stop/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/package/podman/Config.in" + source "$BR2_EXTERNAL_MINIKUBE_PATH/package/runc-master/Config.in" endmenu diff --git a/deploy/iso/minikube-iso/package/automount/minikube-automount b/deploy/iso/minikube-iso/package/automount/minikube-automount index bfe8f3a87c35..ce918f4ef604 100755 --- a/deploy/iso/minikube-iso/package/automount/minikube-automount +++ b/deploy/iso/minikube-iso/package/automount/minikube-automount @@ -179,7 +179,7 @@ mkdir -p /var/lib/boot2docker/etc/ # VirtualBox Host Mounting # - this will bail quickly and gracefully if we're not in VBox if modprobe vboxguest &> /dev/null && modprobe vboxsf &> /dev/null; then - mountOptions='defaults,iocharset=utf8' + mountOptions='defaults' if grep -q '^docker:' /etc/passwd; then mountOptions="${mountOptions},uid=$(id -u docker),gid=$(id -g docker)" fi diff --git a/deploy/iso/minikube-iso/package/buildkit-bin/buildkit-bin.hash b/deploy/iso/minikube-iso/package/buildkit-bin/buildkit-bin.hash deleted file mode 100644 index 2993ed2c5947..000000000000 --- a/deploy/iso/minikube-iso/package/buildkit-bin/buildkit-bin.hash +++ /dev/null @@ -1,4 +0,0 @@ -sha256 33bcaa49b31bc3a277ac75d32fce3f5442d39f53a1799b8624e985279b579f74 buildkit-v0.7.2.linux-amd64.tar.gz -sha256 28005748fae926edf8c93b7cb1df53ec49df65dec67105b94e7fb9c513fa78a4 buildkit-v0.8.0.linux-amd64.tar.gz -sha256 e0438a701d4192f80b2211b0a333984ee4f097c547904e40fc941daad57fe153 buildkit-v0.8.1.linux-amd64.tar.gz -sha256 d6d1ebc68806e626f31dd4ea17a406a93dcff14763971cd91b28cbaf3bfffcd4 buildkit-v0.8.2.linux-amd64.tar.gz diff --git a/deploy/iso/minikube-iso/package/buildkit-bin/buildkit-bin.mk b/deploy/iso/minikube-iso/package/buildkit-bin/buildkit-bin.mk deleted file mode 100644 index ba2879dd1fa7..000000000000 --- a/deploy/iso/minikube-iso/package/buildkit-bin/buildkit-bin.mk +++ /dev/null @@ -1,30 +0,0 @@ -################################################################################ -# -# buildkit-bin -# -################################################################################ - -BUILDKIT_BIN_VERSION = v0.8.2 -BUILDKIT_BIN_COMMIT = 9065b18ba4633c75862befca8188de4338d9f94a -BUILDKIT_BIN_SITE = https://github.com/moby/buildkit/releases/download/$(BUILDKIT_BIN_VERSION) -BUILDKIT_BIN_SOURCE = buildkit-$(BUILDKIT_BIN_VERSION).linux-amd64.tar.gz - -# https://github.com/opencontainers/runc.git -BUILDKIT_RUNC_VERSION = 12644e614e25b05da6fd08a38ffa0cfe1903fdec - -define BUILDKIT_BIN_INSTALL_TARGET_CMDS - $(INSTALL) -D -m 0755 \ - $(@D)/buildctl \ - $(TARGET_DIR)/usr/bin - $(INSTALL) -D -m 0755 \ - $(@D)/buildkit-runc \ - $(TARGET_DIR)/usr/sbin - $(INSTALL) -D -m 0755 \ - $(@D)/buildkit-qemu-* \ - $(TARGET_DIR)/usr/sbin - $(INSTALL) -D -m 0755 \ - $(@D)/buildkitd \ - $(TARGET_DIR)/usr/sbin -endef - -$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/package/cni-plugins/cni-plugins.hash b/deploy/iso/minikube-iso/package/cni-plugins/cni-plugins.hash deleted file mode 100644 index 01819019cb8b..000000000000 --- a/deploy/iso/minikube-iso/package/cni-plugins/cni-plugins.hash +++ /dev/null @@ -1,4 +0,0 @@ -sha256 f04339a21b8edf76d415e7f17b620e63b8f37a76b2f706671587ab6464411f2d cni-plugins-amd64-v0.6.0.tgz -sha256 8589670f7f9b211a351dfcd211d4fe0b961d77283a7415443dc188f3dbf05668 v0.6.0.tar.gz -sha256 92c7599918be0a720ac020f137cdeac746dfa03da6b26e08a37132c5728c091f v0.7.5.tar.gz -sha256 9d1526ed965ac6562fd95a931ab2346b3c5efd58c2f569038ba3c530f7e66472 v0.8.5.tar.gz diff --git a/deploy/iso/minikube-iso/package/cni/Config.in b/deploy/iso/minikube-iso/package/cni/Config.in index b7112197014b..dd6c4fcd39a3 100644 --- a/deploy/iso/minikube-iso/package/cni/Config.in +++ b/deploy/iso/minikube-iso/package/cni/Config.in @@ -1,5 +1,4 @@ config BR2_PACKAGE_CNI bool "cni" default y - depends on BR2_x86_64 depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS diff --git a/deploy/iso/minikube-iso/package/cni/cni.mk b/deploy/iso/minikube-iso/package/cni/cni.mk index 396e966ed06b..6e14ffd9a087 100644 --- a/deploy/iso/minikube-iso/package/cni/cni.mk +++ b/deploy/iso/minikube-iso/package/cni/cni.mk @@ -12,14 +12,19 @@ CNI_LICENSE_FILES = LICENSE CNI_DEPENDENCIES = host-go +CNI_GOARCH=amd64 +ifeq ($(BR2_aarch64),y) +CNI_GOARCH=arm64 +endif + CNI_GOPATH = $(@D)/_output CNI_MAKE_ENV = \ $(GO_TARGET_ENV) \ CGO_ENABLED=0 \ GO111MODULE=off \ GOPATH="$(CNI_GOPATH)" \ - GOBIN="$(CNI_GOPATH)/bin" \ - PATH=$(CNI_GOPATH)/bin:$(BR_PATH) + PATH=$(CNI_GOPATH)/bin:$(BR_PATH) \ + GOARCH=$(CNI_GOARCH) CNI_BUILDFLAGS = -a --ldflags '-extldflags \"-static\"' diff --git a/deploy/iso/minikube-iso/package/conmon/conmon.hash b/deploy/iso/minikube-iso/package/conmon/conmon.hash deleted file mode 100644 index 2180c0d18926..000000000000 --- a/deploy/iso/minikube-iso/package/conmon/conmon.hash +++ /dev/null @@ -1,10 +0,0 @@ -# Locally computed -sha256 4f978a59c6ee516f7e3febfb3b0360a17d1be2c283313e1aeb27adcb8c8f9166 dde3ccf93f01ce5a3e0f7a2c97053697cc3ed152.tar.gz -sha256 75fad6e66b43c5039719edbd82ba072723aea6a9d4d8be4e7ac1c245a291ab1b 8455ce1ef385120deb827d0f0588c04357bad4c4.tar.gz -sha256 32db4ea508a9ff0266b8695ae32604869994371a5a09436438c366a09ddcc1df v0.3.0.tar.gz -sha256 6c9bf278ae6e125a39f1ae419e5bd314162a743f6587d70b1b6be095ac32b9af eb5fa88c26fde5ce1e3f8a1d2a8a9498b2d7dbe6.tar.gz -sha256 50cc36636c32a343f4c9f5ab6b9f7f5edd5d6ef7c9c403793f799f6605597718 v2.0.3.tar.gz -sha256 93f7c127cb536fc60f4c08291fd34e99e492fdc6a36e6b0ddad97d868ecf10f7 29c336700f2999acf9db07662b4a61355076e64a.tar.gz -sha256 d82ad6c1e315f8310ed75fe6905f81dce61b61d55a156e9e04c9855e78e1e165 v2.0.6.tar.gz -sha256 abe4e1cc02505c81857c1eeced008a24b4dd41659d42a1e3395754fb063aef36 v2.0.7.tar.gz -sha256 a116b8422c65778bd677c29f55b3ceaae07d09da336f71bdc68fc7bb83d50e03 v2.0.17.tar.gz diff --git a/deploy/iso/minikube-iso/package/conmon/conmon.mk b/deploy/iso/minikube-iso/package/conmon/conmon.mk deleted file mode 100644 index b38e4802f820..000000000000 --- a/deploy/iso/minikube-iso/package/conmon/conmon.mk +++ /dev/null @@ -1,25 +0,0 @@ -################################################################################ -# -# conmon -# -################################################################################ - -CONMON_VERSION = v2.0.17 -CONMON_COMMIT = 41877362fc4685d55e0473d2e4a1cbe5e1debee0 -CONMON_SITE = https://github.com/containers/conmon/archive -CONMON_SOURCE = $(CONMON_VERSION).tar.gz -CONMON_LICENSE = Apache-2.0 -CONMON_LICENSE_FILES = LICENSE - -CONMON_DEPENDENCIES = host-pkgconf - -define CONMON_BUILD_CMDS - $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) GIT_COMMIT=$(CONMON_COMMIT) PREFIX=/usr -endef - -define CONMON_INSTALL_TARGET_CMDS - $(INSTALL) -Dm755 $(@D)/bin/conmon $(TARGET_DIR)/usr/libexec/crio/conmon - $(INSTALL) -Dm755 $(@D)/bin/conmon $(TARGET_DIR)/usr/libexec/podman/conmon -endef - -$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/package/containerd-bin/Config.in b/deploy/iso/minikube-iso/package/containerd-bin/Config.in deleted file mode 100644 index fc5f3282487d..000000000000 --- a/deploy/iso/minikube-iso/package/containerd-bin/Config.in +++ /dev/null @@ -1,18 +0,0 @@ -config BR2_PACKAGE_CONTAINERD_BIN - bool "containerd-bin" - default y - depends on BR2_x86_64 - depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS - depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS - depends on BR2_TOOLCHAIN_HAS_THREADS - depends on BR2_USE_MMU # lvm2 - depends on !BR2_STATIC_LIBS # lvm2 - depends on !BR2_TOOLCHAIN_USES_MUSL # lvm2 - select BR2_PACKAGE_RUNC_MASTER - select BR2_PACKAGE_BTRFS_PROGS - select BR2_PACKAGE_LIBSECCOMP - select BR2_PACKAGE_LIBGPGME - select BR2_PACKAGE_LVM2 - select BR2_PACKAGE_LVM2_APP_LIBRARY - select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT - select BR2_PACKAGE_LIBGLIB2 diff --git a/deploy/iso/minikube-iso/package/containerd-bin/config.toml b/deploy/iso/minikube-iso/package/containerd-bin/config.toml deleted file mode 100644 index f588941a5efb..000000000000 --- a/deploy/iso/minikube-iso/package/containerd-bin/config.toml +++ /dev/null @@ -1,133 +0,0 @@ -version = 2 -root = "/var/lib/containerd" -state = "/run/containerd" -plugin_dir = "" -disabled_plugins = [] -required_plugins = [] -oom_score = 0 - -[grpc] - address = "/run/containerd/containerd.sock" - tcp_address = "" - tcp_tls_cert = "" - tcp_tls_key = "" - uid = 0 - gid = 0 - max_recv_message_size = 16777216 - max_send_message_size = 16777216 - -[ttrpc] - address = "" - uid = 0 - gid = 0 - -[debug] - address = "" - uid = 0 - gid = 0 - level = "" - -[metrics] - address = "" - grpc_histogram = false - -[cgroup] - path = "" - -[timeouts] - "io.containerd.timeout.shim.cleanup" = "5s" - "io.containerd.timeout.shim.load" = "5s" - "io.containerd.timeout.shim.shutdown" = "3s" - "io.containerd.timeout.task.state" = "2s" - -[plugins] - [plugins."io.containerd.gc.v1.scheduler"] - pause_threshold = 0.02 - deletion_threshold = 0 - mutation_threshold = 100 - schedule_delay = "0s" - startup_delay = "100ms" - [plugins."io.containerd.grpc.v1.cri"] - disable_tcp_service = true - stream_server_address = "" - stream_server_port = "10010" - stream_idle_timeout = "4h0m0s" - enable_selinux = false - selinux_category_range = 1024 - sandbox_image = "k8s.gcr.io/pause:3.2" - stats_collect_period = 10 - systemd_cgroup = true - enable_tls_streaming = false - max_container_log_line_size = 16384 - disable_cgroup = false - disable_apparmor = false - restrict_oom_score_adj = false - max_concurrent_downloads = 3 - disable_proc_mount = false - unset_seccomp_profile = "" - tolerate_missing_hugetlb_controller = true - disable_hugetlb_controller = true - ignore_image_defined_volumes = false - [plugins."io.containerd.grpc.v1.cri".containerd] - snapshotter = "overlayfs" - default_runtime_name = "runc" - no_pivot = false - disable_snapshot_annotations = true - discard_unpacked_layers = false - [plugins."io.containerd.grpc.v1.cri".containerd.default_runtime] - runtime_type = "" - runtime_engine = "" - runtime_root = "" - privileged_without_host_devices = false - base_runtime_spec = "" - [plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime] - runtime_type = "" - runtime_engine = "" - runtime_root = "" - privileged_without_host_devices = false - base_runtime_spec = "" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - runtime_engine = "" - runtime_root = "" - privileged_without_host_devices = false - base_runtime_spec = "" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - [plugins."io.containerd.grpc.v1.cri".cni] - bin_dir = "/opt/cni/bin" - conf_dir = "/etc/cni/net.d" - max_conf_num = 1 - conf_template = "" - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] - [plugins."io.containerd.grpc.v1.cri".image_decryption] - key_model = "" - [plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming] - tls_cert_file = "" - tls_key_file = "" - [plugins."io.containerd.internal.v1.opt"] - path = "/opt/containerd" - [plugins."io.containerd.internal.v1.restart"] - interval = "10s" - [plugins."io.containerd.metadata.v1.bolt"] - content_sharing_policy = "shared" - [plugins."io.containerd.monitor.v1.cgroups"] - no_prometheus = false - [plugins."io.containerd.runtime.v1.linux"] - shim = "containerd-shim" - runtime = "runc" - runtime_root = "" - no_shim = false - shim_debug = false - [plugins."io.containerd.runtime.v2.task"] - platforms = ["linux/amd64"] - [plugins."io.containerd.service.v1.diff-service"] - default = ["walking"] - [plugins."io.containerd.snapshotter.v1.devmapper"] - root_path = "" - pool_name = "" - base_image_size = "" - async_remove = false diff --git a/deploy/iso/minikube-iso/package/containerd-bin/config.toml.default b/deploy/iso/minikube-iso/package/containerd-bin/config.toml.default deleted file mode 100644 index c54c96c32022..000000000000 --- a/deploy/iso/minikube-iso/package/containerd-bin/config.toml.default +++ /dev/null @@ -1,133 +0,0 @@ -version = 2 -root = "/var/lib/containerd" -state = "/run/containerd" -plugin_dir = "" -disabled_plugins = [] -required_plugins = [] -oom_score = 0 - -[grpc] - address = "/run/containerd/containerd.sock" - tcp_address = "" - tcp_tls_cert = "" - tcp_tls_key = "" - uid = 0 - gid = 0 - max_recv_message_size = 16777216 - max_send_message_size = 16777216 - -[ttrpc] - address = "" - uid = 0 - gid = 0 - -[debug] - address = "" - uid = 0 - gid = 0 - level = "" - -[metrics] - address = "" - grpc_histogram = false - -[cgroup] - path = "" - -[timeouts] - "io.containerd.timeout.shim.cleanup" = "5s" - "io.containerd.timeout.shim.load" = "5s" - "io.containerd.timeout.shim.shutdown" = "3s" - "io.containerd.timeout.task.state" = "2s" - -[plugins] - [plugins."io.containerd.gc.v1.scheduler"] - pause_threshold = 0.02 - deletion_threshold = 0 - mutation_threshold = 100 - schedule_delay = "0s" - startup_delay = "100ms" - [plugins."io.containerd.grpc.v1.cri"] - disable_tcp_service = true - stream_server_address = "127.0.0.1" - stream_server_port = "0" - stream_idle_timeout = "4h0m0s" - enable_selinux = false - selinux_category_range = 1024 - sandbox_image = "k8s.gcr.io/pause:3.2" - stats_collect_period = 10 - systemd_cgroup = false - enable_tls_streaming = false - max_container_log_line_size = 16384 - disable_cgroup = false - disable_apparmor = false - restrict_oom_score_adj = false - max_concurrent_downloads = 3 - disable_proc_mount = false - unset_seccomp_profile = "" - tolerate_missing_hugetlb_controller = true - disable_hugetlb_controller = true - ignore_image_defined_volumes = false - [plugins."io.containerd.grpc.v1.cri".containerd] - snapshotter = "overlayfs" - default_runtime_name = "runc" - no_pivot = false - disable_snapshot_annotations = true - discard_unpacked_layers = false - [plugins."io.containerd.grpc.v1.cri".containerd.default_runtime] - runtime_type = "" - runtime_engine = "" - runtime_root = "" - privileged_without_host_devices = false - base_runtime_spec = "" - [plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime] - runtime_type = "" - runtime_engine = "" - runtime_root = "" - privileged_without_host_devices = false - base_runtime_spec = "" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - runtime_engine = "" - runtime_root = "" - privileged_without_host_devices = false - base_runtime_spec = "" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - [plugins."io.containerd.grpc.v1.cri".cni] - bin_dir = "/opt/cni/bin" - conf_dir = "/etc/cni/net.d" - max_conf_num = 1 - conf_template = "" - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] - [plugins."io.containerd.grpc.v1.cri".image_decryption] - key_model = "" - [plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming] - tls_cert_file = "" - tls_key_file = "" - [plugins."io.containerd.internal.v1.opt"] - path = "/opt/containerd" - [plugins."io.containerd.internal.v1.restart"] - interval = "10s" - [plugins."io.containerd.metadata.v1.bolt"] - content_sharing_policy = "shared" - [plugins."io.containerd.monitor.v1.cgroups"] - no_prometheus = false - [plugins."io.containerd.runtime.v1.linux"] - shim = "containerd-shim" - runtime = "runc" - runtime_root = "" - no_shim = false - shim_debug = false - [plugins."io.containerd.runtime.v2.task"] - platforms = ["linux/amd64"] - [plugins."io.containerd.service.v1.diff-service"] - default = ["walking"] - [plugins."io.containerd.snapshotter.v1.devmapper"] - root_path = "" - pool_name = "" - base_image_size = "" - async_remove = false diff --git a/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.hash b/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.hash deleted file mode 100644 index 23ec573fc846..000000000000 --- a/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.hash +++ /dev/null @@ -1,13 +0,0 @@ -sha256 8565a655345f3db2f7b78b77a2cd3103895229aa44cd0e4c710ba3559e344b5a v1.2.0.tar.gz -sha256 b92819bde71de947329814a3c649b8adb106cc03be16aae217b94297f4b843a1 v1.2.5.tar.gz -sha256 f2d578b743fb9faa5b3477b7cf4b33d00501087043a53b27754f14bbe741f891 v1.2.6.tar.gz -sha256 6165ae2ad669d9ec6d317492d30a1511365bd31ad29efae757f19c1828bf75b3 v1.2.8.tar.gz -sha256 a0965e1492fca558629826f1aa89a9675de3d451cec67540400b30c0bf6ac387 v1.2.10.tar.gz -sha256 318886ea1efdec36f088fd6a0a0fe2b2f0ebdfd0066bdb4bd284bad12abc0a41 v1.2.12.tar.gz -sha256 0811057ab67b78ce911416e793edaeb14b3f1e105d67b8e67b6302e0eab572e4 v1.2.13.tar.gz -sha256 d30d59e143697aa4f0960205b3f5ac59c573b332f20507740ef2dc0fb5ae8ded v1.3.7.tar.gz -sha256 9244212589c84b12262769dca6fb985c0c680cb5259c8904b29c511d81fd62d0 v1.3.9.tar.gz -sha256 bc6d9452c700af0ebc09c0da8ddba55be4c03ac8928e72ca92d98905800c8018 v1.4.3.tar.gz -sha256 ac62c64664bf62fd44df0891c896eecdb6d93def3438271d7892dca75bc069d1 v1.4.4.tar.gz -sha256 285a3f4c00a87538bd7d0a82a0a8a758458c02b925349f44f3189f480c326038 v1.4.6.tar.gz -sha256 3bb9f54be022067847f5930d21ebbfe4e7a67f589d78930aa0ac713492c28bcc v1.4.9.tar.gz diff --git a/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.mk b/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.mk deleted file mode 100644 index 31f483c2edce..000000000000 --- a/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.mk +++ /dev/null @@ -1,66 +0,0 @@ -################################################################################ -# -# containerd -# -################################################################################ -CONTAINERD_BIN_VERSION = v1.4.9 -CONTAINERD_BIN_COMMIT = e25210fe30a0a703442421b0f60afac609f950a3 -CONTAINERD_BIN_SITE = https://github.com/containerd/containerd/archive -CONTAINERD_BIN_SOURCE = $(CONTAINERD_BIN_VERSION).tar.gz -CONTAINERD_BIN_DEPENDENCIES = host-go libgpgme -CONTAINERD_BIN_GOPATH = $(@D)/_output -CONTAINERD_BIN_ENV = \ - $(GO_TARGET_ENV) \ - CGO_ENABLED=1 \ - GO111MODULE=off \ - GOPATH="$(CONTAINERD_BIN_GOPATH)" \ - GOBIN="$(CONTAINERD_BIN_GOPATH)/bin" \ - PATH=$(CONTAINERD_BIN_GOPATH)/bin:$(BR_PATH) - -CONTAINERD_BIN_COMPILE_SRC = $(CONTAINERD_BIN_GOPATH)/src/github.com/containerd/containerd - -define CONTAINERD_BIN_USERS - - -1 containerd-admin -1 - - - - - - - -1 containerd -1 - - - - - -endef - -define CONTAINERD_BIN_CONFIGURE_CMDS - mkdir -p $(CONTAINERD_BIN_GOPATH)/src/github.com/containerd - ln -sf $(@D) $(CONTAINERD_BIN_COMPILE_SRC) -endef - -define CONTAINERD_BIN_BUILD_CMDS - PWD=$(CONTAINERD_BIN_COMPILE_SRC) $(CONTAINERD_BIN_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) VERSION=$(CONTAINERD_BIN_VERSION) REVISION=$(CONTAINERD_BIN_COMMIT) -C $(@D) binaries -endef - -define CONTAINERD_BIN_INSTALL_TARGET_CMDS - $(INSTALL) -Dm755 \ - $(@D)/bin/containerd \ - $(TARGET_DIR)/usr/bin - $(INSTALL) -Dm755 \ - $(@D)/bin/containerd-shim \ - $(TARGET_DIR)/usr/bin - $(INSTALL) -Dm755 \ - $(@D)/bin/containerd-shim-runc-v1 \ - $(TARGET_DIR)/usr/bin - $(INSTALL) -Dm755 \ - $(@D)/bin/containerd-shim-runc-v2 \ - $(TARGET_DIR)/usr/bin - $(INSTALL) -Dm755 \ - $(@D)/bin/ctr \ - $(TARGET_DIR)/usr/bin - $(INSTALL) -Dm644 \ - $(CONTAINERD_BIN_PKGDIR)/config.toml \ - $(TARGET_DIR)/etc/containerd/config.toml -endef - -define CONTAINERD_BIN_INSTALL_INIT_SYSTEMD - $(INSTALL) -Dm644 \ - $(CONTAINERD_BIN_PKGDIR)/containerd.service \ - $(TARGET_DIR)/usr/lib/systemd/system/containerd.service - $(INSTALL) -Dm644 \ - $(CONTAINERD_BIN_PKGDIR)/50-minikube.preset \ - $(TARGET_DIR)/usr/lib/systemd/system-preset/50-minikube.preset -endef - -$(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/package/crio-bin/02-crio.conf b/deploy/iso/minikube-iso/package/crio-bin/02-crio.conf new file mode 100644 index 000000000000..cfeb6ed70b9b --- /dev/null +++ b/deploy/iso/minikube-iso/package/crio-bin/02-crio.conf @@ -0,0 +1,8 @@ +[crio.image] +# pause_image = "" + +[crio.network] +# cni_default_network = "" + +[crio.runtime] +# cgroup_manager = "" diff --git a/deploy/iso/minikube-iso/package/crio-bin/Config.in b/deploy/iso/minikube-iso/package/crio-bin/Config.in index 22d2c45e9d02..84f0df4a17be 100644 --- a/deploy/iso/minikube-iso/package/crio-bin/Config.in +++ b/deploy/iso/minikube-iso/package/crio-bin/Config.in @@ -1,7 +1,6 @@ config BR2_PACKAGE_CRIO_BIN bool "crio-bin" default y - depends on BR2_x86_64 depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS depends on BR2_TOOLCHAIN_HAS_THREADS @@ -9,11 +8,11 @@ config BR2_PACKAGE_CRIO_BIN depends on !BR2_STATIC_LIBS # lvm2 depends on !BR2_TOOLCHAIN_USES_MUSL # lvm2 select BR2_PACKAGE_RUNC_MASTER + select BR2_PACKAGE_CRUN select BR2_PACKAGE_CONMON select BR2_PACKAGE_BTRFS_PROGS select BR2_PACKAGE_LIBSECCOMP select BR2_PACKAGE_LIBGPGME select BR2_PACKAGE_LVM2 - select BR2_PACKAGE_LVM2_APP_LIBRARY select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT select BR2_PACKAGE_LIBGLIB2 diff --git a/deploy/iso/minikube-iso/package/crio-bin/crio-bin.hash b/deploy/iso/minikube-iso/package/crio-bin/crio-bin.hash index 11dd505068f1..5c01e8a89118 100644 --- a/deploy/iso/minikube-iso/package/crio-bin/crio-bin.hash +++ b/deploy/iso/minikube-iso/package/crio-bin/crio-bin.hash @@ -21,4 +21,11 @@ sha256 74a4e916acddc6cf47ab5752bdebb6732ce2c028505ef57b7edc21d2da9039b6 v1.18.4. sha256 fc8a8e61375e3ce30563eeb0fd6534c4f48fc20300a72e6ff51cc99cb2703516 v1.19.0.tar.gz sha256 6165c5b8212ea03be2a465403177318bfe25a54c3e8d66d720344643913a0223 v1.19.1.tar.gz sha256 76fd7543bc92d4364a11060f43a5131893a76c6e6e9d6de3a6bb6292c110b631 v1.20.0.tar.gz -sha256 1c01d4a76cdcfe3ac24147eb1d5f6ebd782bd98fb0ac0c19b79bd5a6560b1481 v1.20.2.tar.gz +sha256 36d9f4cf4966342e2d4099e44d8156c55c6a10745c67ce4f856aa9f6dcc2d9ba v1.20.2.tar.gz +sha256 bc53ea8977e252bd9812974c33ff654ee22076598e901464468c5c105a5ef773 v1.22.0.tar.gz +sha256 6e1c0e393cd16af907fabb24e4cc068e27c606c5f1071060d46efdcd29cb5c0d v1.22.1.tar.gz +sha256 34097a0f535aa79cf990aaee5d3ff6226663587b188cbee11089f120e7f869e4 v1.22.2.tar.gz +sha256 52836549cfa27a688659576be9266f4837357a6fa162b1d0a05fa8da62c724b3 v1.22.3.tar.gz +sha256 5543b96b668e964a24d5fc4af9a0e51e4c571c4c4bec5f0cf2cfd5df76debd7f v1.24.1.tar.gz +sha256 525ea1048b303e0022d91dc7465907a9e6baf576df1c004d9422d16e3130006a v1.28.3.tar.gz +sha256 d4f9d5a35e7e6a9838bbc052f66561d453c710d94fc47207a9e528232b878505 v1.29.1.tar.gz diff --git a/deploy/iso/minikube-iso/package/crio-bin/crio-bin.mk b/deploy/iso/minikube-iso/package/crio-bin/crio-bin.mk index 21d7f76556c7..7c03078b748a 100644 --- a/deploy/iso/minikube-iso/package/crio-bin/crio-bin.mk +++ b/deploy/iso/minikube-iso/package/crio-bin/crio-bin.mk @@ -4,20 +4,23 @@ # ################################################################################ -CRIO_BIN_VERSION = v1.20.2 -CRIO_BIN_COMMIT = d5a999ad0a35d895ded554e1e18c142075501a98 +CRIO_BIN_VERSION = v1.29.1 +CRIO_BIN_COMMIT = 78e179ba8dd3ce462382a17049e8d1f770246af1 CRIO_BIN_SITE = https://github.com/cri-o/cri-o/archive CRIO_BIN_SOURCE = $(CRIO_BIN_VERSION).tar.gz CRIO_BIN_DEPENDENCIES = host-go libgpgme CRIO_BIN_GOPATH = $(@D)/_output +CRIO_BIN_GOARCH=amd64 +ifeq ($(BR2_aarch64),y) +CRIO_BIN_GOARCH=arm64 +endif CRIO_BIN_ENV = \ $(GO_TARGET_ENV) \ CGO_ENABLED=1 \ GO111MODULE=off \ GOPATH="$(CRIO_BIN_GOPATH)" \ - GOBIN="$(CRIO_BIN_GOPATH)/bin" \ - PATH=$(CRIO_BIN_GOPATH)/bin:$(BR_PATH) - + PATH=$(CRIO_BIN_GOPATH)/bin:$(BR_PATH) \ + GOARCH=$(CRIO_BIN_GOARCH) define CRIO_BIN_USERS - -1 crio-admin -1 - - - - - @@ -39,6 +42,7 @@ endef define CRIO_BIN_INSTALL_TARGET_CMDS mkdir -p $(TARGET_DIR)/usr/share/containers/oci/hooks.d mkdir -p $(TARGET_DIR)/etc/containers/oci/hooks.d + mkdir -p $(TARGET_DIR)/etc/crio/crio.conf.d $(INSTALL) -Dm755 \ $(@D)/bin/crio \ @@ -55,6 +59,9 @@ define CRIO_BIN_INSTALL_TARGET_CMDS $(INSTALL) -Dm644 \ $(CRIO_BIN_PKGDIR)/registries.conf \ $(TARGET_DIR)/etc/containers/registries.conf + $(INSTALL) -Dm644 \ + $(CRIO_BIN_PKGDIR)/02-crio.conf \ + $(TARGET_DIR)/etc/crio/crio.conf.d/02-crio.conf mkdir -p $(TARGET_DIR)/etc/sysconfig echo 'CRIO_OPTIONS="--log-level=debug"' > $(TARGET_DIR)/etc/sysconfig/crio @@ -65,9 +72,6 @@ define CRIO_BIN_INSTALL_INIT_SYSTEMD $(INSTALL) -Dm644 \ $(CRIO_BIN_PKGDIR)/crio.service \ $(TARGET_DIR)/usr/lib/systemd/system/crio.service - $(INSTALL) -Dm644 \ - $(CRIO_BIN_PKGDIR)/crio-wipe.service \ - $(TARGET_DIR)/usr/lib/systemd/system/crio-wipe.service $(call link-service,crio.service) $(call link-service,crio-shutdown.service) endef diff --git a/deploy/iso/minikube-iso/package/crio-bin/crio-wipe.service b/deploy/iso/minikube-iso/package/crio-bin/crio-wipe.service deleted file mode 100644 index 1389fa9e2911..000000000000 --- a/deploy/iso/minikube-iso/package/crio-bin/crio-wipe.service +++ /dev/null @@ -1,20 +0,0 @@ -[Unit] -Description=CRI-O Auto Update Script -Before=crio.service -After=minikube-automount.service -Requires=minikube-automount.service -RequiresMountsFor=/var/lib/containers - -[Service] -EnvironmentFile=-/etc/sysconfig/crio -EnvironmentFile=-/etc/sysconfig/crio.minikube -EnvironmentFile=/var/run/minikube/env -ExecStart=/usr/bin/crio \ - $CRIO_OPTIONS \ - $CRIO_MINIKUBE_OPTIONS \ - wipe - -Type=oneshot - -[Install] -WantedBy=multi-user.target diff --git a/deploy/iso/minikube-iso/package/crio-bin/crio.conf b/deploy/iso/minikube-iso/package/crio-bin/crio.conf index fafaed67bc64..40b2aa6de022 100644 --- a/deploy/iso/minikube-iso/package/crio-bin/crio.conf +++ b/deploy/iso/minikube-iso/package/crio-bin/crio.conf @@ -28,9 +28,9 @@ storage_driver = "overlay" # List to pass options to the storage driver. Please refer to # containers-storage.conf(5) to see all available storage options. -#storage_option = [ -# "overlay.mountopt=nodev,metacopy=on", -#] +storage_option = [ + "overlay.mountopt=nodev,metacopy=on", +] # The default log directory where all logs will go unless directly specified by # the kubelet. The log directory specified must be an absolute directory. @@ -102,7 +102,7 @@ decryption_keys_path = "/etc/crio/keys/" # Path to the conmon binary, used for monitoring the OCI runtime. # Will be searched for using $PATH if empty. -conmon = "/usr/libexec/crio/conmon" +conmon = "/usr/bin/conmon" # Cgroup setting for conmon conmon_cgroup = "system.slice" @@ -203,7 +203,7 @@ pids_limit = 1024 # limit is never exceeded. log_size_max = -1 -# Whether container output should be logged to journald in addition to the kuberentes log file +# Whether container output should be logged to journald in addition to the kubernetes log file log_to_journald = false # Path to directory in which container exit files are written to by conmon. @@ -339,7 +339,7 @@ global_auth_file = "" # The image used to instantiate infra containers. # This option supports live configuration reload. -pause_image = "k8s.gcr.io/pause:3.2" +pause_image = "registry.k8s.io/pause:3.2" # The path to a file containing credentials specific for pulling the pause_image from # above. The file is similar to that of /var/lib/kubelet/config.json @@ -368,15 +368,6 @@ signature_policy = "" # ignore; the latter will ignore volumes entirely. image_volumes = "mkdir" -# List of registries to be used when pulling an unqualified image (e.g., -# "alpine:latest"). By default, registries is set to "docker.io" for -# compatibility reasons. Depending on your workload and usecase you may add more -# registries (e.g., "quay.io", "registry.fedoraproject.org", -# "registry.opensuse.org", etc.). -registries = [ - "docker.io" -] - # Temporary directory to use for storing big files big_files_temporary_dir = "" diff --git a/deploy/iso/minikube-iso/package/crio-bin/crio.conf.default b/deploy/iso/minikube-iso/package/crio-bin/crio.conf.default index 25debfab9f33..1c557dcdc06b 100644 --- a/deploy/iso/minikube-iso/package/crio-bin/crio.conf.default +++ b/deploy/iso/minikube-iso/package/crio-bin/crio.conf.default @@ -203,7 +203,7 @@ pids_limit = 1024 # limit is never exceeded. log_size_max = -1 -# Whether container output should be logged to journald in addition to the kuberentes log file +# Whether container output should be logged to journald in addition to the kubernetes log file log_to_journald = false # Path to directory in which container exit files are written to by conmon. @@ -339,7 +339,7 @@ global_auth_file = "" # The image used to instantiate infra containers. # This option supports live configuration reload. -pause_image = "k8s.gcr.io/pause:3.2" +pause_image = "registry.k8s.io/pause:3.2" # The path to a file containing credentials specific for pulling the pause_image from # above. The file is similar to that of /var/lib/kubelet/config.json diff --git a/deploy/iso/minikube-iso/package/crio-bin/crio.service b/deploy/iso/minikube-iso/package/crio-bin/crio.service index 30a794e597a3..7b279ad3a11a 100644 --- a/deploy/iso/minikube-iso/package/crio-bin/crio.service +++ b/deploy/iso/minikube-iso/package/crio-bin/crio.service @@ -4,8 +4,6 @@ Documentation=https://github.com/cri-o/cri-o Wants=network-online.target After=network-online.target minikube-automount.service Requires=minikube-automount.service -After=crio-wipe.service -Requires=crio-wipe.service [Service] Type=notify diff --git a/deploy/iso/minikube-iso/package/crun-latest/Config.in b/deploy/iso/minikube-iso/package/crun-latest/Config.in new file mode 100644 index 000000000000..9ff4a6febe19 --- /dev/null +++ b/deploy/iso/minikube-iso/package/crun-latest/Config.in @@ -0,0 +1,8 @@ +config BR2_PACKAGE_CRUN_LATEST + bool "crun-latest" + select BR2_PACKAGE_YAJL + help + A fast and low-memory footprint OCI Container Runtime + fully written in C. + + https://github.com/containers/crun diff --git a/deploy/iso/minikube-iso/package/crun-latest/crun-latest.hash b/deploy/iso/minikube-iso/package/crun-latest/crun-latest.hash new file mode 100644 index 000000000000..fb22c9f77e93 --- /dev/null +++ b/deploy/iso/minikube-iso/package/crun-latest/crun-latest.hash @@ -0,0 +1,19 @@ +# Locally computed +sha256 8065b73ae37ccfb960915fa10051e2bf27850d1c2c69ffeb9eec17c6f198d1c9 crun-0.19.tar.gz +sha256 7b190ff934355e69636e24c12864326a6ebccdbb12af1f14bead217118eb19cb crun-0.19.1.tar.gz +sha256 93423c730ac8deb8dacf805fb15dc5c3ac12e47f8a3eb36dd42166ccfd023d00 crun-0.20.tar.gz +sha256 84a31b25169d92b59a2611fe256a2cc48b05edd9aee8eab4e3dabb60d88f5a23 crun-0.20.1.tar.gz +sha256 e1745172bf603c6832e1a77ee2b7ac9ad4644cd0f4349704df84b66385bbbe61 crun-1.0.tar.gz +sha256 5f2d98a13bdd7ab3c83620abc7dc29cfaf7b8f7487b5b3722453bc9619d3ea0b crun-1.1.tar.gz +sha256 1032a69878c18ddeeb97cd26251c2819afb76e0d4a50c047139829b00d147978 crun-1.2.tar.gz +sha256 f6ceb53ef6c686b1e8bc7e4a52cfac3ebec915edc6bc750ac600a8b3decb6e13 crun-1.14.tar.gz +sha256 5527013bfdac4001f242fbc3b544d01837d942f426fdefcc296f0d271594eeb4 crun-1.14.4.tar.gz +sha256 a03ba1e58b8823ae77d010024b43bd94c5a99f7d652257b1b23abd2d2cdb087f crun-1.15.tar.gz +sha256 0019dfc4b32d63c1392aa264aed2253c1e0c2fb09216f8e2cc269bbfb8bb49b5 crun-1.16.tar.gz +sha256 70548de4874f0c9e7e1e080ff092e23f8fcc772a23261ee26e26d79f24df289e crun-1.16.1.tar.gz +sha256 b766609814c0b0a3c0d2d235af1b061bd71da1aa2e8bb181d66e89f1b9a4e874 crun-1.17.tar.gz +sha256 a83b70b350e50ad320376685e975afae535dad64e982e2b7c57a0db45663902a crun-1.18.tar.gz +sha256 fdd530a398e32c36ccb597a43d17692631257374b9121027d88bbc5bccb24442 crun-1.18.2.tar.gz +sha256 f37ae4936832a4bde31d50028307e83bcc7af80f2d36779f4ac7c79cdfe682b0 crun-1.19.tar.gz +sha256 cc80e3079daffb740d5f586b4a0269567c0961bc8321487fe7a3c2f13a178866 crun-1.23.tar.gz +sha256 d752b7cee413d2cb9463cb6995fd50801a0a1574507ebfb550ea9f26d07743f8 crun-1.23.1.tar.gz diff --git a/deploy/iso/minikube-iso/package/crun-latest/crun-latest.mk b/deploy/iso/minikube-iso/package/crun-latest/crun-latest.mk new file mode 100644 index 000000000000..360262bcadc5 --- /dev/null +++ b/deploy/iso/minikube-iso/package/crun-latest/crun-latest.mk @@ -0,0 +1,38 @@ +################################################################################ +# +# crun-latest +# +################################################################################ + +CRUN_LATEST_VERSION = 1.23.1 +CRUN_LATEST_COMMIT = d20b23dba05e822b93b82f2f34fd5dada433e0c2 +# need the pre-generated release tarball with the git submodules and configure +CRUN_LATEST_SITE = https://github.com/containers/crun/releases/download/$(CRUN_LATEST_VERSION) +CRUN_LATEST_LICENSE = GPL-2.0 +CRUN_LATEST_LICENSE_FILES = COPYING + +CRUN_LATEST_DEPENDENCIES += host-python3 + +CRUN_LATEST_MAKE_OPTS = crun + +ifeq ($(BR2_PACKAGE_LIBCAP),y) +CRUN_LATEST_DEPENDENCIES += libcap +else +CRUN_LATEST_CONF_OPTS += --disable-caps +endif + +ifeq ($(BR2_PACKAGE_LIBSECCOMP),y) +CRUN_LATEST_CONF_OPTS += --enable-seccomp +CRUN_LATEST_DEPENDENCIES += libseccomp host-pkgconf +else +CRUN_LATEST_CONF_OPTS += --disable-seccomp +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +CRUN_LATEST_CONF_OPTS += --enable-systemd +CRUN_LATEST_DEPENDENCIES += systemd host-pkgconf +else +CRUN_LATEST_CONF_OPTS += --disable-systemd +endif + +$(eval $(autotools-package)) diff --git a/deploy/iso/minikube-iso/package/docker-bin/docker-bin.hash b/deploy/iso/minikube-iso/package/docker-bin/docker-bin.hash deleted file mode 100644 index b574e5213090..000000000000 --- a/deploy/iso/minikube-iso/package/docker-bin/docker-bin.hash +++ /dev/null @@ -1,34 +0,0 @@ -sha256 893e3c6e89c0cd2c5f1e51ea41bc2dd97f5e791fcfa3cee28445df277836339d docker-1.11.1.tgz -sha256 cadc6025c841e034506703a06cf54204e51d0cadfae4bae62628ac648d82efdd docker-1.12.6.tgz -sha256 e582486c9db0f4229deba9f8517145f8af6c5fae7a1243e6b07876bd3e706620 docker-17.06.0-ce.tgz -sha256 a9e90a73c3cdfbf238f148e1ec0eaff5eb181f92f35bdd938fd7dab18e1c4647 docker-17.09.0-ce.tgz -sha256 77d3eaa72f2b63c94ea827b548f4a8b572b754a431c59258e3f2730411f64be7 docker-17.09.1-ce.tgz -sha256 692e1c72937f6214b1038def84463018d8e320c8eaf8530546c84c2f8f9c767d docker-17.12.0-ce.tgz -sha256 1270dce1bd7e1838d62ae21d2505d87f16efc1d9074645571daaefdfd0c14054 docker-17.12.1-ce.tgz -sha256 83be159cf0657df9e1a1a4a127d181725a982714a983b2bdcc0621244df93687 docker-18.06.1-ce.tgz -sha256 a979d9a952fae474886c7588da692ee00684cb2421d2c633c7ed415948cf0b10 docker-18.06.2-ce.tgz -sha256 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822 docker-18.06.3-ce.tgz -sha256 99ca9395e9c7ffbf75537de71aa828761f492491d02bc6e29db2920fa582c6c5 docker-18.09.5.tgz -sha256 1f3f6774117765279fce64ee7f76abbb5f260264548cf80631d68fb2d795bb09 docker-18.09.6.tgz -sha256 e106ccfa2b1f60794faaa6bae57a2dac9dc4cb33e5541fad6a826ea525d01cc4 docker-18.09.7.tgz -sha256 12277eff64363f51ba2f20dd258bdc2c3248022996c0251921193ec6fd179e52 docker-18.09.8.tgz -sha256 82a362af7689038c51573e0fd0554da8703f0d06f4dfe95dd5bda5acf0ae45fb docker-18.09.9.tgz -sha256 50cdf38749642ec43d6ac50f4a3f1f7f6ac688e8d8b4e1c5b7be06e1a82f06e9 docker-19.03.5.tgz -sha256 34ff89ce917796594cd81149b1777d07786d297ffd0fef37a796b5897052f7cc docker-19.03.6.tgz -sha256 033e97ae6b31e21c598fd089ea034c08d75dc744ceb787898d63dfc4e45ead03 docker-19.03.7.tgz -sha256 7f4115dc6a3c19c917f8b9664d7b51c904def1c984e082c4600097433323cf6f docker-19.03.8.tgz -sha256 1c03c78be198d9085e7dd6806fc5d93264baaf0c7ea17f584d00af48eae508ee docker-19.03.9.tgz -sha256 7c1576a0bc749418d1423d2b78c8920b5d61f849789904612862dd118742e82b docker-19.03.10.tgz -sha256 0f4336378f61ed73ed55a356ac19e46699a995f2aff34323ba5874d131548b9e docker-19.03.11.tgz -sha256 88de1b87b8a2582fe827154899475a72fb707c5793cfb39d2a24813ba1f31197 docker-19.03.12.tgz -sha256 ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8 docker-19.03.13.tgz -sha256 9f1ec28e357a8f18e9561129239caf9c0807d74756e21cc63637c7fdeaafe847 docker-19.03.14.tgz -sha256 02936a3585f12f13b21b95e02ae722d74eaf1870b536997e914659ee307b2ac4 docker-20.10.0.tgz -sha256 8790f3b94ee07ca69a9fdbd1310cbffc729af0a07e5bf9f34a79df1e13d2e50e docker-20.10.1.tgz -sha256 97017e32a8ecbdd1826bb3c7b1424303ee0dea3f900d33591b1df5e394ed4eed docker-20.10.2.tgz -sha256 47065a47f0692cd5af03073c7386fe090d9ef5ac88a7d8455a884d8e15809be5 docker-20.10.3.tgz -sha256 6ec28b6a251e093f5cf32569c4bfce4821eda02923b33c060694e6ca2c851daa docker-20.10.4.tgz -sha256 3f18edc66e1faae607d428349e77f9800bdea554528521f0f6c49fc3f1de6abf docker-20.10.5.tgz -sha256 e3b6c3b11518281a51fb0eee73138482b83041e908f01adf8abd3a24b34ea21e docker-20.10.6.tgz -sha256 34ad50146fce29b28e5115a1e8510dd5232459c9a4a9f28f65909f92cca314d9 docker-20.10.7.tgz -sha256 7ea11ecb100fdc085dbfd9ab1ff380e7f99733c890ed815510a5952e5d6dd7e0 docker-20.10.8.tgz diff --git a/deploy/iso/minikube-iso/package/falco-module/Config.in b/deploy/iso/minikube-iso/package/falco-module/Config.in deleted file mode 100644 index ad271f426aec..000000000000 --- a/deploy/iso/minikube-iso/package/falco-module/Config.in +++ /dev/null @@ -1,6 +0,0 @@ -config BR2_PACKAGE_FALCO_MODULE - bool "falco-module" - default y - depends on BR2_LINUX_KERNEL - select BR2_PACKAGE_NCURSES - select BR2_PACKAGE_LIBYAML diff --git a/deploy/iso/minikube-iso/package/falco-module/falco-module.hash b/deploy/iso/minikube-iso/package/falco-module/falco-module.hash deleted file mode 100644 index 6944f25b5a5e..000000000000 --- a/deploy/iso/minikube-iso/package/falco-module/falco-module.hash +++ /dev/null @@ -1,12 +0,0 @@ -# falco -sha256 87c60273c35d544256e471b403497be33f24df662673338236ec92ba3fc1f8b7 0.19.0.tar.gz -sha256 b873e3590e56ead740ed905108221f98da6100da3c5b7acf2355ea1cf628d931 0.20.0.tar.gz -sha256 b1c9884855d58be94a97b2e348bcdc7db995800f0405b0f4e9a7176ee2f094a7 0.21.0.tar.gz -sha256 11890b1401c197c28ee0a70a364004f58f5ec5526365e9a283699a75e5662773 0.22.0.tar.gz -sha256 ed991ffbece8f543f5dc6aa5a660ab1ed4bae771b6aa4930663a3902cc160ea3 0.23.0.tar.gz -sha256 5703d724e0b2ce3b98208549ca9d1abdc9a0298a9abfd748b34863c0c4015dcf 0.24.0.tar.gz -# sysdig -sha256 6e477ac5fe9d3110b870bd4495f01541373a008c375a1934a2d1c46798b6bad6 146a431edf95829ac11bfd9c85ba3ef08789bffe.tar.gz -sha256 1c69363e4c36cdaeed413c2ef557af53bfc4bf1109fbcb6d6e18dc40fe6ddec8 be1ea2d9482d0e6e2cb14a0fd7e08cbecf517f94.tar.gz -sha256 766e8952a36a4198fd976b9d848523e6abe4336612188e4fc911e217d8e8a00d 96bd9bc560f67742738eb7255aeb4d03046b8045.tar.gz -sha256 6c3f5f2d699c9540e281f50cbc5cb6b580f0fc689798bc65d4a77f57f932a71c 85c88952b018fdbce2464222c3303229f5bfcfad.tar.gz diff --git a/deploy/iso/minikube-iso/package/falco-module/falco-module.mk b/deploy/iso/minikube-iso/package/falco-module/falco-module.mk deleted file mode 100644 index ececc2493d14..000000000000 --- a/deploy/iso/minikube-iso/package/falco-module/falco-module.mk +++ /dev/null @@ -1,34 +0,0 @@ -######################################################################## -# -# Falco driver kernel module -# -######################################################################## - -FALCO_MODULE_VERSION = 0.24.0 -FALCO_MODULE_SITE = https://github.com/falcosecurity/falco/archive -FALCO_MODULE_SOURCE = $(FALCO_MODULE_VERSION).tar.gz -FALCO_MODULE_DEPENDENCIES += ncurses libyaml -FALCO_MODULE_LICENSE = Apache-2.0 -FALCO_MODULE_LICENSE_FILES = COPYING - -# see cmake/modules/sysdig-repo/CMakeLists.txt -FALCO_MODULE_SYSDIG_VERSION = 85c88952b018fdbce2464222c3303229f5bfcfad -FALCO_MODULE_EXTRA_DOWNLOADS = https://github.com/draios/sysdig/archive/${FALCO_MODULE_SYSDIG_VERSION}.tar.gz - -define FALCO_MODULE_SYSDIG_SRC - sed -e 's|URL ".*"|URL "'$(FALCO_MODULE_DL_DIR)/$(FALCO_MODULE_SYSDIG_VERSION).tar.gz'"|' -i $(@D)/cmake/modules/sysdig-repo/CMakeLists.txt -endef - -FALCO_MODULE_POST_EXTRACT_HOOKS += FALCO_MODULE_SYSDIG_SRC - -FALCO_MODULE_CONF_OPTS = -DFALCO_VERSION=$(FALCO_MODULE_VERSION) -FALCO_MODULE_CONF_OPTS += -DUSE_BUNDLED_DEPS=ON - -FALCO_MODULE_MAKE_ENV = $(LINUX_MAKE_ENV) -FALCO_MODULE_MAKE_OPTS = $(LINUX_MAKE_FLAGS) driver KERNELDIR=$(LINUX_DIR) -FALCO_MODULE_INSTALL_OPTS = install_driver -FALCO_MODULE_INSTALL_STAGING_OPTS = INSTALL_MOD_PATH=$(STAGING_DIR) install_driver -FALCO_MODULE_INSTALL_TARGET_OPTS = INSTALL_MOD_PATH=$(TARGET_DIR) install_driver - -$(eval $(kernel-module)) -$(eval $(cmake-package)) diff --git a/deploy/iso/minikube-iso/package/gluster/0001-set-distribution.patch b/deploy/iso/minikube-iso/package/gluster/0001-set-distribution.patch deleted file mode 100644 index 86db436c8ef6..000000000000 --- a/deploy/iso/minikube-iso/package/gluster/0001-set-distribution.patch +++ /dev/null @@ -1,80 +0,0 @@ ---- a/configure 2018-04-24 16:25:41.000000000 +0200 -+++ b/configure 2018-06-01 19:55:45.043559397 +0200 -@@ -15420,76 +15420,7 @@ - - # Check the distribution where you are compiling glusterfs on - --GF_DISTRIBUTION= --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /etc/debian_version" >&5 --$as_echo_n "checking for /etc/debian_version... " >&6; } --if ${ac_cv_file__etc_debian_version+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- test "$cross_compiling" = yes && -- as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 --if test -r "/etc/debian_version"; then -- ac_cv_file__etc_debian_version=yes --else -- ac_cv_file__etc_debian_version=no --fi --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__etc_debian_version" >&5 --$as_echo "$ac_cv_file__etc_debian_version" >&6; } --if test "x$ac_cv_file__etc_debian_version" = xyes; then : -- --fi -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /etc/SuSE-release" >&5 --$as_echo_n "checking for /etc/SuSE-release... " >&6; } --if ${ac_cv_file__etc_SuSE_release+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- test "$cross_compiling" = yes && -- as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 --if test -r "/etc/SuSE-release"; then -- ac_cv_file__etc_SuSE_release=yes --else -- ac_cv_file__etc_SuSE_release=no --fi --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__etc_SuSE_release" >&5 --$as_echo "$ac_cv_file__etc_SuSE_release" >&6; } --if test "x$ac_cv_file__etc_SuSE_release" = xyes; then : -- --fi -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /etc/redhat-release" >&5 --$as_echo_n "checking for /etc/redhat-release... " >&6; } --if ${ac_cv_file__etc_redhat_release+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- test "$cross_compiling" = yes && -- as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 --if test -r "/etc/redhat-release"; then -- ac_cv_file__etc_redhat_release=yes --else -- ac_cv_file__etc_redhat_release=no --fi --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__etc_redhat_release" >&5 --$as_echo "$ac_cv_file__etc_redhat_release" >&6; } --if test "x$ac_cv_file__etc_redhat_release" = xyes; then : -- --fi -- -- --if test "x$ac_cv_file__etc_debian_version" = "xyes"; then -- GF_DISTRIBUTION=Debian --fi --if test "x$ac_cv_file__etc_SuSE_release" = "xyes"; then -- GF_DISTRIBUTION=SuSE --fi --if test "x$ac_cv_file__etc_redhat_release" = "xyes"; then -- GF_DISTRIBUTION=Redhat --fi -- -- -+GF_DISTRIBUTION=Redhat - - GF_HOST_OS="" - GF_LDFLAGS="-rdynamic" diff --git a/deploy/iso/minikube-iso/package/gluster/0002-use-gnu-rpcgen.patch b/deploy/iso/minikube-iso/package/gluster/0002-use-gnu-rpcgen.patch deleted file mode 100644 index 57404863bc86..000000000000 --- a/deploy/iso/minikube-iso/package/gluster/0002-use-gnu-rpcgen.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff -ru gluster-4.1.5/rpc/xdr/gen/Makefile.am gluster-4.1.5.patched/rpc/xdr/gen/Makefile.am ---- gluster-4.1.5/rpc/xdr/gen/Makefile.am 2018-09-21 16:13:45.958611272 +0200 -+++ gluster-4.1.5.patched/rpc/xdr/gen/Makefile.am 2018-09-24 19:50:32.798967652 +0200 -@@ -19,14 +19,14 @@ - # in the build. Or we do this crufty thing instead. - $(XDRSOURCES): $(XDRGENFILES) - @if [ ! -e $(xdrdst)/$@ -o $(@:.c=.x) -nt $(xdrdst)/$@ ]; then \ -- rpcgen -c -o $(xdrdst)/$@ $(@:.c=.x) ;\ -+ /usr/bin/rpcgen -c -o $(xdrdst)/$@ $(@:.c=.x) ;\ - fi - - # d*mn sed in netbsd6 doesn't do -i (inline) - # (why are we still running smoke on netbsd6 and not netbsd7?) - $(XDRHEADERS): $(XDRGENFILES) - @if [ ! -e $(xdrdst)/$@ -o $(@:.h=.x) -nt $(xdrdst)/$@ ]; then \ -- rpcgen -h -o $(@:.h=.tmp) $(@:.h=.x) && \ -+ /usr/bin/rpcgen -h -o $(@:.h=.tmp) $(@:.h=.x) && \ - sed -e '/#ifndef/ s/-/_/g' -e '/#define/ s/-/_/g' \ - -e '/#endif/ s/-/_/' -e 's/TMP_/H_/g' \ - $(@:.h=.tmp) > $(xdrdst)/$@ && \ -Only in gluster-4.1.5.patched/rpc/xdr/gen: Makefile.am~ -diff -ru gluster-4.1.5/rpc/xdr/gen/Makefile.in gluster-4.1.5.patched/rpc/xdr/gen/Makefile.in ---- gluster-4.1.5/rpc/xdr/gen/Makefile.in 2018-09-21 16:13:56.087638030 +0200 -+++ gluster-4.1.5.patched/rpc/xdr/gen/Makefile.in 2018-09-24 19:51:06.198109046 +0200 -@@ -558,14 +558,14 @@ - # in the build. Or we do this crufty thing instead. - $(XDRSOURCES): $(XDRGENFILES) - @if [ ! -e $(xdrdst)/$@ -o $(@:.c=.x) -nt $(xdrdst)/$@ ]; then \ -- rpcgen -c -o $(xdrdst)/$@ $(@:.c=.x) ;\ -+ /usr/bin/rpcgen -c -o $(xdrdst)/$@ $(@:.c=.x) ;\ - fi - - # d*mn sed in netbsd6 doesn't do -i (inline) - # (why are we still running smoke on netbsd6 and not netbsd7?) - $(XDRHEADERS): $(XDRGENFILES) - @if [ ! -e $(xdrdst)/$@ -o $(@:.h=.x) -nt $(xdrdst)/$@ ]; then \ -- rpcgen -h -o $(@:.h=.tmp) $(@:.h=.x) && \ -+ /usr/bin/rpcgen -h -o $(@:.h=.tmp) $(@:.h=.x) && \ - sed -e '/#ifndef/ s/-/_/g' -e '/#define/ s/-/_/g' \ - -e '/#endif/ s/-/_/' -e 's/TMP_/H_/g' \ - $(@:.h=.tmp) > $(xdrdst)/$@ && \ -Only in gluster-4.1.5.patched/rpc/xdr/gen: Makefile.in~ diff --git a/deploy/iso/minikube-iso/package/gluster/Config.in b/deploy/iso/minikube-iso/package/gluster/Config.in deleted file mode 100644 index 7d2515e177ac..000000000000 --- a/deploy/iso/minikube-iso/package/gluster/Config.in +++ /dev/null @@ -1,12 +0,0 @@ -config BR2_PACKAGE_GLUSTER - bool "gluster" - default y - depends on BR2_x86_64 - select BR2_PACKAGE_LIBURCU - select BR2_PACKAGE_LIBXML2 - help - Gluster is a scalable, distributed file system that - aggregates disk storage resources from multiple servers into - a single global namespace. - - https://www.gluster.org/ diff --git a/deploy/iso/minikube-iso/package/gluster/gluster.hash b/deploy/iso/minikube-iso/package/gluster/gluster.hash deleted file mode 100644 index ebb8c7059d8c..000000000000 --- a/deploy/iso/minikube-iso/package/gluster/gluster.hash +++ /dev/null @@ -1 +0,0 @@ -sha512 ae557472b6a263e815b8c4d630b606f8e1334b6604799e499e6f53ea6ff60c2a696160fa427943cc3d01ffee91a57787c91f93a1b914179679038e63d291401f glusterfs-4.1.5.tar.gz diff --git a/deploy/iso/minikube-iso/package/gluster/gluster.mk b/deploy/iso/minikube-iso/package/gluster/gluster.mk deleted file mode 100644 index ae834c3d2fd4..000000000000 --- a/deploy/iso/minikube-iso/package/gluster/gluster.mk +++ /dev/null @@ -1,12 +0,0 @@ -################################################################################ -# -# gluster -# -################################################################################ - -GLUSTER_VERSION = 4.1.5 -GLUSTER_SITE = https://download.gluster.org/pub/gluster/glusterfs/01.old-releases/4.1/$(GLUSTER_VERSION) -GLUSTER_SOURCE = glusterfs-$(GLUSTER_VERSION).tar.gz -GLUSTER_CONF_OPTS = --disable-tiering --disable-ec-dynamic --disable-xmltest --disable-crypt-xlator --disable-georeplication --disable-ibverbs --disable-glupy --disable-gnfs --disable-cmocka --without-server -GLUSTER_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install -$(eval $(autotools-package)) diff --git a/deploy/iso/minikube-iso/package/podman/Config.in b/deploy/iso/minikube-iso/package/podman/Config.in index d73162af7f34..db2942d134eb 100644 --- a/deploy/iso/minikube-iso/package/podman/Config.in +++ b/deploy/iso/minikube-iso/package/podman/Config.in @@ -1,11 +1,11 @@ config BR2_PACKAGE_PODMAN bool "podman" default y - depends on BR2_x86_64 depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS depends on BR2_TOOLCHAIN_HAS_THREADS select BR2_PACKAGE_RUNC_MASTER + select BR2_PACKAGE_CRUN select BR2_PACKAGE_CONMON select BR2_PACKAGE_LIBSECCOMP select BR2_PACKAGE_LIBGPGME diff --git a/deploy/iso/minikube-iso/package/podman/podman.hash b/deploy/iso/minikube-iso/package/podman/podman.hash index 4f5158b977e2..6be7f9e461fd 100644 --- a/deploy/iso/minikube-iso/package/podman/podman.hash +++ b/deploy/iso/minikube-iso/package/podman/podman.hash @@ -2,3 +2,6 @@ sha256 a16846fe076aaf2c9ea2e854c3baba9fb838d916be7fb4b5be332e6c92d907d4 v1.9.3.t sha256 5ebaa6e0dbd7fd1863f70d2bc71dc8a94e195c3339c17e3cac4560c9ec5747f8 v2.1.1.tar.gz sha256 ec5473e51fa28f29af323473fc484f742dc7df23d06d8ba9f217f13382893a71 v2.2.0.tar.gz sha256 3212bad60d945c1169b27da03959f36d92d1d8964645c701a5a82a89118e96d1 v2.2.1.tar.gz +sha256 5a0d42e03d15e32c5c54a147da5ef1b8928ec00982ac9e3f1edc82c5e614b6d2 v3.1.2.tar.gz +sha256 b0c4f9a11eb500b1d440d5e51a6c0c632aa4ac458e2dc0362f50f999eb7fbf31 v3.4.2.tar.gz +sha256 4af6606dd072fe946960680611ba65201be435b43edbfc5cc635b2a01a899e6e v3.4.7.tar.gz diff --git a/deploy/iso/minikube-iso/package/podman/podman.mk b/deploy/iso/minikube-iso/package/podman/podman.mk index a2170ba39534..309991695d5b 100644 --- a/deploy/iso/minikube-iso/package/podman/podman.mk +++ b/deploy/iso/minikube-iso/package/podman/podman.mk @@ -1,14 +1,22 @@ -PODMAN_VERSION = v2.2.1 -PODMAN_COMMIT = a0d478edea7f775b7ce32f8eb1a01e75374486cb +PODMAN_VERSION = v3.4.7 +PODMAN_COMMIT = 74d67f5d43bcd322a4fb11a7b58eced866f9d0b9 PODMAN_SITE = https://github.com/containers/podman/archive PODMAN_SOURCE = $(PODMAN_VERSION).tar.gz PODMAN_LICENSE = Apache-2.0 PODMAN_LICENSE_FILES = LICENSE +PODMAN_BUILDTAGS = exclude_graphdriver_btrfs btrfs_noversion exclude_graphdriver_devicemapper seccomp + PODMAN_DEPENDENCIES = host-go ifeq ($(BR2_INIT_SYSTEMD),y) # need libsystemd for journal PODMAN_DEPENDENCIES += systemd +PODMAN_BUILDTAGS += systemd +endif + +PODMAN_GOARCH=amd64 +ifeq ($(BR2_aarch64),y) +PODMAN_GOARCH=arm64 endif PODMAN_GOPATH = $(@D)/_output @@ -16,9 +24,11 @@ PODMAN_BIN_ENV = \ $(GO_TARGET_ENV) \ CGO_ENABLED=1 \ GOPATH="$(PODMAN_GOPATH)" \ - GOBIN="$(PODMAN_GOPATH)/bin" \ - PATH=$(PODMAN_GOPATH)/bin:$(BR_PATH) - + PATH=$(PODMAN_GOPATH)/bin:$(BR_PATH) \ + GOARCH=$(PODMAN_GOARCH) \ + GOPROXY="https://proxy.golang.org,direct" \ + GOSUMDB='sum.golang.org'\ + GOOS=linux define PODMAN_USERS - -1 podman -1 - - - - - @@ -42,7 +52,7 @@ endef define PODMAN_BUILD_CMDS mkdir -p $(@D)/bin - $(PODMAN_BIN_ENV) CIRRUS_TAG=$(PODMAN_VERSION) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) GIT_COMMIT=$(PODMAN_COMMIT) PREFIX=/usr podman + $(PODMAN_BIN_ENV) CIRRUS_TAG=$(PODMAN_VERSION) $(MAKE) $(TARGET_CONFIGURE_OPTS) BUILDFLAGS="-buildvcs=false" BUILDTAGS="$(PODMAN_BUILDTAGS)" -C $(@D) GIT_COMMIT=$(PODMAN_COMMIT) PREFIX=/usr podman endef define PODMAN_INSTALL_TARGET_CMDS diff --git a/deploy/iso/minikube-iso/package/runc-master/Config.in b/deploy/iso/minikube-iso/package/runc-master/Config.in index e3e4a5845418..70b1caca2864 100644 --- a/deploy/iso/minikube-iso/package/runc-master/Config.in +++ b/deploy/iso/minikube-iso/package/runc-master/Config.in @@ -1,17 +1,17 @@ config BR2_PACKAGE_RUNC_MASTER - bool "runc-master" - depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS - depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS - depends on BR2_TOOLCHAIN_HAS_THREADS - help - runC is a CLI tool for spawning and running containers - according to the OCP specification. + bool "runc-master" + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS + depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on BR2_TOOLCHAIN_HAS_THREADS + help + runC is a CLI tool for spawning and running containers + according to the OCP specification. - This is just a newer build of runc than the buildroot version. + This is just a newer build of runc than the buildroot version. - https://github.com/opencontainers/runc + https://github.com/opencontainers/runc comment "runc needs a toolchain w/ threads" - depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS && \ - BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS - depends on !BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS && \ + BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS + depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/deploy/iso/minikube-iso/package/runc-master/runc-master.hash b/deploy/iso/minikube-iso/package/runc-master/runc-master.hash index d00061b3525f..0bd7dfaf1193 100644 --- a/deploy/iso/minikube-iso/package/runc-master/runc-master.hash +++ b/deploy/iso/minikube-iso/package/runc-master/runc-master.hash @@ -11,3 +11,22 @@ sha256 bfcbbcb12664d5f8c1b794f37a457a8db53291c82be5a3157d8efb91aab193bf ff819c7e sha256 144973344b73627b5f69aa88b9e6655d692447ec317a0d5fa9777496a8ac186e 12644e614e25b05da6fd08a38ffa0cfe1903fdec.tar.gz sha256 821ff8629329b4b7e4ccf24b5bf369c9739887736be30ba06a0d8053eb0e0b23 b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7.tar.gz sha256 50cc479cabf6e7edb9070a7c28b3460b0acc2a01650fc5934f5037cb96b9e2cf 4144b63817ebcc5b358fc2c8ef95f7cddd709aa7.tar.gz +sha256 1f47e3ff66cdcca1f890b15e74e884c4ff81d16d1044cc9900a1eb10cfb3d8e7 52b36a2dd837e8462de8e01458bf02cf9eea47dd.tar.gz +sha256 91525356b71fbf8e05deddc955d3f40e0d4aedcb15d26bdd2850a9986852ae5b f46b6ba2c9314cfc8caae24a32ec5fe9ef1059fe.tar.gz +sha256 49fbb25fda9fc416ec79a23e5382d504a8972a88247fe074f63ab71b6f38a0a0 52de29d7e0f8c0899bd7efb8810dd07f0073fa87.tar.gz +sha256 9bb3be747237647cd232a47796d855e44fe295493f9661a4013835393ea65d46 a916309fff0f838eb94e928713dbc3c0d0ac7aa4.tar.gz +sha256 ab2b685fcece3a97ddcb8402879d1e05580a5b94f9d0aa3bae339db1e5dae686 5fd4c4d144137e991c4acebb2146ab1483a97925.tar.gz +sha256 76cbf30637cbb828794d72d32fb3fd6ff3139cd9743b8b44790fd110f43d96b2 v1.1.5.tar.gz +sha256 f1885d6dfa188f8112328ac2355e5d67346174a2e2e795ec514a972bcbfcc2fa v1.1.7.tar.gz +sha256 509993674481aad7e14aedfb280e0eb160f3a34c0b77e2e98c4b3c0b1df76894 v1.1.9.tar.gz +sha256 e26ae522d09b253b64a30b4e4d233988c988f7588178308b51da7aec927df47b v1.1.10.tar.gz +sha256 129ad7cd470e4bdc82cdd3d5f0aa93e43674bf8ea115da2b42a27361885fe3ee v1.1.11.tar.gz +sha256 be31b07d6a54a8f234016501c300ad04b6c428c56588e7eca8c3b663308db208 v1.1.12.tar.gz +sha256 789d5749a08ef1fbe5d1999b67883206a68a4e58e6ca0151c411d678f3480b25 v1.1.13.tar.gz +sha256 563cf57c38d2e7149234dbe6f63ca0751eb55ef8f586ed12a543dedc1aceba68 v1.1.14.tar.gz +sha256 8446718a107f3e437bc33a4c9b89b94cb24ae58ed0a49d08cd83ac7d39980860 v1.1.15.tar.gz +sha256 b12ba86441c259225374640db1cbf915168a04d94e471ec936684df2f05423a0 v1.2.3.tar.gz +sha256 1ae11980477b789732915dfd7ba4246f5babe5ff76a31021d36365007d9713b0 v1.2.5.tar.gz +sha256 19b280702341f33ff353fa254d1dbdb67f6aab2c74395f6d651a17524f68e752 v1.2.6.tar.gz +sha256 3262492ce42bea0919ee1a2d000b6f303fd14877295bc38d094876b55fdd448b v1.3.0.tar.gz +sha256 94d566d8b017d6cdffc684560a4f069bb87f86534976c41d768711c85e194884 v1.4.0.tar.gz diff --git a/deploy/iso/minikube-iso/package/runc-master/runc-master.mk b/deploy/iso/minikube-iso/package/runc-master/runc-master.mk index d4b8852c0480..2753b90e4e3f 100644 --- a/deploy/iso/minikube-iso/package/runc-master/runc-master.mk +++ b/deploy/iso/minikube-iso/package/runc-master/runc-master.mk @@ -4,8 +4,8 @@ # ################################################################################ -# As of 2021-07-16, v1.0.1 -RUNC_MASTER_VERSION = 4144b63817ebcc5b358fc2c8ef95f7cddd709aa7 +RUNC_MASTER_VERSION = v1.4.0 +RUNC_MASTER_COMMIT = 8bd78a9977e604c4d5f67a7415d7b8b8c109cdc4 RUNC_MASTER_SITE = https://github.com/opencontainers/runc/archive RUNC_MASTER_SOURCE = $(RUNC_MASTER_VERSION).tar.gz RUNC_MASTER_LICENSE = Apache-2.0 @@ -13,14 +13,19 @@ RUNC_MASTER_LICENSE_FILES = LICENSE RUNC_MASTER_DEPENDENCIES = host-go +RUNC_MASTER_GOARCH=amd64 +ifeq ($(BR2_aarch64),y) +RUNC_MASTER_GOARCH=arm64 +endif + RUNC_MASTER_GOPATH = $(@D)/_output RUNC_MASTER_MAKE_ENV = \ - $(GO_TARGET_ENV) \ - CGO_ENABLED=1 \ - GO111MODULE=off \ - GOPATH="$(RUNC_MASTER_GOPATH)" \ - GOBIN="$(RUNC_MASTER_GOPATH)/bin" \ - PATH=$(RUNC_MASTER_GOPATH)/bin:$(BR_PATH) + $(GO_TARGET_ENV) \ + CGO_ENABLED=1 \ + GO111MODULE=off \ + GOPATH="$(RUNC_MASTER_GOPATH)" \ + PATH=$(RUNC_MASTER_GOPATH)/bin:$(BR_PATH) \ + GOARCH=$(RUNC_MASTER_GOARCH) RUNC_MASTER_COMPILE_SRC = $(RUNC_MASTER_GOPATH)/src/github.com/opencontainers/runc @@ -30,16 +35,16 @@ RUNC_MASTER_DEPENDENCIES += libseccomp host-pkgconf endif define RUNC_MASTER_CONFIGURE_CMDS - mkdir -p $(RUNC_MASTER_GOPATH)/src/github.com/opencontainers - ln -s $(@D) $(RUNC_MASTER_GOPATH)/src/github.com/opencontainers/runc + mkdir -p $(RUNC_MASTER_GOPATH)/src/github.com/opencontainers + ln -s $(@D) $(RUNC_MASTER_GOPATH)/src/github.com/opencontainers/runc endef define RUNC_MASTER_BUILD_CMDS - PWD=$(RUNC_MASTER_COMPILE_SRC) $(RUNC_MASTER_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) BUILDTAGS="$(RUNC_MASTER_GOTAGS)" COMMIT_NO=$(RUNC_MASTER_VERSION) COMMIT=$(RUNC_MASTER_VERSION) PREFIX=/usr + PWD=$(RUNC_MASTER_COMPILE_SRC) $(RUNC_MASTER_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) BUILDTAGS="$(RUNC_MASTER_GOTAGS)" COMMIT_NO=$(RUNC_MASTER_COMMIT) COMMIT=$(RUNC_MASTER_COMMIT) PREFIX=/usr endef define RUNC_MASTER_INSTALL_TARGET_CMDS - $(INSTALL) -D -m 0755 $(@D)/runc $(TARGET_DIR)/usr/bin/runc + $(INSTALL) -D -m 0755 $(@D)/runc $(TARGET_DIR)/usr/bin/runc endef $(eval $(generic-package)) diff --git a/deploy/iso/minikube-iso/package/sysdig/0001-libsinsp-Apply-PATCH_COMMAND-to-fix-lua-types-and-fu.patch b/deploy/iso/minikube-iso/package/sysdig/0001-libsinsp-Apply-PATCH_COMMAND-to-fix-lua-types-and-fu.patch new file mode 100644 index 000000000000..78732102813b --- /dev/null +++ b/deploy/iso/minikube-iso/package/sysdig/0001-libsinsp-Apply-PATCH_COMMAND-to-fix-lua-types-and-fu.patch @@ -0,0 +1,82 @@ +From cc8bccc3ebb90103900a7f0f2b085ddb723b8792 Mon Sep 17 00:00:00 2001 +From: Francis Laniel +Date: Wed, 6 Apr 2022 16:54:37 +0100 +Subject: [PATCH] libsinsp: Apply PATCH_COMMAND to fix lua types and function. + +Buildroot luajit 5.1 seems to not have compatibility between luaL_reg and +luaL_Reg. +So, we apply sysdig CMakeLists.txt PATCH_COMMAND to fix this and lua function +call as well. +Note that, this PATCH_COMMAND was added in sysdig in: +a064440394c9 ("Adding power support to Travis builds (#1566)") + +This patch is also present in kubernetes/minikube in: +f036c279bc59 ("Add patch for compiling sysdig with system luajit") + +Signed-off-by: Francis Laniel +--- + userspace/libsinsp/chisel.cpp | 6 +++--- + userspace/libsinsp/lua_parser.cpp | 2 +- + userspace/libsinsp/lua_parser_api.cpp | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/userspace/libsinsp/chisel.cpp b/userspace/libsinsp/chisel.cpp +index 0a6e3cf8..0c2e255a 100644 +--- a/userspace/libsinsp/chisel.cpp ++++ b/userspace/libsinsp/chisel.cpp +@@ -98,7 +98,7 @@ void lua_stackdump(lua_State *L) + // Lua callbacks + /////////////////////////////////////////////////////////////////////////////// + #ifdef HAS_LUA_CHISELS +-const static struct luaL_reg ll_sysdig [] = ++const static struct luaL_Reg ll_sysdig [] = + { + {"set_filter", &lua_cbacks::set_global_filter}, + {"set_snaplen", &lua_cbacks::set_snaplen}, +@@ -134,7 +134,7 @@ const static struct luaL_reg ll_sysdig [] = + {NULL,NULL} + }; + +-const static struct luaL_reg ll_chisel [] = ++const static struct luaL_Reg ll_chisel [] = + { + {"request_field", &lua_cbacks::request_field}, + {"set_filter", &lua_cbacks::set_filter}, +@@ -146,7 +146,7 @@ const static struct luaL_reg ll_chisel [] = + {NULL,NULL} + }; + +-const static struct luaL_reg ll_evt [] = ++const static struct luaL_Reg ll_evt [] = + { + {"field", &lua_cbacks::field}, + {"get_num", &lua_cbacks::get_num}, +diff --git a/userspace/libsinsp/lua_parser.cpp b/userspace/libsinsp/lua_parser.cpp +index 0e26617d..78810d96 100644 +--- a/userspace/libsinsp/lua_parser.cpp ++++ b/userspace/libsinsp/lua_parser.cpp +@@ -32,7 +32,7 @@ extern "C" { + #include "lauxlib.h" + } + +-const static struct luaL_reg ll_filter [] = ++const static struct luaL_Reg ll_filter [] = + { + {"rel_expr", &lua_parser_cbacks::rel_expr}, + {"bool_op", &lua_parser_cbacks::bool_op}, +diff --git a/userspace/libsinsp/lua_parser_api.cpp b/userspace/libsinsp/lua_parser_api.cpp +index c89e9126..c3d8008a 100644 +--- a/userspace/libsinsp/lua_parser_api.cpp ++++ b/userspace/libsinsp/lua_parser_api.cpp +@@ -266,7 +266,7 @@ int lua_parser_cbacks::rel_expr(lua_State *ls) + string err = "Got non-table as in-expression operand\n"; + throw sinsp_exception("parser API error"); + } +- int n = luaL_getn(ls, 4); /* get size of table */ ++ int n = lua_objlen (ls, 4); /* get size of table */ + for (i=1; i<=n; i++) + { + lua_rawgeti(ls, 4, i); +-- +2.25.1 + diff --git a/deploy/iso/minikube-iso/package/sysdig/Config.in b/deploy/iso/minikube-iso/package/sysdig/Config.in new file mode 100644 index 000000000000..5a7fbb50e05d --- /dev/null +++ b/deploy/iso/minikube-iso/package/sysdig/Config.in @@ -0,0 +1,38 @@ +config BR2_PACKAGE_SYSDIG + bool "sysdig" + depends on BR2_LINUX_KERNEL + depends on BR2_INSTALL_LIBSTDCPP # jsoncpp + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + depends on BR2_TOOLCHAIN_HAS_THREADS # elfutils, jq + depends on !BR2_STATIC_LIBS # elfutils + depends on BR2_USE_WCHAR # elfutils + depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils + depends on BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 + select BR2_PACKAGE_C_ARES + select BR2_PACKAGE_ELFUTILS + select BR2_PACKAGE_GRPC + select BR2_PACKAGE_GTEST + select BR2_PACKAGE_JQ + select BR2_PACKAGE_JSONCPP + select BR2_PACKAGE_LIBB64 + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_PROTOBUF + select BR2_PACKAGE_TBB + select BR2_PACKAGE_ZLIB + help + Sysdig is open source, system-level exploration: + capture system state and activity from a running Linux + instance, then save, filter and analyze. + Think of it as strace + tcpdump + lsof + awesome sauce. + With a little Lua cherry on top. + + https://github.com/draios/sysdig/wiki + +comment "sysdig needs a glibc or uclibc toolchain w/ C++, threads, gcc >= 4.8, dynamic library, a Linux kernel, and luajit or lua 5.1 to be built" + depends on !BR2_LINUX_KERNEL || !BR2_INSTALL_LIBSTDCPP \ + || !BR2_TOOLCHAIN_HAS_THREADS \ + || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || BR2_STATIC_LIBS \ + || !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) \ + || !BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION_5_1 diff --git a/deploy/iso/minikube-iso/package/sysdig/sysdig.hash b/deploy/iso/minikube-iso/package/sysdig/sysdig.hash new file mode 100644 index 000000000000..4bce674f3e06 --- /dev/null +++ b/deploy/iso/minikube-iso/package/sysdig/sysdig.hash @@ -0,0 +1,4 @@ +# sha256 locally computed +sha256 b9d05854493d245a7a7e75f77fc654508f720aab5e5e8a3a932bd8eb54e49bda sysdig-0.27.1.tar.gz +sha256 57d5b713b875eba35546a1408bf3f20c2703904a17d956be115ee55272db4cfa sysdig-0.23.1.tar.gz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/deploy/iso/minikube-iso/package/sysdig/sysdig.mk b/deploy/iso/minikube-iso/package/sysdig/sysdig.mk new file mode 100644 index 000000000000..a37a129b0f3c --- /dev/null +++ b/deploy/iso/minikube-iso/package/sysdig/sysdig.mk @@ -0,0 +1,52 @@ +################################################################################ +# +# sysdig +# +################################################################################ + +SYSDIG_VERSION = 0.27.1 +SYSDIG_SITE = $(call github,draios,sysdig,$(SYSDIG_VERSION)) +SYSDIG_LICENSE = GPL-2.0 +SYSDIG_LICENSE_FILES = COPYING +SYSDIG_CPE_ID_VENDOR = sysdig +SYSDIG_CONF_OPTS = -DENABLE_DKMS=OFF -DUSE_BUNDLED_DEPS=OFF +SYSDIG_SUPPORTS_IN_SOURCE_BUILD = NO + +SYSDIG_DEPENDENCIES = \ + c-ares \ + elfutils \ + gtest \ + grpc \ + jq \ + jsoncpp \ + libb64 \ + libcurl \ + luainterpreter \ + ncurses \ + openssl \ + protobuf \ + tbb \ + zlib + +# sysdig creates the module Makefile from a template, which contains a +# single place-holder, KBUILD_FLAGS, which is only replaced with two +# things: +# - debug flags, which we don't care about here, +# - 'sysdig-feature' flags, which are never set, so always empty +# So, just replace the place-holder with the only meaningful value: nothing. +define SYSDIG_MODULE_GEN_MAKEFILE + $(INSTALL) -m 0644 $(@D)/driver/Makefile.in $(@D)/driver/Makefile + $(SED) 's/@KBUILD_FLAGS@//;' $(@D)/driver/Makefile + $(SED) 's/@PROBE_NAME@/sysdig-probe/;' $(@D)/driver/Makefile +endef +SYSDIG_POST_PATCH_HOOKS += SYSDIG_MODULE_GEN_MAKEFILE + +# Don't build the driver as part of the 'standard' procedure, we'll +# build it on our own with the kernel-module infra. +SYSDIG_CONF_OPTS += -DBUILD_DRIVER=OFF + +SYSDIG_MODULE_SUBDIRS = driver +SYSDIG_MODULE_MAKE_OPTS = KERNELDIR=$(LINUX_DIR) + +$(eval $(kernel-module)) +$(eval $(cmake-package)) diff --git a/deploy/iso/minikube-iso/package/vbox-guest/Config.in b/deploy/iso/minikube-iso/package/vbox-guest/Config.in deleted file mode 100644 index 9b0a6ca2a7d1..000000000000 --- a/deploy/iso/minikube-iso/package/vbox-guest/Config.in +++ /dev/null @@ -1,5 +0,0 @@ -config BR2_PACKAGE_VBOX_GUEST - bool "vbox-guest" - default y - depends on BR2_LINUX_KERNEL - diff --git a/deploy/iso/minikube-iso/package/vbox-guest/vbox-guest.hash b/deploy/iso/minikube-iso/package/vbox-guest/vbox-guest.hash deleted file mode 100644 index 8d7c01127bfb..000000000000 --- a/deploy/iso/minikube-iso/package/vbox-guest/vbox-guest.hash +++ /dev/null @@ -1,9 +0,0 @@ -# From http://download.virtualbox.org/virtualbox/5.1.30/SHA256SUMS -sha256 96cab2296fb014ce0a16b7b9603b52208b9403c10c1524b44201d3c274e8a821 VirtualBox-5.1.38.tar.bz2 -sha256 0e7ee2c78ebf7cd0d3a933d51148bef04a64f64fb27ccf70d59cddf9ca1e517a VBoxGuestAdditions_5.1.38.iso -# From http://download.virtualbox.org/virtualbox/5.2.32/SHA256SUMS -sha256 ff6390e50cb03718cd3f5779627910999c12279b465e340c80d7175778a33958 VirtualBox-5.2.32.tar.bz2 -sha256 4311c7408a3410e6a33264a9062347d9eec04f58339a49f0a60488c0cabc8996 VBoxGuestAdditions_5.2.32.iso -# From http://download.virtualbox.org/virtualbox/5.2.42/SHA256SUMS -sha256 e5bee2e34f349aac115ee93974febfe3213ad5e94045fa36b9f04b5f8caa3720 VirtualBox-5.2.42.tar.bz2 -sha256 ff784417295e48e3cee80a596faf05e3b0976e1b94d3b88427939912b0c1fc45 VBoxGuestAdditions_5.2.42.iso diff --git a/deploy/iso/minikube-iso/package/vbox-guest/vbox-guest.mk b/deploy/iso/minikube-iso/package/vbox-guest/vbox-guest.mk deleted file mode 100644 index 2b1eeca93f58..000000000000 --- a/deploy/iso/minikube-iso/package/vbox-guest/vbox-guest.mk +++ /dev/null @@ -1,67 +0,0 @@ -################################################################################ -# -# VirtualBox Linux Guest Drivers -# -################################################################################ - -VBOX_GUEST_VERSION = 5.2.42 -VBOX_GUEST_SITE = http://download.virtualbox.org/virtualbox/$(VBOX_GUEST_VERSION) -VBOX_GUEST_LICENSE = GPLv2 -VBOX_GUEST_LICENSE_FILES = COPYING -VBOX_GUEST_SOURCE = VirtualBox-$(VBOX_GUEST_VERSION).tar.bz2 -VBOX_GUEST_EXTRA_DOWNLOADS = http://download.virtualbox.org/virtualbox/${VBOX_GUEST_VERSION}/VBoxGuestAdditions_${VBOX_GUEST_VERSION}.iso - -define VBOX_GUEST_EXPORT_MODULES - ( cd $(@D)/src/VBox/Additions/linux; ./export_modules.sh modules.tar.gz ) - mkdir -p $(@D)/vbox-modules - tar -C $(@D)/vbox-modules -xzf $(@D)/src/VBox/Additions/linux/modules.tar.gz -endef - -VBOX_GUEST_POST_EXTRACT_HOOKS += VBOX_GUEST_EXPORT_MODULES - -VBOX_GUEST_MODULE_SUBDIRS = vbox-modules/ -VBOX_GUEST_MODULE_MAKE_OPTS = KVERSION=$(LINUX_VERSION_PROBED) KERN_DIR=$(LINUX_DIR) - -define VBOX_GUEST_USERS - - -1 vboxsf -1 - - - - - -endef - -define VBOX_GUEST_INSTALL_INIT_SYSTEMD - $(INSTALL) -D -m 644 \ - $(VBOX_GUEST_PKGDIR)/vboxservice.service \ - $(TARGET_DIR)/usr/lib/systemd/system/vboxservice.service - - ln -fs /usr/lib/systemd/system/vboxservice.service \ - $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/vboxservice.service -endef - -define VBOX_GUEST_BUILD_CMDS - 7z x -aoa $(BR2_DL_DIR)/vbox-guest/VBoxGuestAdditions_${VBOX_GUEST_VERSION}.iso -ir'!VBoxLinuxAdditions.run' -o"$(@D)" - sh $(@D)/VBoxLinuxAdditions.run --noexec --target $(@D) - tar --overwrite -C $(@D) -xjf $(@D)/VBoxGuestAdditions-amd64.tar.bz2 sbin/VBoxService - tar --overwrite -C $(@D) -xjf $(@D)/VBoxGuestAdditions-amd64.tar.bz2 bin/VBoxControl - - $(TARGET_CC) -Wall -O2 -D_GNU_SOURCE -DIN_RING3 \ - -I$(@D)/vbox-modules/vboxsf/include \ - -I$(@D)/vbox-modules/vboxsf \ - -o $(@D)/vbox-modules/mount.vboxsf \ - $(@D)/src/VBox/Additions/linux/sharedfolders/vbsfmount.c \ - $(@D)/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c -endef - -define VBOX_GUEST_INSTALL_TARGET_CMDS - $(INSTALL) -Dm755 \ - $(@D)/vbox-modules/mount.vboxsf \ - $(TARGET_DIR)/sbin - - $(INSTALL) -Dm755 \ - $(@D)/sbin/VBoxService \ - $(TARGET_DIR)/sbin - - $(INSTALL) -Dm755 \ - $(@D)/bin/VBoxControl \ - $(TARGET_DIR)/bin -endef - -$(eval $(kernel-module)) -$(eval $(generic-package)) diff --git a/deploy/kicbase/02-crio.conf b/deploy/kicbase/02-crio.conf new file mode 100644 index 000000000000..cfeb6ed70b9b --- /dev/null +++ b/deploy/kicbase/02-crio.conf @@ -0,0 +1,8 @@ +[crio.image] +# pause_image = "" + +[crio.network] +# cni_default_network = "" + +[crio.runtime] +# cgroup_manager = "" diff --git a/deploy/kicbase/Dockerfile b/deploy/kicbase/Dockerfile index 714c6ce23bde..822f6fddcec7 100644 --- a/deploy/kicbase/Dockerfile +++ b/deploy/kicbase/Dockerfile @@ -18,25 +18,51 @@ # https://systemd.io/CONTAINER_INTERFACE/ -# multi-tage docker build so we can build auto-pause for arm64 -FROM golang:1.16 +# this ARG needs to be global to use it in `FROM` & is updated for new versions of debian:bookworm-slim-* +ARG KICBASE_IMAGE="debian:bookworm-20251208-slim" +# multi-stage docker build so we can build auto-pause for arm64 +FROM golang:1.25.5 AS auto-pause WORKDIR /src -# becaue auto-pause binary depends on minikube's code we need to pass the whole source code as the context -ADD . . -RUN cd ./cmd/auto-pause/ && go build +# auto-pause depends on core minikube code so we need to pass the whole source code as the context +# copy in the minimal amount of source code possible +COPY pkg/ ./pkg +COPY cmd/ ./cmd +COPY deploy/addons ./deploy/addons +COPY translations/ ./translations +COPY third_party/ ./third_party +COPY go.mod go.sum ./ -# start from ubuntu 20.04, this image is reasonably small as a starting point +ARG TARGETARCH +ENV GOARCH=${TARGETARCH} +ARG PREBUILT_AUTO_PAUSE +RUN if [ "$PREBUILT_AUTO_PAUSE" != "true" ]; then cd ./cmd/auto-pause/ && go build -o auto-pause-${TARGETARCH}; fi + +# start from debin 12, this image is reasonably small as a starting point # for a kubernetes node image, it doesn't contain much we don't need -FROM ubuntu:focal-20210401 +FROM ${KICBASE_IMAGE} AS kicbase -ARG BUILDKIT_VERSION="v0.8.2" +ARG BUILDKIT_VERSION="v0.26.3" +ARG CRIO_VERSION="v1.34" +ARG CRICTL_VERSION="v1.34.0" +ARG CRI_DOCKERD_VERSION="v0.4.1" +ARG CRI_DOCKERD_COMMIT="55d6e1a1d6f2ee58949e13a0c66afe7d779ac942" +ARG CNI_PLUGINS_VERSION="v1.4.0" +ARG TARGETARCH +ARG NERDCTL_VERSION="2.2.0" +ARG NERDCTLD_VERSION="0.7.0" # copy in static files (configs, scripts) COPY deploy/kicbase/10-network-security.conf /etc/sysctl.d/10-network-security.conf COPY deploy/kicbase/11-tcp-mtu-probing.conf /etc/sysctl.d/11-tcp-mtu-probing.conf +COPY deploy/kicbase/02-crio.conf /etc/crio/crio.conf.d/02-crio.conf +COPY deploy/kicbase/containerd.toml /etc/containerd/config.toml +COPY deploy/kicbase/containerd_docker_io_hosts.toml /etc/containerd/certs.d/docker.io/hosts.toml COPY deploy/kicbase/clean-install /usr/local/bin/clean-install COPY deploy/kicbase/entrypoint /usr/local/bin/entrypoint -COPY --from=0 /src/cmd/auto-pause/auto-pause /bin/auto-pause +COPY deploy/kicbase/CHANGELOG ./CHANGELOG +COPY deploy/kicbase/nerdctld/nerdctld.socket /etc/systemd/system/nerdctld.socket +COPY deploy/kicbase/nerdctld/nerdctld.service /etc/systemd/system/nerdctld.service +COPY --from=auto-pause /src/cmd/auto-pause/auto-pause-${TARGETARCH} /bin/auto-pause # Install dependencies, first from apt, then from release tarballs. # NOTE: we use one RUN to minimize layers. @@ -65,7 +91,7 @@ RUN echo "Ensuring scripts are executable ..." \ && chmod +x /usr/local/bin/clean-install /usr/local/bin/entrypoint \ && echo "Installing Packages ..." \ && DEBIAN_FRONTEND=noninteractive clean-install \ - systemd \ + systemd dbus \ conntrack iptables iproute2 ethtool socat util-linux mount ebtables udev kmod \ libseccomp2 pigz \ bash ca-certificates curl rsync \ @@ -89,14 +115,8 @@ RUN echo "Ensuring scripts are executable ..." \ && echo "Modifying /etc/nsswitch.conf to prefer hosts" \ && sed -i /etc/nsswitch.conf -re 's#^(hosts:\s*).*#\1dns files#' -# tell systemd that it is in docker (it will check for the container env) -# https://systemd.io/CONTAINER_INTERFACE/ -ENV container docker -# systemd exits on SIGRTMIN+3, not SIGTERM (which re-executes it) -# https://bugzilla.redhat.com/show_bug.cgi?id=1201657 -STOPSIGNAL SIGRTMIN+3 -# NOTE: this is *only* for documentation, the entrypoint is overridden later -ENTRYPOINT [ "/usr/local/bin/entrypoint", "/sbin/init" ] +# delete this file due to https://github.com/kubernetes/minikube/issues/17700 +RUN rm -f /usr/lib/binfmt.d/python3.10.conf ARG COMMIT_SHA # using base image created by kind https://github.com/kubernetes-sigs/kind/blob/b6bc1125/images/base/Dockerfile @@ -105,51 +125,78 @@ ARG COMMIT_SHA # could be changed to any debian that can run systemd USER root +# Install cri-dockerd from pre-compiled binaries stored in GCS, this is way faster than building from source in multi-arch +RUN echo "Installing cri-dockerd ${CRI_DOCKERD_VERSION}" && \ + curl -L "https://storage.googleapis.com/kicbase-artifacts/cri-dockerd/${CRI_DOCKERD_COMMIT}/${TARGETARCH}/cri-dockerd" -o /usr/bin/cri-dockerd && chmod +x /usr/bin/cri-dockerd && \ + curl -L "https://storage.googleapis.com/kicbase-artifacts/cri-dockerd/${CRI_DOCKERD_COMMIT}/cri-docker.socket" -o /usr/lib/systemd/system/cri-docker.socket && \ + curl -L "https://storage.googleapis.com/kicbase-artifacts/cri-dockerd/${CRI_DOCKERD_COMMIT}/cri-docker.service" -o /usr/lib/systemd/system/cri-docker.service + # install system requirements from the regular distro repositories RUN clean-install \ lz4 \ - gnupg \ + gnupg \ sudo \ openssh-server \ - dnsutils \ - # libglib2.0-0 is required for conmon, which is required for podman - libglib2.0-0 + dnsutils + +# Add support for rsa1 in sshd +# modern debian-based OSs dont support rsa1 by default, so we need to enable it to support older ssh clients +# TODO: remove after https://github.com/kubernetes/minikube/issues/21543 is solved +RUN cat <> /etc/ssh/sshd_config +PubkeyAcceptedAlgorithms +ssh-rsa +HostkeyAlgorithms +ssh-rsa +PubkeyAuthentication yes +PasswordAuthentication no +EOF + +# Install nerdctl and nerdctld +RUN export ARCH=$(dpkg --print-architecture) \ + && if [ "$ARCH" = 'amd64' ] || [ "$ARCH" = 'arm64' ]; then \ + echo "Installing nerdctl and nerdctld ..." && \ + curl -L --retry 5 --output /tmp/nerdctl.tgz "https://github.com/containerd/nerdctl/releases/download/v${NERDCTL_VERSION}/nerdctl-${NERDCTL_VERSION}-linux-$ARCH.tar.gz" &&\ + tar -C /usr/local/bin -xzvf /tmp/nerdctl.tgz &&\ + curl -L --retry 5 --output /tmp/nerdctld.tgz "https://github.com/afbjorklund/nerdctld/releases/download/v${NERDCTLD_VERSION}/nerdctld-${NERDCTLD_VERSION}-linux-$ARCH.tar.gz" &&\ + tar -C /usr/local/bin -xzvf /tmp/nerdctld.tgz &&\ + chmod 777 /usr/local/bin/nerdctl &&\ + chmod 777 /usr/local/bin/nerdctld; \ + fi # install docker -RUN sh -c "echo 'deb https://download.docker.com/linux/ubuntu focal stable' > /etc/apt/sources.list.d/docker.list" && \ - curl -L https://download.docker.com/linux/ubuntu/gpg -o docker.key && \ - apt-key add - < docker.key && \ - clean-install docker-ce docker-ce-cli containerd.io +## ref: https://docs.docker.com/engine/install/debian/#install-using-the-repository +RUN install -m 0755 -d /etc/apt/keyrings \ + && curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc \ + && chmod a+r /etc/apt/keyrings/docker.asc \ + && echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null \ + && clean-install docker-ce docker-ce-cli containerd.io docker-buildx-plugin + +# Set ulimit for containerd to match docker's default-ulimit setting +# This ensures consistent file descriptor limits (1048576) across container runtimes +RUN sed -i '/^\[Service\]/a LimitNOFILE=1048576' /lib/systemd/system/containerd.service # install buildkit RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/armhf/arm-v7/') \ && echo "Installing buildkit ..." \ + && addgroup --system buildkit \ && export BUILDKIT_BASE_URL="https://github.com/moby/buildkit/releases/download/${BUILDKIT_VERSION}" \ && curl -sSL --retry 5 --output /tmp/buildkit.tgz "${BUILDKIT_BASE_URL}/buildkit-${BUILDKIT_VERSION}.linux-${ARCH}.tar.gz" \ && tar -C /usr/local -xzvf /tmp/buildkit.tgz \ && rm -rf /tmp/buildkit.tgz \ + && mkdir -p /usr/local/lib/systemd/system \ + && curl -L --retry 5 --output /usr/local/lib/systemd/system/buildkit.service "https://raw.githubusercontent.com/moby/buildkit/${BUILDKIT_VERSION}/examples/systemd/system/buildkit.service" \ + && curl -L --retry 5 --output /usr/local/lib/systemd/system/buildkit.socket "https://raw.githubusercontent.com/moby/buildkit/${BUILDKIT_VERSION}/examples/systemd/system/buildkit.socket" \ + && mkdir -p /etc/buildkit \ + && echo "[worker.oci]\n enabled = false\n[worker.containerd]\n enabled = true\n namespace = \"k8s.io\"" > /etc/buildkit/buildkitd.toml \ && chmod 755 /usr/local/bin/buildctl \ && chmod 755 /usr/local/bin/buildkit-runc \ && chmod 755 /usr/local/bin/buildkit-qemu-* \ - && chmod 755 /usr/local/bin/buildkitd - -# Install cri-o/podman dependencies: -RUN sh -c "echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list" && \ - curl -LO https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_20.04/Release.key && \ - apt-key add - < Release.key && \ - clean-install containers-common catatonit conmon containernetworking-plugins cri-tools podman-plugins crun - -# install cri-o based on https://github.com/cri-o/cri-o/blob/release-1.20/README.md#installing-cri-o -RUN sh -c "echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/1.20/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:1.20.list" && \ - curl -LO https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/1.20/xUbuntu_20.04/Release.key && \ - apt-key add - < Release.key && \ - clean-install cri-o cri-o-runc + && chmod 755 /usr/local/bin/buildkitd \ + && systemctl enable buildkit.socket # install podman -RUN sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list" && \ - curl -LO https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_20.04/Release.key && \ - apt-key add - < Release.key && \ - clean-install podman && \ +RUN clean-install podman catatonit crun && \ addgroup --system podman && \ mkdir -p /etc/systemd/system/podman.socket.d && \ printf "[Socket]\nSocketMode=0660\nSocketUser=root\nSocketGroup=podman\n" \ @@ -158,6 +205,60 @@ RUN sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/lib echo "d /run/podman 0770 root podman" > /etc/tmpfiles.d/podman.conf && \ systemd-tmpfiles --create + # install crictl +RUN export ARCH=$(dpkg --print-architecture) && \ + case "$ARCH" in \ + amd64) CRICTL_ARCH="amd64" ;; \ + arm64) CRICTL_ARCH="arm64" ;; \ + armhf) CRICTL_ARCH="armhf" ;; \ + ppc64el) CRICTL_ARCH="ppc64le" ;; \ + s390x) CRICTL_ARCH="s390x" ;; \ + *) echo "Unsupported architecture for crictl: $ARCH" && exit 1 ;; \ + esac && \ + if [ "$CRICTL_ARCH" != "armhf" ]; then \ + curl -fsSL --retry 5 --output /tmp/crictl.tgz "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${CRICTL_ARCH}.tar.gz" && \ + tar -C /usr/local/bin -xzvf /tmp/crictl.tgz && \ + rm -f /tmp/crictl.tgz && \ + chmod +x /usr/local/bin/crictl && \ + if [ -f /usr/local/bin/critest ]; then chmod +x /usr/local/bin/critest; fi; \ + else \ + echo "Skipping crictl install for armhf: No asset available in v1.34.0"; \ + fi +# install containernetworking-plugins +RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/armhf/arm/') && \ + curl -LO "https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/cni-plugins-linux-$ARCH-${CNI_PLUGINS_VERSION}.tgz" && \ + mkdir -p /opt/cni/bin && \ + tar -xf "cni-plugins-linux-$ARCH-${CNI_PLUGINS_VERSION}.tgz" -C /opt/cni/bin && \ + rm "cni-plugins-linux-$ARCH-${CNI_PLUGINS_VERSION}.tgz" + +# install cri-o from the OBS repositories +RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/armhf/arm-v7/') && \ + if [ "$ARCH" != "ppc64le" ] && [ "$ARCH" != "arm-v7" ]; then \ + mkdir -p /etc/apt/sources.list.d /etc/apt/trusted.gpg.d && \ + echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_12/ /' \ + > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list && \ + curl -fsSL https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_12/Release.key \ + | gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/devel_kubic_libcontainers_stable.gpg && \ + echo "deb http://download.opensuse.org/repositories/isv:/cri-o:/stable:/${CRIO_VERSION}:/build/deb/ /" \ + > "/etc/apt/sources.list.d/isv:cri-o:stable:${CRIO_VERSION}:build.list" && \ + curl -fsSL "https://download.opensuse.org/repositories/isv:cri-o:stable:${CRIO_VERSION}:build/deb/Release.key" \ + | gpg --dearmor --yes -o "/etc/apt/trusted.gpg.d/isv_cri-o_stable_${CRIO_VERSION}_build.gpg" && \ + clean-install cri-o; \ + fi + +# install NVIDIA container toolkit +RUN export ARCH=$(dpkg --print-architecture) && \ + if [ "$ARCH" = 'amd64' ] || [ "$ARCH" = 'arm64' ] || [ "$ARCH" = 'ppc64el' ]; then \ + curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && \ + curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ + sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ + sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list && \ + clean-install nvidia-container-toolkit; fi + +# install version.json +ARG VERSION_JSON +RUN echo "${VERSION_JSON}" > /version.json + # automount service COPY deploy/kicbase/automount/minikube-automount /usr/sbin/minikube-automount COPY deploy/kicbase/automount/minikube-automount.service /usr/lib/systemd/system/minikube-automount.service @@ -169,30 +270,30 @@ COPY deploy/kicbase/scheduled-stop/minikube-scheduled-stop /var/lib/minikube/sch COPY deploy/kicbase/scheduled-stop/minikube-scheduled-stop.service /usr/lib/systemd/system/minikube-scheduled-stop.service RUN chmod +x /var/lib/minikube/scheduled-stop/minikube-scheduled-stop -# disable non-docker runtimes by default -RUN systemctl disable containerd && systemctl disable crio && rm /etc/crictl.yaml +# disable non-docker runtimes by default (since cri-dockerd is default in minikube) +RUN systemctl disable containerd +# disable crio for archs that support it +RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/' | sed 's/armhf/arm-v7/') && \ + if [ "$ARCH" != "ppc64le" ] && [ "$ARCH" != "arm-v7" ]; then systemctl disable crio && rm -f /etc/crictl.yaml; fi +# enable podman socket on archs that support it +RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/') && if [ "$ARCH" != "ppc64le" ]; then systemctl enable podman.socket; fi # enable docker which is default -RUN systemctl enable docker.service && systemctl enable podman.socket -# making SSH work for docker container -# based on https://github.com/rastasheep/ubuntu-sshd/blob/master/18.04/Dockerfile -RUN mkdir /var/run/sshd -RUN echo 'root:root' |chpasswd -RUN sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config -RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config - +RUN systemctl enable docker.service # minikube relies on /etc/hosts for control-plane discovery. This prevents nefarious DNS servers from breaking it. RUN sed -ri 's/dns files/files dns/g' /etc/nsswitch.conf -# metacopy breaks crio on certain OS and isn't necessary for minikube -# https://github.com/kubernetes/minikube/issues/10520 -RUN sed -ri 's/mountopt = "nodev,metacopy=on"/mountopt = "nodev"/g' /etc/containers/storage.conf - EXPOSE 22 # create docker user for minikube ssh. to match VM using "docker" as username -RUN adduser --ingroup docker --disabled-password --gecos '' docker -RUN adduser docker sudo -RUN adduser docker podman -RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers +# Ensure 'docker' group exists; create a 'docker' user with a shell +## ref: https://docs.docker.com/engine/install/linux-postinstall/ +RUN groupadd -f docker \ + && useradd -m -s /bin/bash -g docker -G sudo docker +# Ensure the account is usable for key-only SSH - unlock the account, and disable password +RUN usermod -p '*' docker && passwd -u docker && passwd -d docker +RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/20-passwordless-sudo \ + && chmod 0440 /etc/sudoers.d/20-passwordless-sudo +RUN export ARCH=$(dpkg --print-architecture | sed 's/ppc64el/ppc64le/') && if [ "$ARCH" != "ppc64le" ]; then adduser docker podman; fi +RUN adduser docker buildkit USER docker RUN mkdir /home/docker/.ssh USER root @@ -203,5 +304,18 @@ RUN mkdir -p /kind RUN rm -rf \ /usr/share/doc/* \ /usr/share/man/* \ - /usr/share/local/* + /usr/share/local/* RUN echo "kic! Build: ${COMMIT_SHA} Time :$(date)" > "/kic.txt" + +# squash all layers into one +FROM scratch +COPY --from=kicbase / / +EXPOSE 22 +# tell systemd that it is in docker (it will check for the container env) +# https://systemd.io/CONTAINER_INTERFACE/ +ENV container=docker +# systemd exits on SIGRTMIN+3, not SIGTERM (which re-executes it) +# https://bugzilla.redhat.com/show_bug.cgi?id=1201657 +STOPSIGNAL SIGRTMIN+3 +# NOTE: this is *only* for documentation, the entrypoint is overridden later +ENTRYPOINT [ "/usr/local/bin/entrypoint", "/sbin/init" ] diff --git a/installers/linux/kvm/Dockerfile.amd64 b/deploy/kicbase/build_auto_pause.sh old mode 100644 new mode 100755 similarity index 52% rename from installers/linux/kvm/Dockerfile.amd64 rename to deploy/kicbase/build_auto_pause.sh index 9721824d1657..c7d1daf8843e --- a/installers/linux/kvm/Dockerfile.amd64 +++ b/deploy/kicbase/build_auto_pause.sh @@ -1,4 +1,6 @@ -# Copyright 2019 The Kubernetes Authors All rights reserved. +#!/bin/bash + +# Copyright 2022 The Kubernetes Authors All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,21 +14,21 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM gcr.io/gcp-runtimes/ubuntu_16_0_4 +set -eux -o pipefail -RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - libc6-dev \ - make \ - pkg-config \ - curl \ - libvirt-dev \ - git \ - && rm -rf /var/lib/apt/lists/* +if [ "$#" -ne 1 ]; then + echo "Usage: build_auto_pause.sh " >&2 + exit 1 +fi -ARG GO_VERSION +archlist=$1 +IFS=, read -a archarray <<< "$archlist" -RUN curl -sSL https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz | tar -C /usr/local -xzf - +pushd cmd/auto-pause -ENV GOPATH /go -ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/go/bin +for (( i=0; i < ${#archarray[*]}; i++ )) +do + arch=${archarray[i]#"linux/"} + env GOOS=linux GOARCH=$arch CGO_ENABLED=0 go build -o auto-pause-$arch +done +popd diff --git a/deploy/kicbase/clean-install b/deploy/kicbase/clean-install index 33b3238b7518..84a467d8d710 100755 --- a/deploy/kicbase/clean-install +++ b/deploy/kicbase/clean-install @@ -26,7 +26,7 @@ if [ $# = 0 ]; then fi apt-get update -apt-get install -y --no-install-recommends "$@" +apt-get install -y --no-install-recommends -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" "$@" apt-get clean -y rm -rf \ /var/cache/debconf/* \ diff --git a/deploy/kicbase/containerd.toml b/deploy/kicbase/containerd.toml new file mode 100644 index 000000000000..873cee549d02 --- /dev/null +++ b/deploy/kicbase/containerd.toml @@ -0,0 +1,68 @@ +version = 2 +root = "/var/lib/containerd" +state = "/run/containerd" +oom_score = 0 +# imports + +[grpc] + address = "/run/containerd/containerd.sock" + uid = 0 + gid = 0 + max_recv_message_size = 16777216 + max_send_message_size = 16777216 + +[debug] + address = "" + uid = 0 + gid = 0 + level = "" + +[metrics] + address = "" + grpc_histogram = false + +[cgroup] + path = "" + +[plugins] + [plugins."io.containerd.monitor.v1.cgroups"] + no_prometheus = false + [plugins."io.containerd.grpc.v1.cri"] + stream_server_address = "" + stream_server_port = "10010" + enable_selinux = false + sandbox_image = "registry.k8s.io/pause:3.6" + stats_collect_period = 10 + enable_tls_streaming = false + max_container_log_line_size = 16384 + restrict_oom_score_adj = false + + [plugins."io.containerd.grpc.v1.cri".containerd] + discard_unpacked_layers = true + snapshotter = "overlayfs" + default_runtime_name = "runc" + [plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime] + runtime_type = "" + runtime_engine = "" + runtime_root = "" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = false + + [plugins."io.containerd.grpc.v1.cri".cni] + bin_dir = "/opt/cni/bin" + conf_dir = "/etc/cni/net.d" + conf_template = "" + [plugins."io.containerd.grpc.v1.cri".registry] + config_path = "/etc/containerd/certs.d" + + [plugins."io.containerd.service.v1.diff-service"] + default = ["walking"] + [plugins."io.containerd.gc.v1.scheduler"] + pause_threshold = 0.02 + deletion_threshold = 0 + mutation_threshold = 100 + schedule_delay = "0s" + startup_delay = "100ms" diff --git a/deploy/kicbase/containerd_docker_io_hosts.toml b/deploy/kicbase/containerd_docker_io_hosts.toml new file mode 100644 index 000000000000..00df747eba97 --- /dev/null +++ b/deploy/kicbase/containerd_docker_io_hosts.toml @@ -0,0 +1 @@ +server = "https://registry-1.docker.io" \ No newline at end of file diff --git a/deploy/kicbase/entrypoint b/deploy/kicbase/entrypoint index cc6a9338a054..7b3fcb95a635 100755 --- a/deploy/kicbase/entrypoint +++ b/deploy/kicbase/entrypoint @@ -19,10 +19,121 @@ set -o nounset set -o pipefail set -x +# If /proc/self/uid_map 4294967295 mappings, we are in the initial user namespace, i.e. the host. +# Otherwise we are in a non-initial user namespace. +# https://github.com/opencontainers/runc/blob/v1.0.0-rc92/libcontainer/system/linux.go#L109-L118 +userns="" +if grep -Eqv "0[[:space:]]+0[[:space:]]+4294967295" /proc/self/uid_map; then + userns="1" + echo 'INFO: running in a user namespace (experimental)' +fi + +grep_allow_nomatch() { + # grep exits 0 on match, 1 on no match, 2 on error + grep "$@" || [[ $? == 1 ]] +} + +# regex_escape_ip converts IP address string $1 to a regex-escaped literal +regex_escape_ip(){ + sed -e 's#\.#\\.#g' -e 's#\[#\\[#g' -e 's#\]#\\]#g' <<<"$1" +} + +validate_userns() { + if [[ -z "${userns}" ]]; then + return + fi + + local nofile_hard + nofile_hard="$(ulimit -Hn)" + local nofile_hard_expected="64000" + if [[ "${nofile_hard}" -lt "${nofile_hard_expected}" ]]; then + echo "WARN: UserNS: expected RLIMIT_NOFILE to be at least ${nofile_hard_expected}, got ${nofile_hard}" >&2 + fi + + if [[ -f "/sys/fs/cgroup/cgroup.controllers" ]]; then + for f in cpu memory pids; do + if ! grep -qw $f /sys/fs/cgroup/cgroup.controllers; then + echo "ERROR: UserNS: $f controller needs to be delegated" >&2 + exit 1 + fi + done + fi +} + +overlayfs_preferrable() { + if [[ -z "$userns" ]]; then + # If we are outside userns, we can always assume overlayfs is preferable + return 0 + fi + + # Debian 10 and 11 supports overlayfs in userns with a "permit_mount_in_userns" kernel patch, + # but known to be unstable, so we avoid using it https://github.com/moby/moby/issues/42302 + if [[ -e "/sys/module/overlay/parameters/permit_mounts_in_userns" ]]; then + echo "INFO: UserNS: kernel seems supporting overlayfs with permit_mounts_in_userns, but avoiding due to instability." + return 1 + fi + + # Check overlayfs availability, by attempting to mount it. + # + # Overlayfs inside userns is known to be available for the following environments: + # - Kernel >= 5.11 (but 5.11 and 5.12 have issues on SELinux hosts. Fixed in 5.13.) + # - Ubuntu kernel + # - Debian kernel (but avoided due to instability, see the /sys/module/overlay/... check above) + # - Sysbox + tmp=$(mktemp -d) + mkdir -p "${tmp}/l" "${tmp}/u" "${tmp}/w" "${tmp}/m" + if ! mount -t overlay -o lowerdir="${tmp}/l,upperdir=${tmp}/u,workdir=${tmp}/w" overlay "${tmp}/m"; then + echo "INFO: UserNS: kernel does not seem to support overlayfs." + rm -rf "${tmp}" + return 1 + fi + umount "${tmp}/m" + rm -rf "${tmp}" + + # Detect whether SELinux is Enforcing (or Permitted) by grepping /proc/self/attr/current . + # Note that we cannot use `getenforce` command here because /sys/fs/selinux is typically not mounted for containers. + if grep -q "_t:" "/proc/self/attr/current"; then + # When the kernel is before v5.13 and SELinux is enforced, fuse-overlayfs might be safer, so we print a warning (but not an error). + # https://github.com/torvalds/linux/commit/7fa2e79a6bb924fa4b2de5766dab31f0f47b5ab6 + echo "WARN: UserNS: SELinux might be Enforcing. If you see an error related to overlayfs, try setting \`KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER=fuse-overlayfs\` ." >&2 + fi + return 0 +} + configure_containerd() { - # we need to switch to the 'native' snapshotter on zfs - if [[ "$(stat -f -c %T /kind)" == 'zfs' ]]; then - sed -i 's/snapshotter = "overlayfs"/snapshotter = "native"/' /etc/containerd/config.toml + local snapshotter=${KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER:-} + + # handle userns (rootless) + if [[ -n "$userns" ]]; then + # enable restrict_oom_score_adj + sed -i 's/restrict_oom_score_adj = false/restrict_oom_score_adj = true/' /etc/containerd/config.toml + # Use fuse-overlayfs if overlayfs is not preferable: https://github.com/kubernetes-sigs/kind/issues/2275 + if [[ -z "$snapshotter" ]] && ! overlayfs_preferrable; then + snapshotter="fuse-overlayfs" + fi + fi + + # if we have not already overridden the snapshotter, attempt to auto select + if [[ -z "$snapshotter" ]]; then + # we need to switch to 'native' or 'fuse-overlayfs' on zfs + container_filesystem="$(stat -f -c %T /kind)" + if [[ "$container_filesystem" == 'zfs' ]]; then + # we do not use the ZFS snapshotter because of skew issues vs the host + snapshotter="native" + # fuse likely implies fuse-overlayfs, we should switch to fuse-overlayfs (or native) + # elif [[ "$container_filesystem" == 'fuseblk' ]]; then skipping temporarily: https://github.com/kubernetes/minikube/issues/15191 + # snapshotter="fuse-overlayfs" + fi + fi + + # if we've overridden or auto-selected the snapshotter vs the default, update containerd + if [[ -n "$snapshotter" ]]; then + echo "INFO: changing snapshotter from \"overlayfs\" to \"$snapshotter\"" + sed -i "s/snapshotter = \"overlayfs\"/snapshotter = \"$snapshotter\"/" /etc/containerd/config.toml + if [[ "$snapshotter" = "fuse-overlayfs" ]]; then + echo 'INFO: enabling containerd-fuse-overlayfs service' + systemctl enable containerd-fuse-overlayfs + fi fi } @@ -59,7 +170,7 @@ update-alternatives() { } fix_mount() { - echo 'INFO: ensuring we can execute mount/umount even with userns-remap' + echo 'INFO: ensuring we can execute mount/umount even with userns-remap' # necessary only when userns-remap is enabled on the host, but harmless # The binary /bin/mount should be owned by root and have the setuid bit chown root:root "$(which mount)" "$(which umount)" @@ -78,7 +189,15 @@ fix_mount() { # https://systemd.io/CONTAINER_INTERFACE/ # however, we need other things from `docker run --privileged` ... # and this flag also happens to make /sys rw, amongst other things - mount -o remount,ro /sys + # + # This step is ignored when running inside UserNS, because it fails with EACCES. + if ! mount -o remount,ro /sys; then + if [[ -n "$userns" ]]; then + echo 'INFO: UserNS: ignoring mount fail' >&2 + else + exit 1 + fi + fi echo 'INFO: making mounts shared' >&2 # for mount propagation @@ -126,20 +245,55 @@ fix_cgroup() { return fi echo 'INFO: detected cgroup v1' - echo 'INFO: fix cgroup mounts for all subsystems' + # We're looking for the cgroup-path for the cpu controller for the + # current process. this tells us what cgroup-path the container is in. + local current_cgroup + current_cgroup=$(grep -E '^[^:]*:([^:]*,)?cpu(,[^,:]*)?:.*' /proc/self/cgroup | cut -d: -f3) + if [ "$current_cgroup" = "/" ]; then + echo "INFO: cgroupns detected, no need to fix cgroups" + return + fi + + # NOTE The rest of this function deals with the unfortunate situation of + # cgroup v1 with no cgroupns enabled. One fine day every user will have + # cgroupns enabled (or switch or cgroup v2 which has it enabled by default). + # Once that happens, this function can be removed completely. + + echo 'WARN: cgroupns not enabled! Please use cgroup v2, or cgroup v1 with cgroupns enabled.' + # See: https://d2iq.com/blog/running-kind-inside-a-kubernetes-cluster-for-continuous-integration # Capture initial state before modifying # - # Basically we're looking for the cgroup-path for the cpu controller for the - # current process. this tells us what cgroup-path the container is in. - # Then we collect the subsystems that are active on this path. - # We assume the cpu controller is in use on all node containers. + # Then we collect the subsystems that are active on our current process. + # We assume the cpu controller is in use on all node containers, + # and other controllers use the same sub-path. # # See: https://man7.org/linux/man-pages/man7/cgroups.7.html - local current_cgroup - current_cgroup=$(grep -E '^[^:]*:([^:]*,)?cpu(,[^,:]*)?:.*' /proc/self/cgroup | cut -d: -f3) + echo 'INFO: fix cgroup mounts for all subsystems' local cgroup_subsystems - cgroup_subsystems=$(findmnt -lun -o source,target -t cgroup | grep "${current_cgroup}" | awk '{print $2}') + cgroup_subsystems=$(findmnt -lun -o source,target -t cgroup | grep -F "${current_cgroup}" | awk '{print $2}') + # Unmount the cgroup subsystems that are not known to runtime used to + # run the container we are in. Those subsystems are not properly scoped + # (i.e. the root cgroup is exposed, rather than something like docker/xxxx). + # In case a runtime (which is aware of more subsystems -- such as rdma, + # misc, or unified) is used inside the container, it may create cgroups for + # these subsystems, and as they are not scoped, they will leak to the host + # and thus will become non-removable. + # + # See https://github.com/kubernetes/kubernetes/issues/109182 + local unsupported_cgroups + unsupported_cgroups=$(findmnt -lun -o source,target -t cgroup | grep_allow_nomatch -v -F "${current_cgroup}" | awk '{print $2}') + if [ -n "$unsupported_cgroups" ]; then + local mnt + echo "$unsupported_cgroups" | + while IFS= read -r mnt; do + echo "INFO: unmounting and removing $mnt" + umount "$mnt" || true + rmdir "$mnt" || true + done + fi + + # For each cgroup subsystem, Docker does a bind mount from the current # cgroup to the root of the cgroup subsystem. For instance: # /sys/fs/cgroup/memory/docker/ -> /sys/fs/cgroup/memory @@ -177,11 +331,19 @@ fix_cgroup() { # "nesting" clusters, unless we instruct it to use a different cgroup root. # We do this, and when doing so we must fixup this alternative root # currently this is hardcoded to be /kubelet + # under systemd cgroup driver, kubelet appends .slice mount --make-rprivate /sys/fs/cgroup echo "${cgroup_subsystems}" | while IFS= read -r subsystem; do - mount_kubelet_cgroup_root "/kubelet" "${subsystem}" + mount_kubelet_cgroup_root /kubelet "${subsystem}" + mount_kubelet_cgroup_root /kubelet.slice "${subsystem}" done + # workaround for hosts not running systemd + # we only do this for kubelet.slice because it's not relevant when not using + # the systemd cgroup driver + if [[ ! "${cgroup_subsystems}" = */sys/fs/cgroup/systemd* ]]; then + mount_kubelet_cgroup_root /kubelet.slice /sys/fs/cgroup/systemd + fi } retryable_fix_cgroup() { @@ -233,47 +395,44 @@ fix_product_uuid() { fi } -fix_kmsg() { - # In environments where /dev/kmsg is not available, the kubelet (1.15+) won't - # start because it cannot open /dev/kmsg when starting the kmsgparser in the - # OOM parser. - # To support those environments, we link /dev/kmsg to /dev/console. - # https://github.com/kubernetes-sigs/kind/issues/662 - if [[ ! -e /dev/kmsg ]]; then - if [[ -e /dev/console ]]; then - echo 'WARN: /dev/kmsg does not exist, symlinking /dev/console' >&2 - ln -s /dev/console /dev/kmsg - else - echo 'WARN: /dev/kmsg does not exist, nor does /dev/console!' >&2 - fi - fi -} - select_iptables() { - # based on: https://github.com/kubernetes/kubernetes/blob/ffe93b3979486feb41a0f85191bdd189cbd56ccc/build/debian-iptables/iptables-wrapper - local mode=nft - num_legacy_lines=$( (iptables-legacy-save || true; ip6tables-legacy-save || true) 2>/dev/null | grep '^-' | wc -l || true) - if [ "${num_legacy_lines}" -ge 10 ]; then + # based on: https://github.com/kubernetes-sigs/iptables-wrappers/blob/97b01f43a8e8db07840fc4b95e833a37c0d36b12/iptables-wrapper-installer.sh + local mode num_legacy_lines num_nft_lines + num_legacy_lines=$( (iptables-legacy-save || true; ip6tables-legacy-save || true) 2>/dev/null | grep -c '^-' || true) + num_nft_lines=$( (timeout 5 sh -c "iptables-nft-save; ip6tables-nft-save" || true) 2>/dev/null | grep -c '^-' || true) + if [ "${num_legacy_lines}" -ge "${num_nft_lines}" ]; then mode=legacy else - num_nft_lines=$( (timeout 5 sh -c "iptables-nft-save; ip6tables-nft-save" || true) 2>/dev/null | grep '^-' | wc -l || true) - if [ "${num_legacy_lines}" -ge "${num_nft_lines}" ]; then - mode=legacy - fi + mode=nft fi - echo "INFO: setting iptables to detected mode: ${mode}" >&2 update-alternatives --set iptables "/usr/sbin/iptables-${mode}" > /dev/null update-alternatives --set ip6tables "/usr/sbin/ip6tables-${mode}" > /dev/null } +fix_certificate() { + local apiserver_crt_file="/etc/kubernetes/pki/apiserver.crt" + local apiserver_key_file="/etc/kubernetes/pki/apiserver.key" + + # Skip if this Node doesn't run kube-apiserver + if [[ ! -f ${apiserver_crt_file} ]] || [[ ! -f ${apiserver_key_file} ]]; then + return + fi + + # Deletes the certificate for kube-apiserver and generates a new one. + # This is necessary because the old one doesn't match the current IP. + echo 'INFO: clearing and regenerating the certificate for serving the Kubernetes API' >&2 + rm -f ${apiserver_crt_file} ${apiserver_key_file} + kubeadm init phase certs apiserver --config /kind/kubeadm.conf +} + enable_network_magic(){ # well-known docker embedded DNS is at 127.0.0.11:53 local docker_embedded_dns_ip='127.0.0.11' # first we need to detect an IP to use for reaching the docker host local docker_host_ip - docker_host_ip="$( (head -n1 <(getent ahostsv4 'host.docker.internal') | cut -d' ' -f1) || true)" + docker_host_ip="$( (head -n1 <(timeout 5 getent ahostsv4 'host.docker.internal') | cut -d' ' -f1) || true)" # if the ip doesn't exist or is a loopback address use the default gateway if [[ -z "${docker_host_ip}" ]] || [[ $docker_host_ip =~ ^127\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then docker_host_ip=$(ip -4 route show default | cut -d' ' -f3) @@ -288,14 +447,41 @@ enable_network_magic(){ -e 's/-A OUTPUT \(.*\) -j DOCKER_OUTPUT/\0\n-A PREROUTING \1 -j DOCKER_OUTPUT/' \ `# switch docker DNS SNAT rules rules to our chosen IP` \ -e "s/--to-source :53/--to-source ${docker_host_ip}:53/g"\ + `# nftables incompatibility between 1.8.8 and 1.8.7 omit the --dport flag on DNAT rules` \ + `# ensure --dport on DNS rules, due to https://github.com/kubernetes-sigs/kind/issues/3054` \ + -e "s/p -j DNAT --to-destination ${docker_embedded_dns_ip}/p --dport 53 -j DNAT --to-destination ${docker_embedded_dns_ip}/g" \ | iptables-restore # now we can ensure that DNS is configured to use our IP cp /etc/resolv.conf /etc/resolv.conf.original - sed -e "s/${docker_embedded_dns_ip}/${docker_host_ip}/g" /etc/resolv.conf.original >/etc/resolv.conf + replaced="$(sed -e "s/${docker_embedded_dns_ip}/${docker_host_ip}/g" /etc/resolv.conf.original)" + if [[ "${KIND_DNS_SEARCH+x}" == "" ]]; then + # No DNS search set, just pass through as is + echo "$replaced" >/etc/resolv.conf + elif [[ -z "$KIND_DNS_SEARCH" ]]; then + # Empty search - remove all current search clauses + echo "$replaced" | grep -v "^search" >/etc/resolv.conf + else + # Search set - remove all current search clauses, and add the configured search + { + echo "search $KIND_DNS_SEARCH"; + echo "$replaced" | grep -v "^search"; + } >/etc/resolv.conf + fi + local files_to_update=( + /etc/kubernetes/manifests/etcd.yaml + /etc/kubernetes/manifests/kube-apiserver.yaml + /etc/kubernetes/manifests/kube-controller-manager.yaml + /etc/kubernetes/manifests/kube-scheduler.yaml + /etc/kubernetes/controller-manager.conf + /etc/kubernetes/scheduler.conf + /kind/kubeadm.conf + /var/lib/kubelet/kubeadm-flags.env + ) + local should_fix_certificate=false # fixup IPs in manifests ... - curr_ipv4="$( (head -n1 <(getent ahostsv4 "$(hostname)") | cut -d' ' -f1) || true)" + curr_ipv4="$( (head -n1 <(timeout 5 getent ahostsv4 "$(hostname)") | cut -d' ' -f1) || true)" echo "INFO: Detected IPv4 address: ${curr_ipv4}" >&2 if [ -f /kind/old-ipv4 ]; then old_ipv4=$(cat /kind/old-ipv4) @@ -305,17 +491,23 @@ enable_network_magic(){ echo "ERROR: Have an old IPv4 address but no current IPv4 address (!)" >&2 exit 1 fi - # kubernetes manifests are only present on control-plane nodes - sed -i "s#${old_ipv4}#${curr_ipv4}#" /etc/kubernetes/manifests/*.yaml || true - # this is no longer required with autodiscovery - sed -i "s#${old_ipv4}#${curr_ipv4}#" /var/lib/kubelet/kubeadm-flags.env || true + if [[ "${old_ipv4}" != "${curr_ipv4}" ]]; then + should_fix_certificate=true + sed_ipv4_command="s#\b$(regex_escape_ip "${old_ipv4}")\b#${curr_ipv4}#g" + for f in "${files_to_update[@]}"; do + # kubernetes manifests are only present on control-plane nodes + if [[ -f "$f" ]]; then + sed -i "${sed_ipv4_command}" "$f" + fi + done + fi fi if [[ -n $curr_ipv4 ]]; then echo -n "${curr_ipv4}" >/kind/old-ipv4 fi # do IPv6 - curr_ipv6="$( (head -n1 <(getent ahostsv6 "$(hostname)") | cut -d' ' -f1) || true)" + curr_ipv6="$( (head -n1 <(timeout 5 getent ahostsv6 "$(hostname)") | cut -d' ' -f1) || true)" echo "INFO: Detected IPv6 address: ${curr_ipv6}" >&2 if [ -f /kind/old-ipv6 ]; then old_ipv6=$(cat /kind/old-ipv6) @@ -324,21 +516,33 @@ enable_network_magic(){ if [[ -z $curr_ipv6 ]]; then echo "ERROR: Have an old IPv6 address but no current IPv6 address (!)" >&2 fi - # kubernetes manifests are only present on control-plane nodes - sed -i "s#${old_ipv6}#${curr_ipv6}#" /etc/kubernetes/manifests/*.yaml || true - # this is no longer required with autodiscovery - sed -i "s#${old_ipv6}#${curr_ipv6}#" /var/lib/kubelet/kubeadm-flags.env || true + if [[ "${old_ipv6}" != "${curr_ipv6}" ]]; then + should_fix_certificate=true + sed_ipv6_command="s#\b$(regex_escape_ip "${old_ipv6}")\b#${curr_ipv6}#g" + for f in "${files_to_update[@]}"; do + # kubernetes manifests are only present on control-plane nodes + if [[ -f "$f" ]]; then + sed -i "${sed_ipv6_command}" "$f" + fi + done + fi fi if [[ -n $curr_ipv6 ]]; then echo -n "${curr_ipv6}" >/kind/old-ipv6 fi + + if $should_fix_certificate; then + fix_certificate + fi } +# validate state +validate_userns + # run pre-init fixups # NOTE: it's important that we do configure* first in this order to avoid races configure_containerd configure_proxy -fix_kmsg fix_mount retryable_fix_cgroup fix_machine_id diff --git a/deploy/kicbase/nerdctld/nerdctld.service b/deploy/kicbase/nerdctld/nerdctld.service new file mode 100644 index 000000000000..16781e740400 --- /dev/null +++ b/deploy/kicbase/nerdctld/nerdctld.service @@ -0,0 +1,11 @@ +[Unit] +Description=nerdctld +Requires=nerdctld.socket containerd.service +After=nerdctld.socket containerd.service + +[Service] +Type=notify +Environment=CONTAINERD_NAMESPACE=k8s.io +ExecStart=nerdctld --addr fd:// +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/deploy/kicbase/nerdctld/nerdctld.socket b/deploy/kicbase/nerdctld/nerdctld.socket new file mode 100644 index 000000000000..52d5772038ac --- /dev/null +++ b/deploy/kicbase/nerdctld/nerdctld.socket @@ -0,0 +1,9 @@ +[Unit] +Description=nerdctld + +[Socket] +ListenStream=/var/run/nerdctld.sock +SocketMode=0666 + +[Install] +WantedBy=sockets.target \ No newline at end of file diff --git a/deploy/minikube/release_sanity_test.go b/deploy/minikube/release_sanity_test.go index 9b55312c3673..db21761a6f4c 100644 --- a/deploy/minikube/release_sanity_test.go +++ b/deploy/minikube/release_sanity_test.go @@ -20,8 +20,7 @@ import ( "crypto/sha256" "encoding/hex" "fmt" - "io/ioutil" - "runtime" + "io" "testing" retryablehttp "github.com/hashicorp/go-retryablehttp" @@ -36,7 +35,7 @@ func getSHAFromURL(url string) (string, error) { return "", err } defer r.Body.Close() - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { return "", err } @@ -46,40 +45,86 @@ func getSHAFromURL(url string) (string, error) { } // TestReleasesJSON checks if all *GA* releases -// enlisted in https://storage.googleapis.com/minikube/releases.json +// +// enlisted in https://storage.googleapis.com/minikube/releases-v2.json // are available to download and have correct hashsum func TestReleasesJSON(t *testing.T) { releases, err := notify.AllVersionsFromURL(notify.GithubMinikubeReleasesURL) if err != nil { t.Fatalf("Error getting releases.json: %v", err) } - checkReleases(t, releases) + checkReleasesV2(t, releases) } // TestBetaReleasesJSON checks if all *BETA* releases -// enlisted in https://storage.googleapis.com/minikube/releases-beta.json +// +// enlisted in https://storage.googleapis.com/minikube/releases-beta-v2.json // are available to download and have correct hashsum func TestBetaReleasesJSON(t *testing.T) { releases, err := notify.AllVersionsFromURL(notify.GithubMinikubeBetaReleasesURL) if err != nil { t.Fatalf("Error getting releases-bets.json: %v", err) } - checkReleases(t, releases) + checkReleasesV2(t, releases) } -func checkReleases(t *testing.T, rs notify.Releases) { - for _, r := range rs { +func checkReleasesV1(t *testing.T, r notify.Release) { + checksums := map[string]string{ + "darwin": r.Checksums.Darwin, + "linux": r.Checksums.Linux, + "windows": r.Checksums.Windows, + } + for platform, sha := range checksums { + fmt.Printf("Checking SHA for %s.\n", platform) + actualSha, err := getSHAFromURL(util.GetBinaryDownloadURL(r.Name, platform, "amd64")) + if err != nil { + t.Errorf("Error calculating SHA for %s-%s. Error: %v", r.Name, platform, err) + continue + } + if actualSha != sha { + t.Errorf("ERROR: SHA does not match for version %s, platform %s. Expected %s, got %s.", r.Name, platform, sha, actualSha) + continue + } + } +} + +func getSHAMap(r notify.Release) map[string]map[string]string { + c := r.Checksums + return map[string]map[string]string{ + "darwin": { + "amd64": c.AMD64.Darwin, + "arm64": c.ARM64.Darwin, + }, + "linux": { + "amd64": c.AMD64.Linux, + "arm": c.ARM.Linux, + "arm64": c.ARM64.Linux, + "ppc64le": c.PPC64LE.Linux, + "s390x": c.S390X.Linux, + }, + "windows": { + "amd64": c.AMD64.Windows, + }, + } +} + +func checkReleasesV2(t *testing.T, rs notify.Releases) { + for _, r := range rs.Releases { fmt.Printf("Checking release: %s\n", r.Name) - for platform, sha := range r.Checksums { - fmt.Printf("Checking SHA for %s.\n", platform) - actualSha, err := getSHAFromURL(util.GetBinaryDownloadURL(r.Name, platform, runtime.GOARCH)) - if err != nil { - t.Errorf("Error calculating SHA for %s-%s. Error: %v", r.Name, platform, err) - continue - } - if actualSha != sha { - t.Errorf("ERROR: SHA does not match for version %s, platform %s. Expected %s, got %s.", r.Name, platform, sha, actualSha) - continue + checkReleasesV1(t, r) + release := getSHAMap(r) + for os, archs := range release { + for arch, sha := range archs { + fmt.Printf("Checking SHA for %s-%s.\n", os, arch) + actualSha, err := getSHAFromURL(util.GetBinaryDownloadURL(r.Name, os, arch)) + if err != nil { + t.Errorf("Error calculating SHA for %s-%s-%s. Error: %v", r.Name, os, arch, err) + continue + } + if actualSha != sha { + t.Errorf("ERROR: SHA does not match for version %s, os %s, arch %s. Expected %s, got %s.", r.Name, os, arch, sha, actualSha) + continue + } } } } diff --git a/deploy/minikube/releases-beta-v2.json b/deploy/minikube/releases-beta-v2.json new file mode 100644 index 000000000000..4a31231d6080 --- /dev/null +++ b/deploy/minikube/releases-beta-v2.json @@ -0,0 +1,138 @@ +[ + { + "checksums": { + "amd64": { + "darwin": "ba00e508d6694f8e792bf5f238f5609407f1862f4fd8c0e08d1de9319b7131d5", + "linux": "e1c32fb33b4fe35f719b52309f8d981392ad7672f9fef3307d188f004aee5a2d", + "windows": "74fbadfb00a7a1ecfa2a24ea2ee77997a41a6cb61e797b6c62a1d28558c61260" + }, + "arm": { + "linux": "7724724767ba1f144605d4289c098e5fcd4fcc55be0876d77591d05f43f22876" + }, + "arm64": { + "darwin": "7a672fa0a266d0c649d114b2135ee6222d8366bc0ac87e2fafb4c714e20b26a3", + "linux": "fa09cb8e228711e557a0f933e819c2cea98bc96749a4c77635a341d0ed530163" + }, + "ppc64le": { + "linux": "6f013e03419d8c5149e1998a1f492e1693d780e883aeb37325f0cc42854cccd5" + }, + "s390x": { + "linux": "1ec274865030a0b13d191d41e53c66be3f047a34e30c8fa637e74aa7cff31c71" + }, + "darwin": "ba00e508d6694f8e792bf5f238f5609407f1862f4fd8c0e08d1de9319b7131d5", + "linux": "e1c32fb33b4fe35f719b52309f8d981392ad7672f9fef3307d188f004aee5a2d", + "windows": "74fbadfb00a7a1ecfa2a24ea2ee77997a41a6cb61e797b6c62a1d28558c61260" + }, + "name": "v1.33.0-beta.0" + }, + { + "checksums": { + "amd64": { + "darwin": "964b216dc4156b87cc570ee8f8ee5d0a90815fd100b11dcff6884fee2a945101", + "linux": "820ead833eab8b3a589846df7543ad1104d3f7149b19c81d641a918d8232e025", + "windows": "dbe833b8a9f25c9f3bcc4c71109ecae146d3d66ea475ced8d2794de0c101ceab" + }, + "arm": { + "linux": "f8655675c5cfad1b7186273c33c6acf2edbce98fbb3660d9d2ade9efc3ed8b82" + }, + "arm64": { + "darwin": "3d9f292645230e335149f7fde2168b420489456eeae101bffbecbb27b674b1dc", + "linux": "850cc265a10fa2611d954bae95e39462430c2a7f8ace52e793e166e5d7a873b1" + }, + "ppc64le": { + "linux": "9e2d6f5aaaa3338b7e2dc38b1b07af323f2d6c07ea41dcfb494fd1045fc6481b" + }, + "s390x": { + "linux": "d95cb3b0cf64b97aa1ea2ebed78baafcc75658e6ddf41a1efb48245e88f98ead" + }, + "darwin": "964b216dc4156b87cc570ee8f8ee5d0a90815fd100b11dcff6884fee2a945101", + "linux": "820ead833eab8b3a589846df7543ad1104d3f7149b19c81d641a918d8232e025", + "windows": "dbe833b8a9f25c9f3bcc4c71109ecae146d3d66ea475ced8d2794de0c101ceab" + }, + "name": "v1.32.0-beta.0" + }, + { + "checksums": { + "amd64": { + "darwin": "a1cbd7847462f6c693e6df13033036ea2401ac4c9cac3186e0c494022021defa", + "linux": "8dc0f14a1c6db1b009128ad1a7fab28a49c29dd46f8d90eb1429dacda8e8d948", + "windows": "a327ccc5009ba45b7c2f668af110c9b414ae847c23e4a38b812ef69de9e396fb" + }, + "arm": { + "linux": "19c9b82491ff02cf1844ae2ea705d8970882d1f40d96ce0777f7084cb7aaa7ac" + }, + "arm64": { + "darwin": "ab973bb05305d725c194c358f723504f4a2891a035482fc352f2cfbc3654a526", + "linux": "8ef60a1369080fe1b12831b307dfb7b87e2b6f100c47226468f6eb0b84ea82aa" + }, + "ppc64le": { + "linux": "2018960bf1918b4d80ef63b236d9c107f5747799432c45a10c1b262e487c2203" + }, + "s390x": { + "linux": "4325510e5dd9955c13a3ce9fd273745dd55bd9ab6910c6667b5feb0f912ce28b" + }, + "darwin": "a1cbd7847462f6c693e6df13033036ea2401ac4c9cac3186e0c494022021defa", + "linux": "8dc0f14a1c6db1b009128ad1a7fab28a49c29dd46f8d90eb1429dacda8e8d948", + "windows": "a327ccc5009ba45b7c2f668af110c9b414ae847c23e4a38b812ef69de9e396fb" + }, + "name": "v1.26.0-beta.1" + }, + { + "checksums": { + "amd64": { + "darwin": "96a8cbb6fe8e8fd629fd49cd222358ceaee2fbac946f86da9113925d3f8d685b", + "linux": "c4576588f6c746ffcf9d8f768a0ca929b63d15652c230e15163f8ccf212bcae5", + "windows": "09c83da4d1e1712175a199452076e1cdb77662d15725da8fc0704528f15e4d7a" + }, + "arm": { + "linux": "baaaa5bb066faea551158551aad5e9e547fbc05769e59adec54433118a6a5dc6" + }, + "arm64": { + "darwin": "ef7dfe41df9b8ebb5a5f836c9255d355ba9e664cd2e8db6f5377d24b2b2ceb14", + "linux": "27561719a6164079966bba0648ce704140462b46cac9257cb2f98367f674208a" + }, + "ppc64le": { + "linux": "2747ed3a01d5d2c3fa576acc5a1e3aa431cebec0e4f92e498b53ce9e892f6c6c" + }, + "s390x": { + "linux": "dc8f2475e87eafbedfcabad2bb56b283c7151529029dd1bde749736dd56d9eab" + }, + "darwin": "96a8cbb6fe8e8fd629fd49cd222358ceaee2fbac946f86da9113925d3f8d685b", + "linux": "c4576588f6c746ffcf9d8f768a0ca929b63d15652c230e15163f8ccf212bcae5", + "windows": "09c83da4d1e1712175a199452076e1cdb77662d15725da8fc0704528f15e4d7a" + }, + "name": "v1.26.0-beta.0" + }, + { + "checksums": { + "darwin": "f8b0a2d0ca7435e98fff553702ed4977e33b301d0316ee4512d28b485701613e", + "linux": "8cd17a9fb5c73f9cab97754bd6ed725cb2b1fe9faa02f7f75a9cf5566b6f8716", + "windows": "ba87d2ef329db940890f8970afce1a6654814e0e427f91b9d5347496d4e7d1a3" + }, + "name": "v1.24.0-beta.0" + }, + { + "checksums": { + "darwin": "1ec06c37be5c6c79a7255da09ff83490a44d1e8cd2b2f45e4b489edfdeacde94", + "linux": "c9d9ac605a94748379188cced6b832037b8069441744b889214990c4ca3485a5", + "windows": "68fb9c24f0ea55b985856d0cce9fa0c288b8a4d7e13519d6f0790038165d7ef1" + }, + "name": "v1.22.0-beta.0" + }, + { + "checksums": { + "darwin": "69ab001eb4984d09ed731d5ac92afd8310e5c7672c2275b39d7a4c7e2dcfb4c6", + "linux": "41a26190c6774e1f3cc568986d4043431022d5dff4a619f131e9bb49d13e2874", + "windows": "e7d41c8c40e33633d47976047a48600ff23657c824db7e60fe5a4f2d2daeb135" + }, + "name": "v1.21.0-beta.0" + }, + { + "checksums": { + "darwin": "686f8d7c06c93f28543f982ec56a68544ab2ad6c7f70b39ede5174d7bac29651", + "linux": "fe0796852c9ef266597fc93fa4b7a88d2cab9ba7008f0e9f644b633c51d269a1", + "windows": "84a0686c90ab88d04a0aab57b8cadacf9197d3ea6b467f9f807d071efe7fad3c" + }, + "name": "v1.20.0-beta.0" + } +] \ No newline at end of file diff --git a/deploy/minikube/releases-beta.json b/deploy/minikube/releases-beta.json index 98c98af88b6f..faa51c742782 100644 --- a/deploy/minikube/releases-beta.json +++ b/deploy/minikube/releases-beta.json @@ -1,26 +1,66 @@ [ -{ - "name": "v1.22.0-beta.0", - "checksums": { - "darwin": "1ec06c37be5c6c79a7255da09ff83490a44d1e8cd2b2f45e4b489edfdeacde94", - "linux": "c9d9ac605a94748379188cced6b832037b8069441744b889214990c4ca3485a5", - "windows": "68fb9c24f0ea55b985856d0cce9fa0c288b8a4d7e13519d6f0790038165d7ef1" - } - }, - { - "name": "v1.21.0-beta.0", - "checksums": { - "darwin": "69ab001eb4984d09ed731d5ac92afd8310e5c7672c2275b39d7a4c7e2dcfb4c6", - "linux": "41a26190c6774e1f3cc568986d4043431022d5dff4a619f131e9bb49d13e2874", - "windows": "e7d41c8c40e33633d47976047a48600ff23657c824db7e60fe5a4f2d2daeb135" - } - }, - { - "name": "v1.20.0-beta.0", - "checksums": { - "darwin": "686f8d7c06c93f28543f982ec56a68544ab2ad6c7f70b39ede5174d7bac29651", - "linux": "fe0796852c9ef266597fc93fa4b7a88d2cab9ba7008f0e9f644b633c51d269a1", - "windows": "84a0686c90ab88d04a0aab57b8cadacf9197d3ea6b467f9f807d071efe7fad3c" - } - } -] + { + "checksums": { + "darwin": "ba00e508d6694f8e792bf5f238f5609407f1862f4fd8c0e08d1de9319b7131d5", + "linux": "e1c32fb33b4fe35f719b52309f8d981392ad7672f9fef3307d188f004aee5a2d", + "windows": "74fbadfb00a7a1ecfa2a24ea2ee77997a41a6cb61e797b6c62a1d28558c61260" + }, + "name": "v1.33.0-beta.0" + }, + { + "checksums": { + "darwin": "964b216dc4156b87cc570ee8f8ee5d0a90815fd100b11dcff6884fee2a945101", + "linux": "820ead833eab8b3a589846df7543ad1104d3f7149b19c81d641a918d8232e025", + "windows": "dbe833b8a9f25c9f3bcc4c71109ecae146d3d66ea475ced8d2794de0c101ceab" + }, + "name": "v1.32.0-beta.0" + }, + { + "checksums": { + "darwin": "a1cbd7847462f6c693e6df13033036ea2401ac4c9cac3186e0c494022021defa", + "linux": "8dc0f14a1c6db1b009128ad1a7fab28a49c29dd46f8d90eb1429dacda8e8d948", + "windows": "a327ccc5009ba45b7c2f668af110c9b414ae847c23e4a38b812ef69de9e396fb" + }, + "name": "v1.26.0-beta.1" + }, + { + "checksums": { + "darwin": "96a8cbb6fe8e8fd629fd49cd222358ceaee2fbac946f86da9113925d3f8d685b", + "linux": "c4576588f6c746ffcf9d8f768a0ca929b63d15652c230e15163f8ccf212bcae5", + "windows": "09c83da4d1e1712175a199452076e1cdb77662d15725da8fc0704528f15e4d7a" + }, + "name": "v1.26.0-beta.0" + }, + { + "checksums": { + "darwin": "f8b0a2d0ca7435e98fff553702ed4977e33b301d0316ee4512d28b485701613e", + "linux": "8cd17a9fb5c73f9cab97754bd6ed725cb2b1fe9faa02f7f75a9cf5566b6f8716", + "windows": "ba87d2ef329db940890f8970afce1a6654814e0e427f91b9d5347496d4e7d1a3" + }, + "name": "v1.24.0-beta.0" + }, + { + "checksums": { + "darwin": "1ec06c37be5c6c79a7255da09ff83490a44d1e8cd2b2f45e4b489edfdeacde94", + "linux": "c9d9ac605a94748379188cced6b832037b8069441744b889214990c4ca3485a5", + "windows": "68fb9c24f0ea55b985856d0cce9fa0c288b8a4d7e13519d6f0790038165d7ef1" + }, + "name": "v1.22.0-beta.0" + }, + { + "checksums": { + "darwin": "69ab001eb4984d09ed731d5ac92afd8310e5c7672c2275b39d7a4c7e2dcfb4c6", + "linux": "41a26190c6774e1f3cc568986d4043431022d5dff4a619f131e9bb49d13e2874", + "windows": "e7d41c8c40e33633d47976047a48600ff23657c824db7e60fe5a4f2d2daeb135" + }, + "name": "v1.21.0-beta.0" + }, + { + "checksums": { + "darwin": "686f8d7c06c93f28543f982ec56a68544ab2ad6c7f70b39ede5174d7bac29651", + "linux": "fe0796852c9ef266597fc93fa4b7a88d2cab9ba7008f0e9f644b633c51d269a1", + "windows": "84a0686c90ab88d04a0aab57b8cadacf9197d3ea6b467f9f807d071efe7fad3c" + }, + "name": "v1.20.0-beta.0" + } +] \ No newline at end of file diff --git a/deploy/minikube/releases-v2.json b/deploy/minikube/releases-v2.json new file mode 100644 index 000000000000..8c717163af78 --- /dev/null +++ b/deploy/minikube/releases-v2.json @@ -0,0 +1,1280 @@ +[ + { + "checksums": { + "amd64": { + "darwin": "4c32b9e5fed64a311db9a40d6fdcc8fa794bc5bbc546545f4d187e9d416a74cb", + "linux": "d5cf561c71171152ff67d799f041ac0f65c235c87a1e9fc02a6a17b8226214d0", + "windows": "4cd2ecacf064319e0c38768d40ef698d7d9bf3e2fa1b4a9016293034cac04d9c" + }, + "arm": { + "linux": "4cee8e243539e226428182d04181ace14929cf59fd49d7a26a92addbf723575d" + }, + "arm64": { + "darwin": "5e0914c3559f6713295119477a6f5dc29862596effbfc764a61757bb314901d2", + "linux": "32f95860fffbbc825be38d05888542f10d3d580fe4d138f4aad71339b8038fb1" + }, + "ppc64le": { + "linux": "00c73192285d9d5a1935708b4e8e81fb9c3d5b0a5bb12dd07575f9d0673fd86d" + }, + "s390x": { + "linux": "298a482e72ebc1ae457ecd30559367397c0c18c4316aaffb584966b1d1e3e6c9" + }, + "darwin": "4c32b9e5fed64a311db9a40d6fdcc8fa794bc5bbc546545f4d187e9d416a74cb", + "linux": "d5cf561c71171152ff67d799f041ac0f65c235c87a1e9fc02a6a17b8226214d0", + "windows": "4cd2ecacf064319e0c38768d40ef698d7d9bf3e2fa1b4a9016293034cac04d9c" + }, + "name": "v1.37.0" + }, + { + "checksums": { + "amd64": { + "darwin": "a7e3da0db4041b2f845ca37af592424a9cbe34087ac922220b1e3abc4e1976ea", + "linux": "cddeab5ab86ab98e4900afac9d62384dae0941498dfbe712ae0c8868250bc3d7", + "windows": "c7504d574a416a4dd4c948e8bab9c2c2028e12c06d038046d8728c96c7cf4730" + }, + "arm": { + "linux": "6b5de419c665c5b3afa513c4d0a4387e973a1048a335f0ce879410bda3d3315f" + }, + "arm64": { + "darwin": "a9f06bc9634c87800e772354872c6641ef0e02699187d5118225a86b79c99348", + "linux": "6fe9adf0c40c75346a0528e609b3d4119ab192e2506d0401cc89adee051a48ea" + }, + "ppc64le": { + "linux": "db7eb5bfe583b5a1a7caf0c3b74b2733e29f26988970d687ea5fe4d10f60946b" + }, + "s390x": { + "linux": "f2659c51ba66374c34ee4c818227c870044b8ef1db9a5521a5206002b4a69234" + }, + "darwin": "a7e3da0db4041b2f845ca37af592424a9cbe34087ac922220b1e3abc4e1976ea", + "linux": "cddeab5ab86ab98e4900afac9d62384dae0941498dfbe712ae0c8868250bc3d7", + "windows": "c7504d574a416a4dd4c948e8bab9c2c2028e12c06d038046d8728c96c7cf4730" + }, + "name": "v1.36.0" + }, + { + "checksums": { + "amd64": { + "darwin": "ba5ab2789ee0c40cefde30762656f3aa0bf47b15ee0bd808f3d7523cc54d75df", + "linux": "75369b2d64543284232bcf7578b77d42953de213d1f19f745b414556239a3f0d", + "windows": "7b7d2dcb130dc066d6f2d01dd1a54b92a35f8f7b0f849283a8bf4455dff8daea" + }, + "arm": { + "linux": "51f42c10abc5787e31c6109f89a89cd5360aea2140839a9a19b854281a8ab1fc" + }, + "arm64": { + "darwin": "7fb0877ca27db4bf2e637fd4a31131b8afa5947b37f07d0e406382a06e319ca8", + "linux": "75549bfdbc3fe483c060e5aa5b848374426552d7e346df8bd15ad77532243767" + }, + "ppc64le": { + "linux": "7b875692064a6416cc692ae5ff714b5bfa71c17901b2544913f7f2071f6c85c6" + }, + "s390x": { + "linux": "c6dbd7853e33b1f056ef6f752850e91b72116fa83b86b403184e1ec513451d55" + }, + "darwin": "ba5ab2789ee0c40cefde30762656f3aa0bf47b15ee0bd808f3d7523cc54d75df", + "linux": "75369b2d64543284232bcf7578b77d42953de213d1f19f745b414556239a3f0d", + "windows": "7b7d2dcb130dc066d6f2d01dd1a54b92a35f8f7b0f849283a8bf4455dff8daea" + }, + "name": "v1.35.0" + }, + { + "checksums": { + "amd64": { + "darwin": "0f73648ab726c6d7822444536e7a5d7eb4d8b0c193ecfc17771d4811c4efa5c0", + "linux": "c4a625f9b4a4523e74b745b6aac8b0bf45062472be72cd38a23c91ec04d534c9", + "windows": "cb80b30202901c10baf207441bf5c7a18b33e11618a2a474a9403eabdf2de26b" + }, + "arm": { + "linux": "19172329d564e68e6379e90de1a653aa445d7a91e3521ed9b8a3bfbbb257bbae" + }, + "arm64": { + "darwin": "d760e65502017b716dec55c17e2c94c8e7a739d30650ffa698f4f4104a18314c", + "linux": "fbe55f563ac33328320d64c319f635386fe020eedf25cba8ebf3850048deb7ae" + }, + "ppc64le": { + "linux": "e1bd56569a49713eec99f931cb755b4836163321f1744480099387250e12b127" + }, + "s390x": { + "linux": "cca05a534ad7454bb07e6c27fd206988b1ad20b4f194d8d73a6e8165d4a70952" + }, + "darwin": "0f73648ab726c6d7822444536e7a5d7eb4d8b0c193ecfc17771d4811c4efa5c0", + "linux": "c4a625f9b4a4523e74b745b6aac8b0bf45062472be72cd38a23c91ec04d534c9", + "windows": "cb80b30202901c10baf207441bf5c7a18b33e11618a2a474a9403eabdf2de26b" + }, + "name": "v1.34.0" + }, + { + "checksums": { + "amd64": { + "darwin": "6e1c3911c39b8de6b3ca31287f55b4f07ef329cd4b9ed62bf08378c2975580df", + "linux": "386eb267e0b1c1f000f1b7924031557402fffc470432dc23b9081fc6962fd69b", + "windows": "a7e97b490db740eeb80d8ce15ee8db6dc9ea9e07e9adef2ea7ca74bb3e8d32e5" + }, + "arm": { + "linux": "bcf61a6b994cfc675f1dae63c30047163c848148104322fb8633fa38d035ec09" + }, + "arm64": { + "darwin": "7e623ec9b5764681bd91b272d833dddec94527277c342bc458242389dc8a224a", + "linux": "0b6a17d230b4a605002981f1eba2f5aa3f2153361a1ab000c01e7a95830b40ba" + }, + "ppc64le": { + "linux": "308edb467d72439f6e5d9b5824fa091a3cba02e63823b39f15b5e3f6b54cd94d" + }, + "s390x": { + "linux": "e4007394de21dcb7f8913963b44ff01d896ed29eeea3857841457592fb40c693" + }, + "darwin": "6e1c3911c39b8de6b3ca31287f55b4f07ef329cd4b9ed62bf08378c2975580df", + "linux": "386eb267e0b1c1f000f1b7924031557402fffc470432dc23b9081fc6962fd69b", + "windows": "a7e97b490db740eeb80d8ce15ee8db6dc9ea9e07e9adef2ea7ca74bb3e8d32e5" + }, + "name": "v1.33.1" + }, + { + "checksums": { + "amd64": { + "darwin": "3aa579e09014c25a1a8e813f3d003eff450a809a04f229d89cd8ed70de81f791", + "linux": "4bfdc17f0dce678432d5c02c2a681c7a72921cb72aa93ccc00c112070ec5d2bc", + "windows": "966c0121e207faa6d2ead6b4710e29675fee362a5a69f71269ef6a8018b84036" + }, + "arm": { + "linux": "70c1e67533f4866f2f27068a86c6b51341e1de7a130e04ec78eddacdefc57467" + }, + "arm64": { + "darwin": "548994f025ed36f91b9a24ff282674b8534c4745535c0511bbbf3112a603a632", + "linux": "d7afb43f87190331b2aee451eef0bae699c93d0acb7b57404cc6b6d3698033a7" + }, + "ppc64le": { + "linux": "e54b521a962696fd07bc0be494a50430efd8c4723761038bc57b59fc1161f19f" + }, + "s390x": { + "linux": "b20e76e2f3c707e25de9e9acef30329959a30a4dfb3e6a71018179a6f96497ed" + }, + "darwin": "3aa579e09014c25a1a8e813f3d003eff450a809a04f229d89cd8ed70de81f791", + "linux": "4bfdc17f0dce678432d5c02c2a681c7a72921cb72aa93ccc00c112070ec5d2bc", + "windows": "966c0121e207faa6d2ead6b4710e29675fee362a5a69f71269ef6a8018b84036" + }, + "name": "v1.33.0" + }, + { + "checksums": { + "amd64": { + "darwin": "8ca4b2cce6208f102b851d0ea8292c1324e8358b7ac208dd1079e41af558def8", + "linux": "1acbb6e0358264a3acd5e1dc081de8d31c697d5b4309be21cba5587cd59eabb3", + "windows": "d4060da824524df744ba85fa91394cabfab15f110c03b1d8b7f1d309116fed15" + }, + "arm": { + "linux": "fc181cb6f1bcda786001e7f7f46f810e8b430abc7d16bbe257c0526f23f90f00" + }, + "arm64": { + "darwin": "f5bf38603b01cc3eb88f21d5550068fd592486c08c0f3272aee544e0bc2e4e64", + "linux": "77ca98722819e2e9d94925f662f348c3d41c1831c3cd3a77732093d7f509f172" + }, + "ppc64le": { + "linux": "3072cce0952628187511748b4b8fc2080e80327384b30e8c6df465f02c8f35ce" + }, + "s390x": { + "linux": "0eb342fe581afb106b6013401b33429607ab40f57f5e48a15f2b2e04726edc57" + }, + "darwin": "8ca4b2cce6208f102b851d0ea8292c1324e8358b7ac208dd1079e41af558def8", + "linux": "1acbb6e0358264a3acd5e1dc081de8d31c697d5b4309be21cba5587cd59eabb3", + "windows": "d4060da824524df744ba85fa91394cabfab15f110c03b1d8b7f1d309116fed15" + }, + "name": "v1.32.0" + }, + { + "checksums": { + "amd64": { + "darwin": "c655de8bf27557f706f196a08a0afb8730e98c4976207542e05b73c11bcc0b38", + "linux": "88a80c051696adaa1a2a0c6aba5fde18176fd5afa87be10617ecaab9cd3a719b", + "windows": "5754e4b86ee66f111f4460f45730f32592701283ac79e1d9c07b217aab236dae" + }, + "arm": { + "linux": "306fe167b874bde8bdab2cbc223bcd4bed9f389762701973e09ac458a322a3a5" + }, + "arm64": { + "darwin": "c00ca6685e2f7b159d9348d2d20b8dc91884c3341e814155a1cb311c26e4cf94", + "linux": "09f450f753fe15da7e84a955f6b62c05856cef2facf564f8e609445036c8cb22" + }, + "ppc64le": { + "linux": "11f2f9382cb1f1c1f934dff3df9e2038f7b74df32f28641f53f89b3ff95316c3" + }, + "s390x": { + "linux": "b6185c709a9768551c79f9340b1d9ae179804aa0bd9dac6e654aa17e4d0acf73" + }, + "darwin": "c655de8bf27557f706f196a08a0afb8730e98c4976207542e05b73c11bcc0b38", + "linux": "88a80c051696adaa1a2a0c6aba5fde18176fd5afa87be10617ecaab9cd3a719b", + "windows": "5754e4b86ee66f111f4460f45730f32592701283ac79e1d9c07b217aab236dae" + }, + "name": "v1.31.2" + }, + { + "checksums": { + "amd64": { + "darwin": "a465e5b537b63ac8e6624396f490dd79516fd625c1110cbf1f49e7b55c1dfcf6", + "linux": "ebcdfb0a520e9e746360a9dd954a9006ca75770e53fcdae493b6ac9a20026733", + "windows": "a08699d25fede796e6fdc56d8630380bd5864fb291592fc2be24fe881656d064" + }, + "arm": { + "linux": "372414001ac449f6b33d7189b7fad68980169136221b94dca5cf5e1a9d90259f" + }, + "arm64": { + "darwin": "b58bfb3eaa9f5ab04ced7f6e23184c04fdaadb4ac06cf982e2c50c37466e465a", + "linux": "1bc6dd8bb2f7f0eaae49a3f5685cda0472abdc6e870f5105681e877017826281" + }, + "ppc64le": { + "linux": "ce979d3698c573eb39ec6fe4d013a714aafcb15331d6c0fed2e38b5f91000162" + }, + "s390x": { + "linux": "5d9a2cedfa79fbcbfd85a3034eed747da1baf8d1d4004fc4cd18bcafdfe3f6f5" + }, + "darwin": "a465e5b537b63ac8e6624396f490dd79516fd625c1110cbf1f49e7b55c1dfcf6", + "linux": "ebcdfb0a520e9e746360a9dd954a9006ca75770e53fcdae493b6ac9a20026733", + "windows": "a08699d25fede796e6fdc56d8630380bd5864fb291592fc2be24fe881656d064" + }, + "name": "v1.31.1" + }, + { + "checksums": { + "amd64": { + "darwin": "38e6b4d5b4bc33aaa3f18a5f02d5eb68a9ad3afc997a7fb0eb3d3ac9c5967139", + "linux": "0bcf12e4f72a2f2c9250bd85948166134a292c456e76224f517c4a8a52a948ac", + "windows": "cc40ddbad68457e78651e47e63493a5a409ced511fef494d3c536173b53f59bc" + }, + "arm": { + "linux": "5278e7fc2db05670262fe28a83af8ed52e553bf63b8c303255dcfea30bb83bec" + }, + "arm64": { + "darwin": "56760d95aff6e7f35952977e5fe586968110bdcc342bba68effdb1d70324e4e8", + "linux": "d6d63f62c2a66fa9f5a82b212bcc412dfa8741ed25f89048cf098883d9dd82b3" + }, + "ppc64le": { + "linux": "10bb3461ff3340175f2e722154a455c349743aa69af500c026fe5203945f8f9d" + }, + "s390x": { + "linux": "2a486c63f3986ee1341a7a6a06288aff573c45271aed7e25e64ffe44a382fa04" + }, + "darwin": "38e6b4d5b4bc33aaa3f18a5f02d5eb68a9ad3afc997a7fb0eb3d3ac9c5967139", + "linux": "0bcf12e4f72a2f2c9250bd85948166134a292c456e76224f517c4a8a52a948ac", + "windows": "cc40ddbad68457e78651e47e63493a5a409ced511fef494d3c536173b53f59bc" + }, + "name": "v1.31.0" + }, + { + "checksums": { + "amd64": { + "darwin": "b5938a8772c5565b5d0b795938c367c5190bf65bb51fc55fb2417cb4e1d04ef1", + "linux": "e53d9e8c31f4c5f683182f5323d3527aa0725f713945c6d081cf71aa548ab388", + "windows": "cb3cf94860bd7a6ccb514fb1fed6641c51bcd9de1ea1a823cf862e632852af4a" + }, + "arm": { + "linux": "cd80af213fa394127311096a60f69c216c3d8c242765833fd5fcd54be9e7a7ad" + }, + "arm64": { + "darwin": "3aa935f0657b25634944510bb2e1111f49d19d0cba32dcd594721c6673ba0a01", + "linux": "3addf91be8cf1cb460b856171d3621b8b2f4bc96254246c912aeb30671ac37b7" + }, + "ppc64le": { + "linux": "65cd4e46dd3a8c14c61c271ef67bb17c4c5498870d7eada548cf06eafcf73c40" + }, + "s390x": { + "linux": "79f9bb083940563c65c2a01d48ddff3c515e7e67c1fc65e70c7b42b507d4a5cb" + }, + "darwin": "b5938a8772c5565b5d0b795938c367c5190bf65bb51fc55fb2417cb4e1d04ef1", + "linux": "e53d9e8c31f4c5f683182f5323d3527aa0725f713945c6d081cf71aa548ab388", + "windows": "cb3cf94860bd7a6ccb514fb1fed6641c51bcd9de1ea1a823cf862e632852af4a" + }, + "name": "v1.30.1" + }, + { + "checksums": { + "amd64": { + "darwin": "929e79926e27f149ada6f1c4ee5774fbde586359b731868e15af28b6c24ab57c", + "linux": "aea52db72714b832f7f544ff0b71fbc231c47c044deda3f822708431dc68cc48", + "windows": "670bcaae30f1e6b8a8fe3a6b0566a3df397581ddefc70bff1bcf9455c477c0d7" + }, + "arm": { + "linux": "d921c95377dbebd65f498a51b75e01108e9469d15e9390eb956181418b7fb655" + }, + "arm64": { + "darwin": "ff5bf121d62ce75bffdd94b023502db3eda467e3f8fb2755ece14e8825930a1e", + "linux": "b88084ea0d14d8478a9bdf0c56ae4a64a5befd2faf7758acea85dc044fb975cc" + }, + "ppc64le": { + "linux": "2cd71640a5e0e81d9770c5768f4659ae1f8ebe2c15a9c1a6b96ff6b05860e714" + }, + "s390x": { + "linux": "c1785c2037a428da6d70a6c1deb58bb735808bcdaa373dc280c0d221721ed3da" + }, + "darwin": "929e79926e27f149ada6f1c4ee5774fbde586359b731868e15af28b6c24ab57c", + "linux": "aea52db72714b832f7f544ff0b71fbc231c47c044deda3f822708431dc68cc48", + "windows": "670bcaae30f1e6b8a8fe3a6b0566a3df397581ddefc70bff1bcf9455c477c0d7" + }, + "name": "v1.30.0" + }, + { + "checksums": { + "amd64": { + "darwin": "cb54ef7cdbcef7f078ac2966bc6c0aa43db75bbde8b361f428858137e803dac0", + "linux": "aafb65cbee8e971ec00509fdb1817254b17d6bee4890b839c3b6e8f11e97413a", + "windows": "c53785c02c0327e74342e7100dd2fa8a52a689c9fea7782a9a1491b5d68dbd6a" + }, + "arm": { + "linux": "9cf1c74c258f09e9133d02c371dbe0a85817c992d8dee815701c78e6fe442dcb" + }, + "arm64": { + "darwin": "d3ba1faf5080d3c19affd7355b9e8158ee0fb1fe41422083cdd61e6f1593360d", + "linux": "e53bee7692b8b58144290c082c0191d50af7cc2994daf34d87e0abef9e73fae2" + }, + "ppc64le": { + "linux": "742ba9a2867632faf7cd13c4a165081631fa93696d27ec71cfb99ed97f404362" + }, + "s390x": { + "linux": "c95b67a9f8e1be02538f6b1708c32d6e8468dea0b65c338d67d04199da114e88" + }, + "darwin": "cb54ef7cdbcef7f078ac2966bc6c0aa43db75bbde8b361f428858137e803dac0", + "linux": "aafb65cbee8e971ec00509fdb1817254b17d6bee4890b839c3b6e8f11e97413a", + "windows": "c53785c02c0327e74342e7100dd2fa8a52a689c9fea7782a9a1491b5d68dbd6a" + }, + "name": "v1.29.0" + }, + { + "checksums": { + "amd64": { + "darwin": "667ab2baeae7829392533a9ef733e94ea88c87a8edf38ee088d349077152cc95", + "linux": "58cead5ece9815a61d4be253a07b2385f8cf373d9e1eba5c9783444e4e9e2d8e", + "windows": "65304e5c5c98a688fb0abc2d76d77b3b441f9501d6dfa71d96a0532f4114d34c" + }, + "arm": { + "linux": "802af1d58e5707f2c1e2253f88dadf79bbde25bd803ad726d68ef21eb2b2b75a" + }, + "arm64": { + "darwin": "8dc1b6018ce7ba344394e26dac62a7db477dbfcba63d9cdf55ea8e0c2fc755f4", + "linux": "648d09c00ceee3b53d60ea92796c772abcb42bd9bb7e871fe0b233e39a4675ce" + }, + "ppc64le": { + "linux": "27b4d08b98711ab89306e92085d7dd129339c170483d1c54343a71dfa75b4cc7" + }, + "s390x": { + "linux": "3067c320e521b6ad1642b50eb955305ec7cefca54b53f73713494a857b1431a0" + }, + "darwin": "667ab2baeae7829392533a9ef733e94ea88c87a8edf38ee088d349077152cc95", + "linux": "58cead5ece9815a61d4be253a07b2385f8cf373d9e1eba5c9783444e4e9e2d8e", + "windows": "65304e5c5c98a688fb0abc2d76d77b3b441f9501d6dfa71d96a0532f4114d34c" + }, + "name": "v1.28.0" + }, + { + "checksums": { + "amd64": { + "darwin": "aa60ff42b4d60b1a65552a5f527d78f68efa887e1eab0af013996badfbccc3c8", + "linux": "159bc79f3914dadb7c9f56b6e9d5b73a1c54acb26dca8f1ea84b99ff5da42620", + "windows": "d5957435f3a94a43ce0c764ecaf3b9c4f7c6f8bcafdc4ef7b2b86937ec5c311c" + }, + "arm": { + "linux": "f14348a7653672745e92eba934543c0a9f3fa14fbdeff3cf76da41e174769bf0" + }, + "arm64": { + "darwin": "c12ad4e16460e8cdf9f49a9cf6514878875453485570cafe4423fc4d3a69d590", + "linux": "6a3fb0eaac110c35f018948838aa6ab0898e811a08f76e74b85d8573fb08b1d0" + }, + "ppc64le": { + "linux": "aae55c97d7fa9d3180843cffc4c6a504d6882c45a232bdef23e46ec83e191aae" + }, + "s390x": { + "linux": "cb22c8c54c4e9b441ec6680f38dc067909bc1f793a205202274eaff2cd947e9f" + }, + "darwin": "aa60ff42b4d60b1a65552a5f527d78f68efa887e1eab0af013996badfbccc3c8", + "linux": "159bc79f3914dadb7c9f56b6e9d5b73a1c54acb26dca8f1ea84b99ff5da42620", + "windows": "d5957435f3a94a43ce0c764ecaf3b9c4f7c6f8bcafdc4ef7b2b86937ec5c311c" + }, + "name": "v1.27.1" + }, + { + "checksums": { + "amd64": { + "darwin": "fca0cbabad64868cf00d37349b953b16c06bafa13569595ef7721bd9178b4a5c", + "linux": "b6ab1207474255b9ea755ced4394b4b618a1cfa7b8394ddd1d307288130fb495", + "windows": "ebecc7633b3a91b652a81fb17faa4d1bb35fecff94e6309533e95933c9224ef7" + }, + "arm": { + "linux": "4ab5323f1f365589d944818dc73700f1ceb9d930932de47e0dc0012a22c51f38" + }, + "arm64": { + "darwin": "6b0a3d392c57ba97659a3d8a6a063e6d6e212fbd1b32bd2c5044ab4a611d5314", + "linux": "5d698c417d41d42e577e33eeb3666d33232c1f45585665cd6d4f6dacb8aeb0d2" + }, + "ppc64le": { + "linux": "2387199325ba90dd944ea0685a2672f16b66ed188674e15970f2286f1f3a7505" + }, + "s390x": { + "linux": "39da0ad9e879c715402af432d90580f0e17eec6f76e59c6bd0622fd815c53428" + }, + "darwin": "fca0cbabad64868cf00d37349b953b16c06bafa13569595ef7721bd9178b4a5c", + "linux": "b6ab1207474255b9ea755ced4394b4b618a1cfa7b8394ddd1d307288130fb495", + "windows": "ebecc7633b3a91b652a81fb17faa4d1bb35fecff94e6309533e95933c9224ef7" + }, + "name": "v1.27.0" + }, + { + "checksums": { + "amd64": { + "darwin": "57578517edec2fcf8425b47ef9535c56c1b7c0f383b4d676ebf3787076ac4ede", + "linux": "9acd25706661b932ee98063147e58080cb949b92fd0d97b3b96dc5f898dcad21", + "windows": "9c9934a396acdd164e2b2449def5d831aeb1577571b8ac9d922ffe466b0f270e" + }, + "arm": { + "linux": "6aa8bdb2b0eb7a1c306907cf5941d9d1e7d3cd623471b859c1da81cea2cd189d" + }, + "arm64": { + "darwin": "61b0543ee7a27b48992517df17ce7a56ad687762210f55112c7f2eb8a0e55655", + "linux": "419f65fb0dc1045a07943192f11f6fc91858ee576b4f9ddb0be5b3f637e36ab0" + }, + "ppc64le": { + "linux": "a87b01d9776b5e2f941d3bf9a8dbe9ccde12c154eff89494eb579346bbb4343b" + }, + "s390x": { + "linux": "b655a3ad176746260dc937974c179477487bac45c5adfa046612d50691530e99" + }, + "darwin": "57578517edec2fcf8425b47ef9535c56c1b7c0f383b4d676ebf3787076ac4ede", + "linux": "9acd25706661b932ee98063147e58080cb949b92fd0d97b3b96dc5f898dcad21", + "windows": "9c9934a396acdd164e2b2449def5d831aeb1577571b8ac9d922ffe466b0f270e" + }, + "name": "v1.26.1" + }, + { + "checksums": { + "amd64": { + "darwin": "cdfbbbdd01de8e8819d7d917f155c7a7cc6236af1ac97c4ae6f3ff9252b150b7", + "linux": "a988b7c890d9dc34033155b8b721827b3eff0e22c3d436409a8a3310aa564547", + "windows": "08c06e6ddff4f2e47a2d094365aeb85a3ac8ad1b86361db9b06a02f3668bd5a3" + }, + "arm": { + "linux": "5319911f90d173d3f1156082e608c3d7bde5e0d0d5706e61a968972b44e8885d" + }, + "arm64": { + "darwin": "39f90dc37d5cf4b6d150b177a4c9d2967d9d923cd8eb7d5b99268987a0287aba", + "linux": "7b6e79f51e671d2708afe8daea4d0bc0d9464992d9cf3d4415f608205c26a6ff" + }, + "ppc64le": { + "linux": "bc8794ae7b5f3a02151085a316b02a39463dbac279ac0698b9d0edaef562b11e" + }, + "s390x": { + "linux": "efc5765244660a48b6ef3c866b9db3b3a05913ef22c37e0286a221498c88469c" + }, + "darwin": "cdfbbbdd01de8e8819d7d917f155c7a7cc6236af1ac97c4ae6f3ff9252b150b7", + "linux": "a988b7c890d9dc34033155b8b721827b3eff0e22c3d436409a8a3310aa564547", + "windows": "08c06e6ddff4f2e47a2d094365aeb85a3ac8ad1b86361db9b06a02f3668bd5a3" + }, + "name": "v1.26.0" + }, + { + "checksums": { + "amd64": { + "darwin": "d125772083a2e9d6f6e8bd9791e3fd0d2cbac071416962a490b1ce19a045f486", + "linux": "ef610fa83571920f1b6c8538bb31a8dc5e10ff7e1fcdca071b2a8544c349c6fd", + "windows": "06c99a08efb8ea540fb6aa6e4c5bcb35c7688a0b04f60d938366355bdd491eee" + }, + "arm": { + "linux": "9cb9e5690581be3f7f429993cab1a0d37bc1405a1c9f173c69b34843055126b3" + }, + "arm64": { + "darwin": "07e85ca813e72542844767a6592e89de36eaf83d6463d11a6fd5452d5cccbf8d", + "linux": "7a6401bf61347360c1b1d1e0833700b2eacd6de50f256cd633b050ef78d78343" + }, + "ppc64le": { + "linux": "f22b2da16a8312f46781c38909754bc8fceb70796a1a4455e381c750edac797c" + }, + "s390x": { + "linux": "04b8f10f4171dfca2fa2cf3e9d34101bf83689dd9ace3dbed7541bbf9b5f463f" + }, + "darwin": "d125772083a2e9d6f6e8bd9791e3fd0d2cbac071416962a490b1ce19a045f486", + "linux": "ef610fa83571920f1b6c8538bb31a8dc5e10ff7e1fcdca071b2a8544c349c6fd", + "windows": "06c99a08efb8ea540fb6aa6e4c5bcb35c7688a0b04f60d938366355bdd491eee" + }, + "name": "v1.25.2" + }, + { + "checksums": { + "darwin": "7b0ecea078e370d26f45ee51b60d322f46f9f3df54b92f81d342244ffcfa14d9", + "linux": "1a69a286e9846438778a712297d1daec44d2c702c5f4540d97b3269fdb2b4e3d", + "windows": "7c12564a00b74704d43c347584615633d6de158f82c48c04fac909d7487bf6c2" + }, + "name": "v1.25.1" + }, + { + "checksums": { + "darwin": "55f14e4f411370da18d7b9432ae4edd128f4f047bbc87a278e08ba256ff6f669", + "linux": "3bc218476cf205acf11b078d45210a4882e136d24a3cbb7d8d645408e423b8fe", + "windows": "bb729590e111652d5f444fa66b66196491fa21c0713e4ff29f6e5360ab13a02c" + }, + "name": "v1.24.0" + }, + { + "checksums": { + "darwin": "cf2971d4b83b9c5e359d644410dcca9bba6933ee08427967302e6767f6628086", + "linux": "752d91414793b6a88b309c806b65841ffa62a3bf07383146bd54afbf15de80b4", + "windows": "994e806468425e23aadcf86b99f0341fa1848a9a70456f09111c071f769c552d" + }, + "name": "v1.23.2" + }, + { + "checksums": { + "darwin": "2b6addab443e384fec975b9f4d35a931b1988961f6a9e87f10768596e23eb70e", + "linux": "fc23f94e870b18c2fc015af18fe2dee00452059100e42a5483b9440da1a5fba2", + "windows": "4050b6c97b18c6c25e1d760ff2d93333af7fe1f69d3eb29b5a20e60d6ef3f766" + }, + "name": "v1.23.1" + }, + { + "checksums": { + "darwin": "943f522393e04879bb83d0e484d608dd4086e92c58a0161b4f29dc9691a9ec80", + "linux": "a34f1e46151f3e302b7d92dee680a0cceaba5c5d6ab79baaf695b17c4a61df38", + "windows": "7b7f4c7be4fd954037dbb0f05ef5631f1b453d0d08c8de7c4d402261816b50ac" + }, + "name": "v1.23.0" + }, + { + "checksums": { + "darwin": "932a278393cdcb90bff79c4e49d72c1c34910a71010f1466ce92f51d8332fb58", + "linux": "7579e5763a4e441500e5709eb058384c9cfe9c9dd888b39905b2cdf3d30fbf36", + "windows": "8764ca0e290b4420c5ec82371bcc1b542990a93bdf771578623554be32319d08" + }, + "name": "v1.22.0" + }, + { + "checksums": { + "darwin": "e2043883ca993b2a65396d379823dab6404dd842d0cc2a81348d247b01785070", + "linux": "5d423a00a24fdfbb95627a3fadbf58540fc4463be2338619257c529f93cf061b", + "windows": "74c961877798531ab8e53e2590bfae3cee7690d0c2e0614fdb44339e065124b5" + }, + "name": "v1.21.0" + }, + { + "checksums": { + "darwin": "5185b7a4156671444dc7ad33b013b90f8a0ffb5186fc5c1a084e7c1cb6cd0788", + "linux": "87e5260afcba82dfcb7681b542c3e15665113b6d388faebe77bb0a784737dd13", + "windows": "ab3239792c89225b9f1b6f70cebe2fd6f6afd95d3755a4b708937a8ed876042f" + }, + "name": "v1.20.0" + }, + { + "checksums": { + "darwin": "8111d393424aaf141ad4dc6c520979ca6e1ba39249d07df3979c9a6152adf9e6", + "linux": "e4df939a230d6eb35aafd2971d0bb6ec27f4e0ebee9a41cb8cf5ae144de97af8", + "windows": "5ebfff08582aa7b4a9aa75517bedc3fbde4e0dca3a412f1f9001b29eacef1ae1" + }, + "name": "v1.19.0" + }, + { + "checksums": { + "darwin": "afca0cf5063e8b444b2201808fde3b95a8c59c509bd3e77574111697adb51315", + "linux": "86f65235361ebe4916350d988c756fcb2f27fc1bd3e2d84912462b39bb660dfe", + "windows": "db7d701cc737baa8daff58fb68e038f7d06324e972429444767f3514ea38c790" + }, + "name": "v1.18.1" + }, + { + "checksums": { + "darwin": "a8c78a01fb129a7c66bad25bace89dc59e912b7fc0a8456de3321f9adce7a01e", + "linux": "7a330bcd45c96633c14aabcae74b3308eacf6e552a5f6ccd565a03e2f293785f", + "windows": "264b8bd9062d73b7570a26455f646fbfbce9b7bfaf375cf5642ae17937e1f79a" + }, + "name": "v1.18.0" + }, + { + "checksums": { + "darwin": "c9361152a0a4aaed23d212b792f1907454f5fdd950f0cf9ac65c789744acf5ac", + "linux": "03a6d6cccecb7a33a09afc6dae40d8d76ccfe168aa4aba1a18c1f45bbab120c2", + "windows": "5e1d57379aa729b0a9247d5be6617906ebb7e934105df06eb6b24dda08899d3e" + }, + "name": "v1.17.1" + }, + { + "checksums": { + "darwin": "ad2b4de4b3f8863c2cfa9f5072cdc787141b0587fb9855dd645242253489fab3", + "linux": "e312901e12c347d0e4eec74d94b8d75512943eb62479b441bb1332f05cde0d09", + "windows": "dcae6ee972a49c4389d5e3ea81039b826cda55fefbe23b9273eeb46514abe244" + }, + "name": "v1.17.0" + }, + { + "checksums": { + "darwin": "546329a1a2448e1e8a483241c23a3ca272bd795df5a78bd6bf922699d3a75823", + "linux": "af29a48b2d79075f9d57be3a28724eef2cd628bb87283ed58dd72cbe1f8967c4", + "windows": "8928ad4ddcbcf203bf688be6fac826d12483116b4ac0625f28dbb8ab6a278979" + }, + "name": "v1.16.0" + }, + { + "checksums": { + "darwin": "ab47a4e3ff742db8a88d7bf0fe9cb9c6805e6f1df2545d8888f196c46b96f714", + "linux": "88c3bfac3880e897e4d032801b02f02fdda642b75d76ebeb5df545cd90eee409", + "windows": "89e34d6137bba7a59b74e138af28746b883bb605cbf2d37c1ff29dce008050e8" + }, + "name": "v1.15.1" + }, + { + "checksums": { + "darwin": "a744ed7fb5c317ef06b2c5ae0d94cec1d41e1d5c2ea40b5ece28e7a340abbad3", + "linux": "0b287e1cafc911ea6e39879f13ea302eeed5f6679bc77c719bfe21870056f3ca", + "windows": "a9e3e52c262b8832f3a83cbef4cbfc3e4c9e9e14baab819b43af040def7a447f" + }, + "name": "v1.15.0" + }, + { + "checksums": { + "darwin": "5d72bea6159e41f30865492298aa0e37af164ef22e56165ac78be179947d3b9d", + "linux": "f38f8da05a940589989eb0e85492edfe146caf57f9cfbb4ebb06de877f828f2e", + "windows": "cafd7a10a950d3c63425758b1afb3eaad12a4a5abd586fb83afc27a832a2c62b" + }, + "name": "v1.14.2" + }, + { + "checksums": { + "darwin": "d07db8343d06caa484a645bdd84d72d9babba81a18a7a50729616571b5e6702a", + "linux": "a7ad2b00389146a5b1833a35a96e50a224e7b382d072ee771b425eb6719bf109", + "windows": "71217e883e2d1c17b64415fbabef6bf199c7b03f88f66478c659d199c315e315" + }, + "name": "v1.14.1" + }, + { + "checksums": { + "darwin": "71dee6241a93945b40ea7188ad15459e50e7b65eab09fed7302d8cacdc58585c", + "linux": "8727635489be895d9b9cfaa5cb599f45799a28fb07e0a2aac351a9aa1c4b46c1", + "windows": "0317e6c338da23ccf0aba698668c6d919f22e1482340a09d1269220063937aeb" + }, + "name": "v1.14.0" + }, + { + "checksums": { + "darwin": "cc7eaadea2becc48eee78136f8d569df55a28c46d58d1c8bb434895382aced78", + "linux": "3564b685f8d797df78ebfa2f5b34c99b3c77b0d1f49eab6aab37500f1ba61d98", + "windows": "0d315ec21ca8a34eff5fa4cc478c09ed2d48ae88b3c5d586df9de111ac414d44" + }, + "name": "v1.13.1" + }, + { + "checksums": { + "darwin": "5a51ad5147e7152801fce7215676d241989a915b346cf80c814c80f732b172ba", + "linux": "08d1522475e425188863cc2ab664bac8b1df3fa29e87edb6cba17aea82b63fbb", + "windows": "969121a5e932d279451d777fb7a844835949e00f2004d3f92f027ae86dc3acb1" + }, + "name": "v1.13.0" + }, + { + "checksums": { + "darwin": "060275cd2129fbf3ce38f245a85651a6f050dff25a3ed0454241e1319ea1ab08", + "linux": "664ebef01166ef6c6b13ff1d70faecca9292e2fcdc85766e8ebd2c607488711c", + "windows": "994e7a232c57b6b917c20ad2e40e88a6b8e80e057212b14def3307e4b22ebbe6" + }, + "name": "v1.12.3" + }, + { + "checksums": { + "darwin": "2d71dea18e8dd415b3c0306d91b53d9ca889e45ac3f090e4b8bff8ec7e744bcc", + "linux": "a314c57cfacd034da303bf00406c9ffae2880aaf98a7dc48d9cd92d2caa23237", + "windows": "c3b561a33a64ddd7b0122a8398d2364cdef66e8de76ad876be93946638bd8d36" + }, + "name": "v1.12.2" + }, + { + "checksums": { + "darwin": "81a69450b8baaa1abbe88d11c58c2a40e552da4d9052d9e123bdbea3e5607146", + "linux": "a0d8f9d71623e8c66723547fede7df95c12e2a8827fef408b640a6f62bafd57b", + "windows": "db7365266ebb00cd79ae5fc9c854fcf611ad1c6abd152f272727f6691ea8a4ad" + }, + "name": "v1.12.1" + }, + { + "checksums": { + "darwin": "7f6c6eeca19d6b16c9043cfc96a42408bbdec8ba90c01bd025249ca855a1362c", + "linux": "3501b6c2be48183affa9497e7db6d751d92e1536267268b73ad1a936a2977122", + "windows": "a5f8666d762146cc7d85916bcb2d6b7246162e4706f10e5c12a795b9d07ea6c4" + }, + "name": "v1.12.0" + }, + { + "checksums": { + "darwin": "cc1b8a3327661be6a5d4dc1d6f9891aeeca40f7d9a389aaaffd8d4a1abbe294b", + "linux": "0b07a295d5110dc70907e4660429b8f9b3e8c05119e42f73e192b5313695a913", + "windows": "e94991292f4a0c5b91ef165f826c6a615a122513e8771c8f9ce5b7ec96ab9df0" + }, + "name": "v1.11.0" + }, + { + "checksums": { + "darwin": "9c51656f6855b4dff9a6f0bf1136255c18bc07c467ff67b32257da921e879246", + "linux": "acc67ea2ff1ca261269a702a6d998367f65c86d9024c20bbf5ac3922bfca1aaa", + "windows": "60d4db87a834509a69b70ac253de040eabfb9e96aaf3cee159f73c3d5f37e81a" + }, + "name": "v1.10.1" + }, + { + "checksums": { + "darwin": "aff7d9e273aff53f8b3ab0e0bc3fdfff76daa19b4a0f5480679ba52fc688eae1", + "linux": "9d34cb50bc39f80d39f92d1fb7cb23a271504b519f5e805574894d395ce3e7b3", + "windows": "9c3410ff03ed0d114e98cbd8cb1b14a3a131e69d92bd964b114ce07fa8385e70" + }, + "name": "v1.10.0" + }, + { + "checksums": { + "darwin": "f27016246850b3145e1509e98f7ed060fd9575ac4d455c7bdc15277734372e85", + "linux": "3121f933bf8d608befb24628a045ce536658738c14618504ba46c92e656ea6b5", + "windows": "426586f33d88a484fdc5a3b326b0651d57860e9305a4f9d4180640e3beccaf6b" + }, + "name": "v1.9.2" + }, + { + "checksums": { + "darwin": "ac8855ea54e798fa6f00e8c251b55c3d2a54e3b80e896162958a5ac7b0e3f60b", + "linux": "7174c881289a7302a05d477c67cc1ef5b48153e825089d6c0d0bcfaebe33d42a", + "windows": "91d15b2ef8f357aa463ae16de59f6e018120398f492ba4e35cd77f21acb27d5c" + }, + "name": "v1.9.1" + }, + { + "checksums": { + "darwin": "2a074b0d842e3d9272444990374c6ffc51878c2d11c0434f54e15269b59593f9", + "linux": "81d77d1babe63be393e0a3204aac7825eb35e0fdf58ffefd9f66508a43864866", + "windows": "d11a957704c23670eac453a47897449a2aaab13b7dcd6424307f8932ac9f81bb" + }, + "name": "v1.9.0" + }, + { + "checksums": { + "darwin": "cbd1ff4dd239180b417bcd496fe0a31dbe8f212586765c040fdd20991ca13d50", + "linux": "0b21b50a8064aaea816cc7495cbbe324ab126284b0dbbb15c9f4df5ac72c22fb", + "windows": "076ccf11e8238647101e26d327adb0880fdac63cbd6e12bd0bb1420f09a85b9c" + }, + "name": "v1.8.2" + }, + { + "checksums": { + "darwin": "a19ab670ca81f11a82b6868e2995b5ab178fe121f6638bf40ec7d49c266f3d32", + "linux": "028bfb3aa0e5a1d1de49b13e4550d3d2885f2d0bb572f76a72372aba93fff22c", + "windows": "3d4daf04ac2addcc52b529bdebe50488867c5ce63d4e94083b0030be1e1e7b91" + }, + "name": "v1.8.1" + }, + { + "checksums": { + "darwin": "deb72f43ac361607e86a1b78668b19225e7d0956499fee6e3ed7d92b6b562451", + "linux": "e26af291482c6793cff4e35dc154922bcf0d4bca60a593c90fab891f602839ad", + "windows": "ee2162b0a2e3d1a1217400d34a2de2ab82a0c51e14236acb2b36faa3cdde3185" + }, + "name": "v1.8.0" + }, + { + "checksums": { + "darwin": "e8d762357123773f6c4dc300f8bccec3cdf2326c94f03a8aeb934e4e73fd59b8", + "linux": "575adc22884b49ecce9c9d289a7127b64f2759f639cb894c3040890bee1939c5", + "windows": "0fdc0d60e36001c021b6cc09e699e2a38b4070661cf7e78badf750ee84340afa" + }, + "name": "v1.7.3" + }, + { + "checksums": { + "darwin": "fcfb05f44620e54ce81fe8ac415196230ceb42c4007171533ef2049b7d4e8646", + "linux": "9f543f464b4d93a259f7d5a7578edff1316370d45b5a0679b86ed7a61b01634d", + "windows": "cbbe30445baffa9a3d77834d4e24c1ec595ecc2b7933db21109aa90aa79eaddd" + }, + "name": "v1.7.2" + }, + { + "checksums": { + "darwin": "ac6b1eb8ff6a98f0f4a8f26fddd7a9fd8dbdd7a5029cf87a9315399d31e4f6ce", + "linux": "1313da4fce807f2d5cd4664d8a59422067a3377ddd37fa66df9aa0bb228e154b", + "windows": "640ad4ba69926be2ea64140a5d6d80122f030c8bf75ae4afeca11eeff865feac" + }, + "name": "v1.7.1" + }, + { + "checksums": { + "darwin": "1f3785e9521eabe241df0481fa41887a6a3873307bac8a89fd0e48aa7612be29", + "linux": "f1fcab9f161a64f19b618a901e50488ed6f1c6ab20695c82623586a701d2d261", + "windows": "2f4448f32e505bf38ba52cd3678c73622a6bb452c63a4179d590f6da26520c68" + }, + "name": "v1.7.0" + }, + { + "checksums": { + "darwin": "5ea5168a80597ee6221bf50a524429a24a37f0c0f36725e6b297dc5a7a6a2105", + "linux": "eabd027438953d29a4b0f7b810c801919cc13bef3ebe7aff08c9534ac2b091ab", + "windows": "79d66c874cfe3497656e9ba191680cc95abd92d2f722b10de38f00b76ef82393" + }, + "name": "v1.6.2" + }, + { + "checksums": { + "darwin": "bcfc181ade08bd2a87fca70f0aa59f9f4b23c893fc2b335b3cb8f05b84ae2d34", + "linux": "cbd526d64531266d42f02667339d3c53e5a399e3abebda63c96b0bbd6b7e935d", + "windows": "1d7372fcf099d583d4140a4ce4aa8f5c2752d3bd0d143e53647aee6221dcb663" + }, + "name": "v1.6.1" + }, + { + "checksums": { + "darwin": "fd1af02f0fc11fb0bec35b9ae1f6bf2d157f51948155d8b1ddc899521642fc32", + "linux": "48738607ecdb0b00815599230a2a2b17dc90bd3bbcb1b217bace043f78370db3", + "windows": "20e7db220308f06913acd10addb1ec01c87b74245cebc70fa18a979c1b323f34" + }, + "name": "v1.6.0" + }, + { + "checksums": { + "darwin": "734306019f837a6aee9cb7a0245839f98ea7688ee2cde387099334cb9356c2c4", + "linux": "1972a9a96de85e480012f6d2c9b8a88fd29217b99b1a973ed5e199386659f7e9", + "windows": "9f012922fd8d701070ef3951b0df77b720805a204d4d0dfa15d11899fda8a2d0" + }, + "name": "v1.5.2" + }, + { + "checksums": { + "darwin": "7ba345034e176566930d873acd0f38366dd14fdafd038febe600ea38c24c4208", + "linux": "5aed23a876770c92d0162fcf7862d855dc306516614be78ac6fbc47b5cba55e6", + "windows": "5a7bd914b0ae57e0853d72a06b7fb72e645417f2f3cd86d0f1bc4f636a04d160" + }, + "name": "v1.5.1" + }, + { + "checksums": { + "darwin": "eb716c176f404bb555966ff3947d5d9c5fb63eb902d11c83839fda492ff4b1fc", + "linux": "ca50dcc7c83d4dde484d650a5a1934ea1bef692340af3aa831d34c6e847b2770", + "windows": "bdd61e446f49570428848ad15337264edfecc55d1dd4aed4499d559f9c8383b9" + }, + "name": "v1.5.0" + }, + { + "checksums": { + "darwin": "ae19f66c8f4a5716a1c22125af1bcf3d41d1b81cfa5fe7fc76a50c0c46e2c409", + "linux": "e63b8007c2d39fd037587adff2ec5360a910b51f427f0d1521fce5f3cac5e0fd", + "windows": "cd77fbe1b5892de2697161483f44f4ef6833c1418b53e913c2edef3ac95e7475" + }, + "name": "v1.4.0" + }, + { + "checksums": { + "darwin": "5947abe57fa390fcfd96849ac87fc9319f026d4b13f944b6beecc3615e3668be", + "linux": "057a4f4ca36ff51ecad59509d94d3694543b874949e805e2b79792ceef21f983", + "windows": "be1999452b166de72f946aac17ca7c40d53b8a5c8f59dad912c2413f7cc42563" + }, + "name": "v1.3.1" + }, + { + "checksums": { + "darwin": "5bda29e2d990bb8ac9da1767143e228772adc45507d22a49b5af70b03e7db682", + "linux": "5aa7c5f0b6dd09348f7e2435b9618f6a916fbb573580619b393b514258771eab", + "windows": "d808b6e42e6f53c9338d135a352bebd4469634f33646d06e7cad3569330225cb" + }, + "name": "v1.3.0" + }, + { + "checksums": { + "darwin": "183d017d094b7783c938dc709dbdfc9a48f92299178234f89047dfbb083a592c", + "linux": "123fc9f5656333fb2927cf91666a91cd5b28ef97503418ac2a90a2109e518ed9", + "windows": "f6c30cb88ec61bc6fe17532a3ef56e4f1fcef2473e3d73fc56f352b44784490d" + }, + "name": "v1.2.0" + }, + { + "checksums": { + "darwin": "cf6b2c0397147fa998a5c4e36ed7ad045d67f929daa3e46a1d01656b5ab7cac5", + "linux": "4596c0daabfe637912e2372c41cc11116ca053a1f7045af8a731265e45f9ca83", + "windows": "e86e9c7c1c25cfd251f010b62e83fdf2ee2eefc3e73b4b1f7fa18971577150be" + }, + "name": "v1.1.1" + }, + { + "checksums": { + "darwin": "3f635089d93ba7bd193b8f015bfa9434b810256daa8ced03816c7f0df7b06a96", + "linux": "43ce88a10c7b57f5e4f83e5a1485e13e4ad537bfb20f7d57364f66450b872634", + "windows": "2a8e95fbe4ec9b32c603767f16b731b5f09ddd04c3e43f6bbe7fffd22afbf811" + }, + "name": "v1.1.0" + }, + { + "checksums": { + "darwin": "0af8a3f582c9284ffe10e99444b60a75241325f2bc9ab43ec758802f2b89e1db", + "linux": "7b56374955990ef2dd0289e6ecb62cf2b4587cab2b481d95f58de5db56799868", + "windows": "58abb5fb3e694a451102963e04ce13ea0cea46b7bf5c7947f40fdfc673282ac9" + }, + "name": "v1.0.1" + }, + { + "checksums": { + "darwin": "865bd3a13c1ad3b7732b2bea35b26fef150f2b3cbfc257c5d1835527d1b331e9", + "linux": "a315869f81aae782ecc6ff2a6de4d0ab3a17ca1840d1d8e6eea050a8dd05907f", + "windows": "a9e629911498ce774681504abe1797c1957e29d100d40c80c26ac54e22716a85" + }, + "name": "v1.0.0" + }, + { + "checksums": { + "darwin": "9fb0ce4decb0f40b1b2ee11cad0aa89e13e2d5c46ff0d35875a0a65788dee6b4", + "linux": "e161995604c42c37a797fd11fac5d545f8b75f0796afc3b10679253bf229ff3d", + "windows": "748c9087e876491332897d8dc937eeea92f9fda9003443ef668dc75f5638ed5b" + }, + "name": "v0.35.0" + }, + { + "checksums": { + "darwin": "54b865528ff14a4cfa479bd7c5630db81e0695c3b4b85939b0735dc1203541d3", + "linux": "8db7e8a128de48ebeb1cb8cacb457f60b5420706e08c190e466f4e9b971fd8f3", + "windows": "90fdaddd3ffe62beef2503e59295b15124b454b795324a8dcb54dd0cc7ba3296" + }, + "name": "v0.34.1" + }, + { + "checksums": { + "darwin": "8932ee06a8db3fae696d97bfefa2d7ad2168ffa3046e0729f39164cf11a78911", + "linux": "97a871bc4d62287b167db1feb1ef167925e2b51d7a0fb4bfe3ac215402e10deb", + "windows": "89e8f10ab97f3440c5dad47f6be96ed49cf9d7dc3a15849f682440a0a3649ea1" + }, + "name": "v0.34.0" + }, + { + "checksums": { + "darwin": "ff5aee67920e9615aef804ed0db9d0dfaebfb9f54ca093ddc16c67b3834baaf0", + "linux": "8a5effbbe6a847eb61e676b6ad62883d9c19abe75452d766043f41a59248f191", + "windows": "bf8cd98dec45725cb4b4123be59a54751d0b65c435573b8a19f2c439a91f1a4b" + }, + "name": "v0.33.1" + }, + { + "checksums": { + "darwin": "bfa1b27ef6ad3912a24917c07237409db033e1454fe9c8df063c1fb1180b3b7a", + "linux": "8a2eb70571993efbd5b44eda7ed3b04853ef877973bfe1a2c768ce649f8e5af5", + "windows": "1ea3386fc15dc96577ce6a2f2f2193d1f4e63673146c3528970c8f4d49c0304b" + }, + "name": "v0.33.0" + }, + { + "checksums": { + "darwin": "d5b21adacd4b6bad9006816e4bdb29f39318a60919e7a6bb5e388a6299fffd0f", + "linux": "3298d3183deacd9ddd3032dab113a64d863df7648d6d24693284ba4193e95b49", + "windows": "31668f64f6be25644b22d0465e0f72d745a027804b2c8685e040b8147bacfba1" + }, + "name": "v0.32.0" + }, + { + "checksums": { + "darwin": "621189b5ec9cbb55003ee3577d480e847c0f80a9ed58f4fb3ed567bb7be623a1", + "linux": "5926978aee75776af0867d112a77334b10ec65f687d734f238bfd88960c983c2", + "windows": "1ae607a849569664f6c5d87f969b1f9a096524515a6524be07fd364b7d405f6c" + }, + "name": "v0.31.0" + }, + { + "checksums": { + "darwin": "e09789c4eb751969f712947a43effd79cf73488163563e79d98bc3d15d06831e", + "linux": "f6fcd916adbdabc84fceb4ff3cadd58586f0ef6e576233b1bd03ead1f8f04afa", + "windows": "8f09d63c64a2a0c4810c492066b16ccd4bd63e2f3c2d0eb55e49c51c915493f6" + }, + "name": "v0.30.0" + }, + { + "checksums": { + "darwin": "196b2cbf4003ccc3574ba105437ae675bcd9cf80e6f8396b5581d40c35c6070d", + "linux": "0f8890d4a0869e6e80a62e63ad08336caf75e38111307e8fe57773d706c4142d", + "windows": "78aeb9ccff70121bc8dd0d6fb8a9c9438a39da806104d1be09923f369f496c32" + }, + "name": "v0.29.0" + }, + { + "checksums": { + "darwin": "dca43053510f5e8987ff89abf601594eaf58bc5d447d74f9a08e300f3d92133f", + "linux": "3c84872ffa5ddbce472062fb548f9b3a25af72587d35243e12f18d86aaa6a085", + "windows": "1f9840a3a54d793b60ff1b9c7ef1c87269ee24d118f7ef47667d9f7a0ef7861a" + }, + "name": "v0.28.2" + }, + { + "checksums": { + "darwin": "7d9b67c4c716184d6a854fb91b08b99094356a44b51e315659b254fbd74022cc", + "linux": "af261082d0ba9eb2dc3836a4cd903a449bafcb8647c5d5cb555c4e9144093627", + "windows": "e94d8d597e1c876dc45d6f63254e296bc95ee5c98c0a06b28050f59dad7d90c7" + }, + "name": "v0.28.1" + }, + { + "checksums": { + "darwin": "bfde769dc3e1bf050a079927fdcd646723ae73d13dda3505eea6a80acc27cb57", + "linux": "dfe361f86288a4cedcdc3bffbbe5b4716c7ee19cbb82d70696b0f20596a15c65", + "windows": "4ee548642184648b5dfb1380dc08a3541d3b665446c602830253126123ae5be5" + }, + "name": "v0.28.0" + }, + { + "checksums": { + "darwin": "d335f7a6a03d7aead5cb95867ecdb96b845b3520593df16688e6dfac7d4717c1", + "linux": "7c03650d33e029f1dbf810d27dc1fc197ad9b889f645a4d5c353bb1c46d3ff2a", + "windows": "c714aa1667cd7d73807e23904c37a9b696e50e8143f5705660c0f1147d8307e8" + }, + "name": "v0.27.0" + }, + { + "checksums": { + "darwin": "8cabcaa244a7d62697ad8f4393e3661c9e9cd598a75df79a8d1ffe803f80b209", + "linux": "3c956459ee8dad9452c97d54463f982d1d511a9afaa0f3851d88320bd5dcf58a", + "windows": "498f9f090972c047836fcb1580bb6fcee53fe920955377569d903ba72a0c425e" + }, + "name": "v0.26.1" + }, + { + "checksums": { + "darwin": "0b2c63c6f5a00525e679b01948edffcb16e3bdb37ea0db3ed89431dd0e4c3b3c", + "linux": "65dcc26a595c73b5bd2a3e47c3d5aa3bbdef81fe603f8d56f947d37cb12c74fc", + "windows": "a7d8edb6713b819a8f44b732314a1b8fe5b77a4397693c633f641592fe6e32f1" + }, + "name": "v0.26.0" + }, + { + "checksums": { + "darwin": "0d85ecc1cd064bae04ea4a8ef634d4fdc80318b65a2b8d14d105f1e15fcbced0", + "linux": "5676f2d4f37f1c6f9cf99d56c7e1a3016976d657f9715e8cb255667a0c5803c1", + "windows": "de2cbda425ae76ec7240d4543d8642598974fa558727bee10b7866ceb72c3fd9" + }, + "name": "v0.25.0" + }, + { + "checksums": { + "darwin": "f89abc1caaf73f3a623c6c5b792833fab2e0667cd0d1ebaffc05918b3b81c164", + "linux": "1261de09386fd1f4ee7a4645958757c2c9e69f419a2a4ca8aff475017a7e036e", + "windows": "61e1aa977ffdfd5373158820f8d57a8f4af7c43e78b8598651dea65be59b8bab" + }, + "name": "v0.24.1" + }, + { + "checksums": { + "darwin": "7db2045495db05a885c3ad9a0e5e7ff017ae1f2f1a835d9151142df0c6f1d192", + "linux": "fb624bfda432c764d19212fcaab2a368db8bb0e8427b7ff04b5b684faab0b463", + "windows": "46510a457658e7aee492cc0f1807b3b57c61b1d7154e7ee5b4da607fe681347f" + }, + "name": "v0.24.0" + }, + { + "checksums": { + "darwin": "3d0c5581cd14f85637fb888c1e2e124152c4c9643a257ba90c8cd929d2c2b8b3", + "linux": "cd9c6c640a1632e8c44d9b335e68db869da28442b6ab0642a2b7adbc1e4ef334", + "windows": "ddee80b2505447197994377f40e574061e1d59203019b587361be2b28762fd61" + }, + "name": "v0.23.0" + }, + { + "checksums": { + "darwin": "62483f95b55fc14e6cd3898bbfdd637a0ad921e5f1a632b5e367d74af5e36f24", + "linux": "7d85e6ca06943376fe3235663857bf51b4d3fe0d59b6ef645821bf212301244b", + "windows": "0a7037cb510bfbd9f78b85a80910a43bb8f6e7a9de89cd4323fea3ff52fce524" + }, + "name": "v0.22.3" + }, + { + "checksums": { + "darwin": "d59ca57fece491fee8b47a5c092ac297e807ca47584ac2b65078d070ed5d3f48", + "linux": "cddba4a49d522afe3b556bc251ca57017b060859d25a55d9fade294432982515", + "windows": "fffa980120ab40716fc83f525bc230574cd636581126b9473bd50ea9a40c89e4" + }, + "name": "v0.22.2" + }, + { + "checksums": { + "darwin": "a5bf0deacfce70a7f19f5955da14bb02871fee724185f76ad95657a5f35d96ce", + "linux": "0b61a7b7ca21e2c9bda5ab18d60c6c3fdf7a40d62db23b49de29617a6439c6fb", + "windows": "fc86f53768b6f77b425bcb330de7f5b6fe541ff96796228a4567b183b04793af" + }, + "name": "v0.22.1" + }, + { + "checksums": { + "darwin": "389c4cbbef69e760e8c5e226035d5afcad05540e2dd1d77439f903be119873f4", + "linux": "aaa439aee636a01e6340a1104721942af43c3fb481a5a32e112ccd8a37d8a1e9", + "windows": "06f7db04dae2e126958bd822fdbee1f10039a673f4b67c332373093b06a67d03" + }, + "name": "v0.22.0" + }, + { + "checksums": { + "darwin": "2a6960cfa2b5aed9fec8d8cbe357fa8f5776761ee5efa3dd26abccc894f4b453", + "linux": "c5dc6e8d85f96d4bfba321bdca93b2a828a714162653a55a9b3a6d527f517e82", + "windows": "ef6f5566eca0c20bc87391c0cd6e7103d6e3c6a05211ed6157ed143f9b956686" + }, + "name": "v0.21.0" + }, + { + "checksums": { + "darwin": "591737b728745dbf01f634bf714353c416c2e56c39e2e0431910fa51783b7a19", + "linux": "f7d51f0b94f88650ced3ddb6e079f560e7ef142b8e4d53a5aee511ca1c2e3df4", + "windows": "d4be02e5e7075943d6b4efca44c0ff56286f72236e2640d82010b944646612b7" + }, + "name": "v0.20.0" + }, + { + "checksums": { + "darwin": "efe27dd4f791403b90eefab8c1f6ea3c7f3115a7609f41e3189517f088e20f0e", + "linux": "1b3447b307fa256378c9541731cfc5d5b06128f88dab04b3cfc9deeeceddb2bf", + "windows": "105fa416fbda1fc8f4ad6c2e9a7883733d5f11ae247ef6cfd15e9fbc6dd5dd56" + }, + "name": "v0.19.0" + }, + { + "checksums": { + "darwin": "301dc5f47cccface80769bd3a03d58ba80893f6ede75f2a7ec22f1bc56666deb", + "linux": "212fbf52a6d601deb383271e2af756982f9b72715e1f7a3d65770d04387d8c8d", + "windows": "302bfe9747882291e686ecf6f337e78836f7bb0e1783fc6d8bf1f3482fb2badf" + }, + "name": "v0.18.0" + }, + { + "checksums": { + "darwin": "b175c355d377a6ce2fefdd19201c865a7e628581261ac949fffb725af459c389", + "linux": "54f9e24b5622f540a6d5edd7450ce546cf6f57f9feff21fd5d92d0d2f552ac31", + "windows": "86a713ced29399c736d14bf19be7aead96a22b03374441d99a457a4c44df9d53" + }, + "name": "v0.17.1" + }, + { + "checksums": { + "darwin": "d12fb4f8d9ff538c5563e1dcdf29495dc47b64a3fe108d7190fa37bf94a09a21", + "linux": "086d3438a9c2f324f494cf6dd4c422c27e93b19dd874c77d093d8ff91709a659", + "windows": "3d349978704791596a03237715ad502f5ab5bbd76014b761e579e859a5eaf4c1" + }, + "name": "v0.17.0" + }, + { + "checksums": { + "darwin": "1de0dda591d23c01aa52f6e7b6c85bec7e4811a007a5a939eb2d1bed6fa84144", + "linux": "119a687ce949f48cc7cc0ed3827bcd182d7769968023a0561bf93290ff265d5a", + "windows": "e3f21e866fc2b241c69b0836ebf9ac2d4a7eae3a234aa5c1b1447073e3e0804a" + }, + "name": "v0.16.0" + }, + { + "checksums": { + "darwin": "cc76cb68c9dfbe0317701e5d264ecf03cb3177a3a77906d901960c7adff6fc4a", + "linux": "0396080f87469b2bae0e9b23477156f32d25119b6b712f7e82a25a82d41ed3bc", + "windows": "11b6499c3b8079a7b7c74482c119db244d2585332a649de1edd0cc9bc85ce1b9" + }, + "name": "v0.15.0" + }, + { + "checksums": { + "darwin": "950805a1e1929dc41ef27698a0325b981f99f4a45df121521861fcd696e35f28", + "linux": "a9e8423474de6046c672db5b035475fc034223652b081d1accba89af7da5a5e0", + "windows": "5d6ef16842ea17aeaa715e5966edbc4f5ad220eaca15c070c1a191bb2360677b" + }, + "name": "v0.14.0" + }, + { + "checksums": { + "darwin": "77bc72679ca1beb09ad7f26ec8ba8b286283ddf7bee4e68163b88c5a439bc049", + "linux": "52706da92b6cf9a5eb4f59fe6034f119e3eb442c3fc57bf181d01db929e1289f", + "windows": "5bbb30feb34f09a1d7cee5051bb3b28103eef719ae828bfd8fddb11efc56a5c7" + }, + "name": "v0.13.1" + }, + { + "checksums": { + "darwin": "bf04827735c1f8b7dd51548fbd01ef3a2f84a2db64b235a794020241c3ccf996", + "linux": "453c2e3e55afb258bd7ca7ca9ba1da3f59d0131eb9bb73cf46cce7bb5bc0fbb4", + "windows": "1f5d09f7d9442e2d861eaed3a8403c7db029f076d69773d9ffdd177b3af14b6f" + }, + "name": "v0.13.0" + }, + { + "checksums": { + "darwin": "5f818be5235d606ec5241ac1eea0dc92e6328d56841617c51e4595a0abc4300c", + "linux": "ace8dcaf9418ed0e4eb07e7737b0af41036f6aaa05f784386725feb041463a74", + "windows": "1768aea06220946f22e88d294f02984135a77799b88373fc6b1a98b3da6802ef" + }, + "name": "v0.12.2" + }, + { + "checksums": { + "darwin": "d1f4ae5ef298ffbd50f56f7da7fb6215bd79795a5db90b07d9d57468e8485a3c", + "linux": "e767236598d619ac93d4fa2782a5534c7107068f3b46ecee69e92ab8d9f0a3d1", + "windows": "67a6146011f6c90274b0f509f7dff18bd3a6f423dc9ba3bcce933ac9b25c2891" + }, + "name": "v0.12.1" + }, + { + "checksums": { + "darwin": "a96d6e1d53a7999503d00bcd41b4ccaa80f5d57f798608f03e3f4d63a42f9991", + "linux": "1315a334e701c1558740e4140f8e28985d7734e8a53e4af2153076c2586c3c7d", + "windows": "373e3e2e1d9e000044711dfafe3a88fdb9620c3050a6b5f9e8ed0eb3e7ffd12e" + }, + "name": "v0.12.0" + }, + { + "checksums": { + "darwin": "7fe7ce35eda959d91071d065141d040053b945d5af0d57f98eb18afb93a4c921", + "linux": "f654835e3610fc746060ffdcdba5df68ca39231a4c6d5c6c9d9caffb10c25da1", + "windows": "4ba3e7a08cf3cc2b0f50e454a48d67022e8ca78b9363cd743644eb7b5f03a3b5" + }, + "name": "v0.11.0" + }, + { + "checksums": { + "darwin": "fc7552b5475d0c20ad96057fb88d686e226d09bd1034269d5078b33ba7d7cc8e", + "linux": "f905af9b2ef1e954d0633680ab5a8914d628b9104cce54de7e42509d89d2c541", + "windows": "93b0e1fabeab79da2b61c9237076893dacf3cc147294298d50cb48ca7cd2a86f" + }, + "name": "v0.10.0" + }, + { + "checksums": { + "darwin": "4415e7f3a30ace7cf0e5ad023f979509e6b25ded1bfb55368f918fc25098307e", + "linux": "76b341aa377c274c7147e203483f117ef01151a8e33bb232e29872ad20f6effc", + "windows": "98cb96fef863c9a4acac210eea910c2d239a87b13a6e2ac10ffe35244880e203" + }, + "name": "v0.9.0" + }, + { + "checksums": { + "darwin": "cc7439fc8e8e8e957246908f99314abeeb8513745b8d30ed64bf480227ec2607", + "linux": "8f9a8a41ba4a89ec847d998591ab24a8989c27852fce5193c5bdba23139223b7", + "windows": "3f384df76a24d2f3d70d7fc4b2c41dfb833ce0f02fb7be5bd39928d647094bc1" + }, + "name": "v0.8.0" + }, + { + "checksums": { + "darwin": "fc8365148be19bd020432d8ddc85c06b7aab3953300b16b24f20fcd8393de449", + "linux": "461c09753505e8c06a55b59633abbaa4daa89190374e4c737fe4d4d1107b9f1b", + "windows": "cb065787e1ade5761f3be8be407714e0a0dfa23aa1080f33dcccd13655c857a2" + }, + "name": "v0.7.1" + }, + { + "checksums": { + "darwin": "67af90d31c02e26bdb5a1af96a67b00feb288f20f96b4a67f7c4f1a40b382e99", + "linux": "374c813dcfc23a49cf48a73361088251aa6f85e8cd06b42c9e6d43c1dfb4def4", + "windows": "83d5b8c67d6535b6c156feb0e3b3485b54114436f6338dbdc86b4f92c8cecf43" + }, + "name": "v0.7.0" + }, + { + "checksums": {}, + "name": "v0.6.0" + }, + { + "checksums": {}, + "name": "v0.5.0" + }, + { + "checksums": {}, + "name": "v0.4.0" + }, + { + "checksums": {}, + "name": "v0.3.0" + }, + { + "checksums": {}, + "name": "v0.2.0" + }, + { + "checksums": {}, + "name": "v0.1.0" + } +] \ No newline at end of file diff --git a/deploy/minikube/releases.json b/deploy/minikube/releases.json index 14d9feb5d365..8e88bc908432 100644 --- a/deploy/minikube/releases.json +++ b/deploy/minikube/releases.json @@ -1,741 +1,932 @@ [ - { - "name": "v1.22.0", - "checksums": { - "darwin": "932a278393cdcb90bff79c4e49d72c1c34910a71010f1466ce92f51d8332fb58", - "linux": "7579e5763a4e441500e5709eb058384c9cfe9c9dd888b39905b2cdf3d30fbf36", - "windows": "8764ca0e290b4420c5ec82371bcc1b542990a93bdf771578623554be32319d08" - } - }, - { - "name": "v1.21.0", - "checksums": { - "darwin": "e2043883ca993b2a65396d379823dab6404dd842d0cc2a81348d247b01785070", - "linux": "5d423a00a24fdfbb95627a3fadbf58540fc4463be2338619257c529f93cf061b", - "windows": "74c961877798531ab8e53e2590bfae3cee7690d0c2e0614fdb44339e065124b5" - } - }, - { - "name": "v1.20.0", - "checksums": { - "darwin": "5185b7a4156671444dc7ad33b013b90f8a0ffb5186fc5c1a084e7c1cb6cd0788", - "linux": "87e5260afcba82dfcb7681b542c3e15665113b6d388faebe77bb0a784737dd13", - "windows": "ab3239792c89225b9f1b6f70cebe2fd6f6afd95d3755a4b708937a8ed876042f" - } - }, - { - "name": "v1.19.0", - "checksums": { - "darwin": "8111d393424aaf141ad4dc6c520979ca6e1ba39249d07df3979c9a6152adf9e6", - "linux": "e4df939a230d6eb35aafd2971d0bb6ec27f4e0ebee9a41cb8cf5ae144de97af8", - "windows": "5ebfff08582aa7b4a9aa75517bedc3fbde4e0dca3a412f1f9001b29eacef1ae1" - } - }, - { - "name": "v1.18.1", - "checksums": { - "darwin": "afca0cf5063e8b444b2201808fde3b95a8c59c509bd3e77574111697adb51315", - "linux": "86f65235361ebe4916350d988c756fcb2f27fc1bd3e2d84912462b39bb660dfe", - "windows": "db7d701cc737baa8daff58fb68e038f7d06324e972429444767f3514ea38c790" - } - }, - { - "name": "v1.18.0", - "checksums": { - "darwin": "a8c78a01fb129a7c66bad25bace89dc59e912b7fc0a8456de3321f9adce7a01e", - "linux": "7a330bcd45c96633c14aabcae74b3308eacf6e552a5f6ccd565a03e2f293785f", - "windows": "264b8bd9062d73b7570a26455f646fbfbce9b7bfaf375cf5642ae17937e1f79a" - } - }, - { - "name": "v1.17.1", - "checksums": { - "darwin": "c9361152a0a4aaed23d212b792f1907454f5fdd950f0cf9ac65c789744acf5ac", - "linux": "03a6d6cccecb7a33a09afc6dae40d8d76ccfe168aa4aba1a18c1f45bbab120c2", - "windows": "5e1d57379aa729b0a9247d5be6617906ebb7e934105df06eb6b24dda08899d3e" - } - }, - { - "name": "v1.17.0", - "checksums": { - "darwin": "ad2b4de4b3f8863c2cfa9f5072cdc787141b0587fb9855dd645242253489fab3", - "linux": "e312901e12c347d0e4eec74d94b8d75512943eb62479b441bb1332f05cde0d09", - "windows": "dcae6ee972a49c4389d5e3ea81039b826cda55fefbe23b9273eeb46514abe244" - } - }, - { - "name": "v1.16.0", - "checksums": { - "darwin": "546329a1a2448e1e8a483241c23a3ca272bd795df5a78bd6bf922699d3a75823", - "linux": "af29a48b2d79075f9d57be3a28724eef2cd628bb87283ed58dd72cbe1f8967c4", - "windows": "8928ad4ddcbcf203bf688be6fac826d12483116b4ac0625f28dbb8ab6a278979" - } - }, - { - "name": "v1.15.1", - "checksums": { - "darwin": "ab47a4e3ff742db8a88d7bf0fe9cb9c6805e6f1df2545d8888f196c46b96f714", - "linux": "88c3bfac3880e897e4d032801b02f02fdda642b75d76ebeb5df545cd90eee409", - "windows": "89e34d6137bba7a59b74e138af28746b883bb605cbf2d37c1ff29dce008050e8" - } - }, - { - "name": "v1.15.0", - "checksums": { - "darwin": "a744ed7fb5c317ef06b2c5ae0d94cec1d41e1d5c2ea40b5ece28e7a340abbad3", - "linux": "0b287e1cafc911ea6e39879f13ea302eeed5f6679bc77c719bfe21870056f3ca", - "windows": "a9e3e52c262b8832f3a83cbef4cbfc3e4c9e9e14baab819b43af040def7a447f" - } - }, - { - "name": "v1.14.2", - "checksums": { - "darwin": "5d72bea6159e41f30865492298aa0e37af164ef22e56165ac78be179947d3b9d", - "linux": "f38f8da05a940589989eb0e85492edfe146caf57f9cfbb4ebb06de877f828f2e", - "windows": "cafd7a10a950d3c63425758b1afb3eaad12a4a5abd586fb83afc27a832a2c62b" - } - }, - { - "name": "v1.14.1", - "checksums": { - "darwin": "d07db8343d06caa484a645bdd84d72d9babba81a18a7a50729616571b5e6702a", - "linux": "a7ad2b00389146a5b1833a35a96e50a224e7b382d072ee771b425eb6719bf109", - "windows": "71217e883e2d1c17b64415fbabef6bf199c7b03f88f66478c659d199c315e315" - } - }, - { - "name": "v1.14.0", - "checksums": { - "darwin": "71dee6241a93945b40ea7188ad15459e50e7b65eab09fed7302d8cacdc58585c", - "linux": "8727635489be895d9b9cfaa5cb599f45799a28fb07e0a2aac351a9aa1c4b46c1", - "windows": "0317e6c338da23ccf0aba698668c6d919f22e1482340a09d1269220063937aeb" - } - }, - { - "name": "v1.13.1", - "checksums": { - "darwin": "cc7eaadea2becc48eee78136f8d569df55a28c46d58d1c8bb434895382aced78", - "linux": "3564b685f8d797df78ebfa2f5b34c99b3c77b0d1f49eab6aab37500f1ba61d98", - "windows": "0d315ec21ca8a34eff5fa4cc478c09ed2d48ae88b3c5d586df9de111ac414d44" - } - }, - { - "name": "v1.13.0", - "checksums": { - "darwin": "5a51ad5147e7152801fce7215676d241989a915b346cf80c814c80f732b172ba", - "linux": "08d1522475e425188863cc2ab664bac8b1df3fa29e87edb6cba17aea82b63fbb", - "windows": "969121a5e932d279451d777fb7a844835949e00f2004d3f92f027ae86dc3acb1" - } - }, - { - "name": "v1.12.3", - "checksums": { - "darwin": "060275cd2129fbf3ce38f245a85651a6f050dff25a3ed0454241e1319ea1ab08", - "linux": "664ebef01166ef6c6b13ff1d70faecca9292e2fcdc85766e8ebd2c607488711c", - "windows": "994e7a232c57b6b917c20ad2e40e88a6b8e80e057212b14def3307e4b22ebbe6" - } - }, - { - "name": "v1.12.2", - "checksums": { - "darwin": "2d71dea18e8dd415b3c0306d91b53d9ca889e45ac3f090e4b8bff8ec7e744bcc", - "linux": "a314c57cfacd034da303bf00406c9ffae2880aaf98a7dc48d9cd92d2caa23237", - "windows": "c3b561a33a64ddd7b0122a8398d2364cdef66e8de76ad876be93946638bd8d36" - } - }, - { - "name": "v1.12.1", - "checksums": { - "darwin": "81a69450b8baaa1abbe88d11c58c2a40e552da4d9052d9e123bdbea3e5607146", - "linux": "a0d8f9d71623e8c66723547fede7df95c12e2a8827fef408b640a6f62bafd57b", - "windows": "db7365266ebb00cd79ae5fc9c854fcf611ad1c6abd152f272727f6691ea8a4ad" - } - }, - { - "name": "v1.12.0", - "checksums": { - "darwin": "7f6c6eeca19d6b16c9043cfc96a42408bbdec8ba90c01bd025249ca855a1362c", - "linux": "3501b6c2be48183affa9497e7db6d751d92e1536267268b73ad1a936a2977122", - "windows": "a5f8666d762146cc7d85916bcb2d6b7246162e4706f10e5c12a795b9d07ea6c4" - } - }, - { - "name": "v1.11.0", - "checksums": { - "darwin": "cc1b8a3327661be6a5d4dc1d6f9891aeeca40f7d9a389aaaffd8d4a1abbe294b", - "linux": "0b07a295d5110dc70907e4660429b8f9b3e8c05119e42f73e192b5313695a913", - "windows": "e94991292f4a0c5b91ef165f826c6a615a122513e8771c8f9ce5b7ec96ab9df0" - } - }, - { - "name": "v1.10.1", - "checksums": { - "darwin": "9c51656f6855b4dff9a6f0bf1136255c18bc07c467ff67b32257da921e879246", - "linux": "acc67ea2ff1ca261269a702a6d998367f65c86d9024c20bbf5ac3922bfca1aaa", - "windows": "60d4db87a834509a69b70ac253de040eabfb9e96aaf3cee159f73c3d5f37e81a" - } - }, - { - "name": "v1.10.0", - "checksums": { - "darwin": "aff7d9e273aff53f8b3ab0e0bc3fdfff76daa19b4a0f5480679ba52fc688eae1", - "linux": "9d34cb50bc39f80d39f92d1fb7cb23a271504b519f5e805574894d395ce3e7b3", - "windows": "9c3410ff03ed0d114e98cbd8cb1b14a3a131e69d92bd964b114ce07fa8385e70" - } - }, - { - "name": "v1.9.2", - "checksums": { - "darwin": "f27016246850b3145e1509e98f7ed060fd9575ac4d455c7bdc15277734372e85", - "linux": "3121f933bf8d608befb24628a045ce536658738c14618504ba46c92e656ea6b5", - "windows": "426586f33d88a484fdc5a3b326b0651d57860e9305a4f9d4180640e3beccaf6b" - } - }, - { - "name": "v1.9.1", - "checksums": { - "darwin": "ac8855ea54e798fa6f00e8c251b55c3d2a54e3b80e896162958a5ac7b0e3f60b", - "linux": "7174c881289a7302a05d477c67cc1ef5b48153e825089d6c0d0bcfaebe33d42a", - "windows": "91d15b2ef8f357aa463ae16de59f6e018120398f492ba4e35cd77f21acb27d5c" - } - }, - { - "name": "v1.9.0", - "checksums": { - "darwin": "2a074b0d842e3d9272444990374c6ffc51878c2d11c0434f54e15269b59593f9", - "linux": "81d77d1babe63be393e0a3204aac7825eb35e0fdf58ffefd9f66508a43864866", - "windows": "d11a957704c23670eac453a47897449a2aaab13b7dcd6424307f8932ac9f81bb" - } - }, - { - "name": "v1.8.2", - "checksums": { - "darwin": "cbd1ff4dd239180b417bcd496fe0a31dbe8f212586765c040fdd20991ca13d50", - "linux": "0b21b50a8064aaea816cc7495cbbe324ab126284b0dbbb15c9f4df5ac72c22fb", - "windows": "076ccf11e8238647101e26d327adb0880fdac63cbd6e12bd0bb1420f09a85b9c" - } - }, - { - "name": "v1.8.1", - "checksums": { - "darwin": "a19ab670ca81f11a82b6868e2995b5ab178fe121f6638bf40ec7d49c266f3d32", - "linux": "028bfb3aa0e5a1d1de49b13e4550d3d2885f2d0bb572f76a72372aba93fff22c", - "windows": "3d4daf04ac2addcc52b529bdebe50488867c5ce63d4e94083b0030be1e1e7b91" - } - }, - { - "name": "v1.8.0", - "checksums": { - "darwin": "deb72f43ac361607e86a1b78668b19225e7d0956499fee6e3ed7d92b6b562451", - "linux": "e26af291482c6793cff4e35dc154922bcf0d4bca60a593c90fab891f602839ad", - "windows": "ee2162b0a2e3d1a1217400d34a2de2ab82a0c51e14236acb2b36faa3cdde3185" - } - }, - { - "name": "v1.7.3", - "checksums": { - "darwin": "e8d762357123773f6c4dc300f8bccec3cdf2326c94f03a8aeb934e4e73fd59b8", - "linux": "575adc22884b49ecce9c9d289a7127b64f2759f639cb894c3040890bee1939c5", - "windows": "0fdc0d60e36001c021b6cc09e699e2a38b4070661cf7e78badf750ee84340afa" - } - }, - { - "name": "v1.7.2", - "checksums": { - "darwin": "fcfb05f44620e54ce81fe8ac415196230ceb42c4007171533ef2049b7d4e8646", - "linux": "9f543f464b4d93a259f7d5a7578edff1316370d45b5a0679b86ed7a61b01634d", - "windows": "cbbe30445baffa9a3d77834d4e24c1ec595ecc2b7933db21109aa90aa79eaddd" - } - }, - { - "name": "v1.7.1", - "checksums": { - "darwin": "ac6b1eb8ff6a98f0f4a8f26fddd7a9fd8dbdd7a5029cf87a9315399d31e4f6ce", - "linux": "1313da4fce807f2d5cd4664d8a59422067a3377ddd37fa66df9aa0bb228e154b", - "windows": "640ad4ba69926be2ea64140a5d6d80122f030c8bf75ae4afeca11eeff865feac" - } - }, - { - "name": "v1.7.0", - "checksums": { - "darwin": "1f3785e9521eabe241df0481fa41887a6a3873307bac8a89fd0e48aa7612be29", - "linux": "f1fcab9f161a64f19b618a901e50488ed6f1c6ab20695c82623586a701d2d261", - "windows": "2f4448f32e505bf38ba52cd3678c73622a6bb452c63a4179d590f6da26520c68" - } - }, - { - "name": "v1.6.2", - "checksums": { - "darwin": "5ea5168a80597ee6221bf50a524429a24a37f0c0f36725e6b297dc5a7a6a2105", - "linux": "eabd027438953d29a4b0f7b810c801919cc13bef3ebe7aff08c9534ac2b091ab", - "windows": "79d66c874cfe3497656e9ba191680cc95abd92d2f722b10de38f00b76ef82393" - } - }, - { - "name": "v1.6.1", - "checksums": { - "darwin": "bcfc181ade08bd2a87fca70f0aa59f9f4b23c893fc2b335b3cb8f05b84ae2d34", - "linux": "cbd526d64531266d42f02667339d3c53e5a399e3abebda63c96b0bbd6b7e935d", - "windows": "1d7372fcf099d583d4140a4ce4aa8f5c2752d3bd0d143e53647aee6221dcb663" - } - }, - { - "name": "v1.6.0", - "checksums": { - "darwin": "fd1af02f0fc11fb0bec35b9ae1f6bf2d157f51948155d8b1ddc899521642fc32", - "linux": "48738607ecdb0b00815599230a2a2b17dc90bd3bbcb1b217bace043f78370db3", - "windows": "20e7db220308f06913acd10addb1ec01c87b74245cebc70fa18a979c1b323f34" - } - }, - { - "name": "v1.5.2", - "checksums": { - "darwin": "734306019f837a6aee9cb7a0245839f98ea7688ee2cde387099334cb9356c2c4", - "linux": "1972a9a96de85e480012f6d2c9b8a88fd29217b99b1a973ed5e199386659f7e9", - "windows": "9f012922fd8d701070ef3951b0df77b720805a204d4d0dfa15d11899fda8a2d0" - } - }, - { - "name": "v1.5.1", - "checksums": { - "darwin": "7ba345034e176566930d873acd0f38366dd14fdafd038febe600ea38c24c4208", - "linux": "5aed23a876770c92d0162fcf7862d855dc306516614be78ac6fbc47b5cba55e6", - "windows": "5a7bd914b0ae57e0853d72a06b7fb72e645417f2f3cd86d0f1bc4f636a04d160" - } - }, - { - "name": "v1.5.0", - "checksums": { - "darwin": "eb716c176f404bb555966ff3947d5d9c5fb63eb902d11c83839fda492ff4b1fc", - "linux": "ca50dcc7c83d4dde484d650a5a1934ea1bef692340af3aa831d34c6e847b2770", - "windows": "bdd61e446f49570428848ad15337264edfecc55d1dd4aed4499d559f9c8383b9" - } - }, - { - "name": "v1.4.0", - "checksums": { - "darwin": "ae19f66c8f4a5716a1c22125af1bcf3d41d1b81cfa5fe7fc76a50c0c46e2c409", - "linux": "e63b8007c2d39fd037587adff2ec5360a910b51f427f0d1521fce5f3cac5e0fd", - "windows": "cd77fbe1b5892de2697161483f44f4ef6833c1418b53e913c2edef3ac95e7475" - } - }, - { - "name": "v1.3.1", - "checksums": { - "darwin": "5947abe57fa390fcfd96849ac87fc9319f026d4b13f944b6beecc3615e3668be", - "linux": "057a4f4ca36ff51ecad59509d94d3694543b874949e805e2b79792ceef21f983", - "windows": "be1999452b166de72f946aac17ca7c40d53b8a5c8f59dad912c2413f7cc42563" - } - }, - { - "name": "v1.3.0", - "checksums": { - "darwin": "5bda29e2d990bb8ac9da1767143e228772adc45507d22a49b5af70b03e7db682", - "linux": "5aa7c5f0b6dd09348f7e2435b9618f6a916fbb573580619b393b514258771eab", - "windows": "d808b6e42e6f53c9338d135a352bebd4469634f33646d06e7cad3569330225cb" - } - }, - { - "name": "v1.2.0", - "checksums": { - "darwin": "183d017d094b7783c938dc709dbdfc9a48f92299178234f89047dfbb083a592c", - "linux": "123fc9f5656333fb2927cf91666a91cd5b28ef97503418ac2a90a2109e518ed9", - "windows": "f6c30cb88ec61bc6fe17532a3ef56e4f1fcef2473e3d73fc56f352b44784490d" - } - }, - { - "name": "v1.1.1", - "checksums": { - "darwin": "cf6b2c0397147fa998a5c4e36ed7ad045d67f929daa3e46a1d01656b5ab7cac5", - "linux": "4596c0daabfe637912e2372c41cc11116ca053a1f7045af8a731265e45f9ca83", - "windows": "e86e9c7c1c25cfd251f010b62e83fdf2ee2eefc3e73b4b1f7fa18971577150be" - } - }, - { - "name": "v1.1.0", - "checksums": { - "darwin": "3f635089d93ba7bd193b8f015bfa9434b810256daa8ced03816c7f0df7b06a96", - "linux": "43ce88a10c7b57f5e4f83e5a1485e13e4ad537bfb20f7d57364f66450b872634", - "windows": "2a8e95fbe4ec9b32c603767f16b731b5f09ddd04c3e43f6bbe7fffd22afbf811" - } - }, - { - "name": "v1.0.1", - "checksums": { - "darwin": "0af8a3f582c9284ffe10e99444b60a75241325f2bc9ab43ec758802f2b89e1db", - "linux": "7b56374955990ef2dd0289e6ecb62cf2b4587cab2b481d95f58de5db56799868", - "windows": "58abb5fb3e694a451102963e04ce13ea0cea46b7bf5c7947f40fdfc673282ac9" - } - }, - { - "name": "v1.0.0", - "checksums": { - "darwin": "865bd3a13c1ad3b7732b2bea35b26fef150f2b3cbfc257c5d1835527d1b331e9", - "linux": "a315869f81aae782ecc6ff2a6de4d0ab3a17ca1840d1d8e6eea050a8dd05907f", - "windows": "a9e629911498ce774681504abe1797c1957e29d100d40c80c26ac54e22716a85" - } - }, - { - "name": "v0.35.0", - "checksums": { - "darwin": "9fb0ce4decb0f40b1b2ee11cad0aa89e13e2d5c46ff0d35875a0a65788dee6b4", - "linux": "e161995604c42c37a797fd11fac5d545f8b75f0796afc3b10679253bf229ff3d", - "windows": "748c9087e876491332897d8dc937eeea92f9fda9003443ef668dc75f5638ed5b" - } - }, - { - "name": "v0.34.1", - "checksums": { - "darwin": "54b865528ff14a4cfa479bd7c5630db81e0695c3b4b85939b0735dc1203541d3", - "linux": "8db7e8a128de48ebeb1cb8cacb457f60b5420706e08c190e466f4e9b971fd8f3", - "windows": "90fdaddd3ffe62beef2503e59295b15124b454b795324a8dcb54dd0cc7ba3296" - } - }, - { - "name": "v0.34.0", - "checksums": { - "darwin": "8932ee06a8db3fae696d97bfefa2d7ad2168ffa3046e0729f39164cf11a78911", - "linux": "97a871bc4d62287b167db1feb1ef167925e2b51d7a0fb4bfe3ac215402e10deb", - "windows": "89e8f10ab97f3440c5dad47f6be96ed49cf9d7dc3a15849f682440a0a3649ea1" - } - }, - { - "name": "v0.33.1", - "checksums": { - "darwin": "ff5aee67920e9615aef804ed0db9d0dfaebfb9f54ca093ddc16c67b3834baaf0", - "linux": "8a5effbbe6a847eb61e676b6ad62883d9c19abe75452d766043f41a59248f191", - "windows": "bf8cd98dec45725cb4b4123be59a54751d0b65c435573b8a19f2c439a91f1a4b" - } - }, - { - "name": "v0.33.0", - "checksums": { - "darwin": "bfa1b27ef6ad3912a24917c07237409db033e1454fe9c8df063c1fb1180b3b7a", - "linux": "8a2eb70571993efbd5b44eda7ed3b04853ef877973bfe1a2c768ce649f8e5af5", - "windows": "1ea3386fc15dc96577ce6a2f2f2193d1f4e63673146c3528970c8f4d49c0304b" - } - }, - { - "name": "v0.32.0", - "checksums": { - "darwin": "d5b21adacd4b6bad9006816e4bdb29f39318a60919e7a6bb5e388a6299fffd0f", - "linux": "3298d3183deacd9ddd3032dab113a64d863df7648d6d24693284ba4193e95b49", - "windows": "31668f64f6be25644b22d0465e0f72d745a027804b2c8685e040b8147bacfba1" - } - }, - { - "name": "v0.31.0", - "checksums": { - "darwin": "621189b5ec9cbb55003ee3577d480e847c0f80a9ed58f4fb3ed567bb7be623a1", - "linux": "5926978aee75776af0867d112a77334b10ec65f687d734f238bfd88960c983c2", - "windows": "1ae607a849569664f6c5d87f969b1f9a096524515a6524be07fd364b7d405f6c" - } - }, - { - "name": "v0.30.0", - "checksums": { - "darwin": "e09789c4eb751969f712947a43effd79cf73488163563e79d98bc3d15d06831e", - "linux": "f6fcd916adbdabc84fceb4ff3cadd58586f0ef6e576233b1bd03ead1f8f04afa", - "windows": "8f09d63c64a2a0c4810c492066b16ccd4bd63e2f3c2d0eb55e49c51c915493f6" - } - }, - { - "name": "v0.29.0", - "checksums": { - "darwin": "196b2cbf4003ccc3574ba105437ae675bcd9cf80e6f8396b5581d40c35c6070d", - "linux": "0f8890d4a0869e6e80a62e63ad08336caf75e38111307e8fe57773d706c4142d", - "windows": "78aeb9ccff70121bc8dd0d6fb8a9c9438a39da806104d1be09923f369f496c32" - } - }, - { - "name": "v0.28.2", - "checksums": { - "darwin": "dca43053510f5e8987ff89abf601594eaf58bc5d447d74f9a08e300f3d92133f", - "linux": "3c84872ffa5ddbce472062fb548f9b3a25af72587d35243e12f18d86aaa6a085", - "windows": "1f9840a3a54d793b60ff1b9c7ef1c87269ee24d118f7ef47667d9f7a0ef7861a" - } - }, - { - "name": "v0.28.1", - "checksums": { - "darwin": "7d9b67c4c716184d6a854fb91b08b99094356a44b51e315659b254fbd74022cc", - "linux": "af261082d0ba9eb2dc3836a4cd903a449bafcb8647c5d5cb555c4e9144093627", - "windows": "e94d8d597e1c876dc45d6f63254e296bc95ee5c98c0a06b28050f59dad7d90c7" - } - }, - { - "name": "v0.28.0", - "checksums": { - "darwin": "bfde769dc3e1bf050a079927fdcd646723ae73d13dda3505eea6a80acc27cb57", - "linux": "dfe361f86288a4cedcdc3bffbbe5b4716c7ee19cbb82d70696b0f20596a15c65", - "windows": "4ee548642184648b5dfb1380dc08a3541d3b665446c602830253126123ae5be5" - } - }, - { - "name": "v0.27.0", - "checksums": { - "darwin": "d335f7a6a03d7aead5cb95867ecdb96b845b3520593df16688e6dfac7d4717c1", - "linux": "7c03650d33e029f1dbf810d27dc1fc197ad9b889f645a4d5c353bb1c46d3ff2a", - "windows": "c714aa1667cd7d73807e23904c37a9b696e50e8143f5705660c0f1147d8307e8" - } - }, - { - "name": "v0.26.1", - "checksums": { - "darwin": "8cabcaa244a7d62697ad8f4393e3661c9e9cd598a75df79a8d1ffe803f80b209", - "linux": "3c956459ee8dad9452c97d54463f982d1d511a9afaa0f3851d88320bd5dcf58a", - "windows": "498f9f090972c047836fcb1580bb6fcee53fe920955377569d903ba72a0c425e" - } - }, - { - "name": "v0.26.0", - "checksums": { - "darwin": "0b2c63c6f5a00525e679b01948edffcb16e3bdb37ea0db3ed89431dd0e4c3b3c", - "linux": "65dcc26a595c73b5bd2a3e47c3d5aa3bbdef81fe603f8d56f947d37cb12c74fc", - "windows": "a7d8edb6713b819a8f44b732314a1b8fe5b77a4397693c633f641592fe6e32f1" - } - }, - { - "name": "v0.25.0", - "checksums": { - "darwin": "0d85ecc1cd064bae04ea4a8ef634d4fdc80318b65a2b8d14d105f1e15fcbced0", - "linux": "5676f2d4f37f1c6f9cf99d56c7e1a3016976d657f9715e8cb255667a0c5803c1", - "windows": "de2cbda425ae76ec7240d4543d8642598974fa558727bee10b7866ceb72c3fd9" - } - }, - { - "name": "v0.24.1", - "checksums": { - "darwin": "f89abc1caaf73f3a623c6c5b792833fab2e0667cd0d1ebaffc05918b3b81c164", - "linux": "1261de09386fd1f4ee7a4645958757c2c9e69f419a2a4ca8aff475017a7e036e", - "windows": "61e1aa977ffdfd5373158820f8d57a8f4af7c43e78b8598651dea65be59b8bab" - } - }, - { - "name": "v0.24.0", + { + "checksums": { + "darwin": "4c32b9e5fed64a311db9a40d6fdcc8fa794bc5bbc546545f4d187e9d416a74cb", + "linux": "d5cf561c71171152ff67d799f041ac0f65c235c87a1e9fc02a6a17b8226214d0", + "windows": "4cd2ecacf064319e0c38768d40ef698d7d9bf3e2fa1b4a9016293034cac04d9c" + }, + "name": "v1.37.0" + }, + { + "checksums": { + "darwin": "a7e3da0db4041b2f845ca37af592424a9cbe34087ac922220b1e3abc4e1976ea", + "linux": "cddeab5ab86ab98e4900afac9d62384dae0941498dfbe712ae0c8868250bc3d7", + "windows": "c7504d574a416a4dd4c948e8bab9c2c2028e12c06d038046d8728c96c7cf4730" + }, + "name": "v1.36.0" + }, + { + "checksums": { + "darwin": "ba5ab2789ee0c40cefde30762656f3aa0bf47b15ee0bd808f3d7523cc54d75df", + "linux": "75369b2d64543284232bcf7578b77d42953de213d1f19f745b414556239a3f0d", + "windows": "7b7d2dcb130dc066d6f2d01dd1a54b92a35f8f7b0f849283a8bf4455dff8daea" + }, + "name": "v1.35.0" + }, + { + "checksums": { + "darwin": "0f73648ab726c6d7822444536e7a5d7eb4d8b0c193ecfc17771d4811c4efa5c0", + "linux": "c4a625f9b4a4523e74b745b6aac8b0bf45062472be72cd38a23c91ec04d534c9", + "windows": "cb80b30202901c10baf207441bf5c7a18b33e11618a2a474a9403eabdf2de26b" + }, + "name": "v1.34.0" + }, + { + "checksums": { + "darwin": "6e1c3911c39b8de6b3ca31287f55b4f07ef329cd4b9ed62bf08378c2975580df", + "linux": "386eb267e0b1c1f000f1b7924031557402fffc470432dc23b9081fc6962fd69b", + "windows": "a7e97b490db740eeb80d8ce15ee8db6dc9ea9e07e9adef2ea7ca74bb3e8d32e5" + }, + "name": "v1.33.1" + }, + { + "checksums": { + "darwin": "3aa579e09014c25a1a8e813f3d003eff450a809a04f229d89cd8ed70de81f791", + "linux": "4bfdc17f0dce678432d5c02c2a681c7a72921cb72aa93ccc00c112070ec5d2bc", + "windows": "966c0121e207faa6d2ead6b4710e29675fee362a5a69f71269ef6a8018b84036" + }, + "name": "v1.33.0" + }, + { + "checksums": { + "darwin": "8ca4b2cce6208f102b851d0ea8292c1324e8358b7ac208dd1079e41af558def8", + "linux": "1acbb6e0358264a3acd5e1dc081de8d31c697d5b4309be21cba5587cd59eabb3", + "windows": "d4060da824524df744ba85fa91394cabfab15f110c03b1d8b7f1d309116fed15" + }, + "name": "v1.32.0" + }, + { + "checksums": { + "darwin": "c655de8bf27557f706f196a08a0afb8730e98c4976207542e05b73c11bcc0b38", + "linux": "88a80c051696adaa1a2a0c6aba5fde18176fd5afa87be10617ecaab9cd3a719b", + "windows": "5754e4b86ee66f111f4460f45730f32592701283ac79e1d9c07b217aab236dae" + }, + "name": "v1.31.2" + }, + { + "checksums": { + "darwin": "a465e5b537b63ac8e6624396f490dd79516fd625c1110cbf1f49e7b55c1dfcf6", + "linux": "ebcdfb0a520e9e746360a9dd954a9006ca75770e53fcdae493b6ac9a20026733", + "windows": "a08699d25fede796e6fdc56d8630380bd5864fb291592fc2be24fe881656d064" + }, + "name": "v1.31.1" + }, + { + "checksums": { + "darwin": "38e6b4d5b4bc33aaa3f18a5f02d5eb68a9ad3afc997a7fb0eb3d3ac9c5967139", + "linux": "0bcf12e4f72a2f2c9250bd85948166134a292c456e76224f517c4a8a52a948ac", + "windows": "cc40ddbad68457e78651e47e63493a5a409ced511fef494d3c536173b53f59bc" + }, + "name": "v1.31.0" + }, + { + "checksums": { + "darwin": "b5938a8772c5565b5d0b795938c367c5190bf65bb51fc55fb2417cb4e1d04ef1", + "linux": "e53d9e8c31f4c5f683182f5323d3527aa0725f713945c6d081cf71aa548ab388", + "windows": "cb3cf94860bd7a6ccb514fb1fed6641c51bcd9de1ea1a823cf862e632852af4a" + }, + "name": "v1.30.1" + }, + { + "checksums": { + "darwin": "929e79926e27f149ada6f1c4ee5774fbde586359b731868e15af28b6c24ab57c", + "linux": "aea52db72714b832f7f544ff0b71fbc231c47c044deda3f822708431dc68cc48", + "windows": "670bcaae30f1e6b8a8fe3a6b0566a3df397581ddefc70bff1bcf9455c477c0d7" + }, + "name": "v1.30.0" + }, + { + "checksums": { + "darwin": "cb54ef7cdbcef7f078ac2966bc6c0aa43db75bbde8b361f428858137e803dac0", + "linux": "aafb65cbee8e971ec00509fdb1817254b17d6bee4890b839c3b6e8f11e97413a", + "windows": "c53785c02c0327e74342e7100dd2fa8a52a689c9fea7782a9a1491b5d68dbd6a" + }, + "name": "v1.29.0" + }, + { + "checksums": { + "darwin": "667ab2baeae7829392533a9ef733e94ea88c87a8edf38ee088d349077152cc95", + "linux": "58cead5ece9815a61d4be253a07b2385f8cf373d9e1eba5c9783444e4e9e2d8e", + "windows": "65304e5c5c98a688fb0abc2d76d77b3b441f9501d6dfa71d96a0532f4114d34c" + }, + "name": "v1.28.0" + }, + { + "checksums": { + "darwin": "aa60ff42b4d60b1a65552a5f527d78f68efa887e1eab0af013996badfbccc3c8", + "linux": "159bc79f3914dadb7c9f56b6e9d5b73a1c54acb26dca8f1ea84b99ff5da42620", + "windows": "d5957435f3a94a43ce0c764ecaf3b9c4f7c6f8bcafdc4ef7b2b86937ec5c311c" + }, + "name": "v1.27.1" + }, + { + "checksums": { + "darwin": "fca0cbabad64868cf00d37349b953b16c06bafa13569595ef7721bd9178b4a5c", + "linux": "b6ab1207474255b9ea755ced4394b4b618a1cfa7b8394ddd1d307288130fb495", + "windows": "ebecc7633b3a91b652a81fb17faa4d1bb35fecff94e6309533e95933c9224ef7" + }, + "name": "v1.27.0" + }, + { + "checksums": { + "darwin": "57578517edec2fcf8425b47ef9535c56c1b7c0f383b4d676ebf3787076ac4ede", + "linux": "9acd25706661b932ee98063147e58080cb949b92fd0d97b3b96dc5f898dcad21", + "windows": "9c9934a396acdd164e2b2449def5d831aeb1577571b8ac9d922ffe466b0f270e" + }, + "name": "v1.26.1" + }, + { + "checksums": { + "darwin": "cdfbbbdd01de8e8819d7d917f155c7a7cc6236af1ac97c4ae6f3ff9252b150b7", + "linux": "a988b7c890d9dc34033155b8b721827b3eff0e22c3d436409a8a3310aa564547", + "windows": "08c06e6ddff4f2e47a2d094365aeb85a3ac8ad1b86361db9b06a02f3668bd5a3" + }, + "name": "v1.26.0" + }, + { + "checksums": { + "darwin": "d125772083a2e9d6f6e8bd9791e3fd0d2cbac071416962a490b1ce19a045f486", + "linux": "ef610fa83571920f1b6c8538bb31a8dc5e10ff7e1fcdca071b2a8544c349c6fd", + "windows": "06c99a08efb8ea540fb6aa6e4c5bcb35c7688a0b04f60d938366355bdd491eee" + }, + "name": "v1.25.2" + }, + { + "checksums": { + "darwin": "7b0ecea078e370d26f45ee51b60d322f46f9f3df54b92f81d342244ffcfa14d9", + "linux": "1a69a286e9846438778a712297d1daec44d2c702c5f4540d97b3269fdb2b4e3d", + "windows": "7c12564a00b74704d43c347584615633d6de158f82c48c04fac909d7487bf6c2" + }, + "name": "v1.25.1" + }, + { + "checksums": { + "darwin": "55f14e4f411370da18d7b9432ae4edd128f4f047bbc87a278e08ba256ff6f669", + "linux": "3bc218476cf205acf11b078d45210a4882e136d24a3cbb7d8d645408e423b8fe", + "windows": "bb729590e111652d5f444fa66b66196491fa21c0713e4ff29f6e5360ab13a02c" + }, + "name": "v1.24.0" + }, + { + "checksums": { + "darwin": "cf2971d4b83b9c5e359d644410dcca9bba6933ee08427967302e6767f6628086", + "linux": "752d91414793b6a88b309c806b65841ffa62a3bf07383146bd54afbf15de80b4", + "windows": "994e806468425e23aadcf86b99f0341fa1848a9a70456f09111c071f769c552d" + }, + "name": "v1.23.2" + }, + { + "checksums": { + "darwin": "2b6addab443e384fec975b9f4d35a931b1988961f6a9e87f10768596e23eb70e", + "linux": "fc23f94e870b18c2fc015af18fe2dee00452059100e42a5483b9440da1a5fba2", + "windows": "4050b6c97b18c6c25e1d760ff2d93333af7fe1f69d3eb29b5a20e60d6ef3f766" + }, + "name": "v1.23.1" + }, + { + "checksums": { + "darwin": "943f522393e04879bb83d0e484d608dd4086e92c58a0161b4f29dc9691a9ec80", + "linux": "a34f1e46151f3e302b7d92dee680a0cceaba5c5d6ab79baaf695b17c4a61df38", + "windows": "7b7f4c7be4fd954037dbb0f05ef5631f1b453d0d08c8de7c4d402261816b50ac" + }, + "name": "v1.23.0" + }, + { + "checksums": { + "darwin": "932a278393cdcb90bff79c4e49d72c1c34910a71010f1466ce92f51d8332fb58", + "linux": "7579e5763a4e441500e5709eb058384c9cfe9c9dd888b39905b2cdf3d30fbf36", + "windows": "8764ca0e290b4420c5ec82371bcc1b542990a93bdf771578623554be32319d08" + }, + "name": "v1.22.0" + }, + { + "checksums": { + "darwin": "e2043883ca993b2a65396d379823dab6404dd842d0cc2a81348d247b01785070", + "linux": "5d423a00a24fdfbb95627a3fadbf58540fc4463be2338619257c529f93cf061b", + "windows": "74c961877798531ab8e53e2590bfae3cee7690d0c2e0614fdb44339e065124b5" + }, + "name": "v1.21.0" + }, + { + "checksums": { + "darwin": "5185b7a4156671444dc7ad33b013b90f8a0ffb5186fc5c1a084e7c1cb6cd0788", + "linux": "87e5260afcba82dfcb7681b542c3e15665113b6d388faebe77bb0a784737dd13", + "windows": "ab3239792c89225b9f1b6f70cebe2fd6f6afd95d3755a4b708937a8ed876042f" + }, + "name": "v1.20.0" + }, + { + "checksums": { + "darwin": "8111d393424aaf141ad4dc6c520979ca6e1ba39249d07df3979c9a6152adf9e6", + "linux": "e4df939a230d6eb35aafd2971d0bb6ec27f4e0ebee9a41cb8cf5ae144de97af8", + "windows": "5ebfff08582aa7b4a9aa75517bedc3fbde4e0dca3a412f1f9001b29eacef1ae1" + }, + "name": "v1.19.0" + }, + { + "checksums": { + "darwin": "afca0cf5063e8b444b2201808fde3b95a8c59c509bd3e77574111697adb51315", + "linux": "86f65235361ebe4916350d988c756fcb2f27fc1bd3e2d84912462b39bb660dfe", + "windows": "db7d701cc737baa8daff58fb68e038f7d06324e972429444767f3514ea38c790" + }, + "name": "v1.18.1" + }, + { + "checksums": { + "darwin": "a8c78a01fb129a7c66bad25bace89dc59e912b7fc0a8456de3321f9adce7a01e", + "linux": "7a330bcd45c96633c14aabcae74b3308eacf6e552a5f6ccd565a03e2f293785f", + "windows": "264b8bd9062d73b7570a26455f646fbfbce9b7bfaf375cf5642ae17937e1f79a" + }, + "name": "v1.18.0" + }, + { + "checksums": { + "darwin": "c9361152a0a4aaed23d212b792f1907454f5fdd950f0cf9ac65c789744acf5ac", + "linux": "03a6d6cccecb7a33a09afc6dae40d8d76ccfe168aa4aba1a18c1f45bbab120c2", + "windows": "5e1d57379aa729b0a9247d5be6617906ebb7e934105df06eb6b24dda08899d3e" + }, + "name": "v1.17.1" + }, + { + "checksums": { + "darwin": "ad2b4de4b3f8863c2cfa9f5072cdc787141b0587fb9855dd645242253489fab3", + "linux": "e312901e12c347d0e4eec74d94b8d75512943eb62479b441bb1332f05cde0d09", + "windows": "dcae6ee972a49c4389d5e3ea81039b826cda55fefbe23b9273eeb46514abe244" + }, + "name": "v1.17.0" + }, + { + "checksums": { + "darwin": "546329a1a2448e1e8a483241c23a3ca272bd795df5a78bd6bf922699d3a75823", + "linux": "af29a48b2d79075f9d57be3a28724eef2cd628bb87283ed58dd72cbe1f8967c4", + "windows": "8928ad4ddcbcf203bf688be6fac826d12483116b4ac0625f28dbb8ab6a278979" + }, + "name": "v1.16.0" + }, + { + "checksums": { + "darwin": "ab47a4e3ff742db8a88d7bf0fe9cb9c6805e6f1df2545d8888f196c46b96f714", + "linux": "88c3bfac3880e897e4d032801b02f02fdda642b75d76ebeb5df545cd90eee409", + "windows": "89e34d6137bba7a59b74e138af28746b883bb605cbf2d37c1ff29dce008050e8" + }, + "name": "v1.15.1" + }, + { + "checksums": { + "darwin": "a744ed7fb5c317ef06b2c5ae0d94cec1d41e1d5c2ea40b5ece28e7a340abbad3", + "linux": "0b287e1cafc911ea6e39879f13ea302eeed5f6679bc77c719bfe21870056f3ca", + "windows": "a9e3e52c262b8832f3a83cbef4cbfc3e4c9e9e14baab819b43af040def7a447f" + }, + "name": "v1.15.0" + }, + { + "checksums": { + "darwin": "5d72bea6159e41f30865492298aa0e37af164ef22e56165ac78be179947d3b9d", + "linux": "f38f8da05a940589989eb0e85492edfe146caf57f9cfbb4ebb06de877f828f2e", + "windows": "cafd7a10a950d3c63425758b1afb3eaad12a4a5abd586fb83afc27a832a2c62b" + }, + "name": "v1.14.2" + }, + { + "checksums": { + "darwin": "d07db8343d06caa484a645bdd84d72d9babba81a18a7a50729616571b5e6702a", + "linux": "a7ad2b00389146a5b1833a35a96e50a224e7b382d072ee771b425eb6719bf109", + "windows": "71217e883e2d1c17b64415fbabef6bf199c7b03f88f66478c659d199c315e315" + }, + "name": "v1.14.1" + }, + { + "checksums": { + "darwin": "71dee6241a93945b40ea7188ad15459e50e7b65eab09fed7302d8cacdc58585c", + "linux": "8727635489be895d9b9cfaa5cb599f45799a28fb07e0a2aac351a9aa1c4b46c1", + "windows": "0317e6c338da23ccf0aba698668c6d919f22e1482340a09d1269220063937aeb" + }, + "name": "v1.14.0" + }, + { + "checksums": { + "darwin": "cc7eaadea2becc48eee78136f8d569df55a28c46d58d1c8bb434895382aced78", + "linux": "3564b685f8d797df78ebfa2f5b34c99b3c77b0d1f49eab6aab37500f1ba61d98", + "windows": "0d315ec21ca8a34eff5fa4cc478c09ed2d48ae88b3c5d586df9de111ac414d44" + }, + "name": "v1.13.1" + }, + { + "checksums": { + "darwin": "5a51ad5147e7152801fce7215676d241989a915b346cf80c814c80f732b172ba", + "linux": "08d1522475e425188863cc2ab664bac8b1df3fa29e87edb6cba17aea82b63fbb", + "windows": "969121a5e932d279451d777fb7a844835949e00f2004d3f92f027ae86dc3acb1" + }, + "name": "v1.13.0" + }, + { + "checksums": { + "darwin": "060275cd2129fbf3ce38f245a85651a6f050dff25a3ed0454241e1319ea1ab08", + "linux": "664ebef01166ef6c6b13ff1d70faecca9292e2fcdc85766e8ebd2c607488711c", + "windows": "994e7a232c57b6b917c20ad2e40e88a6b8e80e057212b14def3307e4b22ebbe6" + }, + "name": "v1.12.3" + }, + { + "checksums": { + "darwin": "2d71dea18e8dd415b3c0306d91b53d9ca889e45ac3f090e4b8bff8ec7e744bcc", + "linux": "a314c57cfacd034da303bf00406c9ffae2880aaf98a7dc48d9cd92d2caa23237", + "windows": "c3b561a33a64ddd7b0122a8398d2364cdef66e8de76ad876be93946638bd8d36" + }, + "name": "v1.12.2" + }, + { + "checksums": { + "darwin": "81a69450b8baaa1abbe88d11c58c2a40e552da4d9052d9e123bdbea3e5607146", + "linux": "a0d8f9d71623e8c66723547fede7df95c12e2a8827fef408b640a6f62bafd57b", + "windows": "db7365266ebb00cd79ae5fc9c854fcf611ad1c6abd152f272727f6691ea8a4ad" + }, + "name": "v1.12.1" + }, + { + "checksums": { + "darwin": "7f6c6eeca19d6b16c9043cfc96a42408bbdec8ba90c01bd025249ca855a1362c", + "linux": "3501b6c2be48183affa9497e7db6d751d92e1536267268b73ad1a936a2977122", + "windows": "a5f8666d762146cc7d85916bcb2d6b7246162e4706f10e5c12a795b9d07ea6c4" + }, + "name": "v1.12.0" + }, + { + "checksums": { + "darwin": "cc1b8a3327661be6a5d4dc1d6f9891aeeca40f7d9a389aaaffd8d4a1abbe294b", + "linux": "0b07a295d5110dc70907e4660429b8f9b3e8c05119e42f73e192b5313695a913", + "windows": "e94991292f4a0c5b91ef165f826c6a615a122513e8771c8f9ce5b7ec96ab9df0" + }, + "name": "v1.11.0" + }, + { + "checksums": { + "darwin": "9c51656f6855b4dff9a6f0bf1136255c18bc07c467ff67b32257da921e879246", + "linux": "acc67ea2ff1ca261269a702a6d998367f65c86d9024c20bbf5ac3922bfca1aaa", + "windows": "60d4db87a834509a69b70ac253de040eabfb9e96aaf3cee159f73c3d5f37e81a" + }, + "name": "v1.10.1" + }, + { + "checksums": { + "darwin": "aff7d9e273aff53f8b3ab0e0bc3fdfff76daa19b4a0f5480679ba52fc688eae1", + "linux": "9d34cb50bc39f80d39f92d1fb7cb23a271504b519f5e805574894d395ce3e7b3", + "windows": "9c3410ff03ed0d114e98cbd8cb1b14a3a131e69d92bd964b114ce07fa8385e70" + }, + "name": "v1.10.0" + }, + { + "checksums": { + "darwin": "f27016246850b3145e1509e98f7ed060fd9575ac4d455c7bdc15277734372e85", + "linux": "3121f933bf8d608befb24628a045ce536658738c14618504ba46c92e656ea6b5", + "windows": "426586f33d88a484fdc5a3b326b0651d57860e9305a4f9d4180640e3beccaf6b" + }, + "name": "v1.9.2" + }, + { + "checksums": { + "darwin": "ac8855ea54e798fa6f00e8c251b55c3d2a54e3b80e896162958a5ac7b0e3f60b", + "linux": "7174c881289a7302a05d477c67cc1ef5b48153e825089d6c0d0bcfaebe33d42a", + "windows": "91d15b2ef8f357aa463ae16de59f6e018120398f492ba4e35cd77f21acb27d5c" + }, + "name": "v1.9.1" + }, + { + "checksums": { + "darwin": "2a074b0d842e3d9272444990374c6ffc51878c2d11c0434f54e15269b59593f9", + "linux": "81d77d1babe63be393e0a3204aac7825eb35e0fdf58ffefd9f66508a43864866", + "windows": "d11a957704c23670eac453a47897449a2aaab13b7dcd6424307f8932ac9f81bb" + }, + "name": "v1.9.0" + }, + { + "checksums": { + "darwin": "cbd1ff4dd239180b417bcd496fe0a31dbe8f212586765c040fdd20991ca13d50", + "linux": "0b21b50a8064aaea816cc7495cbbe324ab126284b0dbbb15c9f4df5ac72c22fb", + "windows": "076ccf11e8238647101e26d327adb0880fdac63cbd6e12bd0bb1420f09a85b9c" + }, + "name": "v1.8.2" + }, + { + "checksums": { + "darwin": "a19ab670ca81f11a82b6868e2995b5ab178fe121f6638bf40ec7d49c266f3d32", + "linux": "028bfb3aa0e5a1d1de49b13e4550d3d2885f2d0bb572f76a72372aba93fff22c", + "windows": "3d4daf04ac2addcc52b529bdebe50488867c5ce63d4e94083b0030be1e1e7b91" + }, + "name": "v1.8.1" + }, + { + "checksums": { + "darwin": "deb72f43ac361607e86a1b78668b19225e7d0956499fee6e3ed7d92b6b562451", + "linux": "e26af291482c6793cff4e35dc154922bcf0d4bca60a593c90fab891f602839ad", + "windows": "ee2162b0a2e3d1a1217400d34a2de2ab82a0c51e14236acb2b36faa3cdde3185" + }, + "name": "v1.8.0" + }, + { + "checksums": { + "darwin": "e8d762357123773f6c4dc300f8bccec3cdf2326c94f03a8aeb934e4e73fd59b8", + "linux": "575adc22884b49ecce9c9d289a7127b64f2759f639cb894c3040890bee1939c5", + "windows": "0fdc0d60e36001c021b6cc09e699e2a38b4070661cf7e78badf750ee84340afa" + }, + "name": "v1.7.3" + }, + { + "checksums": { + "darwin": "fcfb05f44620e54ce81fe8ac415196230ceb42c4007171533ef2049b7d4e8646", + "linux": "9f543f464b4d93a259f7d5a7578edff1316370d45b5a0679b86ed7a61b01634d", + "windows": "cbbe30445baffa9a3d77834d4e24c1ec595ecc2b7933db21109aa90aa79eaddd" + }, + "name": "v1.7.2" + }, + { + "checksums": { + "darwin": "ac6b1eb8ff6a98f0f4a8f26fddd7a9fd8dbdd7a5029cf87a9315399d31e4f6ce", + "linux": "1313da4fce807f2d5cd4664d8a59422067a3377ddd37fa66df9aa0bb228e154b", + "windows": "640ad4ba69926be2ea64140a5d6d80122f030c8bf75ae4afeca11eeff865feac" + }, + "name": "v1.7.1" + }, + { + "checksums": { + "darwin": "1f3785e9521eabe241df0481fa41887a6a3873307bac8a89fd0e48aa7612be29", + "linux": "f1fcab9f161a64f19b618a901e50488ed6f1c6ab20695c82623586a701d2d261", + "windows": "2f4448f32e505bf38ba52cd3678c73622a6bb452c63a4179d590f6da26520c68" + }, + "name": "v1.7.0" + }, + { + "checksums": { + "darwin": "5ea5168a80597ee6221bf50a524429a24a37f0c0f36725e6b297dc5a7a6a2105", + "linux": "eabd027438953d29a4b0f7b810c801919cc13bef3ebe7aff08c9534ac2b091ab", + "windows": "79d66c874cfe3497656e9ba191680cc95abd92d2f722b10de38f00b76ef82393" + }, + "name": "v1.6.2" + }, + { + "checksums": { + "darwin": "bcfc181ade08bd2a87fca70f0aa59f9f4b23c893fc2b335b3cb8f05b84ae2d34", + "linux": "cbd526d64531266d42f02667339d3c53e5a399e3abebda63c96b0bbd6b7e935d", + "windows": "1d7372fcf099d583d4140a4ce4aa8f5c2752d3bd0d143e53647aee6221dcb663" + }, + "name": "v1.6.1" + }, + { + "checksums": { + "darwin": "fd1af02f0fc11fb0bec35b9ae1f6bf2d157f51948155d8b1ddc899521642fc32", + "linux": "48738607ecdb0b00815599230a2a2b17dc90bd3bbcb1b217bace043f78370db3", + "windows": "20e7db220308f06913acd10addb1ec01c87b74245cebc70fa18a979c1b323f34" + }, + "name": "v1.6.0" + }, + { + "checksums": { + "darwin": "734306019f837a6aee9cb7a0245839f98ea7688ee2cde387099334cb9356c2c4", + "linux": "1972a9a96de85e480012f6d2c9b8a88fd29217b99b1a973ed5e199386659f7e9", + "windows": "9f012922fd8d701070ef3951b0df77b720805a204d4d0dfa15d11899fda8a2d0" + }, + "name": "v1.5.2" + }, + { + "checksums": { + "darwin": "7ba345034e176566930d873acd0f38366dd14fdafd038febe600ea38c24c4208", + "linux": "5aed23a876770c92d0162fcf7862d855dc306516614be78ac6fbc47b5cba55e6", + "windows": "5a7bd914b0ae57e0853d72a06b7fb72e645417f2f3cd86d0f1bc4f636a04d160" + }, + "name": "v1.5.1" + }, + { + "checksums": { + "darwin": "eb716c176f404bb555966ff3947d5d9c5fb63eb902d11c83839fda492ff4b1fc", + "linux": "ca50dcc7c83d4dde484d650a5a1934ea1bef692340af3aa831d34c6e847b2770", + "windows": "bdd61e446f49570428848ad15337264edfecc55d1dd4aed4499d559f9c8383b9" + }, + "name": "v1.5.0" + }, + { + "checksums": { + "darwin": "ae19f66c8f4a5716a1c22125af1bcf3d41d1b81cfa5fe7fc76a50c0c46e2c409", + "linux": "e63b8007c2d39fd037587adff2ec5360a910b51f427f0d1521fce5f3cac5e0fd", + "windows": "cd77fbe1b5892de2697161483f44f4ef6833c1418b53e913c2edef3ac95e7475" + }, + "name": "v1.4.0" + }, + { + "checksums": { + "darwin": "5947abe57fa390fcfd96849ac87fc9319f026d4b13f944b6beecc3615e3668be", + "linux": "057a4f4ca36ff51ecad59509d94d3694543b874949e805e2b79792ceef21f983", + "windows": "be1999452b166de72f946aac17ca7c40d53b8a5c8f59dad912c2413f7cc42563" + }, + "name": "v1.3.1" + }, + { + "checksums": { + "darwin": "5bda29e2d990bb8ac9da1767143e228772adc45507d22a49b5af70b03e7db682", + "linux": "5aa7c5f0b6dd09348f7e2435b9618f6a916fbb573580619b393b514258771eab", + "windows": "d808b6e42e6f53c9338d135a352bebd4469634f33646d06e7cad3569330225cb" + }, + "name": "v1.3.0" + }, + { + "checksums": { + "darwin": "183d017d094b7783c938dc709dbdfc9a48f92299178234f89047dfbb083a592c", + "linux": "123fc9f5656333fb2927cf91666a91cd5b28ef97503418ac2a90a2109e518ed9", + "windows": "f6c30cb88ec61bc6fe17532a3ef56e4f1fcef2473e3d73fc56f352b44784490d" + }, + "name": "v1.2.0" + }, + { + "checksums": { + "darwin": "cf6b2c0397147fa998a5c4e36ed7ad045d67f929daa3e46a1d01656b5ab7cac5", + "linux": "4596c0daabfe637912e2372c41cc11116ca053a1f7045af8a731265e45f9ca83", + "windows": "e86e9c7c1c25cfd251f010b62e83fdf2ee2eefc3e73b4b1f7fa18971577150be" + }, + "name": "v1.1.1" + }, + { + "checksums": { + "darwin": "3f635089d93ba7bd193b8f015bfa9434b810256daa8ced03816c7f0df7b06a96", + "linux": "43ce88a10c7b57f5e4f83e5a1485e13e4ad537bfb20f7d57364f66450b872634", + "windows": "2a8e95fbe4ec9b32c603767f16b731b5f09ddd04c3e43f6bbe7fffd22afbf811" + }, + "name": "v1.1.0" + }, + { + "checksums": { + "darwin": "0af8a3f582c9284ffe10e99444b60a75241325f2bc9ab43ec758802f2b89e1db", + "linux": "7b56374955990ef2dd0289e6ecb62cf2b4587cab2b481d95f58de5db56799868", + "windows": "58abb5fb3e694a451102963e04ce13ea0cea46b7bf5c7947f40fdfc673282ac9" + }, + "name": "v1.0.1" + }, + { + "checksums": { + "darwin": "865bd3a13c1ad3b7732b2bea35b26fef150f2b3cbfc257c5d1835527d1b331e9", + "linux": "a315869f81aae782ecc6ff2a6de4d0ab3a17ca1840d1d8e6eea050a8dd05907f", + "windows": "a9e629911498ce774681504abe1797c1957e29d100d40c80c26ac54e22716a85" + }, + "name": "v1.0.0" + }, + { + "checksums": { + "darwin": "9fb0ce4decb0f40b1b2ee11cad0aa89e13e2d5c46ff0d35875a0a65788dee6b4", + "linux": "e161995604c42c37a797fd11fac5d545f8b75f0796afc3b10679253bf229ff3d", + "windows": "748c9087e876491332897d8dc937eeea92f9fda9003443ef668dc75f5638ed5b" + }, + "name": "v0.35.0" + }, + { + "checksums": { + "darwin": "54b865528ff14a4cfa479bd7c5630db81e0695c3b4b85939b0735dc1203541d3", + "linux": "8db7e8a128de48ebeb1cb8cacb457f60b5420706e08c190e466f4e9b971fd8f3", + "windows": "90fdaddd3ffe62beef2503e59295b15124b454b795324a8dcb54dd0cc7ba3296" + }, + "name": "v0.34.1" + }, + { + "checksums": { + "darwin": "8932ee06a8db3fae696d97bfefa2d7ad2168ffa3046e0729f39164cf11a78911", + "linux": "97a871bc4d62287b167db1feb1ef167925e2b51d7a0fb4bfe3ac215402e10deb", + "windows": "89e8f10ab97f3440c5dad47f6be96ed49cf9d7dc3a15849f682440a0a3649ea1" + }, + "name": "v0.34.0" + }, + { + "checksums": { + "darwin": "ff5aee67920e9615aef804ed0db9d0dfaebfb9f54ca093ddc16c67b3834baaf0", + "linux": "8a5effbbe6a847eb61e676b6ad62883d9c19abe75452d766043f41a59248f191", + "windows": "bf8cd98dec45725cb4b4123be59a54751d0b65c435573b8a19f2c439a91f1a4b" + }, + "name": "v0.33.1" + }, + { + "checksums": { + "darwin": "bfa1b27ef6ad3912a24917c07237409db033e1454fe9c8df063c1fb1180b3b7a", + "linux": "8a2eb70571993efbd5b44eda7ed3b04853ef877973bfe1a2c768ce649f8e5af5", + "windows": "1ea3386fc15dc96577ce6a2f2f2193d1f4e63673146c3528970c8f4d49c0304b" + }, + "name": "v0.33.0" + }, + { + "checksums": { + "darwin": "d5b21adacd4b6bad9006816e4bdb29f39318a60919e7a6bb5e388a6299fffd0f", + "linux": "3298d3183deacd9ddd3032dab113a64d863df7648d6d24693284ba4193e95b49", + "windows": "31668f64f6be25644b22d0465e0f72d745a027804b2c8685e040b8147bacfba1" + }, + "name": "v0.32.0" + }, + { + "checksums": { + "darwin": "621189b5ec9cbb55003ee3577d480e847c0f80a9ed58f4fb3ed567bb7be623a1", + "linux": "5926978aee75776af0867d112a77334b10ec65f687d734f238bfd88960c983c2", + "windows": "1ae607a849569664f6c5d87f969b1f9a096524515a6524be07fd364b7d405f6c" + }, + "name": "v0.31.0" + }, + { + "checksums": { + "darwin": "e09789c4eb751969f712947a43effd79cf73488163563e79d98bc3d15d06831e", + "linux": "f6fcd916adbdabc84fceb4ff3cadd58586f0ef6e576233b1bd03ead1f8f04afa", + "windows": "8f09d63c64a2a0c4810c492066b16ccd4bd63e2f3c2d0eb55e49c51c915493f6" + }, + "name": "v0.30.0" + }, + { + "checksums": { + "darwin": "196b2cbf4003ccc3574ba105437ae675bcd9cf80e6f8396b5581d40c35c6070d", + "linux": "0f8890d4a0869e6e80a62e63ad08336caf75e38111307e8fe57773d706c4142d", + "windows": "78aeb9ccff70121bc8dd0d6fb8a9c9438a39da806104d1be09923f369f496c32" + }, + "name": "v0.29.0" + }, + { + "checksums": { + "darwin": "dca43053510f5e8987ff89abf601594eaf58bc5d447d74f9a08e300f3d92133f", + "linux": "3c84872ffa5ddbce472062fb548f9b3a25af72587d35243e12f18d86aaa6a085", + "windows": "1f9840a3a54d793b60ff1b9c7ef1c87269ee24d118f7ef47667d9f7a0ef7861a" + }, + "name": "v0.28.2" + }, + { + "checksums": { + "darwin": "7d9b67c4c716184d6a854fb91b08b99094356a44b51e315659b254fbd74022cc", + "linux": "af261082d0ba9eb2dc3836a4cd903a449bafcb8647c5d5cb555c4e9144093627", + "windows": "e94d8d597e1c876dc45d6f63254e296bc95ee5c98c0a06b28050f59dad7d90c7" + }, + "name": "v0.28.1" + }, + { + "checksums": { + "darwin": "bfde769dc3e1bf050a079927fdcd646723ae73d13dda3505eea6a80acc27cb57", + "linux": "dfe361f86288a4cedcdc3bffbbe5b4716c7ee19cbb82d70696b0f20596a15c65", + "windows": "4ee548642184648b5dfb1380dc08a3541d3b665446c602830253126123ae5be5" + }, + "name": "v0.28.0" + }, + { + "checksums": { + "darwin": "d335f7a6a03d7aead5cb95867ecdb96b845b3520593df16688e6dfac7d4717c1", + "linux": "7c03650d33e029f1dbf810d27dc1fc197ad9b889f645a4d5c353bb1c46d3ff2a", + "windows": "c714aa1667cd7d73807e23904c37a9b696e50e8143f5705660c0f1147d8307e8" + }, + "name": "v0.27.0" + }, + { + "checksums": { + "darwin": "8cabcaa244a7d62697ad8f4393e3661c9e9cd598a75df79a8d1ffe803f80b209", + "linux": "3c956459ee8dad9452c97d54463f982d1d511a9afaa0f3851d88320bd5dcf58a", + "windows": "498f9f090972c047836fcb1580bb6fcee53fe920955377569d903ba72a0c425e" + }, + "name": "v0.26.1" + }, + { + "checksums": { + "darwin": "0b2c63c6f5a00525e679b01948edffcb16e3bdb37ea0db3ed89431dd0e4c3b3c", + "linux": "65dcc26a595c73b5bd2a3e47c3d5aa3bbdef81fe603f8d56f947d37cb12c74fc", + "windows": "a7d8edb6713b819a8f44b732314a1b8fe5b77a4397693c633f641592fe6e32f1" + }, + "name": "v0.26.0" + }, + { + "checksums": { + "darwin": "0d85ecc1cd064bae04ea4a8ef634d4fdc80318b65a2b8d14d105f1e15fcbced0", + "linux": "5676f2d4f37f1c6f9cf99d56c7e1a3016976d657f9715e8cb255667a0c5803c1", + "windows": "de2cbda425ae76ec7240d4543d8642598974fa558727bee10b7866ceb72c3fd9" + }, + "name": "v0.25.0" + }, + { + "checksums": { + "darwin": "f89abc1caaf73f3a623c6c5b792833fab2e0667cd0d1ebaffc05918b3b81c164", + "linux": "1261de09386fd1f4ee7a4645958757c2c9e69f419a2a4ca8aff475017a7e036e", + "windows": "61e1aa977ffdfd5373158820f8d57a8f4af7c43e78b8598651dea65be59b8bab" + }, + "name": "v0.24.1" + }, + { "checksums": { "darwin": "7db2045495db05a885c3ad9a0e5e7ff017ae1f2f1a835d9151142df0c6f1d192", "linux": "fb624bfda432c764d19212fcaab2a368db8bb0e8427b7ff04b5b684faab0b463", "windows": "46510a457658e7aee492cc0f1807b3b57c61b1d7154e7ee5b4da607fe681347f" - } - }, - { - "name": "v0.23.0", - "checksums": { - "darwin": "3d0c5581cd14f85637fb888c1e2e124152c4c9643a257ba90c8cd929d2c2b8b3", - "linux": "cd9c6c640a1632e8c44d9b335e68db869da28442b6ab0642a2b7adbc1e4ef334", - "windows": "ddee80b2505447197994377f40e574061e1d59203019b587361be2b28762fd61" - } - }, - { - "name": "v0.22.3", - "checksums": { - "darwin": "62483f95b55fc14e6cd3898bbfdd637a0ad921e5f1a632b5e367d74af5e36f24", - "linux": "7d85e6ca06943376fe3235663857bf51b4d3fe0d59b6ef645821bf212301244b", - "windows": "0a7037cb510bfbd9f78b85a80910a43bb8f6e7a9de89cd4323fea3ff52fce524" - } - }, - { - "name": "v0.22.2", - "checksums": { - "darwin": "d59ca57fece491fee8b47a5c092ac297e807ca47584ac2b65078d070ed5d3f48", - "linux": "cddba4a49d522afe3b556bc251ca57017b060859d25a55d9fade294432982515", - "windows": "fffa980120ab40716fc83f525bc230574cd636581126b9473bd50ea9a40c89e4" - } - }, - { - "name": "v0.22.1", - "checksums": { - "darwin": "a5bf0deacfce70a7f19f5955da14bb02871fee724185f76ad95657a5f35d96ce", - "linux": "0b61a7b7ca21e2c9bda5ab18d60c6c3fdf7a40d62db23b49de29617a6439c6fb", - "windows": "fc86f53768b6f77b425bcb330de7f5b6fe541ff96796228a4567b183b04793af" - } - }, - { - "name": "v0.22.0", - "checksums": { - "darwin": "389c4cbbef69e760e8c5e226035d5afcad05540e2dd1d77439f903be119873f4", - "linux": "aaa439aee636a01e6340a1104721942af43c3fb481a5a32e112ccd8a37d8a1e9", - "windows": "06f7db04dae2e126958bd822fdbee1f10039a673f4b67c332373093b06a67d03" - } - }, - { - "name": "v0.21.0", - "checksums": { - "darwin": "2a6960cfa2b5aed9fec8d8cbe357fa8f5776761ee5efa3dd26abccc894f4b453", - "linux": "c5dc6e8d85f96d4bfba321bdca93b2a828a714162653a55a9b3a6d527f517e82", - "windows": "ef6f5566eca0c20bc87391c0cd6e7103d6e3c6a05211ed6157ed143f9b956686" - } - }, - { - "name": "v0.20.0", - "checksums": { - "darwin": "591737b728745dbf01f634bf714353c416c2e56c39e2e0431910fa51783b7a19", - "linux": "f7d51f0b94f88650ced3ddb6e079f560e7ef142b8e4d53a5aee511ca1c2e3df4", - "windows": "d4be02e5e7075943d6b4efca44c0ff56286f72236e2640d82010b944646612b7" - } - }, - { - "name": "v0.19.0", - "checksums": { - "darwin": "efe27dd4f791403b90eefab8c1f6ea3c7f3115a7609f41e3189517f088e20f0e", - "linux": "1b3447b307fa256378c9541731cfc5d5b06128f88dab04b3cfc9deeeceddb2bf", - "windows": "105fa416fbda1fc8f4ad6c2e9a7883733d5f11ae247ef6cfd15e9fbc6dd5dd56" - } - }, - { - "name": "v0.18.0", - "checksums": { - "darwin": "301dc5f47cccface80769bd3a03d58ba80893f6ede75f2a7ec22f1bc56666deb", - "linux": "212fbf52a6d601deb383271e2af756982f9b72715e1f7a3d65770d04387d8c8d", - "windows": "302bfe9747882291e686ecf6f337e78836f7bb0e1783fc6d8bf1f3482fb2badf" - } - }, - { - "name": "v0.17.1", - "checksums": { - "darwin": "b175c355d377a6ce2fefdd19201c865a7e628581261ac949fffb725af459c389", - "linux": "54f9e24b5622f540a6d5edd7450ce546cf6f57f9feff21fd5d92d0d2f552ac31", - "windows": "86a713ced29399c736d14bf19be7aead96a22b03374441d99a457a4c44df9d53" - } - }, - { - "name": "v0.17.0", - "checksums": { - "darwin": "d12fb4f8d9ff538c5563e1dcdf29495dc47b64a3fe108d7190fa37bf94a09a21", - "linux": "086d3438a9c2f324f494cf6dd4c422c27e93b19dd874c77d093d8ff91709a659", - "windows": "3d349978704791596a03237715ad502f5ab5bbd76014b761e579e859a5eaf4c1" - - } - }, - { - "name": "v0.16.0", - "checksums": { - "darwin": "1de0dda591d23c01aa52f6e7b6c85bec7e4811a007a5a939eb2d1bed6fa84144", - "linux": "119a687ce949f48cc7cc0ed3827bcd182d7769968023a0561bf93290ff265d5a", - "windows": "e3f21e866fc2b241c69b0836ebf9ac2d4a7eae3a234aa5c1b1447073e3e0804a" - } - }, - { - "name": "v0.15.0", - "checksums": { - "darwin": "cc76cb68c9dfbe0317701e5d264ecf03cb3177a3a77906d901960c7adff6fc4a", - "linux": "0396080f87469b2bae0e9b23477156f32d25119b6b712f7e82a25a82d41ed3bc", - "windows": "11b6499c3b8079a7b7c74482c119db244d2585332a649de1edd0cc9bc85ce1b9" - } - }, - { - "name": "v0.14.0", - "checksums": { - "darwin": "950805a1e1929dc41ef27698a0325b981f99f4a45df121521861fcd696e35f28", - "linux": "a9e8423474de6046c672db5b035475fc034223652b081d1accba89af7da5a5e0", - "windows": "5d6ef16842ea17aeaa715e5966edbc4f5ad220eaca15c070c1a191bb2360677b" - } - }, - { - "name": "v0.13.1", - "checksums": { - "darwin": "77bc72679ca1beb09ad7f26ec8ba8b286283ddf7bee4e68163b88c5a439bc049", - "linux": "52706da92b6cf9a5eb4f59fe6034f119e3eb442c3fc57bf181d01db929e1289f", - "windows": "5bbb30feb34f09a1d7cee5051bb3b28103eef719ae828bfd8fddb11efc56a5c7" - } - }, - { - "name": "v0.13.0", - "checksums": { - "darwin": "bf04827735c1f8b7dd51548fbd01ef3a2f84a2db64b235a794020241c3ccf996", - "linux": "453c2e3e55afb258bd7ca7ca9ba1da3f59d0131eb9bb73cf46cce7bb5bc0fbb4", - "windows": "1f5d09f7d9442e2d861eaed3a8403c7db029f076d69773d9ffdd177b3af14b6f" - } - }, - { - "name": "v0.12.2", - "checksums": { - "darwin": "5f818be5235d606ec5241ac1eea0dc92e6328d56841617c51e4595a0abc4300c", - "linux": "ace8dcaf9418ed0e4eb07e7737b0af41036f6aaa05f784386725feb041463a74", - "windows": "1768aea06220946f22e88d294f02984135a77799b88373fc6b1a98b3da6802ef" - } - }, - { - "name": "v0.12.1", - "checksums": { - "darwin": "d1f4ae5ef298ffbd50f56f7da7fb6215bd79795a5db90b07d9d57468e8485a3c", - "linux": "e767236598d619ac93d4fa2782a5534c7107068f3b46ecee69e92ab8d9f0a3d1", - "windows": "67a6146011f6c90274b0f509f7dff18bd3a6f423dc9ba3bcce933ac9b25c2891" - } - }, - { - "name": "v0.12.0", - "checksums": { - "darwin": "a96d6e1d53a7999503d00bcd41b4ccaa80f5d57f798608f03e3f4d63a42f9991", - "linux": "1315a334e701c1558740e4140f8e28985d7734e8a53e4af2153076c2586c3c7d", - "windows": "373e3e2e1d9e000044711dfafe3a88fdb9620c3050a6b5f9e8ed0eb3e7ffd12e" - } - }, - { - "name": "v0.11.0", - "checksums": { - "darwin": "7fe7ce35eda959d91071d065141d040053b945d5af0d57f98eb18afb93a4c921", - "linux": "f654835e3610fc746060ffdcdba5df68ca39231a4c6d5c6c9d9caffb10c25da1", - "windows": "4ba3e7a08cf3cc2b0f50e454a48d67022e8ca78b9363cd743644eb7b5f03a3b5" - } - }, - { - "name": "v0.10.0", - "checksums": { - "darwin": "fc7552b5475d0c20ad96057fb88d686e226d09bd1034269d5078b33ba7d7cc8e", - "linux": "f905af9b2ef1e954d0633680ab5a8914d628b9104cce54de7e42509d89d2c541", - "windows": "93b0e1fabeab79da2b61c9237076893dacf3cc147294298d50cb48ca7cd2a86f" - } - }, - { - "name": "v0.9.0", - "checksums": { - "darwin": "4415e7f3a30ace7cf0e5ad023f979509e6b25ded1bfb55368f918fc25098307e", - "linux": "76b341aa377c274c7147e203483f117ef01151a8e33bb232e29872ad20f6effc", - "windows": "98cb96fef863c9a4acac210eea910c2d239a87b13a6e2ac10ffe35244880e203" - } - }, - { - "name": "v0.8.0", - "checksums": { - "darwin": "cc7439fc8e8e8e957246908f99314abeeb8513745b8d30ed64bf480227ec2607", - "linux": "8f9a8a41ba4a89ec847d998591ab24a8989c27852fce5193c5bdba23139223b7", - "windows": "3f384df76a24d2f3d70d7fc4b2c41dfb833ce0f02fb7be5bd39928d647094bc1" - } - }, - { - "name": "v0.7.1", - "checksums": { - "darwin": "fc8365148be19bd020432d8ddc85c06b7aab3953300b16b24f20fcd8393de449", - "linux": "461c09753505e8c06a55b59633abbaa4daa89190374e4c737fe4d4d1107b9f1b", - "windows": "cb065787e1ade5761f3be8be407714e0a0dfa23aa1080f33dcccd13655c857a2" - } - }, - { - "name": "v0.7.0", - "checksums": { - "darwin": "67af90d31c02e26bdb5a1af96a67b00feb288f20f96b4a67f7c4f1a40b382e99", - "linux": "374c813dcfc23a49cf48a73361088251aa6f85e8cd06b42c9e6d43c1dfb4def4", - "windows": "83d5b8c67d6535b6c156feb0e3b3485b54114436f6338dbdc86b4f92c8cecf43" - } - }, - { - "name": "v0.6.0" - }, - { - "name": "v0.5.0" - }, - { - "name": "v0.4.0" - }, - { - "name": "v0.3.0" - }, - { - "name": "v0.2.0" - }, - { - "name": "v0.1.0" - } -] + }, + "name": "v0.24.0" + }, + { + "checksums": { + "darwin": "3d0c5581cd14f85637fb888c1e2e124152c4c9643a257ba90c8cd929d2c2b8b3", + "linux": "cd9c6c640a1632e8c44d9b335e68db869da28442b6ab0642a2b7adbc1e4ef334", + "windows": "ddee80b2505447197994377f40e574061e1d59203019b587361be2b28762fd61" + }, + "name": "v0.23.0" + }, + { + "checksums": { + "darwin": "62483f95b55fc14e6cd3898bbfdd637a0ad921e5f1a632b5e367d74af5e36f24", + "linux": "7d85e6ca06943376fe3235663857bf51b4d3fe0d59b6ef645821bf212301244b", + "windows": "0a7037cb510bfbd9f78b85a80910a43bb8f6e7a9de89cd4323fea3ff52fce524" + }, + "name": "v0.22.3" + }, + { + "checksums": { + "darwin": "d59ca57fece491fee8b47a5c092ac297e807ca47584ac2b65078d070ed5d3f48", + "linux": "cddba4a49d522afe3b556bc251ca57017b060859d25a55d9fade294432982515", + "windows": "fffa980120ab40716fc83f525bc230574cd636581126b9473bd50ea9a40c89e4" + }, + "name": "v0.22.2" + }, + { + "checksums": { + "darwin": "a5bf0deacfce70a7f19f5955da14bb02871fee724185f76ad95657a5f35d96ce", + "linux": "0b61a7b7ca21e2c9bda5ab18d60c6c3fdf7a40d62db23b49de29617a6439c6fb", + "windows": "fc86f53768b6f77b425bcb330de7f5b6fe541ff96796228a4567b183b04793af" + }, + "name": "v0.22.1" + }, + { + "checksums": { + "darwin": "389c4cbbef69e760e8c5e226035d5afcad05540e2dd1d77439f903be119873f4", + "linux": "aaa439aee636a01e6340a1104721942af43c3fb481a5a32e112ccd8a37d8a1e9", + "windows": "06f7db04dae2e126958bd822fdbee1f10039a673f4b67c332373093b06a67d03" + }, + "name": "v0.22.0" + }, + { + "checksums": { + "darwin": "2a6960cfa2b5aed9fec8d8cbe357fa8f5776761ee5efa3dd26abccc894f4b453", + "linux": "c5dc6e8d85f96d4bfba321bdca93b2a828a714162653a55a9b3a6d527f517e82", + "windows": "ef6f5566eca0c20bc87391c0cd6e7103d6e3c6a05211ed6157ed143f9b956686" + }, + "name": "v0.21.0" + }, + { + "checksums": { + "darwin": "591737b728745dbf01f634bf714353c416c2e56c39e2e0431910fa51783b7a19", + "linux": "f7d51f0b94f88650ced3ddb6e079f560e7ef142b8e4d53a5aee511ca1c2e3df4", + "windows": "d4be02e5e7075943d6b4efca44c0ff56286f72236e2640d82010b944646612b7" + }, + "name": "v0.20.0" + }, + { + "checksums": { + "darwin": "efe27dd4f791403b90eefab8c1f6ea3c7f3115a7609f41e3189517f088e20f0e", + "linux": "1b3447b307fa256378c9541731cfc5d5b06128f88dab04b3cfc9deeeceddb2bf", + "windows": "105fa416fbda1fc8f4ad6c2e9a7883733d5f11ae247ef6cfd15e9fbc6dd5dd56" + }, + "name": "v0.19.0" + }, + { + "checksums": { + "darwin": "301dc5f47cccface80769bd3a03d58ba80893f6ede75f2a7ec22f1bc56666deb", + "linux": "212fbf52a6d601deb383271e2af756982f9b72715e1f7a3d65770d04387d8c8d", + "windows": "302bfe9747882291e686ecf6f337e78836f7bb0e1783fc6d8bf1f3482fb2badf" + }, + "name": "v0.18.0" + }, + { + "checksums": { + "darwin": "b175c355d377a6ce2fefdd19201c865a7e628581261ac949fffb725af459c389", + "linux": "54f9e24b5622f540a6d5edd7450ce546cf6f57f9feff21fd5d92d0d2f552ac31", + "windows": "86a713ced29399c736d14bf19be7aead96a22b03374441d99a457a4c44df9d53" + }, + "name": "v0.17.1" + }, + { + "checksums": { + "darwin": "d12fb4f8d9ff538c5563e1dcdf29495dc47b64a3fe108d7190fa37bf94a09a21", + "linux": "086d3438a9c2f324f494cf6dd4c422c27e93b19dd874c77d093d8ff91709a659", + "windows": "3d349978704791596a03237715ad502f5ab5bbd76014b761e579e859a5eaf4c1" + }, + "name": "v0.17.0" + }, + { + "checksums": { + "darwin": "1de0dda591d23c01aa52f6e7b6c85bec7e4811a007a5a939eb2d1bed6fa84144", + "linux": "119a687ce949f48cc7cc0ed3827bcd182d7769968023a0561bf93290ff265d5a", + "windows": "e3f21e866fc2b241c69b0836ebf9ac2d4a7eae3a234aa5c1b1447073e3e0804a" + }, + "name": "v0.16.0" + }, + { + "checksums": { + "darwin": "cc76cb68c9dfbe0317701e5d264ecf03cb3177a3a77906d901960c7adff6fc4a", + "linux": "0396080f87469b2bae0e9b23477156f32d25119b6b712f7e82a25a82d41ed3bc", + "windows": "11b6499c3b8079a7b7c74482c119db244d2585332a649de1edd0cc9bc85ce1b9" + }, + "name": "v0.15.0" + }, + { + "checksums": { + "darwin": "950805a1e1929dc41ef27698a0325b981f99f4a45df121521861fcd696e35f28", + "linux": "a9e8423474de6046c672db5b035475fc034223652b081d1accba89af7da5a5e0", + "windows": "5d6ef16842ea17aeaa715e5966edbc4f5ad220eaca15c070c1a191bb2360677b" + }, + "name": "v0.14.0" + }, + { + "checksums": { + "darwin": "77bc72679ca1beb09ad7f26ec8ba8b286283ddf7bee4e68163b88c5a439bc049", + "linux": "52706da92b6cf9a5eb4f59fe6034f119e3eb442c3fc57bf181d01db929e1289f", + "windows": "5bbb30feb34f09a1d7cee5051bb3b28103eef719ae828bfd8fddb11efc56a5c7" + }, + "name": "v0.13.1" + }, + { + "checksums": { + "darwin": "bf04827735c1f8b7dd51548fbd01ef3a2f84a2db64b235a794020241c3ccf996", + "linux": "453c2e3e55afb258bd7ca7ca9ba1da3f59d0131eb9bb73cf46cce7bb5bc0fbb4", + "windows": "1f5d09f7d9442e2d861eaed3a8403c7db029f076d69773d9ffdd177b3af14b6f" + }, + "name": "v0.13.0" + }, + { + "checksums": { + "darwin": "5f818be5235d606ec5241ac1eea0dc92e6328d56841617c51e4595a0abc4300c", + "linux": "ace8dcaf9418ed0e4eb07e7737b0af41036f6aaa05f784386725feb041463a74", + "windows": "1768aea06220946f22e88d294f02984135a77799b88373fc6b1a98b3da6802ef" + }, + "name": "v0.12.2" + }, + { + "checksums": { + "darwin": "d1f4ae5ef298ffbd50f56f7da7fb6215bd79795a5db90b07d9d57468e8485a3c", + "linux": "e767236598d619ac93d4fa2782a5534c7107068f3b46ecee69e92ab8d9f0a3d1", + "windows": "67a6146011f6c90274b0f509f7dff18bd3a6f423dc9ba3bcce933ac9b25c2891" + }, + "name": "v0.12.1" + }, + { + "checksums": { + "darwin": "a96d6e1d53a7999503d00bcd41b4ccaa80f5d57f798608f03e3f4d63a42f9991", + "linux": "1315a334e701c1558740e4140f8e28985d7734e8a53e4af2153076c2586c3c7d", + "windows": "373e3e2e1d9e000044711dfafe3a88fdb9620c3050a6b5f9e8ed0eb3e7ffd12e" + }, + "name": "v0.12.0" + }, + { + "checksums": { + "darwin": "7fe7ce35eda959d91071d065141d040053b945d5af0d57f98eb18afb93a4c921", + "linux": "f654835e3610fc746060ffdcdba5df68ca39231a4c6d5c6c9d9caffb10c25da1", + "windows": "4ba3e7a08cf3cc2b0f50e454a48d67022e8ca78b9363cd743644eb7b5f03a3b5" + }, + "name": "v0.11.0" + }, + { + "checksums": { + "darwin": "fc7552b5475d0c20ad96057fb88d686e226d09bd1034269d5078b33ba7d7cc8e", + "linux": "f905af9b2ef1e954d0633680ab5a8914d628b9104cce54de7e42509d89d2c541", + "windows": "93b0e1fabeab79da2b61c9237076893dacf3cc147294298d50cb48ca7cd2a86f" + }, + "name": "v0.10.0" + }, + { + "checksums": { + "darwin": "4415e7f3a30ace7cf0e5ad023f979509e6b25ded1bfb55368f918fc25098307e", + "linux": "76b341aa377c274c7147e203483f117ef01151a8e33bb232e29872ad20f6effc", + "windows": "98cb96fef863c9a4acac210eea910c2d239a87b13a6e2ac10ffe35244880e203" + }, + "name": "v0.9.0" + }, + { + "checksums": { + "darwin": "cc7439fc8e8e8e957246908f99314abeeb8513745b8d30ed64bf480227ec2607", + "linux": "8f9a8a41ba4a89ec847d998591ab24a8989c27852fce5193c5bdba23139223b7", + "windows": "3f384df76a24d2f3d70d7fc4b2c41dfb833ce0f02fb7be5bd39928d647094bc1" + }, + "name": "v0.8.0" + }, + { + "checksums": { + "darwin": "fc8365148be19bd020432d8ddc85c06b7aab3953300b16b24f20fcd8393de449", + "linux": "461c09753505e8c06a55b59633abbaa4daa89190374e4c737fe4d4d1107b9f1b", + "windows": "cb065787e1ade5761f3be8be407714e0a0dfa23aa1080f33dcccd13655c857a2" + }, + "name": "v0.7.1" + }, + { + "checksums": { + "darwin": "67af90d31c02e26bdb5a1af96a67b00feb288f20f96b4a67f7c4f1a40b382e99", + "linux": "374c813dcfc23a49cf48a73361088251aa6f85e8cd06b42c9e6d43c1dfb4def4", + "windows": "83d5b8c67d6535b6c156feb0e3b3485b54114436f6338dbdc86b4f92c8cecf43" + }, + "name": "v0.7.0" + }, + { + "name": "v0.6.0" + }, + { + "name": "v0.5.0" + }, + { + "name": "v0.4.0" + }, + { + "name": "v0.3.0" + }, + { + "name": "v0.2.0" + }, + { + "name": "v0.1.0" + } +] \ No newline at end of file diff --git a/deploy/minikube/schema-v2.json b/deploy/minikube/schema-v2.json new file mode 100644 index 000000000000..b74eec55e098 --- /dev/null +++ b/deploy/minikube/schema-v2.json @@ -0,0 +1,43 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "checksums": { + "type": "object", + "properties": { + "darwin": { "$ref": "#/$defs/sha" }, + "linux": { "$ref": "#/$defs/sha" }, + "windows": { "$ref": "#/$defs/sha" }, + "amd64": { "$ref": "#/$defs/arch" }, + "arm": { "$ref": "#/$defs/arch" }, + "arm64": { "$ref": "#/$defs/arch" }, + "ppc64le": { "$ref": "#/$defs/arch" }, + "s390x": { "$ref": "#/$defs/arch" } + }, + "required": ["darwin", "linux", "windows"] + } + }, + "required": [ + "name" + ] + }, + "$defs": { + "sha": { + "type": "string", + "pattern": "^[A-Fa-f0-9]{64}$" + }, + "arch": { + "type": "object", + "properties": { + "darwin": { "$ref": "#/$defs/sha" }, + "linux": { "$ref": "#/$defs/sha" }, + "windows": { "$ref": "#/$defs/sha" } + } + } + } +} diff --git a/deploy/minikube/schema.json b/deploy/minikube/schema.json index 79c6ad112155..4b95c6987bb3 100644 --- a/deploy/minikube/schema.json +++ b/deploy/minikube/schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-04/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "array", "items": { "type": "object", @@ -10,18 +10,9 @@ "checksums": { "type": "object", "properties": { - "darwin": { - "type": "string", - "pattern": "^[A-Fa-f0-9]{64}$" - }, - "linux": { - "type": "string", - "pattern": "^[A-Fa-f0-9]{64}$" - }, - "windows": { - "type": "string", - "pattern": "^[A-Fa-f0-9]{64}$" - } + "darwin": { "$ref": "#/$defs/sha" }, + "linux": { "$ref": "#/$defs/sha" }, + "windows": { "$ref": "#/$defs/sha" } }, "required": ["darwin", "linux", "windows"] } @@ -29,5 +20,11 @@ "required": [ "name" ] + }, + "$defs": { + "sha": { + "type": "string", + "pattern": "^[A-Fa-f0-9]{64}$" + } } } diff --git a/deploy/minikube/schema_check.go b/deploy/minikube/schema_check.go index 4b54d493ba8b..ba473e015628 100644 --- a/deploy/minikube/schema_check.go +++ b/deploy/minikube/schema_check.go @@ -17,39 +17,42 @@ limitations under the License. package main import ( + "encoding/json" "fmt" + "log" "os" - "path/filepath" - "github.com/xeipuuv/gojsonschema" + "github.com/santhosh-tekuri/jsonschema/v5" ) func main() { validateSchema("deploy/minikube/schema.json", "deploy/minikube/releases.json") + validateSchema("deploy/minikube/schema.json", "deploy/minikube/releases-beta.json") + validateSchema("deploy/minikube/schema-v2.json", "deploy/minikube/releases-v2.json") + validateSchema("deploy/minikube/schema-v2.json", "deploy/minikube/releases-beta-v2.json") os.Exit(0) } -func validateSchema(schemaPathString string, docPathString string) { - schemaPath, _ := filepath.Abs(schemaPathString) - schemaSrc := "file://" + schemaPath - schemaLoader := gojsonschema.NewReferenceLoader(schemaSrc) - - docPath, _ := filepath.Abs(docPathString) - docSrc := "file://" + docPath - docLoader := gojsonschema.NewReferenceLoader(docSrc) +func validateSchema(schemaPathString, docPathString string) { + sch, err := jsonschema.Compile(schemaPathString) + if err != nil { + log.Fatal(err) + } - result, err := gojsonschema.Validate(schemaLoader, docLoader) + data, err := os.ReadFile(docPathString) if err != nil { - panic(err.Error()) + log.Fatal(err) } - if result.Valid() { - fmt.Printf("The document %s is valid\n", docPathString) - } else { - fmt.Printf("The document %s is not valid. see errors :\n", docPathString) - for _, desc := range result.Errors() { - fmt.Printf("- %s\n", desc) - } - os.Exit(1) + var v interface{} + if err := json.Unmarshal(data, &v); err != nil { + log.Fatal(err) } + + if err = sch.Validate(v); err != nil { + fmt.Printf("The document %s is invalid, see errors:\n%#v", docPathString, err) + return + } + + fmt.Printf("The document %s is valid\n", docPathString) } diff --git a/deploy/prow/Dockerfile b/deploy/prow/Dockerfile deleted file mode 100644 index 7a99642b027a..000000000000 --- a/deploy/prow/Dockerfile +++ /dev/null @@ -1,87 +0,0 @@ -# Copyright 2021 The Kubernetes Authors All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Includes tools used for kubernetes/minikube CI -# NOTE: we attempt to avoid unnecessary tools and image layers while -# supporting kubernetes builds, minikube installation, etc. -FROM debian:buster - -# arg that specifies the go version to install -ARG GO_VERSION - -# add envs: -# - hinting that we are in a docker container -ENV GOPATH=/home/prow/go \ - PATH=/usr/local/go/bin:${PATH} \ - CONTAINER=docker - - -# Install tools needed to: -# - install docker -# -# TODO: the `sed` is a bit of a hack, look into alternatives. -# Why this exists: `docker service start` on debian runs a `cgroupfs_mount` method, -# We're already inside docker though so we can be sure these are already mounted. -# Trying to remount these makes for a very noisy error block in the beginning of -# the pod logs, so we just comment out the call to it... :shrug: -RUN echo "Installing Packages ..." \ - && apt-get update \ - && apt-get install -y --no-install-recommends \ - apt-transport-https \ - build-essential \ - ca-certificates \ - curl \ - file \ - git \ - gnupg2 \ - kmod \ - lsb-release \ - mercurial \ - pkg-config \ - procps \ - python \ - python-dev \ - python-pip \ - rsync \ - software-properties-common \ - unzip \ - && rm -rf /var/lib/apt/lists/* \ - && echo "Installing Go ..." \ - && export GO_TARBALL="go${GO_VERSION}.linux-amd64.tar.gz"\ - && curl -fsSL "https://storage.googleapis.com/golang/${GO_TARBALL}" --output "${GO_TARBALL}" \ - && tar xzf "${GO_TARBALL}" -C /usr/local \ - && rm "${GO_TARBALL}"\ - && mkdir -p "${GOPATH}/bin" \ - && echo "Installing Docker ..." \ - && curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | apt-key add - \ - && add-apt-repository \ - "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \ - $(lsb_release -cs) stable" \ - && apt-get update \ - && apt-get install -y --no-install-recommends docker-ce \ - && rm -rf /var/lib/apt/lists/* \ - && sed -i 's/cgroupfs_mount$/#cgroupfs_mount\n/' /etc/init.d/docker \ - && echo "Ensuring Legacy Iptables ..." \ - && update-alternatives --set iptables /usr/sbin/iptables-legacy \ - && update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy \ - && echo "Installing Kubectl ..." \ - && curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" \ - && chmod +x ./kubectl \ - && cp kubectl /usr/local/bin -# copy in image utility scripts -COPY wrapper.sh /usr/local/bin/ -# entrypoint is our wrapper script, in Prow you will need to explicitly re-specify this -ENTRYPOINT ["wrapper.sh", "/bin/bash"] -# volume for docker in docker, use an emptyDir in Prow -VOLUME ["/var/lib/docker"] diff --git a/deploy/prow/README.md b/deploy/prow/README.md deleted file mode 100644 index 9345f66fe4ea..000000000000 --- a/deploy/prow/README.md +++ /dev/null @@ -1,8 +0,0 @@ -Minikube prow testing docker image - -This image contains things we need to run minikube in Kubernetes CI, and -is maintained for the sole purpose of testing Kubernetes with MINIKUBE. - -## WARNING - -This image is _not_ supported for other use cases. Use at your own risk. diff --git a/deploy/prow/wrapper.sh b/deploy/prow/wrapper.sh deleted file mode 100755 index c52f37da691f..000000000000 --- a/deploy/prow/wrapper.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env bash - -# Copyright 2021 The Kubernetes Authors All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# wrapper.sh handles setting up things before / after the test command $@ -# -# usage: wrapper.sh my-test-command [my-test-args] -# -# Things wrapper.sh handles: -# - starting / stopping docker-in-docker -# - ensuring GOPATH/bin is in PATH -# -# After handling these things / before cleanup, my-test-command will be invoked, -# and the exit code of my-test-command will be preserved by wrapper.sh - -set -o errexit -set -o pipefail -set -o nounset - ->&2 echo "wrapper.sh] [INFO] Wrapping Test Command: \`$*\`" -printf '%0.s=' {1..80} >&2; echo >&2 ->&2 echo "wrapper.sh] [SETUP] Performing pre-test setup ..." - -cleanup(){ - >&2 echo "wrapper.sh] [CLEANUP] Cleaning up after Docker in Docker ..." - docker ps -aq | xargs -r docker rm -f || true - service docker stop || true - >&2 echo "wrapper.sh] [CLEANUP] Done cleaning up after Docker in Docker." -} - -early_exit_handler() { - >&2 echo "wrapper.sh] [EARLY EXIT] Interrupted, entering handler ..." - if [ -n "${EXIT_VALUE:-}" ]; then - >&2 echo "Original exit code was ${EXIT_VALUE}, not preserving due to interrupt signal" - fi - cleanup - >&2 echo "wrapper.sh] [EARLY EXIT] Completed handler ..." - exit 1 -} - -trap early_exit_handler TERM INT - - ->&2 echo "wrapper.sh] [SETUP] Docker in Docker enabled, initializing ..." -# If we have opted in to docker in docker, start the docker daemon, -service docker start -# the service can be started but the docker socket not ready, wait for ready -WAIT_N=0 -while true; do - # docker ps -q should only work if the daemon is ready - docker ps -q > /dev/null 2>&1 && break - if [[ ${WAIT_N} -lt 5 ]]; then - WAIT_N=$((WAIT_N+1)) - echo "wrapper.sh] [SETUP] Waiting for Docker to be ready, sleeping for ${WAIT_N} seconds ..." - sleep ${WAIT_N} - else - echo "wrapper.sh] [SETUP] Reached maximum attempts, not waiting any longer ..." - break - fi -done -echo "wrapper.sh] [SETUP] Done setting up Docker in Docker." - -# add $GOPATH/bin to $PATH -export GOPATH="${GOPATH:-${HOME}/go}" -export PATH="${GOPATH}/bin:${PATH}" -mkdir -p "${GOPATH}/bin" - -# actually run the user supplied command -printf '%0.s=' {1..80}; echo ->&2 echo "wrapper.sh] [TEST] Running Test Command: \`$*\` ..." -set +o errexit -"$@" -EXIT_VALUE=$? -set -o errexit ->&2 echo "wrapper.sh] [TEST] Test Command exit code: ${EXIT_VALUE}" - -# cleanup -cleanup - -# preserve exit value from user supplied command -printf '%0.s=' {1..80} >&2; echo >&2 ->&2 echo "wrapper.sh] Exiting ${EXIT_VALUE}" -exit ${EXIT_VALUE} diff --git a/enhancements/implemented/20190925-minikube-enhancement-process/README.md b/enhancements/implemented/20190925-minikube-enhancement-process/README.md index 1ecbefbb27ca..c6db11e4b7cc 100644 --- a/enhancements/implemented/20190925-minikube-enhancement-process/README.md +++ b/enhancements/implemented/20190925-minikube-enhancement-process/README.md @@ -30,7 +30,7 @@ A design review process for non-trivial enhancements to minikube. ## Design Details -The *minikube enhancement process (MEP)* is a way to propose, communicate, and coordinate on new efforts for the minikube project. MEP is based on a simplification of the [Kubernetes Enhancement Process](https://github.com/kubernetes/enhancements/blob/master/keps/0001-kubernetes-enhancement-proposal-process.md). +The *minikube enhancement process (MEP)* is a way to propose, communicate, and coordinate on new efforts for the minikube project. MEP is based on a simplification of the [Kubernetes Enhancement Process](https://github.com/kubernetes/enhancements/blob/master/keps/sig-architecture/0000-kep-process/README.md). ### Proposal Workflow diff --git a/enhancements/proposed/20200130-multinode/multinode-proposal.md b/enhancements/proposed/20200130-multinode/multinode-proposal.md index 7370db042d0c..bf35bb7e573a 100644 --- a/enhancements/proposed/20200130-multinode/multinode-proposal.md +++ b/enhancements/proposed/20200130-multinode/multinode-proposal.md @@ -28,7 +28,7 @@ Until now minikube has always been a local single node Kubernetes cluster. Havin ## Design Details -Since minikube was designed with only a single node cluster in mind, we need to make some fairly significant refactors, the biggest of which is the introduction of the Node object. Each cluster config will be able to have an abitrary number of Node objects, each of which will have attributes that can define it, similar to what [tstromberg proposed](https://github.com/kubernetes/minikube/pull/5874) but with better backwards compatibility with current config. +Since minikube was designed with only a single node cluster in mind, we need to make some fairly significant refactors, the biggest of which is the introduction of the Node object. Each cluster config will be able to have an arbitrary number of Node objects, each of which will have attributes that can define it, similar to what [tstromberg proposed](https://github.com/kubernetes/minikube/pull/5874) but with better backwards compatibility with current config. Each node will correspond to one VM (or container) and will connect back to the primary control plane via `kubeadm join`. diff --git a/enhancements/proposed/20200424-scheduled-shutdown/20200424-scheduled-shutdown.md b/enhancements/proposed/20200424-scheduled-shutdown/20200424-scheduled-shutdown.md index a5890ee1273f..34a4493e4aae 100644 --- a/enhancements/proposed/20200424-scheduled-shutdown/20200424-scheduled-shutdown.md +++ b/enhancements/proposed/20200424-scheduled-shutdown/20200424-scheduled-shutdown.md @@ -55,7 +55,7 @@ As a `keep-alive` implementation, tools will repeat the command to reset the clo Advantages: -* Able to re-use all of the existing `pause` and `stop` implementation within minikube. +* Able to reuse all of the existing `pause` and `stop` implementation within minikube. * Built-in handling for multiple architectures * Does not consume memory reserved for the VM diff --git a/enhancements/proposed/20201230-containerd-default/container-default.md b/enhancements/rejected/container-default.md similarity index 100% rename from enhancements/proposed/20201230-containerd-default/container-default.md rename to enhancements/rejected/container-default.md diff --git a/enhancements/proposed/20201230-standard-distro/standard-distro.md b/enhancements/rejected/standard-distro.md similarity index 100% rename from enhancements/proposed/20201230-standard-distro/standard-distro.md rename to enhancements/rejected/standard-distro.md diff --git a/go.mod b/go.mod index a049c7fc1827..169c99bbd7a5 100644 --- a/go.mod +++ b/go.mod @@ -1,132 +1,264 @@ module k8s.io/minikube -go 1.16 +go 1.25.0 require ( - cloud.google.com/go/storage v1.15.0 - contrib.go.opencensus.io/exporter/stackdriver v0.12.1 - github.com/Delta456/box-cli-maker/v2 v2.2.1 - github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2 - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v0.16.0 - github.com/Microsoft/hcsshim v0.8.17 // indirect + cloud.google.com/go/storage v1.56.1 + github.com/Delta456/box-cli-maker/v2 v2.3.0 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.29.0 github.com/Parallels/docker-machine-parallels/v2 v2.0.1 github.com/VividCortex/godaemon v1.0.0 + github.com/Xuanwo/go-locale v1.1.3 + github.com/aregm/cpuid v0.0.0-20181003105527-1a4a6f06a1c6 github.com/blang/semver/v4 v4.0.0 - github.com/briandowns/spinner v1.11.1 - github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a // indirect - github.com/cenkalti/backoff/v4 v4.1.1 - github.com/cheggaaa/pb/v3 v3.0.8 - github.com/cloudevents/sdk-go/v2 v2.3.1 - github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 - github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect - github.com/docker/cli v0.0.0-20200303162255-7d407207c304 // indirect - github.com/docker/docker v20.10.7+incompatible - github.com/docker/go-units v0.4.0 + github.com/briandowns/spinner v1.23.2 + github.com/cenkalti/backoff/v4 v4.3.0 + github.com/cheggaaa/pb/v3 v3.1.7 + github.com/cloudevents/sdk-go/v2 v2.16.0 + github.com/containerd/errdefs v1.0.0 + github.com/distribution/reference v0.6.0 + github.com/docker/cli v28.4.0+incompatible + github.com/docker/docker v28.5.2+incompatible + github.com/docker/go-connections v0.6.0 + github.com/docker/go-units v0.5.0 github.com/docker/machine v0.16.2 - github.com/elazarl/goproxy v0.0.0-20210110162100-a92cc753f88e + github.com/elazarl/goproxy v1.7.2 github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 - github.com/google/go-cmp v0.5.6 - github.com/google/go-containerregistry v0.4.1 - github.com/google/go-github/v36 v36.0.0 - github.com/google/slowjam v1.0.0 - github.com/google/uuid v1.3.0 - github.com/gookit/color v1.4.2 // indirect - github.com/hashicorp/go-getter v1.5.7 - github.com/hashicorp/go-retryablehttp v0.7.0 - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect - github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 // indirect - github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8 - github.com/intel-go/cpuid v0.0.0-20181003105527-1a4a6f06a1c6 // indirect + github.com/google/go-cmp v0.7.0 + github.com/google/go-containerregistry v0.20.6 + github.com/google/go-github/v74 v74.0.0 + github.com/google/go-github/v80 v80.0.0 + github.com/google/slowjam v1.1.2 + github.com/google/uuid v1.6.0 + github.com/hashicorp/go-getter v1.8.3 + github.com/hashicorp/go-retryablehttp v0.7.8 + github.com/hooklift/iso9660 v1.0.0 + github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0 github.com/johanneswuerbach/nfsexports v0.0.0-20200318065542-c48c3734757f - github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c - github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d // indirect + github.com/juju/clock v1.1.1 github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b - github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8 // indirect - github.com/juju/mutex v0.0.0-20180619145857-d21b13acf4bf - github.com/juju/retry v0.0.0-20180821225755-9058e192b216 // indirect - github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2 // indirect - github.com/juju/utils v0.0.0-20180820210520-bf9cc5bdd62d // indirect - github.com/juju/version v0.0.0-20180108022336-b64dbd566305 // indirect + github.com/juju/mutex/v2 v2.0.0 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 github.com/klauspost/cpuid v1.2.0 - github.com/libvirt/libvirt-go v3.9.0+incompatible - github.com/machine-drivers/docker-machine-driver-vmware v0.1.3 + github.com/machine-drivers/docker-machine-driver-vmware v0.1.5 github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24 - github.com/mattn/go-isatty v0.0.13 - github.com/mattn/go-runewidth v0.0.13 // indirect + github.com/mattn/go-isatty v0.0.20 github.com/mitchellh/go-ps v1.0.0 github.com/moby/hyperkit v0.0.0-20210108224842-2f061e447e14 - github.com/moby/sys/mount v0.2.0 // indirect - github.com/olekukonko/tablewriter v0.0.5 + github.com/moby/patternmatcher v0.6.0 + github.com/olekukonko/tablewriter v1.0.9 + github.com/opencontainers/cgroups v0.0.4 github.com/opencontainers/go-digest v1.0.0 - github.com/otiai10/copy v1.6.0 - github.com/pborman/uuid v1.2.1 + github.com/otiai10/copy v1.14.1 github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 - github.com/pkg/browser v0.0.0-20160118053552-9302be274faa + github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 github.com/pkg/errors v0.9.1 - github.com/pkg/profile v0.0.0-20161223203901-3a8809bd8a80 - github.com/pmezard/go-difflib v1.0.0 - github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 // indirect - github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859 // indirect - github.com/shirou/gopsutil/v3 v3.21.7 - github.com/spf13/cobra v1.2.1 - github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.8.1 - github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f + github.com/pkg/profile v1.7.0 + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 + github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 + github.com/shirou/gopsutil/v4 v4.25.11 + github.com/spf13/cobra v1.9.1 + github.com/spf13/pflag v1.0.10 + github.com/spf13/viper v1.21.0 + github.com/stretchr/testify v1.11.1 github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097 - go.opencensus.io v0.23.0 - go.opentelemetry.io/otel v0.17.0 - go.opentelemetry.io/otel/sdk v0.16.0 - go.opentelemetry.io/otel/trace v0.17.0 + go.opentelemetry.io/otel v1.39.0 + go.opentelemetry.io/otel/sdk v1.39.0 + go.opentelemetry.io/otel/trace v1.39.0 golang.org/x/build v0.0.0-20190927031335-2835ba2e683f - golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 - golang.org/x/exp v0.0.0-20210220032938-85be41e4509f - golang.org/x/mod v0.4.2 - golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c - golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72 - golang.org/x/text v0.3.6 - gonum.org/v1/plot v0.9.0 - google.golang.org/api v0.52.0 - gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect + golang.org/x/crypto v0.45.0 + golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c + golang.org/x/mod v0.30.0 + golang.org/x/oauth2 v0.30.0 + golang.org/x/sync v0.19.0 + golang.org/x/sys v0.39.0 + golang.org/x/term v0.37.0 + golang.org/x/text v0.32.0 + google.golang.org/api v0.248.0 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.22.0 - k8s.io/apimachinery v0.22.0 - k8s.io/client-go v0.22.0 - k8s.io/klog/v2 v2.10.0 - k8s.io/kubectl v0.22.0 - k8s.io/kubernetes v1.21.3 + k8s.io/api v0.34.3 + k8s.io/apimachinery v0.34.3 + k8s.io/client-go v0.34.1 + k8s.io/cluster-bootstrap v0.34.3 + k8s.io/component-base v0.34.1 + k8s.io/klog/v2 v2.130.1 + k8s.io/kubectl v0.34.1 + k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 + libvirt.org/go/libvirt v1.11010.0 sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0 ) +require ( + cel.dev/expr v0.24.0 // indirect + cloud.google.com/go v0.121.6 // indirect + cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.8.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + cloud.google.com/go/monitoring v1.24.2 // indirect + cloud.google.com/go/trace v1.11.6 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 // indirect + github.com/MakeNowJust/heredoc v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/VividCortex/ewma v1.2.0 // indirect + github.com/aws/aws-sdk-go-v2 v1.36.3 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect + github.com/aws/aws-sdk-go-v2/config v1.29.15 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.68 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.20 // indirect + github.com/aws/smithy-go v1.22.3 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect + github.com/containerd/errdefs/pkg v0.3.0 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect + github.com/coreos/go-systemd/v22 v22.5.0 // indirect + github.com/cyphar/filepath-securejoin v0.4.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker-credential-helpers v0.9.3 // indirect + github.com/ebitengine/purego v0.9.1 // indirect + github.com/emicklei/go-restful/v3 v3.12.2 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect + github.com/evanphx/json-patch v5.6.0+incompatible // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/felixge/fgprof v0.9.3 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/fvbommel/sortorder v1.1.0 // indirect + github.com/fxamacker/cbor/v2 v2.9.0 // indirect + github.com/go-jose/go-jose/v4 v4.0.5 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/mock v1.7.0-rc.1 // indirect + github.com/google/gnostic-models v0.7.0 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect + github.com/googleapis/gax-go/v2 v2.15.0 // indirect + github.com/gookit/color v1.5.2 // indirect + github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 // indirect + github.com/huandu/xstrings v1.3.2 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/juju/errors v0.0.0-20220203013757-bd733f3c86b9 // indirect + github.com/juju/loggo v1.0.0 // indirect + github.com/klauspost/compress v1.18.0 // indirect + github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/miekg/dns v1.1.48 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/go-archive v0.1.0 // indirect + github.com/moby/spdystream v0.5.0 // indirect + github.com/moby/sys/atomicwriter v0.1.0 // indirect + github.com/moby/sys/mountinfo v0.7.2 // indirect + github.com/moby/sys/sequential v0.6.0 // indirect + github.com/moby/sys/user v0.4.0 // indirect + github.com/moby/sys/userns v0.1.0 // indirect + github.com/moby/term v0.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect + github.com/olekukonko/errors v1.1.0 // indirect + github.com/olekukonko/ll v0.0.9 // indirect + github.com/opencontainers/image-spec v1.1.1 // indirect + github.com/otiai10/mint v1.6.3 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.62.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/sayboras/dockerclient v1.0.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/tklauser/go-sysconf v0.3.16 // indirect + github.com/tklauser/numcpus v0.11.0 // indirect + github.com/ulikunitz/xz v0.5.15 // indirect + github.com/vbatts/tar-split v0.12.1 // indirect + github.com/x448/float16 v0.8.4 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + github.com/zeebo/errs v1.4.0 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.36.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect + go.opentelemetry.io/otel/metric v1.39.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + go.yaml.in/yaml/v2 v2.4.2 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/net v0.47.0 // indirect + golang.org/x/time v0.12.0 // indirect + golang.org/x/tools v0.39.0 // indirect + google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c // indirect + google.golang.org/grpc v1.74.2 // indirect + google.golang.org/protobuf v1.36.7 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/cli-runtime v0.34.1 // indirect + k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect + sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect + sigs.k8s.io/randfill v1.0.0 // indirect + sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect + sigs.k8s.io/yaml v1.6.0 // indirect +) + replace ( - git.apache.org/thrift.git => github.com/apache/thrift v0.0.0-20180902110319-2566ecd5d999 - github.com/briandowns/spinner => github.com/alonyb/spinner v1.12.7 - github.com/docker/machine => github.com/machine-drivers/machine v0.7.1-0.20210719174735-6eca26732baa - github.com/samalba/dockerclient => github.com/sayboras/dockerclient v1.0.0 - k8s.io/api => k8s.io/api v0.21.2 - k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.21.2 - k8s.io/apimachinery => k8s.io/apimachinery v0.21.2 - k8s.io/apiserver => k8s.io/apiserver v0.21.2 - k8s.io/cli-runtime => k8s.io/cli-runtime v0.21.2 - k8s.io/client-go => k8s.io/client-go v0.21.2 - k8s.io/cloud-provider => k8s.io/cloud-provider v0.21.2 - k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.21.2 - k8s.io/code-generator => k8s.io/code-generator v0.21.2 - k8s.io/component-base => k8s.io/component-base v0.21.2 - k8s.io/component-helpers => k8s.io/component-helpers v0.21.2 - k8s.io/controller-manager => k8s.io/controller-manager v0.21.2 - k8s.io/cri-api => k8s.io/cri-api v0.21.2 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.21.2 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.21.2 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.21.2 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.21.2 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.21.2 - k8s.io/kubectl => k8s.io/kubectl v0.21.2 - k8s.io/kubelet => k8s.io/kubelet v0.21.2 - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.21.2 - k8s.io/metrics => k8s.io/metrics v0.21.2 - k8s.io/mount-utils => k8s.io/mount-utils v0.21.2 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.21.2 + github.com/Parallels/docker-machine-parallels/v2 => github.com/minikube-machine/machine-driver-parallels/v2 v2.0.2-0.20240730142131-ada9375ea417 + github.com/docker/machine => github.com/minikube-machine/machine v0.0.0-20251109100456-3b479dcea7a3 + github.com/machine-drivers/docker-machine-driver-vmware => github.com/minikube-machine/machine-driver-vmware v0.1.6-0.20230701123042-a391c48b14d5 ) diff --git a/go.sum b/go.sum index d9d4dd91bcfb..9463e3759e3b 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= +cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -7,515 +7,287 @@ cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6A cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.88.0 h1:MZ2cf9Elnv1wqccq8ooKO2MqHQLc+ChCp/+QWObCpxg= -cloud.google.com/go v0.88.0/go.mod h1:dnKwfYbP9hQhefiUvpbcAyoGSHUrOxR20JVElLiUvEY= +cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= +cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= +cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= +cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute/metadata v0.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcaobyVfZWqRLA= +cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= +cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.15.0 h1:Ljj+ZXVEhCr/1+4ZhvtteN1ND7UUsNTlduGclLh8GO0= -cloud.google.com/go/storage v1.15.0/go.mod h1:mjjQMoxxyGH7Jr8K5qrx6N2O0AHsczI61sMNn03GIZI= -contrib.go.opencensus.io/exporter/stackdriver v0.12.1 h1:Dll2uFfOVI3fa8UzsHyP6z0M6fEc9ZTAMo+Y3z282Xg= -contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= -contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +cloud.google.com/go/storage v1.56.1 h1:n6gy+yLnHn0hTwBFzNn8zJ1kqWfR91wzdM8hjRF4wP0= +cloud.google.com/go/storage v1.56.1/go.mod h1:C9xuCZgFl3buo2HZU/1FncgvvOgTAs/rnh4gF4lMg0s= +cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= +cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= -github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Delta456/box-cli-maker/v2 v2.2.1 h1:uTcuvT6Ty+LBHuRUdFrJBpqP9RhtLxI5+5ZpKYAUuVw= -github.com/Delta456/box-cli-maker/v2 v2.2.1/go.mod h1:R7jxZHK2wGBR2Luz/Vgi8jP5fz1ljUXgu2o2JQNmvFU= -github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2 h1:rMamBsR6iCT9Y5m2Il6vFGJvY7FAgck4AoA/LobheKU= -github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2/go.mod h1:BB1eHdMLYEFuFdBlRMb0N7YGVdM5s6Pt0njxgvfbGGs= -github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v0.16.0 h1:ljU7eS7Fe0eGWEJxhoIjGANPEhx2f5PKTbDjvT61Kwk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v0.16.0/go.mod h1:TLDTgf8D4fD8Y1DizdJKtfIjkHJZU1J+mieFB1qS5T8= -github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= -github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU= -github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17 h1:iT12IBVClFevaf8PuVyi3UmZOVh4OqnaLxDTW2O6j3w= -github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= -github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.17 h1:yFHH5bghP9ij5Y34PPaMOE8g//oXZ0uJQeMENVo2zcI= -github.com/Microsoft/hcsshim v0.8.17/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= +github.com/Delta456/box-cli-maker/v2 v2.3.0 h1:rGdoK/Qt3shdT1uqRMGgPqrhtisGD7PamTW8vY5MyCA= +github.com/Delta456/box-cli-maker/v2 v2.3.0/go.mod h1:Uv/kSX95LuNQn3C8wWazEIETE6MunPuYN+/knckbPQc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.29.0 h1:YVtMlmfRUTaWs3+1acwMBp7rBUo6zrxl6Kn13/R9YW4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.29.0/go.mod h1:rKOFVIPbNs2wZeh7ZeQ0D9p/XLgbNiTr5m7x6KuAshk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0 h1:4LP6hvB4I5ouTbGgWtixJhgED6xdf67twf9PoY96Tbg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0/go.mod h1:jUZ5LYlw40WMd07qxcQJD5M40aUxrfwqQX1g7zxYnrQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 h1:Ron4zCA/yk6U7WOBXhTJcDpsUBG9npumK6xw2auFltQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0/go.mod h1:cSgYe11MCNYunTnRXrKiR/tHc0eoKjICUuWpNZoVCOo= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= +github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Parallels/docker-machine-parallels/v2 v2.0.1 h1:3Rj+4tcm/UqMU5g2bLJmpxD0ssn1BB5am4Cd6yUDbVI= -github.com/Parallels/docker-machine-parallels/v2 v2.0.1/go.mod h1:NKwI5KryEmEHMZVj80t9JQcfXWZp4/ZYNBuw4C5sQ9E= -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdcM= -github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= +github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= github.com/VividCortex/godaemon v1.0.0 h1:aHYrScWvgaSOdAoYCdObWXLm+e1rldP9Pwb1ZvuZkQw= github.com/VividCortex/godaemon v1.0.0/go.mod h1:hBWe/72KbGt/lb95E+Sh9ersdYbB57Dt6CG66S1YPno= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/Xuanwo/go-locale v1.1.3 h1:EWZZJJt5rqPHHbqPRH1zFCn5D7xHjjebODctA4aUO3A= +github.com/Xuanwo/go-locale v1.1.3/go.mod h1:REn+F/c+AtGSWYACBSYZgl23AP+0lfQC+SEFPN+hj30= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= -github.com/alonyb/spinner v1.12.7 h1:FflTMA9I2xRd8OQ5swyZY6Q1DFeaicA/bWo6/oM82a8= -github.com/alonyb/spinner v1.12.7/go.mod h1:mQak9GHqbspjC/5iUx3qMlIho8xBS/ppAL/hX5SmPJU= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= -github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.35.24 h1:U3GNTg8+7xSM6OAJ8zksiSM4bRqxBWmVwwehvOSNG3A= -github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/aregm/cpuid v0.0.0-20181003105527-1a4a6f06a1c6 h1:FCWCoLmJABwx6v6cyrmEHweZdx7IenSeQI06FYIM4Wk= +github.com/aregm/cpuid v0.0.0-20181003105527-1a4a6f06a1c6/go.mod h1:U7jHFVFhE3ffvppP5MofVeTKcHBpk5GEj4CJsku5ONY= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM= +github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= +github.com/aws/aws-sdk-go-v2/config v1.29.15 h1:I5XjesVMpDZXZEZonVfjI12VNMrYa38LtLnw4NtY5Ss= +github.com/aws/aws-sdk-go-v2/config v1.29.15/go.mod h1:tNIp4JIPonlsgaO5hxO372a6gjhN63aSWl2GVl5QoBQ= +github.com/aws/aws-sdk-go-v2/credentials v1.17.68 h1:cFb9yjI02/sWHBSYXAtkamjzCuRymvmeFmt0TC0MbYY= +github.com/aws/aws-sdk-go-v2/credentials v1.17.68/go.mod h1:H6E+jBzyqUu8u0vGaU6POkK3P0NylYEeRZ6ynBpMqIk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 h1:BCG7DCXEXpNCcpwCxg1oi9pkJWH2+eZzTn9MY56MbVw= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= +github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 h1:xYEAf/6QHiTZDccKnPMbsMwlau13GsDsTgdue3wmHGw= +github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1/go.mod h1:qbn305Je/IofWBJ4bJz/Q7pDEtnnoInw/dGt71v6rHE= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.20 h1:oIaQ1e17CSKaWmUTu62MtraRWVIosn/iONMuZt0gbqc= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.20/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= +github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= +github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/briandowns/spinner v1.23.2 h1:Zc6ecUnI+YzLmJniCfDNaMbW0Wid1d5+qcTq4L2FW8w= +github.com/briandowns/spinner v1.23.2/go.mod h1:LaZeM4wm2Ywy6vO571mvhQNRcWfRUnXOs0RcKV0wYKM= github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a h1:+uvtaGSLJh0YpLLHCQ9F+UVGy4UOS542hsjj8wBjvH0= github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a/go.mod h1:txokOny9wavBtq2PWuHmj1P+eFwpCsj+gQeNNANChfU= -github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= -github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY= -github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1 h1:G2HAfAmvm/GcKan2oOQpBXOd2tT2G57ZnZGWa1PxPBQ= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= -github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= -github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= -github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/cheggaaa/pb/v3 v3.0.8 h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA= -github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/ow1EJTA= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb/v3 v3.1.7 h1:2FsIW307kt7A/rz/ZI2lvPO+v3wKazzE4K/0LtTWsOI= +github.com/cheggaaa/pb/v3 v3.1.7/go.mod h1:/Ji89zfVPeC/u5j8ukD0MBPHt2bzTYp74lQ7KlgFWTQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.5.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudevents/sdk-go/v2 v2.3.1 h1:QRTu0yRA4FbznjRSds0/4Hy6cVYpWV2wInlNJSHWAtw= -github.com/cloudevents/sdk-go/v2 v2.3.1/go.mod h1:4fO2UjPMYYR1/7KPJQCwTPb0lFA8zYuitkUpAZFSY1Q= -github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:Yg2hDs4b13Evkpj42FU2idX2cVXVFqQSheXYKM86Qsk= -github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:MgJyK38wkzZbiZSKeIeFankxxSA8gayko/nr5x5bgBA= -github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:tuijfIjZyjZaHq9xDUh0tNitwXshJpbLkqMOJv4H3do= -github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc= -github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/container-storage-interface/spec v1.3.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.1 h1:iJnMvco9XGvKUvNQkv88bE4uJXxRQH18efbKo9w5vHQ= -github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.1 h1:xWHPAoe6VkUiI9GAvndJM7s/0MTrmwX3AQiYTr3olf0= -github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0 h1:UFRRY5JemiAhPZrr/uE0n8fMTLcZsUvySPr1+D7pgr8= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= -github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= -github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= -github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/stargz-snapshotter/estargz v0.4.1 h1:5e7heayhB7CcgdTkqfZqrNaNv15gABwr3Q2jBTbLlt4= -github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= -github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= -github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= -github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/coredns/corefile-migration v1.0.11/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/cloudevents/sdk-go/v2 v2.16.0 h1:wnunjgiLQCfYlyo+E4+mFlZtAh7pKn7vT8MMD3lSwCg= +github.com/cloudevents/sdk-go/v2 v2.16.0/go.mod h1:5YWqklyhDSmGzBK/JENKKXdulbPq0JFf3c/KEnMLqgg= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= +github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= +github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8= +github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.3.1/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= -github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= -github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= -github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= +github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v0.0.0-20200303162255-7d407207c304 h1:A7SYzidcyuQ/yS4wezWGYeUioUFJQk8HYWY9aMYTF4I= -github.com/docker/cli v0.0.0-20200303162255-7d407207c304/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/cli v28.4.0+incompatible h1:RBcf3Kjw2pMtwui5V0DIMdyeab8glEw5QY0UUU4C9kY= +github.com/docker/cli v28.4.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.0.0-20180621001606-093424bec097/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v17.12.0-ce-rc1.0.20181225093023-5ddb1d410a8b+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v17.12.0-ce-rc1.0.20190115220918-5ec31380a5d3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.7+incompatible h1:Z6O9Nhsjv+ayUEeI1IojKbYcsGdgYSNqxe1s2MYzUhQ= -github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= +github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8= +github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo= +github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= +github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= +github.com/docker/go-units v0.0.0-20151230175859-0bbddae09c5a/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/ebitengine/purego v0.9.1 h1:a/k2f2HQU3Pi399RPW1MOaZyhKJL9w/xFpKAg4q1s0A= +github.com/ebitengine/purego v0.9.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20210110162100-a92cc753f88e h1:/cwV7t2xezilMljIftb7WlFtzGANRCnoOhPjtl2ifcs= -github.com/elazarl/goproxy v0.0.0-20210110162100-a92cc753f88e/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= -github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2 h1:dWB6v3RcOy03t/bUadywsbyrQwCqZeNIEX6M1OtSZOM= -github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= +github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= +github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU= +github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= +github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= -github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= -github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= +github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fvbommel/sortorder v1.1.0 h1:fUmoe+HLsBTctBDoaBwpQo5N+nrCp8g/BjKb/6ZQmYw= +github.com/fvbommel/sortorder v1.1.0/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= +github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= +github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= -github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1 h1:wBrPaMkrXFBW3qXpXAjiKljdVUMxn9bX2ia3XjPHoik= -github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07 h1:OTlfMvwR1rLyf9goVmXfuS5AJn80+Vmj4rTf4n46SOs= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc= -github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 h1:zN2lZNZRflqFyxVaTIU61KNKQ9C0055u9CAfpmqUvo4= github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3/go.mod h1:nPpo7qLxd6XL3hWJG/O60sR8ZKfMCiIoNap5GvD12KU= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U= +github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -523,815 +295,514 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/cadvisor v0.39.0/go.mod h1:rjQFmK4jPCpxeUdLq9bYhNFFsjgGOtpnDmDeap0+nsw= +github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo= +github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-containerregistry v0.4.1 h1:Lrcj2AOoZ7WKawsoKAh2O0dH0tBqMW2lTEmozmK4Z3k= -github.com/google/go-containerregistry v0.4.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= -github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-containerregistry v0.20.6 h1:cvWX87UxxLgaH76b4hIvya6Dzz9qHB31qAwjAohdSTU= +github.com/google/go-containerregistry v0.20.6/go.mod h1:T0x8MuoAoKX/873bkeSfLD2FAkwCDf9/HZgsFJ02E2Y= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-github/v36 v36.0.0 h1:ndCzM616/oijwufI7nBRa+5eZHLldT+4yIB68ib5ogs= -github.com/google/go-github/v36 v36.0.0/go.mod h1:LFlKC047IOqiglRGNqNb9s/iAPTnnjtlshm+bxp+kwk= -github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-github/v74 v74.0.0 h1:yZcddTUn8DPbj11GxnMrNiAnXH14gNs559AsUpNpPgM= +github.com/google/go-github/v74 v74.0.0/go.mod h1:ubn/YdyftV80VPSI26nSJvaEsTOnsjrxG3o9kJhcyak= +github.com/google/go-github/v80 v80.0.0 h1:BTyk3QOHekrk5VF+jIGz1TNEsmeoQG9K/UWaaP+EWQs= +github.com/google/go-github/v80 v80.0.0/go.mod h1:pRo4AIMdHW83HNMGfNysgSAv0vmu+/pkY8nZO9FT9Yo= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210715191844-86eeefc3e471/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= +github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= +github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/slowjam v1.0.0 h1:dA9flW4oGTJcSy8FpEvdq8JKwPFVgqYwMmjhqlb2L+s= -github.com/google/slowjam v1.0.0/go.mod h1:mNktULbvWfYVMKKmpt94Rp3jMtmhQZLS0iR+W84S0mM= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= +github.com/google/slowjam v1.1.2 h1:uAsv7r9f1TP5xwerte6OseOYbRur2y47jLGvn22dXk8= +github.com/google/slowjam v1.1.2/go.mod h1:XGDJY4mZ5Y4BAi7itXRLZ0Hl/fcfNwx9iX06qCwZu1M= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= +github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= +github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c29bdd3 h1:eHv/jVY/JNop1xg2J9cBb4EzyMpWZoNCP1BslSAIkOI= -github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c29bdd3/go.mod h1:h/KNeRx7oYU4SpA4SoY7W2/NxDKEEVuwA6j9A27L4OI= -github.com/gookit/color v1.3.6/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ= -github.com/gookit/color v1.4.2 h1:tXy44JFSFkKnELV6WaMo/lLfu/meqITX3iAV52do7lk= -github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gookit/color v1.5.2 h1:uLnfXcaFjlrDnQDT+NCBcfhrXqYTx/rcCa6xn01Y8yI= +github.com/gookit/color v1.5.2/go.mod h1:w8h4bGiHeeBpvQVePTutdbERIUf3oJE5lZ8HM0UgXyg= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65 h1:81+kWbE1yErFBMjME0I5k3x3kojjKsWtPYHEAutoPow= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65/go.mod h1:WtMzv9T++tfWVea+qB2MXoaqxw33S8bpJslzUike2mQ= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.5.7 h1:HBLsom8eGHLxj78ta+/MVSyct8KWG4B4z6lhBA4vJcg= -github.com/hashicorp/go-getter v1.5.7/go.mod h1:BrrV/1clo8cCYu6mxvboYg+KutTiFnXjMEgDD8+i7ZI= -github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= -github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= -github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= +github.com/hashicorp/go-getter v1.8.3 h1:gIS+oTNv3kyYAvlUVgMR46MiG0bM0KuSON/KZEvRoRg= +github.com/hashicorp/go-getter v1.8.3/go.mod h1:CUTt9x2bCtJ/sV8ihgrITL3IUE+0BE1j/e4n5P/GIM4= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48= +github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= -github.com/heketi/heketi v10.2.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= -github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 h1:WgfvpuKg42WVLkxNwzfFraXkTXPK36bMqXvMFN67clI= github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214/go.mod h1:kj6hFWqfwSjFjLnYW5PK1DoxZ4O0uapwHRmd9jhln4E= -github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8 h1:ARl0RuGZTqBOMXQIfXen0twVSJ8kMojd7ThJf4EBcrc= -github.com/hooklift/iso9660 v0.0.0-20170318115843-1cf07e5970d8/go.mod h1:sOC47ru8lB0DlU0EZ7BJ0KCP5rDqOvx0c/5K5ADm8H0= +github.com/hooklift/iso9660 v1.0.0 h1:GYN0ejrqTl1qtB+g+ics7xxWHp7J2B1zmr25O9EyG3c= +github.com/hooklift/iso9660 v1.0.0/go.mod h1:sOC47ru8lB0DlU0EZ7BJ0KCP5rDqOvx0c/5K5ADm8H0= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0 h1:nHoRIX8iXob3Y2kdt9KsjyIb7iApSvb3vgsd93xb5Ow= +github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/intel-go/cpuid v0.0.0-20181003105527-1a4a6f06a1c6 h1:XboatR7lasl05yel5hNXF7kQBw2oFUGdMztcgisfhNU= -github.com/intel-go/cpuid v0.0.0-20181003105527-1a4a6f06a1c6/go.mod h1:RmeVYf9XrPRbRc3XIx0gLYA8qOFvNoPOfaEZduRlEp4= -github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= -github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= github.com/johanneswuerbach/nfsexports v0.0.0-20200318065542-c48c3734757f h1:tL0xH80QVHQOde6Qqdohv6PewABH8l8N9pywZtuojJ0= github.com/johanneswuerbach/nfsexports v0.0.0-20200318065542-c48c3734757f/go.mod h1:+c1/kUpg2zlkoWqTOvzDs36Wpbm3Gd1nlmtXAEB0WGU= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c h1:3UvYABOQRhJAApj9MdCN+Ydv841ETSoy6xLzdmmr/9A= -github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c/go.mod h1:nD0vlnrUjcjJhqN5WuCWZyzfd5AHZAC9/ajvbSx69xA= -github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d h1:hJXjZMxj0SWlMoQkzeZDLi2cmeiWKa7y1B8Rg+qaoEc= -github.com/juju/errors v0.0.0-20190806202954-0232dcc7464d/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a/go.mod h1:UJSiEoRfvx3hP73CvoARgeLjaIOjybY9vj8PUPPFGeU= +github.com/juju/clock v1.1.1 h1:NvgHG9DQmOpBevgt6gzkyimdWBooLXDy1cQn89qJzBI= +github.com/juju/clock v1.1.1/go.mod h1:HIBvJ8kiV/n7UHwKuCkdYL4l/MDECztHR2sAvWDxxf0= +github.com/juju/collections v0.0.0-20200605021417-0d0ec82b7271 h1:4R626WTwa7pRYQFiIRLVPepMhm05eZMEx+wIurRnMLc= +github.com/juju/collections v0.0.0-20200605021417-0d0ec82b7271/go.mod h1:5XgO71dV1JClcOJE+4dzdn4HrI5LiyKd7PlVG6eZYhY= +github.com/juju/errors v0.0.0-20220203013757-bd733f3c86b9 h1:EJHbsNpQyupmMeWTq7inn+5L/WZ7JfzCVPJ+DP9McCQ= +github.com/juju/errors v0.0.0-20220203013757-bd733f3c86b9/go.mod h1:TRm7EVGA3mQOqSVcBySRY7a9Y1/gyVhh/WTCnc5sD4U= github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b h1:FQ7+9fxhyp82ks9vAuyPzG0/vVbWwMwLJ+P6yJI5FN8= github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b/go.mod h1:HMcgvsgd0Fjj4XXDkbjdmlbI505rUPBs6WBMYg2pXks= -github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8 h1:UUHMLvzt/31azWTN/ifGWef4WUqvXk0iRqdhdy/2uzI= -github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/mutex v0.0.0-20180619145857-d21b13acf4bf h1:2d3cilQly1OpAfZcn4QRuwDOdVoHsM4cDTkcKbmO760= -github.com/juju/mutex v0.0.0-20180619145857-d21b13acf4bf/go.mod h1:Y3oOzHH8CQ0Ppt0oCKJ2JFO81/EsWenH5AEqigLH+yY= +github.com/juju/loggo v1.0.0 h1:Y6ZMQOGR9Aj3BGkiWx7HBbIx6zNwNkxhVNOHU2i1bl0= +github.com/juju/loggo v1.0.0/go.mod h1:NIXFioti1SmKAlKNuUwbMenNdef59IF52+ZzuOmHYkg= +github.com/juju/mgo/v2 v2.0.0-20210302023703-70d5d206e208 h1:/WiCm+Vpj87e4QWuWwPD/bNE9kDrWCLvPBHOQNcG2+A= +github.com/juju/mgo/v2 v2.0.0-20210302023703-70d5d206e208/go.mod h1:0OChplkvPTZ174D2FYZXg4IB9hbEwyHkD+zT+/eK+Fg= +github.com/juju/mutex/v2 v2.0.0 h1:rVmJdOaXGWF8rjcFHBNd4x57/1tks5CgXHx55O55SB0= +github.com/juju/mutex/v2 v2.0.0/go.mod h1:jwCfBs/smYDaeZLqeaCi8CB8M+tOes4yf827HoOEoqk= github.com/juju/retry v0.0.0-20180821225755-9058e192b216 h1:/eQL7EJQKFHByJe3DeE8Z36yqManj9UY5zppDoQi4FU= github.com/juju/retry v0.0.0-20180821225755-9058e192b216/go.mod h1:OohPQGsr4pnxwD5YljhQ+TZnuVRYpa5irjugL1Yuif4= -github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2 h1:Pp8RxiF4rSoXP9SED26WCfNB28/dwTDpPXS8XMJR8rc= -github.com/juju/testing v0.0.0-20190723135506-ce30eb24acd2/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= -github.com/juju/utils v0.0.0-20180820210520-bf9cc5bdd62d h1:irPlN9z5VCe6BTsqVsxheCZH99OFSmqSVyTigW4mEoY= -github.com/juju/utils v0.0.0-20180820210520-bf9cc5bdd62d/go.mod h1:6/KLg8Wz/y2KVGWEpkK9vMNGkOnu4k/cqs8Z1fKjTOk= -github.com/juju/version v0.0.0-20180108022336-b64dbd566305 h1:lQxPJ1URr2fjsKnJRt/BxiIxjLt9IKGvS+0injMHbag= -github.com/juju/version v0.0.0-20180108022336-b64dbd566305/go.mod h1:kE8gK5X0CImdr7qpSKl3xB2PmpySSmfj7zVbkZFs81U= +github.com/juju/testing v0.0.0-20220203020004-a0ff61f03494 h1:XEDzpuZb8Ma7vLja3+5hzUqVTvAqm5Y+ygvnDs5iTMM= +github.com/juju/testing v0.0.0-20220203020004-a0ff61f03494/go.mod h1:rUquetT0ALL48LHZhyRGvjjBH8xZaZ8dFClulKK5wK4= +github.com/juju/utils/v3 v3.0.0-20220130232349-cd7ecef0e94a h1:5ZWDCeCF0RaITrZGemzmDFIhjR/MVSvBUqgSyaeTMbE= +github.com/juju/utils/v3 v3.0.0-20220130232349-cd7ecef0e94a/go.mod h1:LzwbbEN7buYjySp4nqnti6c6olSqRXUk6RkbSUUP1n8= +github.com/juju/version/v2 v2.0.0-20211007103408-2e8da085dc23 h1:wtEPbidt1VyHlb8RSztU6ySQj29FLsOQiI9XiJhXDM4= +github.com/juju/version/v2 v2.0.0-20211007103408-2e8da085dc23/go.mod h1:Ljlbryh9sYaUSGXucslAEDf0A2XUSGvDbHJgW8ps6nc= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.13 h1:eSvu8Tmq6j2psUJqJrLcWH6K3w5Dwc+qipbaA6eVEN4= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= -github.com/libvirt/libvirt-go v3.9.0+incompatible h1:tcJOV5bCR8lWsifKnPCEnYSroD5rjuUkCBp/kv1kH/w= -github.com/libvirt/libvirt-go v3.9.0+incompatible/go.mod h1:34zsnB4iGeOv7Byj6qotuW8Ya4v4Tr43ttjz/F0wjLE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= -github.com/lightstep/tracecontext.go v0.0.0-20181129014701-1757c391b1ac h1:+2b6iGRJe3hvV/yVXrd41yVEjxuFHxasJqDhkIjS4gk= -github.com/lightstep/tracecontext.go v0.0.0-20181129014701-1757c391b1ac/go.mod h1:Frd2bnT3w5FB5q49ENTfVlztJES+1k/7lyWX2+9gq/M= -github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= -github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= -github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= -github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= -github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= -github.com/machine-drivers/docker-machine-driver-vmware v0.1.3 h1:CIdHhp5vSr+7i3DYmXyJHjVOeo27AGWtvq5SfmjyMVs= -github.com/machine-drivers/docker-machine-driver-vmware v0.1.3/go.mod h1:p2hY99UqqG4FNLvAotM0K5kPlShyQ486ymrkNqv1NiA= -github.com/machine-drivers/machine v0.7.1-0.20210719174735-6eca26732baa h1:RDn5zVjqpQP8yElV/30YUNiDsjksDSqq30JVQfo1wzY= -github.com/machine-drivers/machine v0.7.1-0.20210719174735-6eca26732baa/go.mod h1:79Uwa2hGd5S39LDJt58s8JZcIhGEK6pkq9bsuTbFWbk= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= -github.com/maruel/panicparse v1.5.0/go.mod h1:aOutY/MUjdj80R0AEVI9qE2zHqig+67t2ffUDDiLzAM= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/lunixbochs/vtclean v0.0.0-20160125035106-4fbf7632a2c6/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24 h1:uYuGXJBAi1umT+ZS4oQJUgKtfXCAYTR+n9zw1ViT0vA= github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24/go.mod h1:M1qoD/MqPgTZIk0EWKB38wE28ACRfVcn+cU08jyArI0= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-colorable v0.0.6/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.0-20160806122752-66b8e73f3f5c/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/dns v1.1.35 h1:oTfOaDH+mZkdcgdIjH6yBajRGtIwcwcaR+rt23ZSrJs= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/miekg/dns v1.1.48 h1:Ucfr7IIVyMBz4lRE8qmGUuZ4Wt3/ZGu9hmcMT3Uu4tQ= +github.com/miekg/dns v1.1.48/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/minikube-machine/machine v0.0.0-20251109100456-3b479dcea7a3 h1:LO7khkb1P2LpqCL8GnqPBPn1lZeqA/bqRinjveU2EaQ= +github.com/minikube-machine/machine v0.0.0-20251109100456-3b479dcea7a3/go.mod h1:wrzTHaSSmyll2TxLCq4mTFL5RJfeFr6qger+VcqNm9g= +github.com/minikube-machine/machine-driver-parallels/v2 v2.0.2-0.20240730142131-ada9375ea417 h1:f+neTRGCtvmW3Tm1V72vWpoTPuNOnXSQsHZdYOryfGM= +github.com/minikube-machine/machine-driver-parallels/v2 v2.0.2-0.20240730142131-ada9375ea417/go.mod h1:NKwI5KryEmEHMZVj80t9JQcfXWZp4/ZYNBuw4C5sQ9E= +github.com/minikube-machine/machine-driver-vmware v0.1.6-0.20230701123042-a391c48b14d5 h1:1z7xOzfMO4aBR9+2nYjlhRXX1773fX60HTS0QGpGRPU= +github.com/minikube-machine/machine-driver-vmware v0.1.6-0.20230701123042-a391c48b14d5/go.mod h1:HifYFOWR0bAMN4hWtaSADClogvtPy/jV0aRC5alhrKo= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= +github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo= github.com/moby/hyperkit v0.0.0-20210108224842-2f061e447e14 h1:XGy4iMfaG4r1uZKZQmEPSYSH0Nj5JJuKgPNUhWGQ08E= github.com/moby/hyperkit v0.0.0-20210108224842-2f061e447e14/go.mod h1:aBcAEoy5u01cPAYvosR85gzSrMZ0TVVnkPytOQN+9z8= -github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM= -github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.4.1 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh1kM= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= +github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= +github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= +github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= +github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= +github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= +github.com/moby/term v0.0.0-20200416134343-063f2cd0b49d/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= +github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= +github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= +github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= +github.com/olekukonko/tablewriter v1.0.9 h1:XGwRsYLC2bY7bNd93Dk51bcPZksWZmLYuaTHR0FqfL8= +github.com/olekukonko/tablewriter v1.0.9/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= +github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4= +github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= +github.com/opencontainers/cgroups v0.0.4 h1:XVj8P/IHVms/j+7eh8ggdkTLAxjz84ZzuFyGoE28DR4= +github.com/opencontainers/cgroups v0.0.4/go.mod h1:s8lktyhlGUqM7OSRL5P7eAW6Wb+kWPNvt4qvVfzA5vs= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.0.0-rc95 h1:RMuWVfY3E1ILlVsC3RhIq38n4sJtlOFwU9gfFZSqrd0= -github.com/opencontainers/runc v1.0.0-rc95/go.mod h1:z+bZxa/+Tz/FmYVWkhUajJdzFeOqjc5vrqskhVyHGUM= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= -github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.2 h1:VYWnrP5fXmz1MXvjuUvcBrXSjGE6xjON+axB/UrpO3E= -github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw= -github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= -github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= +github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= +github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I= +github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs= +github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/phpdave11/gofpdf v1.4.2 h1:KPKiIbfwbvC/wOncwhrpRdXVj2CZTCFlw4wnoyjtHfQ= -github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= -github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/pkg/browser v0.0.0-20160118053552-9302be274faa h1:od00Tr1U7+cLVtc+RNFmR53spHUF98Ziu33S8UIQnt0= -github.com/pkg/browser v0.0.0-20160118053552-9302be274faa/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v0.0.0-20161223203901-3a8809bd8a80 h1:DQFOykp5w+HOykOMzd2yOX5P6ty58Ggiu2rthHgcNQg= -github.com/pkg/profile v0.0.0-20161223203901-3a8809bd8a80/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= +github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/quobyte/api v0.1.8/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= -github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= -github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 h1:tlXG832s5pa9x9Gs3Rp2rTvEqjiDEuETUOSfBEiTcns= -github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= +github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= github.com/sayboras/dockerclient v1.0.0 h1:awHcxOzTP07Gl1SJAhkTCTagyJwgA6f/Az/Z4xMP2yg= github.com/sayboras/dockerclient v1.0.0/go.mod h1:mUmEoqt0b+uQg57s006FsvL4mybi+N5wINLDBGtaPTY= -github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil/v3 v3.21.7 h1:PnTqQamUjwEDSgn+nBGu0qSDV/CfvyiR/gwTH3i7HTU= -github.com/shirou/gopsutil/v3 v3.21.7/go.mod h1:RGl11Y7XMTQPmHh8F0ayC6haKNBgH4PXMJuTAcMOlz4= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shirou/gopsutil/v4 v4.25.11 h1:X53gB7muL9Gnwwo2evPSE+SfOrltMoR6V3xJAXZILTY= +github.com/shirou/gopsutil/v4 v4.25.11/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= -github.com/storageos/go-api v2.2.0+incompatible/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tklauser/go-sysconf v0.3.7 h1:HT7h4+536gjqeq1ZIJPgOl1rg1XFatQGVZWp7Py53eg= -github.com/tklauser/go-sysconf v0.3.7/go.mod h1:JZIdXh4RmBvZDBZ41ld2bGxRV3n4daiiqA3skYhAoQ4= -github.com/tklauser/numcpus v0.2.3 h1:nQ0QYpiritP6ViFhrKYsiv6VVxOpum2Gks5GhnJbS/8= -github.com/tklauser/numcpus v0.2.3/go.mod h1:vpEPS/JC+oZGGQ/My/vJnNsvMDQL6PwOqt8dsCw5j+E= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= +github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= +github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= +github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= +github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= +github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f h1:mvXjJIHRZyhNuGassLTcXTwjiWq7NmjdavZsUnmFybQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xo/terminfo v0.0.0-20200218205459-454e5b68f9e8/go.mod h1:6Yhx5ZJl5942QrNRWLwITArVT9okUXc5c3brgWJMoDc= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= +github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= +github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097 h1:Ucx5I1l1+TWXvqFmBigYu4Ub4MLvUuUU/whjoUvV95I= github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097/go.mod h1:lFZSWRIpCfE/pt91hHBBpV6+x87YlCjsp+aIR2qCPPU= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/otel v0.16.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA= -go.opentelemetry.io/otel v0.17.0 h1:6MKOu8WY4hmfpQ4oQn34u6rYhnf2sWf1LXYO/UFm71U= -go.opentelemetry.io/otel v0.17.0/go.mod h1:Oqtdxmf7UtEvL037ohlgnaYa1h7GtMh0NcSd9eqkC9s= -go.opentelemetry.io/otel/metric v0.17.0 h1:t+5EioN8YFXQ2EH+1j6FHCKMUj+57zIDSnSGr/mWuug= -go.opentelemetry.io/otel/metric v0.17.0/go.mod h1:hUz9lH1rNXyEwWAhIWCMFWKhYtpASgSnObJFnU26dJ0= -go.opentelemetry.io/otel/oteltest v0.17.0 h1:TyAihUowTDLqb4+m5ePAsR71xPJaTBJl4KDArIdi9k4= -go.opentelemetry.io/otel/oteltest v0.17.0/go.mod h1:JT/LGFxPwpN+nlsTiinSYjdIx3hZIGqHCpChcIZmdoE= -go.opentelemetry.io/otel/sdk v0.16.0 h1:5o+fkNsOfH5Mix1bHUApNBqeDcAYczHDa7Ix+R73K2U= -go.opentelemetry.io/otel/sdk v0.16.0/go.mod h1:Jb0B4wrxerxtBeapvstmAZvJGQmvah4dHgKSngDpiCo= -go.opentelemetry.io/otel/trace v0.17.0 h1:SBOj64/GAOyWzs5F680yW1ITIfJkm6cJWL2YAvuL9xY= -go.opentelemetry.io/otel/trace v0.17.0/go.mod h1:bIujpqg6ZL6xUTubIUgziI1jSaUPthmabA/ygf/6Cfg= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= +go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= +go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190927031335-2835ba2e683f h1:hXVePvSFG7tPGX4Pwk1d10ePFfoTCc0QmISfpKOHsS8= golang.org/x/build v0.0.0-20190927031335-2835ba2e683f/go.mod h1:fYw7AShPAhGMdXqA9gRadk/CcMsvLlClpE5oBwnS3dM= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190424203555-c05e17bb3b2d/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20210220032938-85be41e4509f h1:GrkO5AtFUU9U/1f5ctbIBXtBGeSJbWwIYfIsTcFMaX4= -golang.org/x/exp v0.0.0-20210220032938-85be41e4509f/go.mod h1:I6l2HNBLBZEcrOoCpyKLdY2lHoRZ8lI4x60KMCQDft4= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030 h1:lP9pYkih3DUSC641giIXa2XqfTIbbbRr0w2EOTA7wHA= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= +golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190502183928-7f726cade0ab/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420 h1:a8jGStKg0XqKDlKqjLrXn0ioF5MH36pT7Z0BRTqLhbk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1339,348 +810,142 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190115152922-a457fd036447/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190529164535-6a60838ec259/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72 h1:VqE9gduFZ4dbR7XoL77lHFp0/DyDUBKSXK7CMFkVcV0= -golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20221017184919-83659145692c/go.mod h1:VTIZ7TEbF0BS9Sv9lPTvGbtW8i4z6GGbJBCM37uMCzY= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= +golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200701151220-7cb253f4c4f8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200713011307-fd294ab11aed/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= -gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0 h1:3sEo36Uopv1/SA/dMFFaxXoL5XyikJ9Sf2Vll/k6+2E= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/api v0.45.0/go.mod h1:ISLIJCedJolbZvDfAk+Ctuq5hf+aJ33WgtUsfyFoLXA= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.52.0 h1:m5FLEd6dp5CU1F0tMWyqDi2XjchviIz8ntzOSz7w8As= -google.golang.org/api v0.52.0/go.mod h1:Him/adpjt0sxtkWViy0b6xyKW/SD71CwdJ7HqJo7SrU= +google.golang.org/api v0.248.0 h1:hUotakSkcwGdYUqzCRc5yGYsg4wXxpkKlW5ryVqvC1Y= +google.golang.org/api v0.248.0/go.mod h1:yAFUAF56Li7IuIQbTFoLwXTCI6XCFKueOlS7S9e4F9k= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200605102947-12044bf5ea91/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200711021454-869866162049/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200715011427-11fb19a81f2c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210420162539-3c870d7478d2/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f h1:YORWxaStkWBnWgELOHTmDrqNlFXuVGEbhwbB5iK94bQ= -google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= +google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= +google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c h1:qXWI/sQtv5UKboZ/zUk7h+mrf/lXORyI+n9DKDAusdg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= +google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1690,139 +955,85 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A= +google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20160105164936-4f90aeace3a2/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= +gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.21.2 h1:vz7DqmRsXTCSa6pNxXwQ1IYeAZgdIsua+DZU+o+SX3Y= -k8s.io/api v0.21.2/go.mod h1:Lv6UGJZ1rlMI1qusN8ruAp9PUBFyBwpEHAdG24vIsiU= -k8s.io/apiextensions-apiserver v0.21.2/go.mod h1:+Axoz5/l3AYpGLlhJDfcVQzCerVYq3K3CvDMvw6X1RA= -k8s.io/apimachinery v0.21.2 h1:vezUc/BHqWlQDnZ+XkrpXSmnANSLbpnlpwo0Lhk0gpc= -k8s.io/apimachinery v0.21.2/go.mod h1:CdTY8fU/BlvAbJ2z/8kBwimGki5Zp8/fbVuLY8gJumM= -k8s.io/apiserver v0.21.2/go.mod h1:lN4yBoGyiNT7SC1dmNk0ue6a5Wi6O3SWOIw91TsucQw= -k8s.io/cli-runtime v0.21.2/go.mod h1:8u/jFcM0QpoI28f6sfrAAIslLCXUYKD5SsPPMWiHYrI= -k8s.io/client-go v0.21.2 h1:Q1j4L/iMN4pTw6Y4DWppBoUxgKO8LbffEMVEV00MUp0= -k8s.io/client-go v0.21.2/go.mod h1:HdJ9iknWpbl3vMGtib6T2PyI/VYxiZfq936WNVHBRrA= -k8s.io/cloud-provider v0.21.2/go.mod h1:2mYI/l+eJESZ0Ye0fRHKMJ55t/j/TZ+gj3NUQkgIcBI= -k8s.io/cluster-bootstrap v0.21.2 h1:GXvCxl619A0edhAprX8U5gUZ5lQCUf7xhDa7SkXnlx0= -k8s.io/cluster-bootstrap v0.21.2/go.mod h1:OEm/gajtWz/ohbS4NGxkyTp/6f1fW3TBThgCQ1ljhHo= -k8s.io/code-generator v0.21.2/go.mod h1:8mXJDCB7HcRo1xiEQstcguZkbxZaqeUOrO9SsicWs3U= -k8s.io/component-base v0.21.2 h1:EsnmFFoJ86cEywC0DoIkAUiEV6fjgauNugiw1lmIjs4= -k8s.io/component-base v0.21.2/go.mod h1:9lvmIThzdlrJj5Hp8Z/TOgIkdfsNARQ1pT+3PByuiuc= -k8s.io/component-helpers v0.21.2/go.mod h1:DbyFt/A0p6Cv+R5+QOGSJ5f5t4xDfI8Yb89a57DgJlQ= -k8s.io/controller-manager v0.21.2/go.mod h1:tkiSDYJj4H/QRxGNefy5ibFAmhEvqmEh9yLzYI3XUH4= -k8s.io/cri-api v0.21.2/go.mod h1:ukzeKnOkrG9/+ghKZA57WeZbQfRtqlGLF5GcF3RtHZ8= -k8s.io/csi-translation-lib v0.21.2/go.mod h1:LgswOMSIdOntgqxcHsspcG61R34t954N//9jiSD/TTM= +k8s.io/api v0.19.1/go.mod h1:+u/k4/K/7vp4vsfdT7dyl8Oxk1F26Md4g5F26Tu85PU= +k8s.io/api v0.34.3 h1:D12sTP257/jSH2vHV2EDYrb16bS7ULlHpdNdNhEw2S4= +k8s.io/api v0.34.3/go.mod h1:PyVQBF886Q5RSQZOim7DybQjAbVs8g7gwJNhGtY5MBk= +k8s.io/apimachinery v0.19.1/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/apimachinery v0.34.3 h1:/TB+SFEiQvN9HPldtlWOTp0hWbJ+fjU+wkxysf/aQnE= +k8s.io/apimachinery v0.34.3/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= +k8s.io/cli-runtime v0.34.1 h1:btlgAgTrYd4sk8vJTRG6zVtqBKt9ZMDeQZo2PIzbL7M= +k8s.io/cli-runtime v0.34.1/go.mod h1:aVA65c+f0MZiMUPbseU/M9l1Wo2byeaGwUuQEQVVveE= +k8s.io/client-go v0.19.1/go.mod h1:AZOIVSI9UUtQPeJD3zJFp15CEhSjRgAuQP5PWRJrCIQ= +k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY= +k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8= +k8s.io/cluster-bootstrap v0.34.3 h1:mLguWldCwTk0GvoWHg6tf6qgpVMDLCSvvtWUoL13RXg= +k8s.io/cluster-bootstrap v0.34.3/go.mod h1:50AJCDVJ8HMmw9W2EN0cHSbTsI9GYtyOM+eyxjVlAwg= +k8s.io/component-base v0.34.1 h1:v7xFgG+ONhytZNFpIz5/kecwD+sUhVE6HU7qQUiRM4A= +k8s.io/component-base v0.34.1/go.mod h1:mknCpLlTSKHzAQJJnnHVKqjxR7gBeHRv0rPXA7gdtQ0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.3.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/klog/v2 v2.10.0 h1:R2HDMDJsHVTHA2n4RjwbeYXdOcBymXdX/JRb1v0VGhE= -k8s.io/klog/v2 v2.10.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/kube-aggregator v0.21.2/go.mod h1:7NgmUXJziySAJ7GxMRBBwcJay7MLUoxms31fw/ICpYk= -k8s.io/kube-controller-manager v0.21.2/go.mod h1:gu0rV2UWy1k05E3kZxJFQE1F7RR1PZlq83+9J+lWlno= -k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0= -k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= -k8s.io/kube-proxy v0.21.2/go.mod h1:gZXWzR5wi2lVfGeol0yp37rJZVIsCbPWqfeUXSykUUU= -k8s.io/kube-scheduler v0.21.2/go.mod h1:uMnMNvgw2EAoujObL1tuJ5+tvj2Pnv3k7i3X069crrs= -k8s.io/kubectl v0.21.2 h1:9XPCetvOMDqrIZZXb1Ei+g8t6KrIp9ENJaysQjUuLiE= -k8s.io/kubectl v0.21.2/go.mod h1:PgeUclpG8VVmmQIl8zpLar3IQEpFc9mrmvlwY3CK1xo= -k8s.io/kubelet v0.21.2/go.mod h1:1EqOUgp3BqvMXuZZRIlPDNkpgT5MfbJrpEnS4Gxn/mo= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/kubernetes v1.21.3 h1:wBFDBWqkKtr010Sp9dGv8gmG87Yr5BsTCaJpYKrL3NU= -k8s.io/kubernetes v1.21.3/go.mod h1:7X44Q251LxNEMElkIC4X0v6kuiVSuHE3V/4IppweQ4A= -k8s.io/legacy-cloud-providers v0.21.2/go.mod h1:9dFEf/WGCqPhOIGQiAwcPfgAYWRot6txrCshWCg225c= -k8s.io/metrics v0.21.2/go.mod h1:wzlOINZMCtWq8dR9gHlyaOemmYlOpAoldEIXE82gAhI= -k8s.io/mount-utils v0.21.2/go.mod h1:dwXbIPxKtTjrBEaX1aK/CMEf1KZ8GzMHpe3NEBfdFXI= -k8s.io/sample-apiserver v0.21.2/go.mod h1:NXFq8jUrB3UyYhoGstFMXdHFSxfHZSHX6cUdVBVZKFM= -k8s.io/system-validators v1.4.0/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= -modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA= +k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts= +k8s.io/kubectl v0.34.1 h1:1qP1oqT5Xc93K+H8J7ecpBjaz511gan89KO9Vbsh/OI= +k8s.io/kubectl v0.34.1/go.mod h1:JRYlhJpGPyk3dEmJ+BuBiOB9/dAvnrALJEiY/C5qa6A= +k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= +k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +libvirt.org/go/libvirt v1.11010.0 h1:1EIh2x6qcRoIBBOvrgN62vq5FIpgUBrmGadprQ/4M0Y= +libvirt.org/go/libvirt v1.11010.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/kustomize/api v0.8.8/go.mod h1:He1zoK0nk43Pc6NlV085xDXDXTNprtcyKZVm3swsdNY= -sigs.k8s.io/kustomize/cmd/config v0.9.10/go.mod h1:Mrby0WnRH7hA6OwOYnYpfpiY0WJIMgYrEDfwOeFdMK0= -sigs.k8s.io/kustomize/kustomize/v4 v4.1.2/go.mod h1:PxBvo4WGYlCLeRPL+ziT64wBXqbgfcalOS/SXa/tcyo= -sigs.k8s.io/kustomize/kyaml v0.10.17/go.mod h1:mlQFagmkm1P+W4lZJbJ/yaxMd8PqMRSC4cPcfUVt5Hg= +sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= +sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= +sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= +sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0 h1:IKsKAnscMyIOqyl8s8V7guTcx0QBEa6OT57EPgAgpmM= sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0/go.mod h1:DhZ52sQMJHW21+JXyA2LRUPRIxKnrNrwh+QFV+2tVA4= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco= +sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= +sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 000000000000..2e375c4fef40 --- /dev/null +++ b/go.work.sum @@ -0,0 +1,6 @@ +cloud.google.com/go/compute v1.37.0 h1:XxtZlXYkZXub3LNaLu90TTemcFqIU1yZ4E4q9VlR39A= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= diff --git a/hack/benchmark/cpu_usage/auto_pause/chart.go b/hack/benchmark/cpu_usage/auto_pause/chart.go index 304d6a3b3ff4..86c618136b80 100644 --- a/hack/benchmark/cpu_usage/auto_pause/chart.go +++ b/hack/benchmark/cpu_usage/auto_pause/chart.go @@ -37,9 +37,9 @@ var FOLDER = "site/static/images/benchmarks/cpuUsage/autoPause" type integerTicks struct{} -func (integerTicks) Ticks(min, max float64) []plot.Tick { +func (integerTicks) Ticks(minimum, maximum float64) []plot.Tick { var t []plot.Tick - for i := math.Trunc(min); i <= max; i += 50 { + for i := math.Trunc(minimum); i <= maximum; i += 50 { t = append(t, plot.Tick{Value: i, Label: fmt.Sprint(i)}) } return t @@ -54,25 +54,27 @@ func main() { func execute() error { // sessionID is generated and used at cpu usage benchmark - sessionID := os.Args[1] - if len(sessionID) == 0 { + if len(os.Args) <= 1 || len(os.Args[1]) == 0 { return errors.New("Please identify sessionID") } + sessionID := os.Args[1] // Create plot instance p := plot.New() // Set view options - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "darwin": p.Title.Text = "CPU% Busy Overhead - With Auto Pause vs. Non Auto Pause (less is better)" - } else if runtime.GOOS == "linux" { + case "linux": p.Title.Text = "CPU% Busy Overhead - With Auto Pause vs. Non Auto Pause (less is better)" } + p.Y.Label.Text = "CPU overhead%" // Open non-autopause csv file of benchmark summary napResults := []float64{} - var napFn string = "./out/benchmark-results/" + sessionID + "/cstat.nonautopause.summary" + napFn := "./out/benchmark-results/" + sessionID + "/cstat.nonautopause.summary" napFile, err := os.Open(napFn) if err != nil { return errors.Wrap(err, "Missing summary csv") @@ -97,7 +99,7 @@ func execute() error { // Open auto-pause csv file of benchmark summary apResults := []float64{} - var apFn string = "./out/benchmark-results/" + sessionID + "/cstat.autopause.summary" + apFn := "./out/benchmark-results/" + sessionID + "/cstat.autopause.summary" apFile, err := os.Open(apFn) if err != nil { return errors.Wrap(err, "Missing summary csv") @@ -158,9 +160,10 @@ func execute() error { p.Legend.Top = true // Add x-lay names - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "darwin": p.NominalX("OS idle", "minikube hyperkit", "minikube virtualbox", "minikube docker", "Docker for Mac Kubernetes", "k3d", "kind") - } else if runtime.GOOS == "linux" { + case "linux": p.NominalX("OS idle", "minikube kvm2", "minikube virtualbox", "minikube docker", "Docker idle", "k3d", "kind") } @@ -223,16 +226,18 @@ func execute() error { p.Add(napl, apl) // Output bar graph - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "darwin": if err := p.Save(13*vg.Inch, 8*vg.Inch, FOLDER+"/mac.png"); err != nil { return errors.Wrap(err, "Failed to create bar graph png") } log.Printf("Generated graph png to %s/mac.png", FOLDER) - } else if runtime.GOOS == "linux" { + case "linux": if err := p.Save(13*vg.Inch, 10*vg.Inch, FOLDER+"/linux.png"); err != nil { return errors.Wrap(err, "Failed to create bar graph png") } log.Printf("Generated graph png to %s/linux.png", FOLDER) } + return nil } diff --git a/hack/benchmark/cpu_usage/idle_only/chart.go b/hack/benchmark/cpu_usage/idle_only/chart.go index ea49d50afc07..aaf466b67c6f 100644 --- a/hack/benchmark/cpu_usage/idle_only/chart.go +++ b/hack/benchmark/cpu_usage/idle_only/chart.go @@ -36,9 +36,9 @@ var FOLDER = "site/static/images/benchmarks/cpuUsage/idleOnly" type integerTicks struct{} -func (integerTicks) Ticks(min, max float64) []plot.Tick { +func (integerTicks) Ticks(minimum, maximum float64) []plot.Tick { var t []plot.Tick - for i := math.Trunc(min); i <= max; i += 50 { + for i := math.Trunc(minimum); i <= maximum; i += 50 { t = append(t, plot.Tick{Value: i, Label: fmt.Sprint(i)}) } return t @@ -53,25 +53,27 @@ func main() { func execute() error { // sessionID is generated and used at cpu usage benchmark - sessionID := os.Args[1] - if len(sessionID) == 0 { + if len(os.Args) <= 1 || len(os.Args[1]) == 0 { return errors.New("Please identify sessionID") } + sessionID := os.Args[1] // Create plot instance p := plot.New() // Set view options - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "darwin": p.Title.Text = "CPU% Busy Overhead - Average first 5 minutes on macOS (less is better)" - } else if runtime.GOOS == "linux" { + case "linux": p.Title.Text = "CPU% Busy Overhead - Average first 5 minutes on Linux (less is better)" } + p.Y.Label.Text = "CPU overhead%" // Open csv file of benchmark summary results := []float64{} - var fn string = "./out/benchmark-results/" + sessionID + "/cstat.summary" + fn := "./out/benchmark-results/" + sessionID + "/cstat.summary" file, err := os.Open(fn) if err != nil { return errors.Wrap(err, "Missing summary csv") @@ -114,9 +116,10 @@ func execute() error { p.Legend.Top = true // Add x-lay names - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "darwin": p.NominalX("OS idle", "minikube hyperkit", "minikube virtualbox", "minikube docker", "Docker for Mac Kubernetes", "k3d", "kind") - } else if runtime.GOOS == "linux" { + case "linux": p.NominalX("OS idle", "minikube kvm2", "minikube virtualbox", "minikube docker", "Docker idle", "k3d", "kind") } @@ -151,16 +154,18 @@ func execute() error { p.Add(cl) // Output bar graph - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "darwin": if err := p.Save(13*vg.Inch, 8*vg.Inch, FOLDER+"/mac.png"); err != nil { return errors.Wrap(err, "Failed to create bar graph png") } log.Printf("Generated graph png to %s/mac.png", FOLDER) - } else if runtime.GOOS == "linux" { + case "linux": if err := p.Save(13*vg.Inch, 10*vg.Inch, FOLDER+"/linux.png"); err != nil { return errors.Wrap(err, "Failed to create bar graph png") } log.Printf("Generated graph png to %s/linux.png", FOLDER) } + return nil } diff --git a/hack/benchmark/image-build/generate-chart.go b/hack/benchmark/image-build/generate-chart.go new file mode 100644 index 000000000000..3a977aa183a1 --- /dev/null +++ b/hack/benchmark/image-build/generate-chart.go @@ -0,0 +1,299 @@ +/* +Copyright 2023 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "encoding/csv" + "encoding/json" + "flag" + "fmt" + "image/color" + "io" + "log" + "math" + "os" + "path/filepath" + "strconv" + "time" + + "gonum.org/v1/plot" + "gonum.org/v1/plot/plotter" + "gonum.org/v1/plot/plotutil" + "gonum.org/v1/plot/vg" + "gonum.org/v1/plot/vg/draw" +) + +var Images = []string{ + "buildpacksFewLargeFiles", + // to simplify the output, the following images are omitted + // "buildpacksFewSmallFiles", + // "buildpacksManyLargeFiles", + // "buildpacksManySmallFiles", +} + +var Environments = []string{ + "MinikubeImageLoadDocker", + "MinikubeImageBuild", + "MinikubeDockerEnvDocker", + "MinikubeAddonRegistryDocker", + "MinikubeImageLoadContainerd", + "MinikubeImageContainerd", + "MinikubeDockerEnvContainerd", + "MinikubeAddonRegistryContainerd", + "MinikubeImageLoadCrio", + "MinikubeImageCrio", + "MinikubeAddonRegistryCrio", + "Kind", + "K3d", + "Microk8s", +} + +var RuntimeMethods = map[string][]string{ + "docker": { + "MinikubeImageLoadDocker", + "MinikubeImageBuild", + "MinikubeDockerEnvDocker", + "MinikubeAddonRegistryDocker", + }, + + "containerd": { + "MinikubeImageLoadContainerd", + "MinikubeImageContainerd", + "MinikubeDockerEnvContainerd", + "MinikubeAddonRegistryContainerd", + }, +} + +const ( + INTERATIVE = "Iterative" + NONINTERATIVE = "NonIterative" +) + +var Itrs = []string{ + INTERATIVE, + // to simplify the output, non-interative is omitted + // NONINTERATIVE, +} + +// method name-> test result +type TestResult map[string]float64 + +func NewTestResult(values []float64) TestResult { + res := make(TestResult) + for index, v := range values { + res[Environments[index]] = v + } + return res +} + +// imageName->TestResult +type ImageTestResults map[string]TestResult + +type ItrTestResults struct { + Date time.Time + // itr name -> results + Results map[string]ImageTestResults +} + +type Records struct { + Records []ItrTestResults +} + +func main() { + latestTestResultPath := flag.String("csv", "", "path to the CSV file containing the latest benchmark result") + pastTestRecordsPath := flag.String("past-runs", "", "path to the JSON file containing the past benchmark results") + chartsPath := flag.String("charts", "", "path to the folder to write the daily charts to") + flag.Parse() + + latestBenchmark := readInLatestTestResult(*latestTestResultPath) + latestBenchmark.Date = time.Now() + pastBenchmarks := readInPastTestResults(*pastTestRecordsPath) + pastBenchmarks.Records = append(pastBenchmarks.Records, latestBenchmark) + updatePastTestResults(pastBenchmarks, *pastTestRecordsPath) + createDailyChart(pastBenchmarks, *chartsPath) +} + +// readInLatestTestResult reads in the latest benchmark result from a CSV file +// and return the MethodTestResults object +func readInLatestTestResult(latestBenchmarkPath string) ItrTestResults { + + var res = ItrTestResults{ + Results: make(map[string]ImageTestResults), + } + res.Results[INTERATIVE] = make(ImageTestResults) + res.Results[NONINTERATIVE] = make(ImageTestResults) + + f, err := os.Open(latestBenchmarkPath) + if err != nil { + log.Fatal(err) + } + + r := csv.NewReader(f) + for { + line, err := r.Read() + if err == io.EOF { + break + } + if err != nil { + log.Fatal(err) + } + + // skip the first line of the CSV file + if line[0] == "image" { + continue + } + + valuesInterative := []float64{} + valuesNonInterative := []float64{} + // interative test results of each env are stored in the following columns + indicesInterative := []int{1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53} + // non-interative test results of each env are stored in the following columns + indicesNonInterative := []int{3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55} + + for _, i := range indicesInterative { + if line[i] == "NaN" { + // we use -1 as invalid value + valuesInterative = append(valuesInterative, -1) + continue + } + v, err := strconv.ParseFloat(line[i], 64) + if err != nil { + log.Fatal(err) + } + valuesInterative = append(valuesInterative, v) + } + + for _, i := range indicesNonInterative { + if line[i] == "NaN" { + // we use -1 as invalid value + valuesNonInterative = append(valuesNonInterative, -1) + continue + } + v, err := strconv.ParseFloat(line[i], 64) + if err != nil { + log.Fatal(err) + } + valuesNonInterative = append(valuesNonInterative, v) + } + + imageName := line[0] + + res.Results[INTERATIVE][imageName] = NewTestResult(valuesInterative) + res.Results[NONINTERATIVE][imageName] = NewTestResult(valuesNonInterative) + + } + + return res +} + +// readInPastTestResults reads in the past benchmark results from a JSON file +func readInPastTestResults(pastTestRecordPath string) Records { + + record := Records{} + data, err := os.ReadFile(pastTestRecordPath) + if os.IsNotExist(err) { + return record + } + if err != nil { + log.Fatal(err) + } + + if err := json.Unmarshal(data, &record); err != nil { + log.Fatal(err) + } + + return record +} + +// updatePastTestResults overwrites the run file with the updated benchmarks list +func updatePastTestResults(h Records, pastTestRecordPath string) { + b, err := json.Marshal(h) + if err != nil { + log.Fatal(err) + } + + if err := os.WriteFile(pastTestRecordPath, b, 0600); err != nil { + log.Fatal(err) + } +} +func createDailyChart(record Records, outputFolder string) { + + for _, itr := range Itrs { + for _, image := range Images { + createChart(record, itr, image, "docker", outputFolder) + createChart(record, itr, image, "containerd", outputFolder) + } + } +} + +func createChart(record Records, itr string, imageName string, runtime string, chartOutputPath string) { + p := plot.New() + p.Add(plotter.NewGrid()) + p.Legend.Top = true + p.Title.Text = fmt.Sprintf("%s-%s-%s-performance", itr, imageName, runtime) + p.X.Label.Text = "date" + p.X.Tick.Marker = plot.TimeTicks{Format: "2006-01-02"} + p.Y.Label.Text = "time (seconds)" + yMaxTotal := float64(0) + + // gonum plot do not have enough default colors in any group + // so we combine different group of default colors + colors := append([]color.Color{}, plotutil.SoftColors...) + colors = append(colors, plotutil.DarkColors...) + + pointGroup := make(map[string]plotter.XYs) + for _, name := range RuntimeMethods[runtime] { + pointGroup[name] = make(plotter.XYs, 0) + } + + for i := 0; i < len(record.Records); i++ { + for _, method := range RuntimeMethods[runtime] { + // for invalid values(<0) this point is dropped + if v, ok := record.Records[i].Results[itr][imageName][method]; ok && v > 0 { + point := plotter.XY{ + X: float64(record.Records[i].Date.Unix()), + Y: record.Records[i].Results[itr][imageName][method], + } + pointGroup[method] = append(pointGroup[method], point) + + yMaxTotal = math.Max(yMaxTotal, point.Y) + + } + } + } + p.Y.Max = yMaxTotal + + i := 0 + for method, xys := range pointGroup { + line, points, err := plotter.NewLinePoints(xys) + if err != nil { + log.Fatal(err) + } + line.Color = colors[i] + points.Color = colors[i] + points.Shape = draw.CircleGlyph{} + i++ + p.Add(line, points) + p.Legend.Add(method, line) + } + + filename := filepath.Join(chartOutputPath, fmt.Sprintf("%s_%s_%s_chart.png", itr, imageName, runtime)) + + if err := p.Save(12*vg.Inch, 8*vg.Inch, filename); err != nil { + log.Fatalf("failed creating png: %v", err) + } +} diff --git a/hack/benchmark/image-build/minikube-image-benchmark b/hack/benchmark/image-build/minikube-image-benchmark new file mode 160000 index 000000000000..f8e2d0ff39bc --- /dev/null +++ b/hack/benchmark/image-build/minikube-image-benchmark @@ -0,0 +1 @@ +Subproject commit f8e2d0ff39bc0bfc027357e1a2eb13e3d5363232 diff --git a/hack/benchmark/image-build/publish-chart.sh b/hack/benchmark/image-build/publish-chart.sh new file mode 100755 index 000000000000..1381ba8f7143 --- /dev/null +++ b/hack/benchmark/image-build/publish-chart.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +# Copyright 2023 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -x + +BUCKET="s3://time-to-k8s/image-benchmark" + +install_minikube() { + make + sudo install ./out/minikube /usr/local/bin/minikube +} + +run_benchmark() { + ( cd ./hack/benchmark/image-build/minikube-image-benchmark && + git submodule update --init && + make && + ./out/benchmark --runs=4 --memory="1800m" --images="buildpacksFewLargeFiles" --iters="iterative" --bench-methods="image load docker,image build docker,docker-env docker,registry docker,image load containerd,image build containerd,registry containerd,docker-env containerd") +} + +generate_chart() { + go run ./hack/benchmark/image-build/generate-chart.go --csv hack/benchmark/image-build/minikube-image-benchmark/out/results.csv --past-runs record.json +} + +copy() { + aws s3 cp "$1" "$2" +} + +cleanup() { + rm ./Iterative_buildpacksFewLargeFiles_containerd_chart.png + rm ./Iterative_buildpacksFewLargeFiles_docker_chart.png + rm hack/benchmark/image-build/minikube-image-benchmark/out/results.csv +} + + +install_minikube +copy "$BUCKET/record.json" ./record.json +set -e + +run_benchmark +generate_chart + +copy ./record.json "$BUCKET/record.json" +copy ./Iterative_buildpacksFewLargeFiles_containerd_chart.png "$BUCKET/Iterative_buildpacksFewLargeFiles_containerd_chart.png" +copy ./Iterative_buildpacksFewLargeFiles_docker_chart.png "$BUCKET/Iterative_buildpacksFewLargeFiles_docker_chart.png" +cleanup diff --git a/hack/benchmark/time-to-k8s/chart.go b/hack/benchmark/time-to-k8s/chart.go index ae3ef9cb6548..5fa59f0259be 100644 --- a/hack/benchmark/time-to-k8s/chart.go +++ b/hack/benchmark/time-to-k8s/chart.go @@ -17,14 +17,15 @@ limitations under the License. package main import ( + "bytes" "encoding/csv" - "flag" "fmt" "io" - "log" "os" "strconv" + "github.com/olekukonko/tablewriter" + "github.com/olekukonko/tablewriter/tw" "gonum.org/v1/plot" "gonum.org/v1/plot/plotter" "gonum.org/v1/plot/plotutil" @@ -43,25 +44,12 @@ type run struct { type runs struct { version string runs []run + cpus []cpu } -func main() { - csvPath := flag.String("csv", "", "path to the CSV file") - chartPath := flag.String("output", "", "path to output the chart to") - flag.Parse() - - // map of the apps (minikube, kind, k3d) and their runs - apps := make(map[string]runs) - - if err := readInCSV(*csvPath, apps); err != nil { - log.Fatal(err) - } - - values, totals, names := values(apps) - - if err := createChart(*chartPath, values, totals, names); err != nil { - log.Fatal(err) - } +type cpu struct { + cpuPct float64 // percentage + cpuTime float64 // second } func readInCSV(csvPath string, apps map[string]runs) error { @@ -87,8 +75,8 @@ func readInCSV(csvPath string, apps map[string]runs) error { values := []float64{} - // 8-13 contain the run results - for i := 8; i <= 13; i++ { + // 8-16 contain the run results + for i := 8; i <= 16; i++ { v, err := strconv.ParseFloat(d[i], 64) if err != nil { return err @@ -96,6 +84,7 @@ func readInCSV(csvPath string, apps map[string]runs) error { values = append(values, v) } newRun := run{values[0], values[1], values[2], values[3], values[4], values[5]} + newCPU := cpu{values[6], values[8]} // get the app from the map and add the new run to it name := d[0] @@ -104,14 +93,18 @@ func readInCSV(csvPath string, apps map[string]runs) error { k = runs{version: d[5]} } k.runs = append(k.runs, newRun) + k.cpus = append(k.cpus, newCPU) apps[name] = k } return nil } -func values(apps map[string]runs) ([]plotter.Values, []float64, []string) { +func values(apps map[string]runs) ([]plotter.Values, []plotter.Values, []plotter.Values, []float64, []string) { var cmdValues, apiValues, k8sValues, dnsSvcValues, appValues, dnsAnsValues plotter.Values + var cpuPctValues, cpuTimeValues plotter.Values + var cpuMinikube, cpuKind, cpuK3d plotter.Values + names := []string{} totals := []float64{} @@ -119,6 +112,8 @@ func values(apps map[string]runs) ([]plotter.Values, []float64, []string) { for _, name := range []string{"minikube", "kind", "k3d"} { app := apps[name] var cmd, api, k8s, dnsSvc, appRun, dnsAns float64 + var cpuPct, cpuTime float64 + names = append(names, app.version) for _, l := range app.runs { @@ -130,6 +125,11 @@ func values(apps map[string]runs) ([]plotter.Values, []float64, []string) { dnsAns += l.dnsAns } + for _, l := range app.cpus { + cpuPct += l.cpuPct + cpuTime += l.cpuTime + } + c := float64(len(app.runs)) cmdAvg := cmd / c @@ -139,6 +139,9 @@ func values(apps map[string]runs) ([]plotter.Values, []float64, []string) { appAvg := appRun / c dnsAnsAvg := dnsAns / c + cpuPctAvg := cpuPct / c + cpuTimeAvg := cpuTime / c + cmdValues = append(cmdValues, cmdAvg) apiValues = append(apiValues, apiAvg) k8sValues = append(k8sValues, k8sAvg) @@ -148,11 +151,63 @@ func values(apps map[string]runs) ([]plotter.Values, []float64, []string) { total := cmdAvg + apiAvg + k8sAvg + dnsSvcAvg + appAvg + dnsAnsAvg totals = append(totals, total) + + cpuPctValues = append(cpuPctValues, cpuPctAvg) + cpuTimeValues = append(cpuTimeValues, cpuTimeAvg) + + cpuSummary := []float64{cpuPctAvg, cpuTimeAvg} + + switch name { + case "minikube": + cpuMinikube = cpuSummary + case "kind": + cpuKind = cpuSummary + case "k3d": + cpuK3d = cpuSummary + } + } - values := []plotter.Values{cmdValues, apiValues, k8sValues, dnsSvcValues, appValues, dnsAnsValues} + runningTime := []plotter.Values{cmdValues, apiValues, k8sValues, dnsSvcValues, appValues, dnsAnsValues} + + // for markdown table, row is either cpu utilization or cpu time, col is process name + cpu := []plotter.Values{cpuPctValues, cpuTimeValues} - return values, totals, names + // row is process name, col is either cpu utilization, or cpu time + cpureverse := []plotter.Values{cpuMinikube, cpuKind, cpuK3d} + + return runningTime, cpu, cpureverse, totals, names +} + +func outputMarkdownTable(categories []plotter.Values, totals []float64, names []string) { + headers := append([]string{""}, names...) + c := [][]string{} + fields := []string{"Command Exec", "API Server Answering", "Kubernetes SVC", "DNS SVC", "App Running", "DNS Answering"} + for i, values := range categories { + row := []string{fields[i]} + for _, value := range values { + row = append(row, fmt.Sprintf("%.3f", value)) + } + c = append(c, row) + } + totalStrings := []string{"Total"} + for _, t := range totals { + totalStrings = append(totalStrings, fmt.Sprintf("%.3f", t)) + } + c = append(c, totalStrings) + b := new(bytes.Buffer) + t := tablewriter.NewWriter(b) + t.Header(headers) + t.Options( + tablewriter.WithHeaderAutoFormat(tw.Off), + ) + if err := t.Bulk(c); err != nil { + fmt.Fprintf(os.Stderr, "error writing table: %v\n", err) + } + if err := t.Render(); err != nil { + fmt.Fprintf(os.Stderr, "error rendering table: %v\n", err) + } + data.TimeMarkdown = b.String() } func createChart(chartPath string, values []plotter.Values, totals []float64, names []string) error { @@ -220,11 +275,7 @@ func createChart(chartPath string, values []plotter.Values, totals []float64, na p.Add(l) - if err := p.Save(12*vg.Inch, 8*vg.Inch, chartPath); err != nil { - return err - } - - return nil + return p.Save(12*vg.Inch, 8*vg.Inch, chartPath) } func createBars(values plotter.Values, index int) (*plotter.BarChart, error) { diff --git a/hack/benchmark/time-to-k8s/cpu.go b/hack/benchmark/time-to-k8s/cpu.go new file mode 100644 index 000000000000..adefb58d0239 --- /dev/null +++ b/hack/benchmark/time-to-k8s/cpu.go @@ -0,0 +1,114 @@ +/* +Copyright 2021 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "bytes" + "fmt" + + "github.com/olekukonko/tablewriter" + "github.com/olekukonko/tablewriter/tw" + "gonum.org/v1/plot" + "gonum.org/v1/plot/plotter" + "gonum.org/v1/plot/plotutil" + "gonum.org/v1/plot/vg" +) + +var fields = []string{"CPU Utilization(%)", "CPU Time(seconds)"} + +func cpuMarkdownTable(categories []plotter.Values, names []string) { + + // categories row is the either cpu pct or time, col is process name + headers := append([]string{""}, names...) + c := [][]string{} + for i, values := range categories { + row := []string{fields[i]} + for _, value := range values { + row = append(row, fmt.Sprintf("%.3f", value)) + } + c = append(c, row) + } + b := new(bytes.Buffer) + t := tablewriter.NewWriter(b) + t.Header(headers) + t.Options( + tablewriter.WithHeaderAutoFormat(tw.Off), + ) + if err := t.Bulk(c); err != nil { + fmt.Printf("error writing table: %v\n", err) + } + if err := t.Render(); err != nil { + fmt.Printf("error rendering table: %v\n", err) + } + data.CPUMarkdown = b.String() +} + +func createCPUChart(chartPath string, values []plotter.Values, names []string) error { + p := plot.New() + p.Title.Text = "CPU utilization to go from 0 to successful Kubernetes deployment" + p.Y.Label.Text = "CPU utilization" + setYMax(p, values) + + w := vg.Points(20) + + barsA, err := plotter.NewBarChart(values[0], w) + if err != nil { + return err + } + barsA.LineStyle.Width = vg.Length(0) + barsA.Color = plotutil.Color(0) + barsA.Offset = -w + + barsB, err := plotter.NewBarChart(values[1], w) + if err != nil { + return err + } + barsB.LineStyle.Width = vg.Length(0) + barsB.Color = plotutil.Color(1) + barsB.Offset = 0 + + barsC, err := plotter.NewBarChart(values[2], w) + if err != nil { + return err + } + barsC.LineStyle.Width = vg.Length(0) + barsC.Color = plotutil.Color(2) + barsC.Offset = w + + p.Add(barsA, barsB, barsC) + p.Legend.Add(names[0], barsA) + p.Legend.Add(names[1], barsB) + p.Legend.Add(names[2], barsC) + + p.Legend.Top = true + p.NominalX(fields...) + + return p.Save(8*vg.Inch, 8*vg.Inch, chartPath) +} + +func setYMax(p *plot.Plot, values []plotter.Values) { + ymax := 0.0 + for _, value := range values { + for _, v := range value { + if v > ymax { + ymax = v + } + } + } + + p.Y.Max = ymax + 5 +} diff --git a/hack/benchmark/time-to-k8s/page.go b/hack/benchmark/time-to-k8s/page.go new file mode 100644 index 000000000000..30cc8c2e6abf --- /dev/null +++ b/hack/benchmark/time-to-k8s/page.go @@ -0,0 +1,110 @@ +/* +Copyright 2021 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "flag" + "log" + "os" + "os/exec" + "strings" + "text/template" + "time" +) + +var page = `--- +title: "{{.Version}} Benchmark" +linkTitle: "{{.Version}} Benchmark" +weight: -{{.Weight}} +--- + +![time-to-k8s](/images/benchmarks/timeToK8s/{{.Version}}-time.png) + +{{.TimeMarkdown}} + + +![cpu-to-k8s](/images/benchmarks/timeToK8s/{{.Version}}-cpu.png) + +{{.CPUMarkdown}} +` + +type Data struct { + Version string + Weight string + TimeMarkdown string + CPUMarkdown string +} + +var data Data + +func main() { + csvPath := flag.String("csv", "", "path to the CSV file") + imagePath := flag.String("image", "", "path to output the chart to") + pagePath := flag.String("page", "", "path to output the page to") + + flag.Parse() + + data.Weight = time.Now().Format("20060102") + + version, err := exec.Command("minikube", "version", "--short").Output() + if err != nil { + log.Fatalf("failed to get minikube version: %v", err) + } + data.Version = strings.Split(string(version), "\n")[0] + + // map of the apps (minikube, kind, k3d) and their runs + apps := make(map[string]runs) + + if err := readInCSV(*csvPath, apps); err != nil { + log.Fatalf("fail to readin cvs file with err %s", err) + } + + runningTime, cpuMdPlot, cpuChartPlot, totals, names := values(apps) + + // markdown table for running time + outputMarkdownTable(runningTime, totals, names) + + // chart for running time + if err := createChart(*imagePath+"-time.png", runningTime, totals, names); err != nil { + log.Fatalf("fail to create running time chart with err %s", err) + } + + // markdown table for cpu utilization + cpuMarkdownTable(cpuMdPlot, names) + + // chart for cpu utilization + if err := createCPUChart(*imagePath+"-cpu.png", cpuChartPlot, names); err != nil { + log.Fatalf("fail to create CPU chart with err %s", err) + } + + // generate page and save + tmpl, err := template.New("msg").Parse(page) + if err != nil { + log.Fatal(err) + } + + f, err := os.Create(*pagePath) + if err != nil { + log.Fatalf("fail to create file under path %s, with err %s", *pagePath, err) + } + + if err = tmpl.Execute(f, data); err != nil { + log.Fatalf("fail to populate the page with err %s", err) + } + + f.Close() +} diff --git a/hack/benchmark/time-to-k8s/public-chart/containerd-benchmark.yaml b/hack/benchmark/time-to-k8s/public-chart/containerd-benchmark.yaml deleted file mode 100644 index 2fc4ff15ca83..000000000000 --- a/hack/benchmark/time-to-k8s/public-chart/containerd-benchmark.yaml +++ /dev/null @@ -1,4 +0,0 @@ -testcases: - minikube: - setup: minikube start --container-runtime=containerd --memory=max --cpus=max - teardown: minikube delete diff --git a/hack/benchmark/time-to-k8s/public-chart/docker-benchmark.yaml b/hack/benchmark/time-to-k8s/public-chart/docker-benchmark.yaml deleted file mode 100644 index cfc224e1c268..000000000000 --- a/hack/benchmark/time-to-k8s/public-chart/docker-benchmark.yaml +++ /dev/null @@ -1,4 +0,0 @@ -testcases: - minikube: - setup: minikube start --container-runtime=docker --memory=max --cpus=max - teardown: minikube delete diff --git a/hack/benchmark/time-to-k8s/public-chart/docker-containerd-benchmark.yaml b/hack/benchmark/time-to-k8s/public-chart/docker-containerd-benchmark.yaml new file mode 100644 index 000000000000..75aa52ecf839 --- /dev/null +++ b/hack/benchmark/time-to-k8s/public-chart/docker-containerd-benchmark.yaml @@ -0,0 +1,4 @@ +testcases: + minikube: + setup: minikube start --driver=docker --container-runtime=containerd --memory=max --cpus=max + teardown: minikube delete diff --git a/hack/benchmark/time-to-k8s/public-chart/docker-docker-benchmark.yaml b/hack/benchmark/time-to-k8s/public-chart/docker-docker-benchmark.yaml new file mode 100644 index 000000000000..940c1c8f6537 --- /dev/null +++ b/hack/benchmark/time-to-k8s/public-chart/docker-docker-benchmark.yaml @@ -0,0 +1,4 @@ +testcases: + minikube: + setup: minikube start --driver=docker --container-runtime=docker --memory=max --cpus=max + teardown: minikube delete diff --git a/hack/benchmark/time-to-k8s/public-chart/generate-chart.go b/hack/benchmark/time-to-k8s/public-chart/generate-chart.go index 95a8a65ab091..897783595d3c 100644 --- a/hack/benchmark/time-to-k8s/public-chart/generate-chart.go +++ b/hack/benchmark/time-to-k8s/public-chart/generate-chart.go @@ -43,6 +43,7 @@ type benchmark struct { App float64 `json:"app"` DNSAns float64 `json:"dnsAns"` Total float64 `json:"total"` + CPU float64 `json:"cpu"` } // benchmarks contains a list of benchmarks, used for storing benchmark results to JSON @@ -52,7 +53,8 @@ type benchmarks struct { func main() { latestBenchmarkPath := flag.String("csv", "", "path to the CSV file containing the latest benchmark result") - chartOutputPath := flag.String("output", "", "path to output the chart to") + dailyChartPath := flag.String("daily-chart", "", "path to write the daily chart to") + weeklyChartPath := flag.String("weekly-chart", "", "path to write the weekly chart to") pastBenchmarksPath := flag.String("past-runs", "", "path to the JSON file containing the past benchmark results") flag.Parse() @@ -60,7 +62,8 @@ func main() { pastBenchmarks := readInPastBenchmarks(*pastBenchmarksPath) pastBenchmarks.Benchmarks = append(pastBenchmarks.Benchmarks, latestBenchmark) updateRunsFile(pastBenchmarks, *pastBenchmarksPath) - createChart(pastBenchmarks.Benchmarks, *chartOutputPath) + createDailyChart(pastBenchmarks.Benchmarks, *dailyChartPath) + createWeeklyChart(pastBenchmarks.Benchmarks, *weeklyChartPath) } // readInLatestBenchmark reads in the latest benchmark result from a CSV file @@ -70,8 +73,8 @@ func readInLatestBenchmark(latestBenchmarkPath string) benchmark { log.Fatal(err) } - var cmd, api, k8s, dnsSvc, app, dnsAns float64 - steps := []*float64{&cmd, &api, &k8s, &dnsSvc, &app, &dnsAns} + var cmd, api, k8s, dnsSvc, app, dnsAns, cpu float64 + steps := []*float64{&cmd, &api, &k8s, &dnsSvc, &app, &dnsAns, &cpu} count := 0 r := csv.NewReader(f) @@ -91,8 +94,13 @@ func readInLatestBenchmark(latestBenchmarkPath string) benchmark { values := []float64{} - // 8-13 contain the benchmark results + // 8-13 and 16 contain the benchmark results + var idx []int for i := 8; i <= 13; i++ { + idx = append(idx, i) + } + idx = append(idx, 16) + for _, i := range idx { v, err := strconv.ParseFloat(line[i], 64) if err != nil { log.Fatal(err) @@ -108,10 +116,14 @@ func readInLatestBenchmark(latestBenchmarkPath string) benchmark { var total float64 for _, step := range steps { *step /= float64(count) + // Don't add CPU time to the total time. + if step == &cpu { + continue + } total += *step } - return benchmark{time.Now(), cmd, api, k8s, dnsSvc, app, dnsAns, total} + return benchmark{time.Now(), cmd, api, k8s, dnsSvc, app, dnsAns, total, cpu} } // readInPastBenchmarks reads in the past benchmark results from a JSON file @@ -141,16 +153,18 @@ func updateRunsFile(h *benchmarks, pastRunsPath string) { } } -// createChart creates a time series chart of the benchmarks -func createChart(benchmarks []benchmark, chartOutputPath string) { +// createDailyChart creates a time series chart of the benchmarks +func createDailyChart(benchmarks []benchmark, chartOutputPath string) { n := len(benchmarks) - var cmdXYs, apiXYs, k8sXYs, dnsSvcXYs, appXYs, dnsAnsXYs, totalXYs plotter.XYs - xys := []*plotter.XYs{&cmdXYs, &apiXYs, &k8sXYs, &dnsSvcXYs, &appXYs, &dnsAnsXYs, &totalXYs} + var cmdXYs, apiXYs, k8sXYs, dnsSvcXYs, appXYs, dnsAnsXYs, totalXYs, cpuXYs plotter.XYs + xys := []*plotter.XYs{&cmdXYs, &apiXYs, &k8sXYs, &dnsSvcXYs, &appXYs, &dnsAnsXYs, &totalXYs, &cpuXYs} for _, xy := range xys { *xy = make(plotter.XYs, n) } + var maxTotal float64 + for i, b := range benchmarks { date := float64(b.Date.Unix()) xyValues := []struct { @@ -164,14 +178,98 @@ func createChart(benchmarks []benchmark, chartOutputPath string) { {&appXYs, b.App}, {&dnsAnsXYs, b.DNSAns}, {&totalXYs, b.Total}, + {&cpuXYs, b.CPU}, } for _, xyValue := range xyValues { xy := &(*xyValue.xys)[i] xy.Y = xyValue.value xy.X = date } + if b.Total > maxTotal { + maxTotal = b.Total + } + } + + generateChart(xys, chartOutputPath, maxTotal) +} + +// createWeeklyChart creates a time series chart of the benchmarks +func createWeeklyChart(benchmarks []benchmark, chartOutputPath string) { + var cmdXYs, apiXYs, k8sXYs, dnsSvcXYs, appXYs, dnsAnsXYs, totalXYs, cpuXYs plotter.XYs + xys := []*plotter.XYs{&cmdXYs, &apiXYs, &k8sXYs, &dnsSvcXYs, &appXYs, &dnsAnsXYs, &totalXYs, &cpuXYs} + + for _, xy := range xys { + *xy = make(plotter.XYs, 0) + } + + weekDuration, err := time.ParseDuration("168h") + if err != nil { + log.Fatalf("failed to parse duration: %v", err) + } + + var maxTotal float64 + firstBenchmarkDate := benchmarks[0].Date + weeklyBenchmark := benchmark{Date: firstBenchmarkDate} + // count the number of benchmarks in the week + benchmarkCount := 0 + nextWeek := firstBenchmarkDate.Add(weekDuration) + + for i := 0; i <= len(benchmarks); i++ { + // if at the end of the benchmark list or beyond this week's period, calculate the weeks average + if i == len(benchmarks) || nextWeek.Before(benchmarks[i].Date) { + // skip adding a point if no benchmarks during the week, otherwise points will be at 0 + if benchmarkCount != 0 { + xyValues := []struct { + xys *plotter.XYs + value float64 + }{ + {&cmdXYs, weeklyBenchmark.Cmd}, + {&apiXYs, weeklyBenchmark.API}, + {&k8sXYs, weeklyBenchmark.K8s}, + {&dnsSvcXYs, weeklyBenchmark.DNSSvc}, + {&appXYs, weeklyBenchmark.App}, + {&dnsAnsXYs, weeklyBenchmark.DNSAns}, + {&totalXYs, weeklyBenchmark.Total}, + {&cpuXYs, weeklyBenchmark.CPU}, + } + for _, xyValue := range xyValues { + val := plotter.XY{ + Y: xyValue.value / float64(benchmarkCount), + X: float64(weeklyBenchmark.Date.Unix()), + } + *xyValue.xys = append(*xyValue.xys, val) + } + if weeklyBenchmark.Total/float64(benchmarkCount) > maxTotal { + maxTotal = weeklyBenchmark.Total / float64(benchmarkCount) + } + } + weeklyBenchmark = benchmark{Date: nextWeek} + nextWeek = nextWeek.Add(weekDuration) + benchmarkCount = 0 + // if we're at the end of the benchmark list quit + if i == len(benchmarks) { + break + } + // try running this benchmark again, this is needed in case there's a week without any benchmarks + i-- + continue + } + b := benchmarks[i] + weeklyBenchmark.Cmd += b.Cmd + weeklyBenchmark.API += b.API + weeklyBenchmark.K8s += b.K8s + weeklyBenchmark.DNSSvc += b.DNSSvc + weeklyBenchmark.App += b.App + weeklyBenchmark.DNSAns += b.DNSAns + weeklyBenchmark.Total += b.Total + weeklyBenchmark.CPU += b.CPU + benchmarkCount++ } + generateChart(xys, chartOutputPath, maxTotal) +} + +func generateChart(xys []*plotter.XYs, chartOutputPath string, maxTotal float64) { p := plot.New() p.Add(plotter.NewGrid()) p.Legend.Top = true @@ -179,30 +277,30 @@ func createChart(benchmarks []benchmark, chartOutputPath string) { p.X.Label.Text = "date" p.X.Tick.Marker = plot.TimeTicks{Format: "2006-01-02"} p.Y.Label.Text = "time (seconds)" - p.Y.Max = 95 + p.Y.Max = maxTotal + 20 steps := []struct { - xys plotter.XYs rgba color.RGBA label string }{ - {cmdXYs, color.RGBA{R: 255, A: 255}, "Command Exec"}, - {apiXYs, color.RGBA{G: 255, A: 255}, "API Server Answering"}, - {k8sXYs, color.RGBA{B: 255, A: 255}, "Kubernetes SVC"}, - {dnsSvcXYs, color.RGBA{R: 255, B: 255, A: 255}, "DNS SVC"}, - {appXYs, color.RGBA{R: 255, G: 255, A: 255}, "App Running"}, - {dnsAnsXYs, color.RGBA{G: 255, B: 255, A: 255}, "DNS Answering"}, - {totalXYs, color.RGBA{B: 255, R: 140, A: 255}, "Total"}, + {color.RGBA{R: 255, A: 255}, "Command Exec"}, + {color.RGBA{G: 255, A: 255}, "API Server Answering"}, + {color.RGBA{B: 255, A: 255}, "Kubernetes SVC"}, + {color.RGBA{R: 255, B: 255, A: 255}, "DNS SVC"}, + {color.RGBA{R: 255, G: 255, A: 255}, "App Running"}, + {color.RGBA{G: 255, B: 255, A: 255}, "DNS Answering"}, + {color.RGBA{B: 255, R: 140, A: 255}, "Total"}, + {color.RGBA{B: 57, R: 127, G: 85, A: 255}, "CPU"}, } - for _, step := range steps { - line, points := newLinePoints(step.xys, step.rgba) + for i, step := range steps { + line, points := newLinePoints(*xys[i], step.rgba) p.Add(line, points) p.Legend.Add(step.label, line) } if err := p.Save(12*vg.Inch, 8*vg.Inch, chartOutputPath); err != nil { - log.Fatal(err) + log.Fatalf("failed creating png: %v", err) } } diff --git a/hack/benchmark/time-to-k8s/public-chart/public-chart.sh b/hack/benchmark/time-to-k8s/public-chart/public-chart.sh index 5bffd172c094..e4194d680674 100755 --- a/hack/benchmark/time-to-k8s/public-chart/public-chart.sh +++ b/hack/benchmark/time-to-k8s/public-chart/public-chart.sh @@ -16,8 +16,10 @@ set -e +DRIVER="$1" # container-runtime (docker or containerd) -RUNTIME="$1" +RUNTIME="$2" +BUCKET="s3://time-to-k8s" install_minikube() { make @@ -27,28 +29,34 @@ install_minikube() { run_benchmark() { ( cd ./hack/benchmark/time-to-k8s/time-to-k8s-repo/ && git submodule update --init && - go run . --config "../public-chart/$RUNTIME-benchmark.yaml" --iterations 10 --output ./output.csv ) + go run . --config "../public-chart/$DRIVER-$RUNTIME-benchmark.yaml" --iterations 10 --output ./output.csv ) } generate_chart() { - go run ./hack/benchmark/time-to-k8s/public-chart/generate-chart.go --csv ./hack/benchmark/time-to-k8s/time-to-k8s-repo/output.csv --output ./chart.png --past-runs ./runs.json + go run ./hack/benchmark/time-to-k8s/public-chart/generate-chart.go --csv ./hack/benchmark/time-to-k8s/time-to-k8s-repo/output.csv --daily-chart ./daily-chart.png --weekly-chart ./weekly-chart.png --past-runs ./runs.json +} + +copy() { + aws s3 cp "$1" "$2" } cleanup() { rm ./runs.json rm ./hack/benchmark/time-to-k8s/time-to-k8s-repo/output.csv - rm ./chart.png + rm ./daily-chart.png + rm ./weekly-chart.png } -gsutil -m cp "gs://minikube-time-to-k8s/$RUNTIME-runs.json" ./runs.json +copy "$BUCKET/$DRIVER-$RUNTIME-runs.json" ./runs.json install_minikube run_benchmark generate_chart -gsutil -m cp ./runs.json "gs://minikube-time-to-k8s/$RUNTIME-runs.json" -gsutil -m cp ./runs.json "gs://minikube-time-to-k8s/$(date +'%Y-%m-%d')-$RUNTIME.json" -gsutil -m cp ./chart.png "gs://minikube-time-to-k8s/$RUNTIME-chart.png" +copy ./runs.json "$BUCKET/$DRIVER-$RUNTIME-runs.json" +copy ./runs.json "$BUCKET/$(date +'%Y-%m-%d')-$DRIVER-$RUNTIME.json" +copy ./daily-chart.png "$BUCKET/$DRIVER-$RUNTIME-chart.png" +copy ./weekly-chart.png "$BUCKET/$DRIVER-$RUNTIME-weekly-chart.png" cleanup diff --git a/hack/benchmark/time-to-k8s/public-chart/virtualbox-containerd-benchmark.yaml b/hack/benchmark/time-to-k8s/public-chart/virtualbox-containerd-benchmark.yaml new file mode 100644 index 000000000000..ed8d46e8e40e --- /dev/null +++ b/hack/benchmark/time-to-k8s/public-chart/virtualbox-containerd-benchmark.yaml @@ -0,0 +1,4 @@ +testcases: + minikube: + setup: minikube start --driver=virtualbox --container-runtime=containerd --memory=max --cpus=max + teardown: minikube delete diff --git a/hack/benchmark/time-to-k8s/public-chart/virtualbox-docker-benchmark.yaml b/hack/benchmark/time-to-k8s/public-chart/virtualbox-docker-benchmark.yaml new file mode 100644 index 000000000000..e8ba0d61f62d --- /dev/null +++ b/hack/benchmark/time-to-k8s/public-chart/virtualbox-docker-benchmark.yaml @@ -0,0 +1,4 @@ +testcases: + minikube: + setup: minikube start --driver=virtualbox --container-runtime=docker --memory=max --cpus=max + teardown: minikube delete diff --git a/hack/benchmark/time-to-k8s/time-to-k8s-repo b/hack/benchmark/time-to-k8s/time-to-k8s-repo index f6f6b2db9e71..552fcb3a171f 160000 --- a/hack/benchmark/time-to-k8s/time-to-k8s-repo +++ b/hack/benchmark/time-to-k8s/time-to-k8s-repo @@ -1 +1 @@ -Subproject commit f6f6b2db9e718f7c9af698b6247b232a7251522f +Subproject commit 552fcb3a171f6216f233dfdba5dce9aca1efda50 diff --git a/hack/benchmark/time-to-k8s/time-to-k8s.sh b/hack/benchmark/time-to-k8s/time-to-k8s.sh index a1f217cbc3d9..348cd86a965a 100755 --- a/hack/benchmark/time-to-k8s/time-to-k8s.sh +++ b/hack/benchmark/time-to-k8s/time-to-k8s.sh @@ -37,12 +37,10 @@ run_benchmark() { go run . --config local-kubernetes.yaml --iterations 10 --output output.csv ) } -generate_chart() { - go run ./hack/benchmark/time-to-k8s/chart.go --csv ./hack/benchmark/time-to-k8s/time-to-k8s-repo/output.csv --output ./site/static/images/benchmarks/timeToK8s/"$1".png -} +# create page and generate chart inside the code create_page() { - printf -- "---\ntitle: \"%s Benchmark\"\nlinkTitle: \"%s Benchmark\"\nweight: -$(date +'%Y%m%d')\n---\n\n![time-to-k8s](/images/benchmarks/timeToK8s/%s.png)\n" "$1" "$1" "$1" > ./site/content/en/docs/benchmarks/timeToK8s/"$1".md + go run ./hack/benchmark/time-to-k8s/*.go --csv ./hack/benchmark/time-to-k8s/time-to-k8s-repo/output.csv --image ./site/static/images/benchmarks/timeToK8s/"$1" --page ./site/content/en/docs/benchmarks/timeToK8s/"$1".md } cleanup() { @@ -55,6 +53,5 @@ install_minikube VERSION=$(minikube version --short) run_benchmark -generate_chart "$VERSION" create_page "$VERSION" cleanup diff --git a/hack/boilerplate/boilerplate.go b/hack/boilerplate/boilerplate.go index 3bd06b4da2a4..a3d56a2141f6 100644 --- a/hack/boilerplate/boilerplate.go +++ b/hack/boilerplate/boilerplate.go @@ -20,7 +20,6 @@ import ( "bytes" "flag" "fmt" - "io/ioutil" "log" "os" "path/filepath" @@ -32,16 +31,17 @@ var ( boilerplatedir = flag.String("boilerplate-dir", ".", "Boilerplate directory for boilerplate files") rootdir = flag.String("rootdir", "../../", "Root directory to examine") verbose = flag.Bool("v", false, "Verbose") - skippedPaths = regexp.MustCompile(`Godeps|third_party|_gopath|_output|\.git|cluster/env.sh|vendor|test/e2e/generated/bindata.go|site/themes/docsy|test/integration/testdata`) + skippedPaths = regexp.MustCompile(`Godeps|third_party|_gopath|_output|\.git|cluster/env.sh|vendor|test/e2e/generated/bindata.go|site/themes/docsy|test/integration/testdata|hack/benchmark/image-build/minikube-image-benchmark|hack/benchmark/time-to-k8s/time-to-k8s-repo`) windowdNewLine = regexp.MustCompile(`\r`) txtExtension = regexp.MustCompile(`\.txt`) - goBuildTag = regexp.MustCompile(`(?m)^(// \+build.*\n)+\n`) + goBuildTag = regexp.MustCompile(`(?m)^(//go:build.*\n)+\n`) shebang = regexp.MustCompile(`(?m)^(#!.*\n)\n*`) copyright = regexp.MustCompile(`Copyright YEAR`) copyrightReal = regexp.MustCompile(`Copyright \d{4}`) ) func main() { + flag.Parse() refs, err := extensionToBoilerplate(*boilerplatedir) if err != nil { log.Fatal(err) @@ -75,7 +75,7 @@ func extensionToBoilerplate(dir string) (map[string][]byte, error) { files, _ := filepath.Glob(dir + "/*.txt") for _, filename := range files { extension := strings.ToLower(filepath.Ext(txtExtension.ReplaceAllString(filename, ""))) - data, err := ioutil.ReadFile(filename) + data, err := os.ReadFile(filename) if err != nil { return nil, err } @@ -97,7 +97,7 @@ func extensionToBoilerplate(dir string) (map[string][]byte, error) { // filePasses checks whether the processed file is valid. Returning false means that the file does not the proper boilerplate template. func filePasses(filename string, expectedBoilerplate []byte) (bool, error) { - data, err := ioutil.ReadFile(filename) + data, err := os.ReadFile(filename) if err != nil { return false, err } @@ -136,7 +136,7 @@ func filePasses(filename string, expectedBoilerplate []byte) (bool, error) { // filesToCheck returns the list of the filers that will be checked for the boilerplate. func filesToCheck(rootDir string, extensions map[string][]byte) ([]string, error) { var outFiles []string - err := filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error { + err := filepath.Walk(rootDir, func(path string, info os.FileInfo, _ error) error { // remove current workdir from the beginning of the path in case it matches the skipped path cwd, _ := os.Getwd() // replace "\" with "\\" for windows style path diff --git a/hack/boilerplate/fix.sh b/hack/boilerplate/fix.sh index b2b4c98b84a0..083642439e49 100755 --- a/hack/boilerplate/fix.sh +++ b/hack/boilerplate/fix.sh @@ -44,7 +44,7 @@ function prepend() { done } -prepend "\.go" "go" "+build" +prepend "\.go" "go" "go:build" prepend "\.py" "py" prepend "\.sh" "sh" "#!" prepend Makefile Makefile diff --git a/hack/changelog/changelog.go b/hack/changelog/changelog.go new file mode 100644 index 000000000000..4a36eadcc58f --- /dev/null +++ b/hack/changelog/changelog.go @@ -0,0 +1,262 @@ +/* +Copyright 2025 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "flag" + "fmt" + "log" + "maps" + "net/http" + "os" + "slices" + "sort" + "strings" + + "github.com/google/go-github/v74/github" + "golang.org/x/oauth2" +) + +// Config holds knobs for filtering and grouping pull requests when generating +// release notes. +// All string comparisons are case-insensitive. +type Config struct { + // all PRs with these prefixes will be skipped in the Changelog + SkipPrefixes []string + + // Group PRs with these prefixes into their own group heading based on their Prefix + PrefixGroups map[string]string + + //Group PRs with these prefixes into their own group heading based the string they contain + ContainGroups map[string]string + + // AllowedLabels enumerates the labels that can be used for grouping. + // Labels outside this list are ignored. + AllowedLabels []string +} + +var cfg = Config{ + // if PR title "starts with" these words, skip them from change log + SkipPrefixes: []string{ + "ci:", + "test:", + "build:", + "Build(deps):", + "site:", + "docs:", + "chore:", + "Post-release:"}, + // if PR title "starts with" these words, put them in these group + PrefixGroups: map[string]string{ + "addon:": "Addons", + "addon ": "Addons", + "ISO:": "Base image versions", + "ISO/Kicabse:": "Base image versions", + "Kicbase": "Base image versions", + "cni": "CNI", + }, + // if PR title "contains" these words, put them in these group + ContainGroups: map[string]string{ + "bug": "Bug fixes", + "fix": "Bug fixes", + "vfkit:": "Drivers", + "qemu:": "Drivers", + "driver": "Drivers", + "krunkit:": "Drivers", + "kvm:": "Drivers", + "hyperv:": "Drivers", + "hyperkit:": "Drivers", + "vbox:": "Drivers", + "improve": "Improvements", + "translation": "UI", + }, + AllowedLabels: []string{"kind/feature", "kind/bug", "kind/enhancement"}, +} + +func main() { + + var ( + owner = flag.String("owner", "kubernetes", "repository owner") + repo = flag.String("repo", "minikube", "repository name") + startRef = flag.String("start", "", "start git ref (exclusive) (defaults to last release tag)") + endRef = flag.String("end", "HEAD", "end git ref (inclusive)") + ) + flag.Parse() + fmt.Println("Generating changelog, this might take a few minutes ...") + ctx := context.Background() + gh := newGitHubClient(ctx) + + // Determine the starting reference; use the latest release if none is provided. + start := resolveStartRef(ctx, gh, *owner, *repo, *startRef) + + // Collect and group pull requests between the refs, then print the result. + prs := pullRequestsBetween(ctx, gh, *owner, *repo, start, *endRef) + groups := groupPullRequests(prs, cfg) + printGroups(groups) +} + +// newGitHubClient constructs a GitHub client. If GITHUB_TOKEN is set the client +// uses it for authentication to avoid strict rate limits. +func newGitHubClient(ctx context.Context) *github.Client { + token := os.Getenv("GITHUB_TOKEN") + httpClient := http.DefaultClient + if token != "" { + ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token}) + httpClient = oauth2.NewClient(ctx, ts) + } + return github.NewClient(httpClient) +} + +// resolveStartRef returns the starting git reference. When start is empty the +// most recent GitHub release tag is used. +func resolveStartRef(ctx context.Context, gh *github.Client, owner, repo, start string) string { + if start != "" { + return start + } + rel, _, err := gh.Repositories.GetLatestRelease(ctx, owner, repo) + if err != nil { + log.Fatalf("get latest release: %v", err) + } + return rel.GetTagName() +} + +// pullRequestsBetween finds all pull requests merged between start and end by +// walking the commit comparison and querying PRs for each commit. +func pullRequestsBetween(ctx context.Context, gh *github.Client, owner, repo, start, end string) map[int]*github.PullRequest { + var allCommits []*github.RepositoryCommit + opts := &github.ListOptions{PerPage: 100} + for { + cmp, resp, err := gh.Repositories.CompareCommits(ctx, owner, repo, start, end, opts) + if err != nil { + log.Fatalf("compare commits: %v", err) + } + allCommits = append(allCommits, cmp.Commits...) + if resp.NextPage == 0 { + break + } + opts.Page = resp.NextPage + } + + prsMap := make(map[int]*github.PullRequest) + for _, c := range allCommits { + prs, _, err := gh.PullRequests.ListPullRequestsWithCommit(ctx, owner, repo, c.GetSHA(), nil) + if err != nil { + log.Printf("list PRs for commit %s: %v", c.GetSHA(), err) + continue + } + for _, pr := range prs { + prsMap[pr.GetNumber()] = pr + } + } + return prsMap +} + +// groupPullRequests assigns each pull request to a group based on the provided +// configuration and allowed label list. +func groupPullRequests(prs map[int]*github.PullRequest, cfg Config) map[string][]*github.PullRequest { + groups := make(map[string][]*github.PullRequest) + + // Build a quick lookup for allowed labels. + allowed := make(map[string]struct{}) + for _, l := range cfg.AllowedLabels { + allowed[strings.ToLower(l)] = struct{}{} + } + + for _, pr := range prs { + group, skip := classify(pr, cfg, allowed) + if skip { + continue + } + groups[group] = append(groups[group], pr) + } + return groups +} + +// classify returns the group name for a pull request and whether it should be +// skipped entirely. +func classify(pr *github.PullRequest, cfg Config, allowed map[string]struct{}) (string, bool) { + title := pr.GetTitle() + lower := strings.ToLower(title) + + // Skip PRs with any configured prefix. + for _, p := range cfg.SkipPrefixes { + if strings.HasPrefix(lower, strings.ToLower(p)) { + return "", true + } + } + + // Group by specific prefixes first. + for pref, g := range cfg.PrefixGroups { + if strings.HasPrefix(lower, strings.ToLower(pref)) { + return g, false + } + } + + // Then look for substring matches. Iterate in a deterministic order so + // overlapping keywords behave predictably. Longer substrings are checked + // first to favor more specific matches. + subs := slices.Collect(maps.Keys(cfg.ContainGroups)) + sort.Slice(subs, func(i, j int) bool { + if len(subs[i]) == len(subs[j]) { + return subs[i] < subs[j] + } + return len(subs[i]) > len(subs[j]) + }) + for _, sub := range subs { + if strings.Contains(lower, strings.ToLower(sub)) { + return cfg.ContainGroups[sub], false + } + } + + // Finally, use an allowed label if present. + for _, l := range pr.Labels { + name := l.GetName() + if _, ok := allowed[strings.ToLower(name)]; ok { + return name, false + } + } + return "other", false +} + +// printGroups writes the grouped pull requests to stdout. Groups and the +// entries within each group are sorted for stable output. +func printGroups(groups map[string][]*github.PullRequest) { + groupNames := make([]string, 0, len(groups)) + for g := range groups { + groupNames = append(groupNames, g) + } + sort.Strings(groupNames) + for _, g := range groupNames { + fmt.Printf("## %s\n", g) + prs := groups[g] + + // Sort entries alphabetically by title with PR number as a tiebreaker. + sort.Slice(prs, func(i, j int) bool { + ti := strings.ToLower(prs[i].GetTitle()) + tj := strings.ToLower(prs[j].GetTitle()) + if ti == tj { + return prs[i].GetNumber() < prs[j].GetNumber() + } + return ti < tj + }) + for _, pr := range prs { + fmt.Printf("* %s (#%d)\n", pr.GetTitle(), pr.GetNumber()) + } + fmt.Println() + } +} diff --git a/hack/changelog/changelog_test.go b/hack/changelog/changelog_test.go new file mode 100644 index 000000000000..eeb87083ff39 --- /dev/null +++ b/hack/changelog/changelog_test.go @@ -0,0 +1,133 @@ +/* +Copyright 2025 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "io" + "os" + "testing" + + "github.com/google/go-github/v74/github" +) + +func TestClassify(t *testing.T) { + cfg := Config{ + SkipPrefixes: []string{"ci:", "test:", "build(deps):"}, + PrefixGroups: map[string]string{"addon:": "addons"}, + ContainGroups: map[string]string{"bug": "bug fix", "fix": "bug fix"}, + AllowedLabels: []string{"kind/feature", "kind/bug"}, + } + allowed := map[string]struct{}{"kind/feature": {}, "kind/bug": {}} + + tests := []struct { + name string + title string + labels []string + wantGroup string + wantSkip bool + }{ + {"skip prefix", "ci: update", nil, "", true}, + {"prefix group", "addon: new addon", nil, "addons", false}, + {"contain group", "fix critical bug", nil, "bug fix", false}, + {"contain over label", "bug fix", []string{"kind/feature"}, "bug fix", false}, + {"label group", "some change", []string{"kind/bug"}, "kind/bug", false}, + {"fallback", "random", nil, "other", false}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pr := &github.PullRequest{Title: github.String(tt.title)} + for _, l := range tt.labels { + pr.Labels = append(pr.Labels, &github.Label{Name: github.String(l)}) + } + gotGroup, gotSkip := classify(pr, cfg, allowed) + if gotGroup != tt.wantGroup || gotSkip != tt.wantSkip { + t.Fatalf("classify(%q) = (%q, %v); want (%q, %v)", tt.title, gotGroup, gotSkip, tt.wantGroup, tt.wantSkip) + } + }) + } +} + +func TestGroupPullRequests(t *testing.T) { + cfg := Config{ + SkipPrefixes: []string{"ci:"}, + PrefixGroups: map[string]string{"addon:": "addons"}, + ContainGroups: map[string]string{"fix": "bug fix"}, + AllowedLabels: []string{"kind/feature"}, + } + + prs := map[int]*github.PullRequest{ + 1: {Title: github.String("addon: cni"), Number: github.Int(1)}, + 2: {Title: github.String("ci: skip"), Number: github.Int(2)}, + 3: {Title: github.String("feature"), Number: github.Int(3), Labels: []*github.Label{{Name: github.String("kind/feature")}}}, + 4: {Title: github.String("misc"), Number: github.Int(4)}, + 5: {Title: github.String("fix crash"), Number: github.Int(5)}, + } + + groups := groupPullRequests(prs, cfg) + if len(groups) != 4 { + t.Fatalf("expected 4 groups, got %d", len(groups)) + } + if g := groups["addons"]; len(g) != 1 || g[0].GetNumber() != 1 { + t.Fatalf("addons group unexpected: %+v", g) + } + if g := groups["kind/feature"]; len(g) != 1 || g[0].GetNumber() != 3 { + t.Fatalf("kind/feature group unexpected: %+v", g) + } + if g := groups["bug fix"]; len(g) != 1 || g[0].GetNumber() != 5 { + t.Fatalf("bug fix group unexpected: %+v", g) + } + if g := groups["other"]; len(g) != 1 || g[0].GetNumber() != 4 { + t.Fatalf("other group unexpected: %+v", g) + } + if _, ok := groups["ci:"]; ok { + t.Fatalf("unexpected group for skipped PR") + } +} + +func TestPrintGroups(t *testing.T) { + groups := map[string][]*github.PullRequest{ + "z": { + {Title: github.String("b"), Number: github.Int(2)}, + {Title: github.String("a"), Number: github.Int(1)}, + }, + "a": { + {Title: github.String("same"), Number: github.Int(2)}, + {Title: github.String("same"), Number: github.Int(1)}, + }, + } + + r, w, err := os.Pipe() + if err != nil { + t.Fatalf("pipe: %v", err) + } + old := os.Stdout + os.Stdout = w + printGroups(groups) + w.Close() + os.Stdout = old + + out, err := io.ReadAll(r) + if err != nil { + t.Fatalf("read: %v", err) + } + got := string(out) + want := "## a\n* same (#1)\n* same (#2)\n\n## z\n* a (#1)\n* b (#2)\n\n" + if got != want { + t.Errorf("printGroups output = %q, want %q", got, want) + } +} diff --git a/hack/conformance_tests.sh b/hack/conformance_tests.sh index 439649449f98..8bc830ec314b 100755 --- a/hack/conformance_tests.sh +++ b/hack/conformance_tests.sh @@ -35,14 +35,24 @@ readonly START_ARGS=${@:-} kubectl --context "${PROFILE_NAME}" get pods --all-namespaces "${MINIKUBE}" status -p "${PROFILE_NAME}" -curl -LO https://github.com/vmware-tanzu/sonobuoy/releases/download/v0.19.0/sonobuoy_0.19.0_linux_amd64.tar.gz || true -tar -xzf sonobuoy_0.19.0_linux_amd64.tar.gz +# Make sure jq is installed +sudo apt-get install jq -y +# Remove old sonobuoy installation +rm -rf sonobuoy -./sonobuoy run --mode=certified-conformance --wait --alsologtostderr +# Get latest sonobuoy version +sonobuoy=$(curl -s https://api.github.com/repos/vmware-tanzu/sonobuoy/releases/latest | jq .assets[].browser_download_url | grep linux_amd64 | cut -d '"' -f 2) +curl -LO $sonobuoy +tarball=$(echo $sonobuoy | awk -F "/" '{print $(NF)}') +tar -xzf $tarball + +./sonobuoy run --plugin-env=e2e.E2E_EXTRA_ARGS="--ginkgo.v" --mode=certified-conformance --wait --alsologtostderr outdir="$(mktemp -d)" ./sonobuoy retrieve "${outdir}" +"${MINIKUBE}" delete -p "${PROFILE_NAME}" + cwd=$(pwd) cd "${outdir}" @@ -63,10 +73,34 @@ documentation_url: https://minikube.sigs.k8s.io/docs/ product_logo_url: https://raw.githubusercontent.com/kubernetes/minikube/master/images/logo/logo.svg type: installer description: minikube runs a local Kubernetes cluster on macOS, Linux, and Windows. +contact_email_address: minikube-dev@googlegroups.com EOF -cat <README.md -./hack/conformance_tests.sh $MINIKUBE $START_ARGS +cat <<"EOF" >README.md +# Reproducing the test results + +## Run minikube with docker driver + +Install [docker](https://docs.docker.com/engine/install/) +Install [kubectl](https://v1-18.docs.kubernetes.io/docs/tasks/tools/install-kubectl/) +Clone the [minikube repo](https://github.com/kubernetes/minikube) + +## Compile the latest minikube binary +```console +% cd +% make +``` + +## Trigger the tests and get back the results + +We follow the [official instructions](https://github.com/cncf/k8s-conformance/blob/master/instructions.md): + +```console +% cd +./hack/conformance_tests.sh ${MINIKUBE} ${START_ARGS} +``` + +This script will run sonobuoy against a minikube cluster with two nodes and the provided parameters. EOF cp -r ../results/plugins/e2e/results/global/* . diff --git a/hack/generate_licenses.sh b/hack/generate_licenses.sh new file mode 100755 index 000000000000..814fc9ac72d7 --- /dev/null +++ b/hack/generate_licenses.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Copyright 2022 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eu -o pipefail + +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +GOBIN="$DIR" go install github.com/google/go-licenses@latest + +rm -rf ./out/licenses +"${DIR}/go-licenses" save k8s.io/minikube/cmd/minikube --save_path="out/licenses" --force +pushd ./out +tar -zcvf licenses.tar.gz ./licenses +rm -rf ./licenses +popd diff --git a/hack/gh_actions/cleanup.sh b/hack/gh_actions/cleanup.sh index eb12251e474a..85afc9b9eb14 100644 --- a/hack/gh_actions/cleanup.sh +++ b/hack/gh_actions/cleanup.sh @@ -42,7 +42,7 @@ check_running_job echo "cleanup docker..." docker kill $(docker ps -aq) >/dev/null 2>&1 || true -docker system prune --volumes --force || true +docker system prune -a --volumes -f || true echo "rebooting..." sudo reboot diff --git a/hack/go.mod b/hack/go.mod new file mode 100644 index 000000000000..529d94131f24 --- /dev/null +++ b/hack/go.mod @@ -0,0 +1,248 @@ +module k8s.io/minikube/hack + +go 1.25.0 + +replace github.com/docker/machine => github.com/minikube-machine/machine v0.0.0-20240815173309-ffb6b643c381 + +require ( + cloud.google.com/go/storage v1.56.1 + github.com/GoogleCloudPlatform/cloudsql-proxy v1.37.7 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 + github.com/cenkalti/backoff/v4 v4.3.0 + github.com/google/go-github/v74 v74.0.0 + github.com/google/go-github/v80 v80.0.0 + github.com/jmoiron/sqlx v1.4.0 + github.com/olekukonko/tablewriter v1.0.9 + github.com/pkg/errors v0.9.1 + github.com/spf13/cobra v1.9.1 + github.com/spf13/viper v1.21.0 + go.opentelemetry.io/otel v1.39.0 + go.opentelemetry.io/otel/metric v1.39.0 + go.opentelemetry.io/otel/sdk/metric v1.39.0 + golang.org/x/mod v0.30.0 + golang.org/x/oauth2 v0.30.0 + gonum.org/v1/plot v0.16.0 + k8s.io/klog/v2 v2.130.1 + k8s.io/minikube v1.36.0 +) + +require ( + cel.dev/expr v0.24.0 // indirect + cloud.google.com/go v0.121.6 // indirect + cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.8.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + cloud.google.com/go/monitoring v1.24.2 // indirect + cloud.google.com/go/trace v1.11.6 // indirect + codeberg.org/go-fonts/liberation v0.5.0 // indirect + codeberg.org/go-latex/latex v0.1.0 // indirect + codeberg.org/go-pdf/fpdf v0.10.0 // indirect + git.sr.ht/~sbinet/gg v0.6.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect + github.com/Delta456/box-cli-maker/v2 v2.3.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.29.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 // indirect + github.com/MakeNowJust/heredoc v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/VividCortex/ewma v1.2.0 // indirect + github.com/VividCortex/godaemon v1.0.0 // indirect + github.com/Xuanwo/go-locale v1.1.3 // indirect + github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect + github.com/aws/aws-sdk-go-v2 v1.36.3 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect + github.com/aws/aws-sdk-go-v2/config v1.29.15 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.68 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.20 // indirect + github.com/aws/smithy-go v1.22.3 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/blang/semver/v4 v4.0.0 // indirect + github.com/briandowns/spinner v1.23.2 // indirect + github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a // indirect + github.com/campoy/embedmd v1.0.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cheggaaa/pb/v3 v3.1.7 // indirect + github.com/cloudevents/sdk-go/v2 v2.16.0 // indirect + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect + github.com/containerd/errdefs v1.0.0 // indirect + github.com/containerd/errdefs/pkg v0.3.0 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect + github.com/coreos/go-systemd/v22 v22.5.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect + github.com/cyphar/filepath-securejoin v0.4.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/distribution/reference v0.6.0 // indirect + github.com/docker/cli v28.4.0+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker v28.5.2+incompatible // indirect + github.com/docker/docker-credential-helpers v0.9.3 // indirect + github.com/docker/go-connections v0.6.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/docker/machine v0.16.2 // indirect + github.com/ebitengine/purego v0.9.1 // indirect + github.com/emicklei/go-restful/v3 v3.12.2 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/fxamacker/cbor/v2 v2.9.0 // indirect + github.com/go-jose/go-jose/v4 v4.0.5 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/google/gnostic-models v0.7.0 // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/go-containerregistry v0.20.6 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect + github.com/googleapis/gax-go/v2 v2.15.0 // indirect + github.com/gookit/color v1.5.2 // indirect + github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.8.3 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hooklift/iso9660 v1.0.0 // indirect + github.com/huandu/xstrings v1.3.2 // indirect + github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/juju/clock v1.1.1 // indirect + github.com/juju/errors v0.0.0-20220203013757-bd733f3c86b9 // indirect + github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b // indirect + github.com/juju/mutex/v2 v2.0.0 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/cpuid v1.2.0 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/go-archive v0.1.0 // indirect + github.com/moby/patternmatcher v0.6.0 // indirect + github.com/moby/spdystream v0.5.0 // indirect + github.com/moby/sys/mountinfo v0.7.2 // indirect + github.com/moby/sys/sequential v0.6.0 // indirect + github.com/moby/sys/user v0.4.0 // indirect + github.com/moby/sys/userns v0.1.0 // indirect + github.com/moby/term v0.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect + github.com/olekukonko/errors v1.1.0 // indirect + github.com/olekukonko/ll v0.0.9 // indirect + github.com/opencontainers/cgroups v0.0.4 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.1 // indirect + github.com/otiai10/copy v1.14.1 // indirect + github.com/otiai10/mint v1.6.3 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 // indirect + github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.62.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/sayboras/dockerclient v1.0.0 // indirect + github.com/shirou/gopsutil/v4 v4.25.11 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/tklauser/go-sysconf v0.3.16 // indirect + github.com/tklauser/numcpus v0.11.0 // indirect + github.com/ulikunitz/xz v0.5.15 // indirect + github.com/vbatts/tar-split v0.12.1 // indirect + github.com/x448/float16 v0.8.4 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + github.com/zeebo/errs v1.4.0 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.36.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect + go.opentelemetry.io/otel/sdk v1.39.0 // indirect + go.opentelemetry.io/otel/trace v1.39.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + go.yaml.in/yaml/v2 v2.4.2 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/crypto v0.45.0 // indirect + golang.org/x/image v0.25.0 // indirect + golang.org/x/net v0.47.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.39.0 // indirect + golang.org/x/term v0.37.0 // indirect + golang.org/x/text v0.32.0 // indirect + golang.org/x/time v0.12.0 // indirect + google.golang.org/api v0.248.0 // indirect + google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c // indirect + google.golang.org/grpc v1.74.2 // indirect + google.golang.org/protobuf v1.36.7 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/api v0.34.3 // indirect + k8s.io/apimachinery v0.34.3 // indirect + k8s.io/cli-runtime v0.34.1 // indirect + k8s.io/client-go v0.34.1 // indirect + k8s.io/cluster-bootstrap v0.34.3 // indirect + k8s.io/component-base v0.34.1 // indirect + k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect + k8s.io/kubectl v0.34.1 // indirect + k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect + sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect + sigs.k8s.io/randfill v1.0.0 // indirect + sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect + sigs.k8s.io/yaml v1.6.0 // indirect +) + +replace k8s.io/minikube => ../ diff --git a/hack/go.sum b/hack/go.sum new file mode 100644 index 000000000000..c15a5f934145 --- /dev/null +++ b/hack/go.sum @@ -0,0 +1,669 @@ +cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= +cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= +cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= +cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= +cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute/metadata v0.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcaobyVfZWqRLA= +cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= +cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= +cloud.google.com/go/storage v1.56.1 h1:n6gy+yLnHn0hTwBFzNn8zJ1kqWfR91wzdM8hjRF4wP0= +cloud.google.com/go/storage v1.56.1/go.mod h1:C9xuCZgFl3buo2HZU/1FncgvvOgTAs/rnh4gF4lMg0s= +cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= +cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= +codeberg.org/go-fonts/dejavu v0.4.0 h1:2yn58Vkh4CFK3ipacWUAIE3XVBGNa0y1bc95Bmfx91I= +codeberg.org/go-fonts/dejavu v0.4.0/go.mod h1:abni088lmhQJvso2Lsb7azCKzwkfcnttl6tL1UTWKzg= +codeberg.org/go-fonts/latin-modern v0.4.0 h1:vkRCc1y3whKA7iL9Ep0fSGVuJfqjix0ica9UflHORO8= +codeberg.org/go-fonts/latin-modern v0.4.0/go.mod h1:BF68mZznJ9QHn+hic9ks2DaFl4sR5YhfM6xTYaP9vNw= +codeberg.org/go-fonts/liberation v0.5.0 h1:SsKoMO1v1OZmzkG2DY+7ZkCL9U+rrWI09niOLfQ5Bo0= +codeberg.org/go-fonts/liberation v0.5.0/go.mod h1:zS/2e1354/mJ4pGzIIaEtm/59VFCFnYC7YV6YdGl5GU= +codeberg.org/go-latex/latex v0.1.0 h1:hoGO86rIbWVyjtlDLzCqZPjNykpWQ9YuTZqAzPcfL3c= +codeberg.org/go-latex/latex v0.1.0/go.mod h1:LA0q/AyWIYrqVd+A9Upkgsb+IqPcmSTKc9Dny04MHMw= +codeberg.org/go-pdf/fpdf v0.10.0 h1:u+w669foDDx5Ds43mpiiayp40Ov6sZalgcPMDBcZRd4= +codeberg.org/go-pdf/fpdf v0.10.0/go.mod h1:Y0DGRAdZ0OmnZPvjbMp/1bYxmIPxm0ws4tfoPOc4LjU= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +git.sr.ht/~sbinet/cmpimg v0.1.0 h1:E0zPRk2muWuCqSKSVZIWsgtU9pjsw3eKHi8VmQeScxo= +git.sr.ht/~sbinet/cmpimg v0.1.0/go.mod h1:FU12psLbF4TfNXkKH2ZZQ29crIqoiqTZmeQ7dkp/pxE= +git.sr.ht/~sbinet/gg v0.6.0 h1:RIzgkizAk+9r7uPzf/VfbJHBMKUr0F5hRFxTUGMnt38= +git.sr.ht/~sbinet/gg v0.6.0/go.mod h1:uucygbfC9wVPQIfrmwM2et0imr8L7KQWywX0xpFMm94= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Delta456/box-cli-maker/v2 v2.3.0 h1:rGdoK/Qt3shdT1uqRMGgPqrhtisGD7PamTW8vY5MyCA= +github.com/Delta456/box-cli-maker/v2 v2.3.0/go.mod h1:Uv/kSX95LuNQn3C8wWazEIETE6MunPuYN+/knckbPQc= +github.com/GoogleCloudPlatform/cloudsql-proxy v1.37.7 h1:+ugXZyYXIb2NFWaXleLbouyEehCqdxQzEogEq5BrjTg= +github.com/GoogleCloudPlatform/cloudsql-proxy v1.37.7/go.mod h1:9iAgV6bpVWBq2BpG4J691fNCdKYd4JqR5ey9m4odfHE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.29.0 h1:YVtMlmfRUTaWs3+1acwMBp7rBUo6zrxl6Kn13/R9YW4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.29.0/go.mod h1:rKOFVIPbNs2wZeh7ZeQ0D9p/XLgbNiTr5m7x6KuAshk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0 h1:4LP6hvB4I5ouTbGgWtixJhgED6xdf67twf9PoY96Tbg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0/go.mod h1:jUZ5LYlw40WMd07qxcQJD5M40aUxrfwqQX1g7zxYnrQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 h1:Ron4zCA/yk6U7WOBXhTJcDpsUBG9npumK6xw2auFltQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0/go.mod h1:cSgYe11MCNYunTnRXrKiR/tHc0eoKjICUuWpNZoVCOo= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= +github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= +github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= +github.com/VividCortex/godaemon v1.0.0 h1:aHYrScWvgaSOdAoYCdObWXLm+e1rldP9Pwb1ZvuZkQw= +github.com/VividCortex/godaemon v1.0.0/go.mod h1:hBWe/72KbGt/lb95E+Sh9ersdYbB57Dt6CG66S1YPno= +github.com/Xuanwo/go-locale v1.1.3 h1:EWZZJJt5rqPHHbqPRH1zFCn5D7xHjjebODctA4aUO3A= +github.com/Xuanwo/go-locale v1.1.3/go.mod h1:REn+F/c+AtGSWYACBSYZgl23AP+0lfQC+SEFPN+hj30= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/aregm/cpuid v0.0.0-20181003105527-1a4a6f06a1c6 h1:FCWCoLmJABwx6v6cyrmEHweZdx7IenSeQI06FYIM4Wk= +github.com/aregm/cpuid v0.0.0-20181003105527-1a4a6f06a1c6/go.mod h1:U7jHFVFhE3ffvppP5MofVeTKcHBpk5GEj4CJsku5ONY= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM= +github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= +github.com/aws/aws-sdk-go-v2/config v1.29.15 h1:I5XjesVMpDZXZEZonVfjI12VNMrYa38LtLnw4NtY5Ss= +github.com/aws/aws-sdk-go-v2/config v1.29.15/go.mod h1:tNIp4JIPonlsgaO5hxO372a6gjhN63aSWl2GVl5QoBQ= +github.com/aws/aws-sdk-go-v2/credentials v1.17.68 h1:cFb9yjI02/sWHBSYXAtkamjzCuRymvmeFmt0TC0MbYY= +github.com/aws/aws-sdk-go-v2/credentials v1.17.68/go.mod h1:H6E+jBzyqUu8u0vGaU6POkK3P0NylYEeRZ6ynBpMqIk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 h1:BCG7DCXEXpNCcpwCxg1oi9pkJWH2+eZzTn9MY56MbVw= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= +github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 h1:xYEAf/6QHiTZDccKnPMbsMwlau13GsDsTgdue3wmHGw= +github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1/go.mod h1:qbn305Je/IofWBJ4bJz/Q7pDEtnnoInw/dGt71v6rHE= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.20 h1:oIaQ1e17CSKaWmUTu62MtraRWVIosn/iONMuZt0gbqc= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.20/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= +github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= +github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/briandowns/spinner v1.23.2 h1:Zc6ecUnI+YzLmJniCfDNaMbW0Wid1d5+qcTq4L2FW8w= +github.com/briandowns/spinner v1.23.2/go.mod h1:LaZeM4wm2Ywy6vO571mvhQNRcWfRUnXOs0RcKV0wYKM= +github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a h1:+uvtaGSLJh0YpLLHCQ9F+UVGy4UOS542hsjj8wBjvH0= +github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a/go.mod h1:txokOny9wavBtq2PWuHmj1P+eFwpCsj+gQeNNANChfU= +github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= +github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb/v3 v3.1.7 h1:2FsIW307kt7A/rz/ZI2lvPO+v3wKazzE4K/0LtTWsOI= +github.com/cheggaaa/pb/v3 v3.1.7/go.mod h1:/Ji89zfVPeC/u5j8ukD0MBPHt2bzTYp74lQ7KlgFWTQ= +github.com/cloudevents/sdk-go/v2 v2.16.0 h1:wnunjgiLQCfYlyo+E4+mFlZtAh7pKn7vT8MMD3lSwCg= +github.com/cloudevents/sdk-go/v2 v2.16.0/go.mod h1:5YWqklyhDSmGzBK/JENKKXdulbPq0JFf3c/KEnMLqgg= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= +github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= +github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8= +github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= +github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= +github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/cli v28.4.0+incompatible h1:RBcf3Kjw2pMtwui5V0DIMdyeab8glEw5QY0UUU4C9kY= +github.com/docker/cli v28.4.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= +github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8= +github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo= +github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= +github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/ebitengine/purego v0.9.1 h1:a/k2f2HQU3Pi399RPW1MOaZyhKJL9w/xFpKAg4q1s0A= +github.com/ebitengine/purego v0.9.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU= +github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= +github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= +github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU= +github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U= +github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo= +github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-containerregistry v0.20.6 h1:cvWX87UxxLgaH76b4hIvya6Dzz9qHB31qAwjAohdSTU= +github.com/google/go-containerregistry v0.20.6/go.mod h1:T0x8MuoAoKX/873bkeSfLD2FAkwCDf9/HZgsFJ02E2Y= +github.com/google/go-github/v74 v74.0.0 h1:yZcddTUn8DPbj11GxnMrNiAnXH14gNs559AsUpNpPgM= +github.com/google/go-github/v74 v74.0.0/go.mod h1:ubn/YdyftV80VPSI26nSJvaEsTOnsjrxG3o9kJhcyak= +github.com/google/go-github/v80 v80.0.0 h1:BTyk3QOHekrk5VF+jIGz1TNEsmeoQG9K/UWaaP+EWQs= +github.com/google/go-github/v80 v80.0.0/go.mod h1:pRo4AIMdHW83HNMGfNysgSAv0vmu+/pkY8nZO9FT9Yo= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= +github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= +github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= +github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= +github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= +github.com/gookit/color v1.5.2 h1:uLnfXcaFjlrDnQDT+NCBcfhrXqYTx/rcCa6xn01Y8yI= +github.com/gookit/color v1.5.2/go.mod h1:w8h4bGiHeeBpvQVePTutdbERIUf3oJE5lZ8HM0UgXyg= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65 h1:81+kWbE1yErFBMjME0I5k3x3kojjKsWtPYHEAutoPow= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65/go.mod h1:WtMzv9T++tfWVea+qB2MXoaqxw33S8bpJslzUike2mQ= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.8.3 h1:gIS+oTNv3kyYAvlUVgMR46MiG0bM0KuSON/KZEvRoRg= +github.com/hashicorp/go-getter v1.8.3/go.mod h1:CUTt9x2bCtJ/sV8ihgrITL3IUE+0BE1j/e4n5P/GIM4= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= +github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 h1:WgfvpuKg42WVLkxNwzfFraXkTXPK36bMqXvMFN67clI= +github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214/go.mod h1:kj6hFWqfwSjFjLnYW5PK1DoxZ4O0uapwHRmd9jhln4E= +github.com/hooklift/iso9660 v1.0.0 h1:GYN0ejrqTl1qtB+g+ics7xxWHp7J2B1zmr25O9EyG3c= +github.com/hooklift/iso9660 v1.0.0/go.mod h1:sOC47ru8lB0DlU0EZ7BJ0KCP5rDqOvx0c/5K5ADm8H0= +github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0 h1:nHoRIX8iXob3Y2kdt9KsjyIb7iApSvb3vgsd93xb5Ow= +github.com/icza/dyno v0.0.0-20230330125955-09f820a8d9c0/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= +github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/juju/clock v1.1.1 h1:NvgHG9DQmOpBevgt6gzkyimdWBooLXDy1cQn89qJzBI= +github.com/juju/clock v1.1.1/go.mod h1:HIBvJ8kiV/n7UHwKuCkdYL4l/MDECztHR2sAvWDxxf0= +github.com/juju/collections v0.0.0-20200605021417-0d0ec82b7271 h1:4R626WTwa7pRYQFiIRLVPepMhm05eZMEx+wIurRnMLc= +github.com/juju/collections v0.0.0-20200605021417-0d0ec82b7271/go.mod h1:5XgO71dV1JClcOJE+4dzdn4HrI5LiyKd7PlVG6eZYhY= +github.com/juju/errors v0.0.0-20220203013757-bd733f3c86b9 h1:EJHbsNpQyupmMeWTq7inn+5L/WZ7JfzCVPJ+DP9McCQ= +github.com/juju/errors v0.0.0-20220203013757-bd733f3c86b9/go.mod h1:TRm7EVGA3mQOqSVcBySRY7a9Y1/gyVhh/WTCnc5sD4U= +github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b h1:FQ7+9fxhyp82ks9vAuyPzG0/vVbWwMwLJ+P6yJI5FN8= +github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b/go.mod h1:HMcgvsgd0Fjj4XXDkbjdmlbI505rUPBs6WBMYg2pXks= +github.com/juju/loggo v1.0.0 h1:Y6ZMQOGR9Aj3BGkiWx7HBbIx6zNwNkxhVNOHU2i1bl0= +github.com/juju/loggo v1.0.0/go.mod h1:NIXFioti1SmKAlKNuUwbMenNdef59IF52+ZzuOmHYkg= +github.com/juju/mgo/v2 v2.0.0-20210302023703-70d5d206e208 h1:/WiCm+Vpj87e4QWuWwPD/bNE9kDrWCLvPBHOQNcG2+A= +github.com/juju/mgo/v2 v2.0.0-20210302023703-70d5d206e208/go.mod h1:0OChplkvPTZ174D2FYZXg4IB9hbEwyHkD+zT+/eK+Fg= +github.com/juju/mutex/v2 v2.0.0 h1:rVmJdOaXGWF8rjcFHBNd4x57/1tks5CgXHx55O55SB0= +github.com/juju/mutex/v2 v2.0.0/go.mod h1:jwCfBs/smYDaeZLqeaCi8CB8M+tOes4yf827HoOEoqk= +github.com/juju/retry v0.0.0-20180821225755-9058e192b216 h1:/eQL7EJQKFHByJe3DeE8Z36yqManj9UY5zppDoQi4FU= +github.com/juju/retry v0.0.0-20180821225755-9058e192b216/go.mod h1:OohPQGsr4pnxwD5YljhQ+TZnuVRYpa5irjugL1Yuif4= +github.com/juju/testing v0.0.0-20220203020004-a0ff61f03494 h1:XEDzpuZb8Ma7vLja3+5hzUqVTvAqm5Y+ygvnDs5iTMM= +github.com/juju/testing v0.0.0-20220203020004-a0ff61f03494/go.mod h1:rUquetT0ALL48LHZhyRGvjjBH8xZaZ8dFClulKK5wK4= +github.com/juju/utils/v3 v3.0.0-20220130232349-cd7ecef0e94a h1:5ZWDCeCF0RaITrZGemzmDFIhjR/MVSvBUqgSyaeTMbE= +github.com/juju/utils/v3 v3.0.0-20220130232349-cd7ecef0e94a/go.mod h1:LzwbbEN7buYjySp4nqnti6c6olSqRXUk6RkbSUUP1n8= +github.com/juju/version/v2 v2.0.0-20211007103408-2e8da085dc23 h1:wtEPbidt1VyHlb8RSztU6ySQj29FLsOQiI9XiJhXDM4= +github.com/juju/version/v2 v2.0.0-20211007103408-2e8da085dc23/go.mod h1:Ljlbryh9sYaUSGXucslAEDf0A2XUSGvDbHJgW8ps6nc= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/minikube-machine/machine v0.0.0-20240815173309-ffb6b643c381 h1:9walvLKjkCrvs9GlFwFO/qvwtZV9O5ujkgqOMAp1nOA= +github.com/minikube-machine/machine v0.0.0-20240815173309-ffb6b643c381/go.mod h1:rC8K+60rTqfkrL3a6X/UZeQgP5Gz1Y5czIkWDZcvBuQ= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= +github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= +github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= +github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= +github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= +github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= +github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= +github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= +github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= +github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= +github.com/olekukonko/tablewriter v1.0.9 h1:XGwRsYLC2bY7bNd93Dk51bcPZksWZmLYuaTHR0FqfL8= +github.com/olekukonko/tablewriter v1.0.9/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= +github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= +github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= +github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4= +github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= +github.com/opencontainers/cgroups v0.0.4 h1:XVj8P/IHVms/j+7eh8ggdkTLAxjz84ZzuFyGoE28DR4= +github.com/opencontainers/cgroups v0.0.4/go.mod h1:s8lktyhlGUqM7OSRL5P7eAW6Wb+kWPNvt4qvVfzA5vs= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= +github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= +github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I= +github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs= +github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc= +github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= +github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= +github.com/sayboras/dockerclient v1.0.0 h1:awHcxOzTP07Gl1SJAhkTCTagyJwgA6f/Az/Z4xMP2yg= +github.com/sayboras/dockerclient v1.0.0/go.mod h1:mUmEoqt0b+uQg57s006FsvL4mybi+N5wINLDBGtaPTY= +github.com/shirou/gopsutil/v4 v4.25.11 h1:X53gB7muL9Gnwwo2evPSE+SfOrltMoR6V3xJAXZILTY= +github.com/shirou/gopsutil/v4 v4.25.11/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= +github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= +github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= +github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= +github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= +github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= +github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= +go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= +go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= +golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= +golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= +golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190529164535-6a60838ec259/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20221017184919-83659145692c/go.mod h1:VTIZ7TEbF0BS9Sv9lPTvGbtW8i4z6GGbJBCM37uMCzY= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= +golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +gonum.org/v1/plot v0.16.0 h1:dK28Qx/Ky4VmPUN/2zeW0ELyM6ucDnBAj5yun7M9n1g= +gonum.org/v1/plot v0.16.0/go.mod h1:Xz6U1yDMi6Ni6aaXILqmVIb6Vro8E+K7Q/GeeH+Pn0c= +google.golang.org/api v0.248.0 h1:hUotakSkcwGdYUqzCRc5yGYsg4wXxpkKlW5ryVqvC1Y= +google.golang.org/api v0.248.0/go.mod h1:yAFUAF56Li7IuIQbTFoLwXTCI6XCFKueOlS7S9e4F9k= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= +google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= +google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c h1:qXWI/sQtv5UKboZ/zUk7h+mrf/lXORyI+n9DKDAusdg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo= +google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= +google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= +google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A= +google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= +gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +k8s.io/api v0.34.3 h1:D12sTP257/jSH2vHV2EDYrb16bS7ULlHpdNdNhEw2S4= +k8s.io/api v0.34.3/go.mod h1:PyVQBF886Q5RSQZOim7DybQjAbVs8g7gwJNhGtY5MBk= +k8s.io/apimachinery v0.34.3 h1:/TB+SFEiQvN9HPldtlWOTp0hWbJ+fjU+wkxysf/aQnE= +k8s.io/apimachinery v0.34.3/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= +k8s.io/cli-runtime v0.34.1 h1:btlgAgTrYd4sk8vJTRG6zVtqBKt9ZMDeQZo2PIzbL7M= +k8s.io/cli-runtime v0.34.1/go.mod h1:aVA65c+f0MZiMUPbseU/M9l1Wo2byeaGwUuQEQVVveE= +k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY= +k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8= +k8s.io/cluster-bootstrap v0.34.3 h1:mLguWldCwTk0GvoWHg6tf6qgpVMDLCSvvtWUoL13RXg= +k8s.io/cluster-bootstrap v0.34.3/go.mod h1:50AJCDVJ8HMmw9W2EN0cHSbTsI9GYtyOM+eyxjVlAwg= +k8s.io/component-base v0.34.1 h1:v7xFgG+ONhytZNFpIz5/kecwD+sUhVE6HU7qQUiRM4A= +k8s.io/component-base v0.34.1/go.mod h1:mknCpLlTSKHzAQJJnnHVKqjxR7gBeHRv0rPXA7gdtQ0= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA= +k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts= +k8s.io/kubectl v0.34.1 h1:1qP1oqT5Xc93K+H8J7ecpBjaz511gan89KO9Vbsh/OI= +k8s.io/kubectl v0.34.1/go.mod h1:JRYlhJpGPyk3dEmJ+BuBiOB9/dAvnrALJEiY/C5qa6A= +k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= +k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= +sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= +sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= +sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= +sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco= +sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= +sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= +sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= diff --git a/hack/help_text/gen_help_text.go b/hack/help_text/gen_help_text.go index 8c8f79bb0442..c5e3ea531e73 100644 --- a/hack/help_text/gen_help_text.go +++ b/hack/help_text/gen_help_text.go @@ -25,17 +25,17 @@ import ( ) func main() { - if err := os.MkdirAll("./out/docs", os.FileMode(0755)); err != nil { + if err := os.MkdirAll("../out/docs", os.FileMode(0755)); err != nil { fmt.Println(err) os.Exit(1) } cmd.RootCmd.DisableAutoGenTag = true - if err := doc.GenMarkdownTree(cmd.RootCmd, "./out/docs"); err != nil { + if err := doc.GenMarkdownTree(cmd.RootCmd, "../out/docs"); err != nil { fmt.Println(err) os.Exit(1) } - f, err := os.Create("./out/docs/bash-completion") + f, err := os.Create("../out/docs/bash-completion") if err != nil { fmt.Println(err) os.Exit(1) diff --git a/hack/jenkins/build/minikube_build_upload_latest.sh b/hack/jenkins/build/minikube_build_upload_latest.sh deleted file mode 100755 index b6b50cc86ce7..000000000000 --- a/hack/jenkins/build/minikube_build_upload_latest.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -# Copyright 2020 The Kubernetes Authors All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# This script builds the minikube binary for all 3 platforms and uploads them. -# The binaries are built on master and uploaded to a latest bucket. - -set -eux -o pipefail - -readonly bucket="minikube/latest" - -# Make sure the right golang version is installed based on Makefile -WANT_GOLANG_VERSION=$(grep '^GO_VERSION' Makefile | awk '{ print $3 }') -./hack/jenkins/installers/check_install_golang.sh $WANT_GOLANG_VERSION /usr/local - - -declare -rx GOPATH=/var/lib/jenkins/go - -GIT_COMMIT_AT_HEAD=$(git rev-parse HEAD | xargs) -MINIKUBE_LATEST_COMMIT=$(gsutil stat gs://minikube/latest/minikube-linux-amd64 | grep commit | awk '{ print $2 }' | xargs) - -if [ "$GIT_COMMIT_AT_HEAD" = "$MINIKUBE_LATEST_COMMIT" ]; then - echo "The current uploaded binary is already latest, skipping build" - exit 0 -fi - -make cross && failed=$? || failed=$? -if [[ "${failed}" -ne 0 ]]; then - echo "build failed" - exit "${failed}" -fi -gsutil cp out/minikube-* "gs://${bucket}" -gsutil setmeta -r -h "x-goog-meta-commit:$GIT_COMMIT_AT_HEAD" "gs://${bucket}" diff --git a/hack/jenkins/build_changelog.sh b/hack/jenkins/build_changelog.sh new file mode 100755 index 000000000000..1c2a56bf87ea --- /dev/null +++ b/hack/jenkins/build_changelog.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Copyright 2022 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This script can take the following env variables +# ARGS: args to pass into the make rule +# OUTPUT_LOCATION = the location to write the changelog file to + +set -x -o pipefail + +if (($# < 1)); then + echo "ERROR: given ! ($#) parameters but expected 1." + echo "USAGE: ./build_changelog.sh OUTPUT_LOCATION" + exit 1 +fi + +OUTPUT_LOCATION=${1} +gh search prs --merged --sort updated --limit 100 --repo kubernetes/minikube --json number,title,closedAt --template '{{range .}}{{tablerow (printf "#%v" .number | autocolor "green") .title (timeago .closedAt)}}{{end}}' > "${OUTPUT_LOCATION}" \ No newline at end of file diff --git a/hack/jenkins/build_iso.sh b/hack/jenkins/build_iso.sh index 2411aec719e8..e94d4acc35be 100755 --- a/hack/jenkins/build_iso.sh +++ b/hack/jenkins/build_iso.sh @@ -24,13 +24,38 @@ set -x -o pipefail # Make sure gh is installed and configured ./hack/jenkins/installers/check_install_gh.sh +# Make sure golang is installed and configured +./hack/jenkins/installers/check_install_golang.sh "/usr/local" + +# install cron jobs +source ./hack/jenkins/installers/check_install_linux_crons.sh + +# Generate changelog for latest github PRs merged +./hack/jenkins/build_changelog.sh deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/CHANGELOG +./hack/jenkins/build_changelog.sh deploy/iso/minikube-iso/board/minikube/x86_64/rootfs-overlay/CHANGELOG + # Make sure all required packages are installed sudo apt-get update -sudo apt-get -y install build-essential unzip rsync bc python2 p7zip-full +sudo apt-get -y install build-essential unzip rsync bc python3 p7zip-full + +# Let's make sure we have the newest ISO reference +curl -L https://github.com/kubernetes/minikube/raw/master/Makefile --output Makefile-head +# ISO tags are of the form VERSION-TIMESTAMP-PR, so this grep finds that TIMESTAMP in the middle +# if it doesn't exist, it will just return VERSION, which is covered in the if statement below +HEAD_ISO_TIMESTAMP=$(grep -E "ISO_VERSION \?= " Makefile-head | cut -d \" -f 2 | cut -d "-" -f 2) +CURRENT_ISO_TS=$(grep -E "ISO_VERSION \?= " Makefile | cut -d \" -f 2 | cut -d "-" -f 2) +if [[ $HEAD_ISO_TIMESTAMP != v* ]]; then + diff=$((CURRENT_ISO_TS-HEAD_ISO_TIMESTAMP)) + if [[ $CURRENT_ISO_TS == v* ]] || [ $diff -lt 0 ]; then + gh pr comment ${ghprbPullId} --body "Hi ${ghprbPullAuthorLoginMention}, your ISO info is out of date. Please rebase." + exit 1 + fi +fi +rm Makefile-head if [[ -z $ISO_VERSION ]]; then release=false - IV=$(egrep "ISO_VERSION \?=" Makefile | cut -d " " -f 3 | cut -d "-" -f 1) + IV=$(grep -E "ISO_VERSION \?=" Makefile | cut -d " " -f 3 | cut -d "-" -f 1) now=$(date +%s) export ISO_VERSION=$IV-$now-$ghprbPullId export ISO_BUCKET=minikube-builds/iso/$ghprbPullId @@ -40,16 +65,21 @@ else export ISO_BUCKET fi -make release-iso | tee iso-logs.txt -# Abort with error message if above command failed -ec=$? -if [ $ec -gt 0 ]; then - if [ "$release" = false ]; then - gh pr comment ${ghprbPullId} --body "Hi ${ghprbPullAuthorLoginMention}, building a new ISO failed. - See the logs at: https://storage.cloud.google.com/minikube-builds/logs/${ghprbPullId}/iso-${BUILD_NUMBER}/iso_build.txt - " - fi - exit $ec +if ! make release-iso 2>&1 | tee iso-logs.txt; then + # Exit of `make` (PIPESTATUS[0]); fallback to 1 if unavailable + ec=${PIPESTATUS[0]:-1} + + # Only comment on non-release; default release=false if unset + if [[ ${release:-false} != "true" ]]; then + body=$(cat << EOF +Hi ${ghprbPullAuthorLoginMention}, building a new ISO failed for Commit ${ghprbActualCommit} +See the logs at: +https://storage.cloud.google.com/minikube-builds/logs/${ghprbPullId}/${ghprbActualCommit::7}/iso_build.txt +EOF +) + gh pr comment "${ghprbPullId}" --body "$body" + fi + exit "$ec" fi git config user.name "minikube-bot" @@ -89,9 +119,9 @@ else make generate-docs git add Makefile pkg/minikube/download/iso.go site/content/en/docs/commands/start.md - git commit -m "Update ISO to ${ISO_VERSION}" + git commit -m "Release: Update ISO to ${ISO_VERSION}" git remote add minikube-bot git@github.com:minikube-bot/minikube.git git push -f minikube-bot ${branch} - gh pr create --fill --base master --head minikube-bot:${branch} -fi + gh pr create --fill --base master --head minikube-bot:${branch} -l "ok-to-test" +fi diff --git a/hack/jenkins/cloud_shell_functional_tests_docker.sh b/hack/jenkins/cloud_shell_functional_tests_docker.sh index 70c937fd2322..79ed8ba4fb55 100755 --- a/hack/jenkins/cloud_shell_functional_tests_docker.sh +++ b/hack/jenkins/cloud_shell_functional_tests_docker.sh @@ -20,25 +20,31 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. -set -ex +set -x gcloud cloud-shell ssh --authorize-session << EOF + sudo rm -rf .cache .kube out testdata go OS="linux" ARCH="amd64" DRIVER="docker" JOB_NAME="Docker_Cloud_Shell" CONTAINER_RUNTIME="docker" - EXTRA_TEST_ARGS="-test.run (TestFunctional|TestAddons)" + EXTRA_TEST_ARGS="-test.run (TestFunctional|TestAddons|TestStartStop)" # Need to set these in cloud-shell or will not be present in common.sh - MINIKUBE_LOCATION=$MINIKUBE_LOCATION - COMMIT=$COMMIT - EXTRA_BUILD_ARGS=$EXTRA_BUILD_ARGS - access_token=$access_token + MINIKUBE_LOCATION="$MINIKUBE_LOCATION" + COMMIT="$COMMIT" + EXTRA_BUILD_ARGS="$EXTRA_BUILD_ARGS" + access_token="$access_token" + ROOT_JOB_ID="$ROOT_JOB_ID" + GOPOGH_DB_BACKEND="$GOPOGH_DB_BACKEND" + GOPOGH_DB_HOST="$GOPOGH_DB_HOST" + GOPOGH_DB_PATH="$GOPOGH_DB_PATH" # Prevent cloud-shell is ephemeral warnings on apt-get + mkdir ~/.cloudshell touch ~/.cloudshell/no-apt-get-warning gsutil -m cp -r gs://minikube-builds/${MINIKUBE_LOCATION}/installers . @@ -47,3 +53,14 @@ gcloud cloud-shell ssh --authorize-session << EOF chmod +x ./common.sh source ./common.sh EOF + +code=$? +if [ $code -gt 0 ]; then + curl -L -u minikube-bot:${access_token} \ + "https://api.github.com/repos/kubernetes/minikube/statuses/${COMMIT}" \ + -H "Content-Type: application/json" \ + -X POST \ + -d "{\"state\": \"failure\", \"description\": \"Jenkins: Cloud Shell failed to start\", \"target_url\": \"https://storage.googleapis.com/minikube-builds/logs/${MINIKUBE_LOCATION}/${ROOT_JOB_ID}/Docker_Cloud_Shell.html\", \"context\": \"Docker_Cloud_Shell\"}" +fi + +exit $code diff --git a/hack/jenkins/common.ps1 b/hack/jenkins/common.ps1 index 108a6f30b1f9..e150222a1906 100644 --- a/hack/jenkins/common.ps1 +++ b/hack/jenkins/common.ps1 @@ -12,19 +12,69 @@ # See the License for the specific language governing permissions and # limitations under the License. -mkdir -p out +# A utility to write commit statuses to github, since authenticating is complicated now +function Write-GithubStatus { + param ( + $JsonBody + ) + # Manually build basic authorization headers, ugh + $creds = "minikube-bot:$($env:access_token)" + $encoded = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($creds)) + $auth = "Basic $encoded" + $headers = @{ + Authorization = $auth + } + Invoke-WebRequest -Uri "https://api.github.com/repos/kubernetes/minikube/statuses/$env:COMMIT" -Headers $headers -Body $JsonBody -ContentType "application/json" -Method Post -usebasicparsing +} + +# cleanup possible leftovers from previous run +rm -r -Force test_reports +rm -Force testout* -(New-Object Net.WebClient).DownloadFile("https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh.exe", "C:\Go\bin\gopogh.exe") -(New-Object Net.WebClient).DownloadFile("https://github.com/gotestyourself/gotestsum/releases/download/v1.6.4/gotestsum_1.6.4_windows_amd64.tar.gz", "$env:TEMP\gotestsum.tar.gz") -tar --directory "C:\Go\bin\" -xzvf "$env:TEMP\gotestsum.tar.gz" "gotestsum.exe" +$env:SHORT_COMMIT=$env:COMMIT.substring(0, 7) +$gcs_bucket="minikube-builds/logs/$env:MINIKUBE_LOCATION/$env:ROOT_JOB_ID" +$env:MINIKUBE_SUPPRESS_DOCKER_PERFORMANCE="true" +$ProgressPreference = 'SilentlyContinue' +# Docker's kubectl breaks things, and comes earlier in the path than the regular kubectl. So download the expected kubectl and replace Docker's version. +$KubeVersion = (Invoke-WebRequest -Uri 'https://dl.k8s.io/release/stable.txt' -UseBasicParsing).Content +(New-Object Net.WebClient).DownloadFile("https://dl.k8s.io/release/$KubeVersion/bin/windows/amd64/kubectl.exe", "C:\Program Files\Docker\Docker\resources\bin\kubectl.exe") + +# Setup the cleanup and reboot cron +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_cleanup_and_reboot.ps1 C:\jenkins +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_cleanup_cron.ps1 out/ +./out/windows_cleanup_cron.ps1 + +# Grab all the scripts we'll need for integration tests gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/minikube-windows-amd64.exe out/ gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/e2e-windows-amd64.exe out/ gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/testdata . gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_integration_setup.ps1 out/ gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/windows_integration_teardown.ps1 out/ -./out/minikube-windows-amd64.exe delete --all +# Make sure Docker is up and running +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/setup_docker_desktop_windows.ps1 out/ +./out/setup_docker_desktop_windows.ps1 +If ($lastexitcode -gt 0) { + echo "Docker failed to start, exiting." + $json = "{`"state`": `"failure`", `"description`": `"Jenkins: docker failed to start`", `"target_url`": `"https://storage.googleapis.com/$gcs_bucket/$env:JOB_NAME.txt`", `"context`": `"$env:JOB_NAME`"}" + Write-GithubStatus -JsonBody $json + ./out/windows_integration_teardown.ps1 + Exit $lastexitcode +} +docker system prune -a --volumes -f + +# install/update Go if required +gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/installers/check_install_golang.ps1 out/ +./out/check_install_golang.ps1 + +# Download gopogh and gotestsum +go install github.com/medyagh/gopogh/cmd/gopogh@v0.29.0 +go install gotest.tools/gotestsum@v1.13.0 +# temporary: remove the old install of gopogh & gotestsum as it's taking priority over our current install, preventing updating +if (Test-Path "C:\Go") { + Remove-Item "C:\Go" -Recurse -Force +} ./out/windows_integration_setup.ps1 @@ -56,25 +106,34 @@ $failures=echo $gopogh_status | jq '.NumberOfFail' $tests=echo $gopogh_status | jq '.NumberOfTests' $bad_status="$failures / $tests failures" -$description="$status in $elapsed minute(s)." +$description="$status in $elapsed minutes." If($env:status -eq "failure") { - $description="completed with $bad_status in $elapsed minute(s)." + $description="completed with $bad_status in $elapsed minutes." } echo $description -$env:SHORT_COMMIT=$env:COMMIT.substring(0, 7) -$gcs_bucket="minikube-builds/logs/$env:MINIKUBE_LOCATION/$env:ROOT_JOB_ID" #Upload logs to gcs -gsutil -qm cp testout.txt gs://$gcs_bucket/${env:JOB_NAME}out.txt -gsutil -qm cp testout.json gs://$gcs_bucket/${env:JOB_NAME}.json -gsutil -qm cp testout.html gs://$gcs_bucket/${env:JOB_NAME}.html -gsutil -qm cp testout_summary.json gs://$gcs_bucket/${env:JOB_NAME}_summary.json +If($env:EXTERNAL -eq "yes"){ + # If we're not already in GCP, we won't have credentials to upload to GCS + # Instead, move logs to a predictable spot Jenkins can find and upload itself + mkdir -p test_reports + cp testout.txt test_reports/out.txt + cp testout.json test_reports/out.json + cp testout.html test_reports/out.html + cp testout_summary.json test_reports/summary.json +} Else { + gsutil -qm cp testout.txt gs://$gcs_bucket/${env:JOB_NAME}out.txt + gsutil -qm cp testout.json gs://$gcs_bucket/${env:JOB_NAME}.json + gsutil -qm cp testout.html gs://$gcs_bucket/${env:JOB_NAME}.html + gsutil -qm cp testout_summary.json gs://$gcs_bucket/${env:JOB_NAME}_summary.json +} $env:target_url="https://storage.googleapis.com/$gcs_bucket/$env:JOB_NAME.html" + # Update the PR with the new info -$json = "{`"state`": `"$env:status`", `"description`": `"Jenkins: $description`", `"target_url`": `"$env:target_url`", `"context`": `"${env:JOB_NAME}`"}" -Invoke-WebRequest -Uri "https://api.github.com/repos/kubernetes/minikube/statuses/$env:COMMIT`?access_token=$env:access_token" -Body $json -ContentType "application/json" -Method Post -usebasicparsing +$json = "{`"state`": `"$env:status`", `"description`": `"Jenkins: $description`", `"target_url`": `"$env:target_url`", `"context`": `"$env:JOB_NAME`"}" +Write-GithubStatus -JsonBody $json ./out/windows_integration_teardown.ps1 diff --git a/hack/jenkins/common.sh b/hack/jenkins/common.sh index 2c795da101c7..9fb62fd41298 100755 --- a/hack/jenkins/common.sh +++ b/hack/jenkins/common.sh @@ -26,13 +26,16 @@ # EXTRA_TEST_ARGS: additional flags to pass into go test # JOB_NAME: the name of the logfile and check name to update on github +set -x + readonly OS_ARCH="${OS}-${ARCH}" readonly TEST_ROOT="${HOME}/minikube-integration" -readonly TEST_HOME="${TEST_ROOT}/${OS_ARCH}-${DRIVER}-${CONTAINER_RUNTIME}-${MINIKUBE_LOCATION}-$$-${COMMIT}" +readonly TEST_HOME="${TEST_ROOT}/${MINIKUBE_LOCATION}-$$" export GOPATH="$HOME/go" export KUBECONFIG="${TEST_HOME}/kubeconfig" export PATH=$PATH:"/usr/local/bin/:/usr/local/go/bin/:$GOPATH/bin" +export MINIKUBE_SUPPRESS_DOCKER_PERFORMANCE=true readonly TIMEOUT=${1:-120m} @@ -76,22 +79,33 @@ function retry_github_status() { } if [ "$(uname)" = "Darwin" ]; then + if [ "$ARCH" = "arm64" ]; then + export PATH=$PATH:/opt/homebrew/bin + fi + if ! bash setup_docker_desktop_macos.sh; then retry_github_status "${COMMIT}" "${JOB_NAME}" "failure" "${access_token}" "${public_log_url}" "Jenkins: docker failed to start" exit 1 fi fi +## set sysctl params for inotify, to avoid "too many open files" errors +## ref: https://cloud.google.com/kubernetes-engine/distributed-cloud/bare-metal/docs/installing/configure-os/ubuntu +if [ "$OS" == "linux" ]; then + sudo sysctl -w fs.inotify.max_user_instances=8192 + sudo sysctl -w fs.inotify.max_user_watches=524288 +fi + # We need pstree for the restart cronjobs if [ "$(uname)" != "Darwin" ]; then - sudo apt-get -y install lsof psmisc + sudo apt-get -y install lsof psmisc dnsutils else brew install pstree coreutils pidof ln -s /usr/local/bin/gtimeout /usr/local/bin/timeout || true fi -# installing golang so we could do go get for gopogh -./installers/check_install_golang.sh "1.16.7" "/usr/local" || true +# installing golang so we can go install gopogh +./installers/check_install_golang.sh "/usr/local" || true # install docker and kubectl if not present sudo ARCH="$ARCH" ./installers/check_install_docker.sh || true @@ -99,10 +113,18 @@ sudo ARCH="$ARCH" ./installers/check_install_docker.sh || true # install gotestsum if not present GOROOT="/usr/local/go" ./installers/check_install_gotestsum.sh || true +# install cron jobs +if [ "$OS" == "linux" ]; then + source ./installers/check_install_linux_crons.sh +else + source ./installers/check_install_osx_crons.sh +fi + # let's just clean all docker artifacts up -docker system prune --force --volumes || true +docker system prune -a --volumes -f || true docker system df || true - +# read only token, never expires +docker login -u minikubebot -p "$DOCKERHUB_READONLY_TOKEN" echo ">> Starting at $(date)" echo "" echo "arch: ${OS_ARCH}" @@ -111,7 +133,6 @@ echo "driver: ${DRIVER}" echo "runtime: ${CONTAINER_RUNTIME}" echo "job: ${JOB_NAME}" echo "test home: ${TEST_HOME}" -echo "sudo: ${SUDO_PREFIX}" echo "kernel: $(uname -v)" echo "uptime: $(uptime)" # Setting KUBECONFIG prevents the version check from erroring out due to permission issues @@ -128,6 +149,12 @@ case "${DRIVER}" in virtualbox) echo "vbox: $(vboxmanage --version)" ;; + vfkit) + echo "vfkit: $(vfkit --version)" + ;; + krunkit) + echo "krunkit: $(krunkit --version)" + ;; esac echo "" @@ -149,18 +176,17 @@ echo echo ">> Downloading test inputs from ${MINIKUBE_LOCATION} ..." gsutil -qm cp \ "gs://minikube-builds/${MINIKUBE_LOCATION}/minikube-${OS_ARCH}" \ - "gs://minikube-builds/${MINIKUBE_LOCATION}/docker-machine-driver"-* \ - "gs://minikube-builds/${MINIKUBE_LOCATION}/e2e-${OS_ARCH}" out + "gs://minikube-builds/${MINIKUBE_LOCATION}/e2e-${OS_ARCH}" \ + out gsutil -qm cp -r "gs://minikube-builds/${MINIKUBE_LOCATION}/testdata"/* testdata/ gsutil -qm cp "gs://minikube-builds/${MINIKUBE_LOCATION}/gvisor-addon" testdata/ - # Set the executable bit on the e2e binary and out binary export MINIKUBE_BIN="out/minikube-${OS_ARCH}" export E2E_BIN="out/e2e-${OS_ARCH}" -chmod +x "${MINIKUBE_BIN}" "${E2E_BIN}" out/docker-machine-driver-* +chmod +x "${MINIKUBE_BIN}" "${E2E_BIN}" "${MINIKUBE_BIN}" version procs=$(pgrep "minikube-${OS_ARCH}|e2e-${OS_ARCH}" || true) @@ -259,14 +285,22 @@ function cleanup_procs() { # cleaning up stale hyperkits if type -P hyperkit; then for pid in $(pgrep hyperkit); do + info=$(ps -f -p "$pid") + if [[ $info == *"com.docker.hyperkit"* ]]; then + continue + fi echo "Killing stale hyperkit $pid" - ps -f -p $pid || true - kill $pid || true - kill -9 $pid || true + echo "$info" || true + kill "$pid" || true + kill -9 "$pid" || true done fi if [[ "${DRIVER}" == "hyperkit" ]]; then + # even though Internet Sharing is disabled in the UI settings, it's still preventing HyperKit from starting + # the error is "Could not create vmnet interface, permission denied or no entitlement?" + # I've discovered that if you kill the "InternetSharing" process that this resolves the error and HyperKit starts normally + sudo pkill InternetSharing if [[ -e out/docker-machine-driver-hyperkit ]]; then sudo chown root:wheel out/docker-machine-driver-hyperkit || true sudo chmod u+s out/docker-machine-driver-hyperkit || true @@ -277,7 +311,7 @@ function cleanup_procs() { if [[ "${kprocs}" != "" ]]; then echo "error: killing hung kubectl processes ..." ps -f -p ${kprocs} || true - sudo -E kill ${kprocs} || true + kill ${kprocs} || true fi @@ -287,10 +321,10 @@ function cleanup_procs() { echo "Found stale api servers listening on 8443 processes to kill: " for p in $none_procs do - echo "Kiling stale none driver: $p" - sudo -E ps -f -p $p || true - sudo -E kill $p || true - sudo -E kill -9 $p || true + echo "Killing stale none driver: $p" + ps -f -p $p || true + kill $p || true + kill -9 $p || true done fi } @@ -326,7 +360,7 @@ if [ "$(uname)" != "Darwin" ]; then docker build -t gcr.io/k8s-minikube/gvisor-addon:2 -f testdata/gvisor-addon-Dockerfile ./testdata fi -readonly LOAD=$(uptime | egrep -o "load average.*: [0-9]+" | cut -d" " -f3) +readonly LOAD=$(uptime | grep -E -o "load average.*: [0-9]+" | cut -d" " -f3) if [[ "${LOAD}" -gt 2 ]]; then echo "" echo "********************** LOAD WARNING ********************************" @@ -371,7 +405,7 @@ touch "${JSON_OUT}" gotestsum --jsonfile "${JSON_OUT}" -f standard-verbose --raw-command -- \ go tool test2json -t \ - ${SUDO_PREFIX}${E2E_BIN} \ + ${E2E_BIN} \ -minikube-start-args="--driver=${DRIVER} ${EXTRA_START_ARGS}" \ -test.timeout=${TIMEOUT} -test.v \ ${EXTRA_TEST_ARGS} \ @@ -399,8 +433,13 @@ sec=$(tail -c 3 <<< $((${elapsed}00/60))) elapsed=$min.$sec if ! type "jq" > /dev/null; then -echo ">> Installing jq" - if [ "${OS}" != "darwin" ]; then + echo ">> Installing jq" + if [ "${ARCH}" == "arm64" && "${OS}" == "linux" ]; then + sudo apt-get install jq -y + elif [ "${ARCH}" == "arm64" ]; then + echo "Unable to install 'jq' automatically for arm64 on Darwin, please install 'jq' manually." + exit 5 + elif [ "${OS}" != "darwin" ]; then curl -LO https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 && sudo install jq-linux64 /usr/local/bin/jq else curl -LO https://github.com/stedolan/jq/releases/download/jq-1.6/jq-osx-amd64 && sudo install jq-osx-amd64 /usr/local/bin/jq @@ -408,9 +447,7 @@ echo ">> Installing jq" fi echo ">> Installing gopogh" -curl -LO "https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-${OS_ARCH}" -sudo install "gopogh-${OS_ARCH}" /usr/local/bin/gopogh - +./installers/check_install_gopogh.sh echo ">> Running gopogh" if test -f "${HTML_OUT}"; then @@ -419,13 +456,24 @@ fi touch "${HTML_OUT}" touch "${SUMMARY_OUT}" -gopogh_status=$(gopogh -in "${JSON_OUT}" -out_html "${HTML_OUT}" -out_summary "${SUMMARY_OUT}" -name "${JOB_NAME}" -pr "${MINIKUBE_LOCATION}" -repo github.com/kubernetes/minikube/ -details "${COMMIT}:$(date +%Y-%m-%d):${ROOT_JOB_ID}") || true +echo "EXTERNAL: *$EXTERNAL*" +echo "MINIKUBE_LOCATION: *$MINIKUBE_LOCATION*" +if [ "$EXTERNAL" != "yes" ] && [ "$MINIKUBE_LOCATION" = "master" ] +then + echo "Saving to DB" + gopogh -in "${JSON_OUT}" -out_html "${HTML_OUT}" -out_summary "${SUMMARY_OUT}" -name "${JOB_NAME}" -pr "${MINIKUBE_LOCATION}" -repo github.com/kubernetes/minikube/ -details "${COMMIT}:$(date +%Y-%m-%d):${ROOT_JOB_ID}" -db_backend "${GOPOGH_DB_BACKEND}" -db_host "${GOPOGH_DB_HOST}" -db_path "${GOPOGH_DB_PATH}" -use_cloudsql -use_iam_auth + echo "Exit code: $?" +else + echo "Not saving to DB" + gopogh -in "${JSON_OUT}" -out_html "${HTML_OUT}" -out_summary "${SUMMARY_OUT}" -name "${JOB_NAME}" -pr "${MINIKUBE_LOCATION}" -repo github.com/kubernetes/minikube/ -details "${COMMIT}:$(date +%Y-%m-%d):${ROOT_JOB_ID}" +fi +gopogh_status=$(cat "${SUMMARY_OUT}") fail_num=$(echo $gopogh_status | jq '.NumberOfFail') test_num=$(echo $gopogh_status | jq '.NumberOfTests') pessimistic_status="${fail_num} / ${test_num} failures" -description="completed with ${status} in ${elapsed} minute(s)." +description="completed with ${status} in ${elapsed} minutes." if [ "$status" = "failure" ]; then - description="completed with ${pessimistic_status} in ${elapsed} minute(s)." + description="completed with ${pessimistic_status} in ${elapsed} minutes." fi echo "$description" @@ -451,26 +499,27 @@ if [ -z "${EXTERNAL}" ]; then echo ">> uploading ${SUMMARY_OUT} to gs://${JOB_GCS_BUCKET}_summary.json" echo ">> public URL: ${REPORT_URL_BASE}/${JOB_GCS_BUCKET}_summary.json" gsutil -qm cp "${SUMMARY_OUT}" "gs://${JOB_GCS_BUCKET}_summary.json" || true -else +else # Otherwise, put the results in a predictable spot so the upload job can find them REPORTS_PATH=test_reports mkdir -p "$REPORTS_PATH" cp "${TEST_OUT}" "$REPORTS_PATH/out.txt" cp "${JSON_OUT}" "$REPORTS_PATH/out.json" cp "${HTML_OUT}" "$REPORTS_PATH/out.html" - cp "${SUMMARY_OUT}" "$REPORTS_PATH/summary.txt" + cp "${SUMMARY_OUT}" "$REPORTS_PATH/summary.json" fi echo ">> Cleaning up after ourselves ..." -timeout 3m ${SUDO_PREFIX}${MINIKUBE_BIN} tunnel --cleanup || true -timeout 5m ${SUDO_PREFIX}${MINIKUBE_BIN} delete --all --purge >/dev/null 2>/dev/null || true +timeout 3m ${MINIKUBE_BIN} tunnel --cleanup || true +timeout 5m ${MINIKUBE_BIN} delete --all --purge >/dev/null 2>/dev/null || true cleanup_stale_routes || true -${SUDO_PREFIX} rm -Rf "${MINIKUBE_HOME}" || true -${SUDO_PREFIX} rm -f "${KUBECONFIG}" || true -${SUDO_PREFIX} rm -f "${TEST_OUT}" || true -${SUDO_PREFIX} rm -f "${JSON_OUT}" || true -${SUDO_PREFIX} rm -f "${HTML_OUT}" || true +rm -Rf "${MINIKUBE_HOME}" || true +rm -f "${KUBECONFIG}" || true +rm -f "${TEST_OUT}" || true +rm -f "${JSON_OUT}" || true +rm -f "${HTML_OUT}" || true +rm -f "${SUMMARY_OUT}" || true rmdir "${TEST_HOME}" || true echo ">> ${TEST_HOME} completed at $(date)" diff --git a/hack/jenkins/cron/cleanup_and_reboot_Darwin.sh b/hack/jenkins/cron/cleanup_and_reboot_Darwin.sh index 75c7dfedb456..9b5b1f5cd6a3 100755 --- a/hack/jenkins/cron/cleanup_and_reboot_Darwin.sh +++ b/hack/jenkins/cron/cleanup_and_reboot_Darwin.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # Copyright 2019 The Kubernetes Authors All rights reserved. # @@ -18,19 +18,25 @@ set -uf -o pipefail PATH=/usr/local/bin:/sbin:/usr/local/sbin:$PATH +if [ "$(uname -p)" = "arm" ]; then + PATH=$PATH:/opt/homebrew/bin +fi # cleanup shared between Linux and macOS function check_jenkins() { jenkins_pid="$(pidof java)" - if [[ "${jenkins_pid}" = "" ]]; then + if [ "${jenkins_pid}" = "" ]; then return fi pstree "${jenkins_pid}" \ - | egrep -i 'bash|integration|e2e|minikube' \ + | grep -E -i 'bash|integration|e2e|minikube' \ && echo "tests are is running on pid ${jenkins_pid} ..." \ && exit 1 } +brew upgrade +gcloud components update -q + check_jenkins logger "cleanup_and_reboot running - may shutdown in 60 seconds" echo "cleanup_and_reboot running - may shutdown in 60 seconds" | wall @@ -42,7 +48,7 @@ logger "cleanup_and_reboot is happening!" killall java # clean docker left overs -docker rm -f -v $(docker ps -aq) >/dev/null 2>&1 || true +docker rm -f -v "$(docker ps -aq)" >/dev/null 2>&1 || true docker volume prune -f || true docker volume ls || true docker system df || true diff --git a/hack/jenkins/cron/cleanup_and_reboot_Linux.sh b/hack/jenkins/cron/cleanup_and_reboot_Linux.sh index 87c719f99c7a..8d763a4b01bf 100755 --- a/hack/jenkins/cron/cleanup_and_reboot_Linux.sh +++ b/hack/jenkins/cron/cleanup_and_reboot_Linux.sh @@ -21,8 +21,8 @@ function check_jenkins() { return fi pstree "${jenkins_pid}" \ - | egrep -i 'bash|integration|e2e|minikube' \ - && echo "tests are is running on pid ${jenkins_pid} ..." \ + | grep -E -i 'bash|integration|e2e|minikube' \ + && echo "tests are running on pid ${jenkins_pid} ..." \ && exit 1 } @@ -51,11 +51,16 @@ function cleanup() { fi fi sudo killall --user "${user}" minikube >/dev/null 2>&1 || true + # clear the known_host file (~/.ssh/known_hosts) + if test -f /home/${user}/.ssh/known_hosts; then + sudo echo "" > /home/${user}/.ssh/known_hosts + ssh-keyscan github.com >> /home/${user}/.ssh/known_hosts + fi done # clean docker left overs echo -e "\ncleanup docker..." docker kill $(docker ps -aq) >/dev/null 2>&1 || true - docker system prune --volumes --force || true + docker system prune -a --volumes -f || true # clean KVM left overs echo -e "\ncleanup kvm..." @@ -111,13 +116,11 @@ function cleanup() { done echo -e "\nafter the cleanup:" overview - - # clean up /tmp - find /tmp -name . -o -prune -exec rm -rf -- {} + >/dev/null 2>&1 || true } # Give 15m for Linux-specific cleanup -timeout 15m cleanup +export -f cleanup +timeout 15m bash -c cleanup # disable localkube, kubelet systemctl list-unit-files --state=enabled \ @@ -126,4 +129,7 @@ systemctl list-unit-files --state=enabled \ | xargs systemctl disable # update and reboot -apt update -y && apt upgrade -y && apt-get autoclean && reboot +check_jenkins +apt update -y && apt upgrade -y && apt-get autoclean +check_jenkins +reboot diff --git a/hack/jenkins/cron/cleanup_go_modules.sh b/hack/jenkins/cron/cleanup_go_modules.sh new file mode 100755 index 000000000000..38f7a07b0649 --- /dev/null +++ b/hack/jenkins/cron/cleanup_go_modules.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Copyright 2022 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +go clean -modcache diff --git a/hack/jenkins/installers/check_install_cni_plugins.sh b/hack/jenkins/installers/check_install_cni_plugins.sh new file mode 100755 index 000000000000..0609bdb14d06 --- /dev/null +++ b/hack/jenkins/installers/check_install_cni_plugins.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Copyright 2023 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eux -o pipefail + +CNI_PLUGIN_VERSION="v1.8.0" +CNI_PLUGIN_TAR="cni-plugins-linux-amd64-$CNI_PLUGIN_VERSION.tgz" +CNI_PLUGIN_INSTALL_DIR="/opt/cni/bin" + +curl -qL -O "https://github.com/containernetworking/plugins/releases/download/$CNI_PLUGIN_VERSION/$CNI_PLUGIN_TAR" +sudo rm -rf "$CNI_PLUGIN_INSTALL_DIR" +sudo mkdir -p "$CNI_PLUGIN_INSTALL_DIR" +sudo tar -xf "$CNI_PLUGIN_TAR" -C "$CNI_PLUGIN_INSTALL_DIR" +rm "$CNI_PLUGIN_TAR" diff --git a/hack/jenkins/installers/check_install_docker.sh b/hack/jenkins/installers/check_install_docker.sh index 23acba7304ee..f6cc2849f2ed 100755 --- a/hack/jenkins/installers/check_install_docker.sh +++ b/hack/jenkins/installers/check_install_docker.sh @@ -30,5 +30,5 @@ rm get-docker.sh sudo adduser jenkins docker || true echo "Installing latest kubectl" -curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/${ARCH}/kubectl" +curl -LO "https://dl.k8s.io/release/$(curl -sL https://dl.k8s.io/release/stable.txt)/bin/linux/${ARCH}/kubectl" sudo install ./kubectl /usr/local/bin/kubectl diff --git a/hack/jenkins/installers/check_install_gh.sh b/hack/jenkins/installers/check_install_gh.sh index c2e8232fdc71..9275287ef6e6 100755 --- a/hack/jenkins/installers/check_install_gh.sh +++ b/hack/jenkins/installers/check_install_gh.sh @@ -16,12 +16,14 @@ set -eux -o pipefail +GH_VERSION="2.83.2" + echo "Installing latest version of gh" -curl -qLO "https://github.com/cli/cli/releases/download/v1.6.2/gh_1.6.2_linux_amd64.tar.gz" -tar -xf gh_1.6.2_linux_amd64.tar.gz && -sudo mv gh_1.6.2_linux_amd64/bin/gh /usr/local/bin/gh -rm gh_1.6.2_linux_amd64.tar.gz -rm -rf gh_1.6.2_linux_amd64 +curl -qLO "https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_amd64.tar.gz" +tar -xf "gh_${GH_VERSION}_linux_amd64.tar.gz" && +sudo mv "gh_${GH_VERSION}_linux_amd64/bin/gh" /usr/local/bin/gh +rm "gh_${GH_VERSION}_linux_amd64.tar.gz" +rm -rf "gh_${GH_VERSION}_linux_amd64" echo "Authorizing bot with gh" echo "${access_token}" | gh auth login --with-token diff --git a/hack/jenkins/installers/check_install_github_release.sh b/hack/jenkins/installers/check_install_github_release.sh new file mode 100755 index 000000000000..b03398c818c8 --- /dev/null +++ b/hack/jenkins/installers/check_install_github_release.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Copyright 2021 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eux -o pipefail + +echo "Installing latest version of github-release" +go install github.com/github-release/github-release@latest diff --git a/hack/jenkins/installers/check_install_golang.ps1 b/hack/jenkins/installers/check_install_golang.ps1 new file mode 100644 index 000000000000..99ae1448c473 --- /dev/null +++ b/hack/jenkins/installers/check_install_golang.ps1 @@ -0,0 +1,44 @@ +# Copyright 2023 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +function AddToPathIfMissing { + param ( + [string]$pathToAdd, + [string]$scope + ) + $Path = [Environment]::GetEnvironmentVariable("Path", $scope) + if ($Path -NotLike "*$pathToAdd*" ) { + $Path = $Path + ";" + $pathToAdd + [Environment]::SetEnvironmentVariable("Path", $Path, $scope) + # refresh the terminals Path + $env:Path = [Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [Environment]::GetEnvironmentVariable("Path", "User") + } +} + +# ensure Go is in Path +AddToPathIfMissing -pathToAdd "C:\Program Files\Go\bin" -scope "Machine" +AddToPathIfMissing -pathToAdd "$HOME\go\bin" -scope "User" + +# Download Go +$GoVersion = "1.25.5" +$CurrentGo = go version +if ((!$?) -or ($CurrentGo -NotLike "*$GoVersion*")) { + (New-Object Net.WebClient).DownloadFile("https://go.dev/dl/go$GoVersion.windows-amd64.zip", "$env:TEMP\golang.zip") + Remove-Item "c:\Program Files\Go\*" -Recurse + Add-Type -Assembly "System.IO.Compression.Filesystem" + [System.IO.Compression.ZipFile]::ExtractToDirectory("$env:TEMP\golang.zip", "$env:TEMP\golang") + Copy-Item -Path "$env:TEMP\golang\go\*" -Destination "c:\Program Files\Go\" -Recurse + Remove-Item "$env:TEMP\golang" -Recurse + Remove-Item "$env:TEMP\golang.zip" +} diff --git a/hack/jenkins/installers/check_install_golang.sh b/hack/jenkins/installers/check_install_golang.sh index 4ee97d5b1c24..39b415444da7 100755 --- a/hack/jenkins/installers/check_install_golang.sh +++ b/hack/jenkins/installers/check_install_golang.sh @@ -16,21 +16,21 @@ set -eux -o pipefail -if (($# < 2)); then - echo "ERROR: given ! ($#) number of parameters but expect 2." - echo "USAGE: ./check_install_golang.sh VERSION_TO_INSTALL INSTALL_PATH" +if (($# < 1)); then + echo "ERROR: given ! ($#) parameters but expected 1." + echo "USAGE: ./check_install_golang.sh INSTALL_PATH" exit 1 fi -VERSION_TO_INSTALL=${1} -INSTALL_PATH=${2} +VERSION_TO_INSTALL=1.25.5 +INSTALL_PATH=${1} function current_arch() { case $(arch) in - "x86_64") + "x86_64" | "i386") echo "amd64" ;; - "aarch64") + "aarch64" | "arm64") echo "arm64" ;; *) @@ -50,10 +50,12 @@ function check_and_install_golang() { return fi + sudo chown -R $USER:$USER "$INSTALL_PATH"/go + # golang has been installed and check its version - if [[ $(go version) =~ (([0-9]+)\.([0-9]+).([0-9]+).([\.0-9]*)) ]]; then + if [[ $(go version | cut -d' ' -f 3) =~ go(([0-9]+)\.([0-9]+).([0-9]+)*) ]]; then HOST_VERSION=${BASH_REMATCH[1]} - if [ $HOST_VERSION = $VERSION_TO_INSTALL ]; then + if [ $HOST_VERSION == $VERSION_TO_INSTALL ]; then echo "go version on the host looks good : $HOST_VERSION" else echo "WARNING: expected go version to be $VERSION_TO_INSTALL but got $HOST_VERSION" @@ -82,10 +84,11 @@ function install_golang() { # using sudo because previously installed versions might have been installed by a different user. # as it was the case on jenkins VM. sudo rm -rf "$GO_TGZ" - curl -qL -O "https://storage.googleapis.com/golang/$GO_TGZ" + curl -qL -O "https://go.dev/dl/$GO_TGZ" sudo rm -rf "$GO_DIR" sudo mkdir -p "$GO_DIR" sudo tar -C "$GO_DIR" --strip-components=1 -xzf "$GO_TGZ" + sudo chown -R $USER:$USER "$GO_DIR" popd >/dev/null echo "installed in $GO_DIR: $($GO_DIR/bin/go version)" diff --git a/hack/jenkins/installers/check_install_gopogh.sh b/hack/jenkins/installers/check_install_gopogh.sh new file mode 100755 index 000000000000..dcbc688cc23d --- /dev/null +++ b/hack/jenkins/installers/check_install_gopogh.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Copyright 2023 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eux -o pipefail + +# installing golang so we can go install gopogh +./installers/check_install_golang.sh "/usr/local" || true + +# temporary: remove the old install of gopogh as it's taking priority over our current install, preventing updating +sudo rm -f /usr/local/bin/gopogh + +go install github.com/medyagh/gopogh/cmd/gopogh@v0.29.0 diff --git a/hack/jenkins/installers/check_install_gotestsum.sh b/hack/jenkins/installers/check_install_gotestsum.sh old mode 100644 new mode 100755 index 9c7ee25872d7..b9abac97f366 --- a/hack/jenkins/installers/check_install_gotestsum.sh +++ b/hack/jenkins/installers/check_install_gotestsum.sh @@ -17,8 +17,8 @@ set -eux -o pipefail function install_gotestsum() { - sudo rm -f $(which gotestsum) - sudo PATH="$PATH" GOBIN="$GOROOT/bin" go install gotest.tools/gotestsum@v1.6.4 + rm -f $(which gotestsum) + GOBIN="$GOROOT/bin" go install gotest.tools/gotestsum@v1.13.0 } -which gotestsum || install_gotestsum \ No newline at end of file +which gotestsum || install_gotestsum diff --git a/hack/jenkins/installers/check_install_linux_crons.sh b/hack/jenkins/installers/check_install_linux_crons.sh new file mode 100755 index 000000000000..d55a7bc1fd27 --- /dev/null +++ b/hack/jenkins/installers/check_install_linux_crons.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Copyright 2022 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION:=master}/cron" cron || echo "FAILED TO GET CRON FILES" +sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP AND REBOOT" +sudo install cron/cleanup_go_modules.sh /etc/cron.monthly/cleanup_go_modules || echo "FAILED TO INSTALL GO MODULES CLEANUP" diff --git a/hack/jenkins/installers/check_install_osx_crons.sh b/hack/jenkins/installers/check_install_osx_crons.sh new file mode 100755 index 000000000000..1ed194cd9094 --- /dev/null +++ b/hack/jenkins/installers/check_install_osx_crons.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Copyright 2022 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" +install cron/cleanup_and_reboot_Darwin.sh $HOME/cleanup_and_reboot.sh || echo "FAILED TO INSTALL CLEANUP AND REBOOT" +echo "*/30 * * * * $HOME/cleanup_and_reboot.sh" | crontab +install cron/cleanup_go_modules.sh $HOME/cleanup_go_modules.sh || echo "FAILED TO INSTALL GO MODULES CLEANUP" +(crontab -l ; echo "0 0 1 * * $HOME/cleanup_go_modules.sh")| crontab - +crontab -l diff --git a/hack/jenkins/kicbase_auto_build.sh b/hack/jenkins/kicbase_auto_build.sh index e73d86ac2bb7..bced53a3d20b 100755 --- a/hack/jenkins/kicbase_auto_build.sh +++ b/hack/jenkins/kicbase_auto_build.sh @@ -24,12 +24,31 @@ docker login -u ${DOCKERHUB_USER} -p ${DOCKERHUB_PASS} # Make sure gh is installed and configured ./hack/jenkins/installers/check_install_gh.sh +# Make sure golang is installed and configured +./hack/jenkins/installers/check_install_golang.sh "/usr/local" || true + +# install cron jobs +source ./hack/jenkins/installers/check_install_linux_crons.sh + +./hack/jenkins/build_changelog.sh ./deploy/kicbase/CHANGELOG + +export GOBIN=/usr/local/go/bin +export PATH=$PATH:$GOBIN + +generate_package_list() { + make + ./out/minikube delete + ./out/minikube start + ./out/minikube ssh -- sudo dpkg -l --no-pager > hack/kicbase_version/os-package-list.txt + ./out/minikube delete +} + # Let's make sure we have the newest kicbase reference curl -L https://github.com/kubernetes/minikube/raw/master/pkg/drivers/kic/types.go --output types-head.go # kicbase tags are of the form VERSION-TIMESTAMP-PR, so this grep finds that TIMESTAMP in the middle # if it doesn't exist, it will just return VERSION, which is covered in the if statement below -HEAD_KIC_TIMESTAMP=$(egrep "Version =" types-head.go | cut -d \" -f 2 | cut -d "-" -f 2) -CURRENT_KIC_TS=$(egrep "Version =" pkg/drivers/kic/types.go | cut -d \" -f 2 | cut -d "-" -f 2) +HEAD_KIC_TIMESTAMP=$(grep -E "Version =" types-head.go | cut -d \" -f 2 | cut -d "-" -f 2) +CURRENT_KIC_TS=$(grep -E "Version =" pkg/drivers/kic/types.go | cut -d \" -f 2 | cut -d "-" -f 2) if [[ $HEAD_KIC_TIMESTAMP != v* ]]; then diff=$((CURRENT_KIC_TS-HEAD_KIC_TIMESTAMP)) if [[ $CURRENT_KIC_TS == v* ]] || [ $diff -lt 0 ]; then @@ -44,7 +63,7 @@ if [[ -z $KIC_VERSION ]]; then # Testing PRs here release=false now=$(date +%s) - KV=$(egrep "Version =" pkg/drivers/kic/types.go | cut -d \" -f 2 | cut -d "-" -f 1) + KV=$(grep -E "Version =" pkg/drivers/kic/types.go | cut -d \" -f 2 | cut -d "-" -f 1) GCR_REPO=gcr.io/k8s-minikube/kicbase-builds DH_REPO=docker.io/kicbase/build export KIC_VERSION=$KV-$now-$ghprbPullId @@ -60,18 +79,20 @@ DH_IMG=${DH_REPO}:${KIC_VERSION} export KICBASE_IMAGE_REGISTRIES="${GCR_IMG} ${DH_IMG}" -# Build a new kicbase image -CIBUILD=yes make push-kic-base-image | tee kic-logs.txt - -# Abort with error message if above command failed -ec=$? -if [ $ec -gt 0 ]; then - if [ "$release" = false ]; then - gh pr comment ${ghprbPullId} --body "Hi ${ghprbPullAuthorLoginMention}, building a new kicbase image failed. - See the logs at: https://storage.cloud.google.com/minikube-builds/logs/${ghprbPullId}/kicbase-${BUILD_NUMBER}/kic_image_build.txt - " - fi - exit $ec +if ! CIBUILD=yes make push-kic-base-image | tee kic-logs.txt; then + # Exit of `make` (PIPESTATUS[0]); fallback to 1 if unavailable + ec=${PIPESTATUS[0]:-1} + + # Only comment on non-release; default release=false if unset + if [[ ${release:-false} != "true" ]]; then + body=$(cat << EOF +Hi ${ghprbPullAuthorLoginMention}, building a new kicbase image failed. + See the logs at: https://storage.cloud.google.com/minikube-builds/logs/${ghprbPullId}/${ghprbActualCommit::7}/kic_image_build.txt +EOF +) + gh pr comment "${ghprbPullId}" --body "$body" + fi + exit "$ec" fi # Retrieve the sha from the new image @@ -90,6 +111,7 @@ if [ "$release" = false ]; then git checkout -b ${ghprbPullAuthorLogin}-${ghprbSourceBranch} ${ghprbPullAuthorLogin}/${ghprbSourceBranch} sed -i "s|Version = .*|Version = \"${KIC_VERSION}\"|;s|baseImageSHA = .*|baseImageSHA = \"${sha}\"|;s|gcrRepo = .*|gcrRepo = \"${GCR_REPO}\"|;s|dockerhubRepo = .*|dockerhubRepo = \"${DH_REPO}\"|" pkg/drivers/kic/types.go; make generate-docs; + generate_package_list git commit -am "Updating kicbase image to ${KIC_VERSION}" git push ${ghprbPullAuthorLogin} HEAD:${ghprbSourceBranch} @@ -112,11 +134,12 @@ else sed -i "s|Version = .*|Version = \"${KIC_VERSION}\"|;s|baseImageSHA = .*|baseImageSHA = \"${sha}\"|;s|gcrRepo = .*|gcrRepo = \"${GCR_REPO}\"|;s|dockerhubRepo = .*|dockerhubRepo = \"${DH_REPO}\"|" pkg/drivers/kic/types.go make generate-docs + generate_package_list git add pkg/drivers/kic/types.go site/content/en/docs/commands/start.md - git commit -m "Update kicbase to ${KIC_VERSION}" + git commit -m "Release: Update kicbase to ${KIC_VERSION}" git remote add minikube-bot git@github.com:minikube-bot/minikube.git git push -f minikube-bot ${branch} - gh pr create --fill --base master --head minikube-bot:${branch} + gh pr create --fill --base master --head minikube-bot:${branch} -l "ok-to-test" fi diff --git a/hack/jenkins/linux_integration_tests_docker.sh b/hack/jenkins/linux_integration_tests_docker.sh index d769d969c51e..0884cc1f9778 100755 --- a/hack/jenkins/linux_integration_tests_docker.sh +++ b/hack/jenkins/linux_integration_tests_docker.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -31,9 +31,6 @@ DRIVER="docker" JOB_NAME="Docker_Linux" CONTAINER_RUNTIME="docker" -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" - # removing possible left over docker containers from previous runs docker rm -f -v $(docker ps -aq) >/dev/null 2>&1 || true diff --git a/hack/jenkins/linux_integration_tests_docker_arm64.sh b/hack/jenkins/linux_integration_tests_docker_arm64.sh old mode 100644 new mode 100755 index cf10462fd86e..8412555f8b28 --- a/hack/jenkins/linux_integration_tests_docker_arm64.sh +++ b/hack/jenkins/linux_integration_tests_docker_arm64.sh @@ -21,19 +21,18 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. + set -e -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" +ARCH="arm64" +OS="linux" +DRIVER="docker" +JOB_NAME="$JOB_NAME" +CONTAINER_RUNTIME="docker" +EXTERNAL="yes" # removing possible left over docker containers from previous runs docker rm -f -v "$(docker ps -aq)" >/dev/null 2>&1 || true -ARCH="arm64" \ -OS="linux" \ -DRIVER="docker" \ -JOB_NAME="$JOB_NAME" \ -CONTAINER_RUNTIME="docker" \ -EXTERNAL="yes" \ source ./common.sh diff --git a/hack/jenkins/linux_integration_tests_docker_containerd.sh b/hack/jenkins/linux_integration_tests_docker_containerd.sh index 73165241c16b..903bfbf578d6 100755 --- a/hack/jenkins/linux_integration_tests_docker_containerd.sh +++ b/hack/jenkins/linux_integration_tests_docker_containerd.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -31,11 +31,6 @@ DRIVER="docker" JOB_NAME="Docker_Linux_containerd" CONTAINER_RUNTIME="containerd" - - -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" - # removing possible left over docker containers from previous runs docker rm -f -v $(docker ps -aq) >/dev/null 2>&1 || true diff --git a/hack/jenkins/linux_integration_tests_docker_containerd_arm64.sh b/hack/jenkins/linux_integration_tests_docker_containerd_arm64.sh old mode 100644 new mode 100755 index 3ea2454c4fe6..c42fa286e907 --- a/hack/jenkins/linux_integration_tests_docker_containerd_arm64.sh +++ b/hack/jenkins/linux_integration_tests_docker_containerd_arm64.sh @@ -21,19 +21,18 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. + set -e -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" +ARCH="arm64" +OS="linux" +DRIVER="docker" +JOB_NAME="$JOB_NAME" +CONTAINER_RUNTIME="containerd" +EXTERNAL="yes" # removing possible left over docker containers from previous runs docker rm -f -v "$(docker ps -aq)" >/dev/null 2>&1 || true -ARCH="arm64" \ -OS="linux" \ -DRIVER="docker" \ -JOB_NAME="$JOB_NAME" \ -CONTAINER_RUNTIME="containerd" \ -EXTERNAL="yes" \ source ./common.sh diff --git a/hack/jenkins/linux_integration_tests_docker_crio.sh b/hack/jenkins/linux_integration_tests_docker_crio.sh index 0f7327173c4f..a96dc9d4a6a6 100755 --- a/hack/jenkins/linux_integration_tests_docker_crio.sh +++ b/hack/jenkins/linux_integration_tests_docker_crio.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -31,11 +31,6 @@ DRIVER="docker" JOB_NAME="Docker_Linux_crio" CONTAINER_RUNTIME="crio" - - -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" - # removing possible left over docker containers from previous runs docker rm -f -v $(docker ps -aq) >/dev/null 2>&1 || true diff --git a/hack/jenkins/linux_integration_tests_docker_crio_arm64.sh b/hack/jenkins/linux_integration_tests_docker_crio_arm64.sh old mode 100644 new mode 100755 index b573c28abb9d..3af937dfff92 --- a/hack/jenkins/linux_integration_tests_docker_crio_arm64.sh +++ b/hack/jenkins/linux_integration_tests_docker_crio_arm64.sh @@ -21,19 +21,18 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. + set -e -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" +ARCH="arm64" +OS="linux" +DRIVER="docker" +JOB_NAME="$JOB_NAME" +CONTAINER_RUNTIME="crio" +EXTERNAL="yes" # removing possible left over docker containers from previous runs docker rm -f -v "$(docker ps -aq)" >/dev/null 2>&1 || true -ARCH="arm64" \ -OS="linux" \ -DRIVER="docker" \ -JOB_NAME="$JOB_NAME" \ -CONTAINER_RUNTIME="crio" \ -EXTERNAL="yes" \ source ./common.sh diff --git a/hack/jenkins/linux_integration_tests_kvm.sh b/hack/jenkins/linux_integration_tests_kvm.sh index 7491153ea8c9..86cd7cfbb1a6 100755 --- a/hack/jenkins/linux_integration_tests_kvm.sh +++ b/hack/jenkins/linux_integration_tests_kvm.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -29,14 +29,10 @@ OS="linux" ARCH="amd64" DRIVER="kvm2" JOB_NAME="KVM_Linux" -EXPECTED_DEFAULT_DRIVER="kvm2" # We pick kvm as our gvisor testbed because it is fast & reliable EXTRA_TEST_ARGS="-gvisor" -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" - sudo apt-get update sudo apt-get -y install qemu-system libvirt-clients libvirt-daemon-system ebtables iptables dnsmasq sudo adduser jenkins libvirt || true diff --git a/hack/jenkins/linux_integration_tests_kvm_containerd.sh b/hack/jenkins/linux_integration_tests_kvm_containerd.sh index 116ab5a142b8..253ec00584dc 100755 --- a/hack/jenkins/linux_integration_tests_kvm_containerd.sh +++ b/hack/jenkins/linux_integration_tests_kvm_containerd.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -31,11 +31,6 @@ DRIVER="kvm2" JOB_NAME="KVM_Linux_containerd" CONTAINER_RUNTIME="containerd" - - -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" - sudo apt-get update sudo apt-get -y install qemu-system libvirt-clients libvirt-daemon-system ebtables iptables dnsmasq sudo adduser jenkins libvirt || true diff --git a/hack/jenkins/linux_integration_tests_kvm_crio.sh b/hack/jenkins/linux_integration_tests_kvm_crio.sh index 5b99712ad08f..14e489b6ce1e 100755 --- a/hack/jenkins/linux_integration_tests_kvm_crio.sh +++ b/hack/jenkins/linux_integration_tests_kvm_crio.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -31,11 +31,6 @@ DRIVER="kvm2" JOB_NAME="KVM_Linux_crio" CONTAINER_RUNTIME="crio" - - -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" - sudo apt-get update sudo apt-get -y install qemu-system libvirt-clients libvirt-daemon-system ebtables iptables dnsmasq sudo adduser jenkins libvirt || true diff --git a/hack/jenkins/linux_integration_tests_none.sh b/hack/jenkins/linux_integration_tests_none.sh index 118fdd08e936..b6e685b3ab73 100755 --- a/hack/jenkins/linux_integration_tests_none.sh +++ b/hack/jenkins/linux_integration_tests_none.sh @@ -21,8 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. - +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -31,13 +30,17 @@ ARCH="amd64" DRIVER="none" JOB_NAME="none_Linux" EXTRA_START_ARGS="--bootstrapper=kubeadm" -EXPECTED_DEFAULT_DRIVER="kvm2" -SUDO_PREFIX="sudo -E " -export KUBECONFIG="/root/.kube/config" +# add install location of iptables and conntrack to PATH +PATH="/usr/sbin:$PATH" +if ! kubeadm &>/dev/null; then + echo "WARNING: kubeadm is not installed. will try to install." + curl -LO "https://dl.k8s.io/release/$(curl -sSL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubeadm" + sudo install kubeadm /usr/local/bin/kubeadm +fi # "none" driver specific cleanup from previous runs. -sudo kubeadm reset -f || true +sudo kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock || true # kubeadm reset may not stop pods immediately docker rm -f $(docker ps -aq) >/dev/null 2>&1 || true @@ -52,22 +55,47 @@ sudo systemctl is-active --quiet kubelet \ && echo "stopping kubelet" \ && sudo systemctl stop -f kubelet - # conntrack is required for kubernetes 1.18 and higher for none driver +# conntrack is required for Kubernetes 1.18 and higher for none driver if ! conntrack --version &>/dev/null; then - echo "WARNING: contrack is not installed. will try to install." + echo "WARNING: conntrack is not installed. will try to install." sudo apt-get update -qq sudo apt-get -qq -y install conntrack fi - # socat is required for kubectl port forward which is used in some tests such as validateHelmTillerAddon +# socat is required for kubectl port forward which is used in some tests such as validateHelmTillerAddon if ! which socat &>/dev/null; then echo "WARNING: socat is not installed. will try to install." sudo apt-get update -qq sudo apt-get -qq -y install socat fi -mkdir -p cron && gsutil -m rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" +# cri-dockerd is required for Kubernetes v1.24+ with none driver +CRI_DOCKERD_VERSION="0.4.1" +if [[ $(cri-dockerd --version 2>&1) != *"$CRI_DOCKERD_VERSION"* ]]; then + echo "WARNING: expected version of cri-dockerd is not installed. will try to install." + sudo systemctl stop cri-docker.socket || true + sudo systemctl stop cri-docker.service || true + CRI_DOCKERD_COMMIT="55d6e1a1d6f2ee58949e13a0c66afe7d779ac942" + CRI_DOCKERD_BASE_URL="https://storage.googleapis.com/kicbase-artifacts/cri-dockerd/${CRI_DOCKERD_COMMIT}" + sudo curl -L "${CRI_DOCKERD_BASE_URL}/amd64/cri-dockerd" -o /usr/bin/cri-dockerd + sudo curl -L "${CRI_DOCKERD_BASE_URL}/cri-docker.socket" -o /usr/lib/systemd/system/cri-docker.socket + sudo curl -L "${CRI_DOCKERD_BASE_URL}/cri-docker.service" -o /usr/lib/systemd/system/cri-docker.service + sudo chmod +x /usr/bin/cri-dockerd + sudo systemctl daemon-reload + sudo systemctl enable cri-docker.service + sudo systemctl enable --now cri-docker.socket +fi + +# crictl is required for Kubernetes v1.24+ with none driver +CRICTL_VERSION="v1.34.0" +if [[ $(crictl --version) != *"$CRICTL_VERSION"* ]]; then + echo "WARNING: expected version of crictl is not installed. will try to install." + curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$CRICTL_VERSION/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz --output crictl-${CRICTL_VERSION}-linux-amd64.tar.gz + sudo tar zxvf crictl-$CRICTL_VERSION-linux-amd64.tar.gz -C /usr/local/bin +fi + +# cni-plugins is required for Kubernetes v1.24+ with none driver +./installers/check_install_cni_plugins.sh # We need this for reasons now sudo sysctl fs.protected_regular=0 diff --git a/hack/jenkins/linux_integration_tests_podman.sh b/hack/jenkins/linux_integration_tests_podman.sh index fcdd5072e605..d61e712d7103 100755 --- a/hack/jenkins/linux_integration_tests_podman.sh +++ b/hack/jenkins/linux_integration_tests_podman.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -31,9 +31,6 @@ DRIVER="podman" JOB_NAME="Experimental_Podman_Linux" CONTAINER_RUNTIME="containerd" -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" - # remove possible left over podman containers sudo podman rm -f -v $(sudo podman ps -aq) || true diff --git a/hack/jenkins/linux_integration_tests_virtualbox.sh b/hack/jenkins/linux_integration_tests_virtualbox.sh index 9bf1ff7b26d9..489c16166724 100755 --- a/hack/jenkins/linux_integration_tests_virtualbox.sh +++ b/hack/jenkins/linux_integration_tests_virtualbox.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -30,9 +30,5 @@ ARCH="amd64" DRIVER="virtualbox" JOB_NAME="VirtualBox_Linux" EXTRA_TEST_ARGS="" -EXPECTED_DEFAULT_DRIVER="kvm2" - -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -sudo install cron/cleanup_and_reboot_Linux.sh /etc/cron.hourly/cleanup_and_reboot || echo "FAILED TO INSTALL CLEANUP" source ./common.sh 2h diff --git a/hack/jenkins/minikube_cross_build_and_upload.sh b/hack/jenkins/minikube_cross_build_and_upload.sh index 94750f69968b..86e363c1d791 100755 --- a/hack/jenkins/minikube_cross_build_and_upload.sh +++ b/hack/jenkins/minikube_cross_build_and_upload.sh @@ -15,7 +15,7 @@ # limitations under the License. # This script builds the minikube binary for all 3 platforms and uploads them. -# This is to done as part of the CI tests for Github PRs +# This is to done as part of the CI tests for GitHub PRs # The script expects the following env variables: # ghprbPullId: The pull request ID, injected from the ghpbr plugin. @@ -26,12 +26,12 @@ set -eux -o pipefail readonly bucket="minikube-builds" # Make sure the right golang version is installed based on Makefile -WANT_GOLANG_VERSION=$(grep '^GO_VERSION' Makefile | awk '{ print $3 }') -./hack/jenkins/installers/check_install_golang.sh $WANT_GOLANG_VERSION /usr/local +./hack/jenkins/installers/check_install_golang.sh /usr/local +sudo apt-get -y install fakeroot declare -rx BUILD_IN_DOCKER=y -declare -rx GOPATH=/var/lib/jenkins/go +declare -rx GOPATH="$HOME/go" declare -rx ISO_BUCKET="${bucket}/${ghprbPullId}" declare -rx ISO_VERSION="testing" declare -rx TAG="${ghprbActualCommit}" @@ -40,14 +40,15 @@ declare -rx DEB_VER="$(make deb_version)" docker kill $(docker ps -q) || true docker rm $(docker ps -aq) || true +docker system prune -a --volumes -f +# read only token, never expires +docker login -u minikubebot -p "$DOCKERHUB_READONLY_TOKEN" make -j 16 \ all \ minikube-darwin-arm64 \ + out/mkcmp \ out/minikube_${DEB_VER}_amd64.deb \ out/minikube_${DEB_VER}_arm64.deb \ - out/docker-machine-driver-kvm2_$(make deb_version_base).deb \ - out/docker-machine-driver-kvm2_${DEB_VER}_amd64.deb \ - out/docker-machine-driver-kvm2_${DEB_VER}_arm64.deb \ && failed=$? || failed=$? BUILT_VERSION=$("out/minikube-$(go env GOOS)-$(go env GOARCH)" version) @@ -60,7 +61,6 @@ if (echo ${COMMIT} | grep -q dirty); then fi - gsutil cp "gs://${bucket}/logs/index.html" \ "gs://${bucket}/logs/${ghprbPullId}/index.html" @@ -75,9 +75,16 @@ cp -r test/integration/testdata out/ rm -rf out/buildroot # At this point, the out directory contains the jenkins scripts (populated by jenkins), -# testdata, and our build output. Push the changes to GCS so that worker nodes can re-use them. +# testdata, and our build output. Push the changes to GCS so that worker nodes can reuse them. # -d: delete remote files that don't exist (removed test files, for instance) # -J: gzip compression # -R: recursive. strangely, this is not the default for sync. gsutil -m rsync -dJR out "gs://${bucket}/${ghprbPullId}" + +readonly bucket_mirror="minikube/latest" +readonly HEAD="master" +if [[ "${ghprbPullId}" == "${HEAD}" ]]; then + # Copy artifacts to known mirror location + gsutil cp -R "gs://${bucket}/${ghprbPullId}/minikube-*" "gs://${bucket_mirror}" +fi diff --git a/hack/jenkins/minikube_set_pending.sh b/hack/jenkins/minikube_set_pending.sh index d6ce0a350bcc..9a42f0c257e8 100755 --- a/hack/jenkins/minikube_set_pending.sh +++ b/hack/jenkins/minikube_set_pending.sh @@ -15,24 +15,20 @@ # limitations under the License. -# This script creates several Github statuses using the Github API: https://developer.github.com/v3/repos/statuses/ -# This is intended to run before the tests start, so the icons show up on the Github PR and block submit until +# This script creates several GitHub statuses using the GitHub API: https://developer.github.com/v3/repos/statuses/ +# This is intended to run before the tests start, so the icons show up on the GitHub PR and block submit until # the tests finish. # The script expects the following env variables: # ghprbPullId: The pull request ID, injected from the ghpbr plugin. # ghprbActualCommit: The commit hash, injected from the ghpbr plugin. -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -eux -o pipefail jobs=( - 'Hyperkit_macOS' - # 'Hyper-V_Windows' - # 'VirtualBox_Linux' - # 'VirtualBox_macOS' - # 'VirtualBox_Windows' - # 'KVM-GPU_Linux' - Disabled + # 'Hyperkit_macOS' + 'Hyper-V_Windows' 'KVM_Linux' 'KVM_Linux_containerd' 'KVM_Linux_crio' @@ -43,10 +39,10 @@ jobs=( 'Docker_Linux_crio_arm64' 'Docker_Linux_containerd' 'Docker_Linux_crio' - 'Docker_macOS' + # 'Docker_macOS' 'Docker_Windows' - # 'Podman_Linux' 'Docker_Cloud_Shell' + # 'QEMU_macOS' ) STARTED_LIST_REMOTE="gs://minikube-builds/logs/${ghprbPullId}/${BUILD_NUMBER}/started_environments.txt" diff --git a/hack/jenkins/osx_integration_tests_docker.sh b/hack/jenkins/osx_integration_tests_docker.sh index 3635553cb564..dac107abb474 100755 --- a/hack/jenkins/osx_integration_tests_docker.sh +++ b/hack/jenkins/osx_integration_tests_docker.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -e @@ -31,7 +31,6 @@ OS="darwin" DRIVER="docker" JOB_NAME="Docker_macOS" EXTRA_TEST_ARGS="" -EXPECTED_DEFAULT_DRIVER="docker" EXTERNAL="yes" begin=$(date +%s) @@ -47,9 +46,4 @@ do fi done -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -install cron/cleanup_and_reboot_Darwin.sh $HOME/cleanup_and_reboot.sh || echo "FAILED TO INSTALL CLEANUP" -echo "*/30 * * * * $HOME/cleanup_and_reboot.sh" | crontab -crontab -l - source common.sh diff --git a/hack/jenkins/osx_integration_tests_hyperkit.sh b/hack/jenkins/osx_integration_tests_hyperkit.sh index f1acffbdefdf..c76fc851f3d0 100755 --- a/hack/jenkins/osx_integration_tests_hyperkit.sh +++ b/hack/jenkins/osx_integration_tests_hyperkit.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. set -ex @@ -31,12 +31,6 @@ OS="darwin" DRIVER="hyperkit" JOB_NAME="Hyperkit_macOS" EXTRA_TEST_ARGS="" -EXPECTED_DEFAULT_DRIVER="hyperkit" EXTERNAL="yes" -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -install cron/cleanup_and_reboot_Darwin.sh $HOME/cleanup_and_reboot.sh || echo "FAILED TO INSTALL CLEANUP" -echo "*/30 * * * * $HOME/cleanup_and_reboot.sh" | crontab -crontab -l - source common.sh diff --git a/hack/jenkins/osx_integration_tests_krunkit.sh b/hack/jenkins/osx_integration_tests_krunkit.sh new file mode 100755 index 000000000000..8e34568a9a17 --- /dev/null +++ b/hack/jenkins/osx_integration_tests_krunkit.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Copyright 2024 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# This script runs the integration tests on an OSX machine for the Hyperkit Driver + +# The script expects the following env variables: +# MINIKUBE_LOCATION: GIT_COMMIT from upstream build. +# COMMIT: Actual commit ID from upstream build +# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. + + +set -ex + +ARCH="arm64" +OS="darwin" +DRIVER="krunkit" +JOB_NAME="Krunkit_macOS" +EXTRA_TEST_ARGS="" +EXTERNAL="yes" + +brew tap slp/krunkit +brew install krunkit + +source common.sh diff --git a/hack/jenkins/osx_integration_tests_qemu.sh b/hack/jenkins/osx_integration_tests_qemu.sh new file mode 100755 index 000000000000..07841761dbdf --- /dev/null +++ b/hack/jenkins/osx_integration_tests_qemu.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Copyright 2022 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# This script runs the integration tests on an OSX machine for the Hyperkit Driver + +# The script expects the following env variables: +# MINIKUBE_LOCATION: GIT_COMMIT from upstream build. +# COMMIT: Actual commit ID from upstream build +# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. + + +set -ex + +ARCH="arm64" +OS="darwin" +DRIVER="qemu2" +JOB_NAME="QEMU_macOS" +EXTRA_TEST_ARGS="" +EXTERNAL="yes" + +source common.sh diff --git a/hack/jenkins/osx_integration_tests_vfkit.sh b/hack/jenkins/osx_integration_tests_vfkit.sh new file mode 100755 index 000000000000..ded64950f0d3 --- /dev/null +++ b/hack/jenkins/osx_integration_tests_vfkit.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Copyright 2024 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# This script runs the integration tests on an OSX machine for the Hyperkit Driver + +# The script expects the following env variables: +# MINIKUBE_LOCATION: GIT_COMMIT from upstream build. +# COMMIT: Actual commit ID from upstream build +# EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. + + +set -ex + +ARCH="arm64" +OS="darwin" +DRIVER="vfkit" +JOB_NAME="VFkit_macOS" +EXTRA_TEST_ARGS="" +EXTERNAL="yes" + +brew install vfkit + +source common.sh diff --git a/hack/jenkins/osx_integration_tests_virtualbox.sh b/hack/jenkins/osx_integration_tests_virtualbox.sh index b10f6a52f7b8..bd1fba191e88 100755 --- a/hack/jenkins/osx_integration_tests_virtualbox.sh +++ b/hack/jenkins/osx_integration_tests_virtualbox.sh @@ -21,7 +21,7 @@ # MINIKUBE_LOCATION: GIT_COMMIT from upstream build. # COMMIT: Actual commit ID from upstream build # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests -# access_token: The Github API access token. Injected by the Jenkins credential provider. +# access_token: The GitHub API access token. Injected by the Jenkins credential provider. OS="darwin" @@ -29,14 +29,5 @@ ARCH="amd64" DRIVER="virtualbox" JOB_NAME="VirtualBox_macOS" EXTRA_START_ARGS="--bootstrapper=kubeadm" -# hyperkit behaves better, so it has higher precedence. -# Assumes that hyperkit is also installed on the VirtualBox CI host. -EXPECTED_DEFAULT_DRIVER="hyperkit" - - -mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES" -install cron/cleanup_and_reboot_Darwin.sh $HOME/cleanup_and_reboot.sh || echo "FAILED TO GET INSTALL CLEANUP" -echo "*/30 * * * * $HOME/cleanup_and_reboot.sh" | crontab -crontab -l source common.sh diff --git a/hack/jenkins/prbot.sh b/hack/jenkins/prbot.sh old mode 100644 new mode 100755 index 0f68772e9b81..142c6f818dec --- a/hack/jenkins/prbot.sh +++ b/hack/jenkins/prbot.sh @@ -17,30 +17,34 @@ set -x -o pipefail # Only run this on PRs if [[ "${MINIKUBE_LOCATION}" == "master" ]]; then - exit 0 + exit 0 fi -# Make sure docker is installed and configured +# Make sure docker is installed and configured #./installers/check_install_docker.sh -# Make sure gh is installed and configured -./installers/check_install_gh.sh +# Make sure gh is installed and configured +./installers/check_install_gh.sh -# Make sure go is installed and configured -./installers/check_install_golang.sh "1.16" "/usr/local" || true +# Make sure go is installed and configured +./installers/check_install_golang.sh "/usr/local" || true -# Grab latest code -git clone https://github.com/kubernetes/minikube.git -cd minikube +# Grab latest code +git clone https://github.com/kubernetes/minikube.git +cd minikube -# Build minikube binary and mkcmp binary -make out/minikube out/mkcmp +# Grab the PR's version of mkcmp, so it's easier to test changes +gsutil cp "gs://minikube-builds/${MINIKUBE_LOCATION}/mkcmp" . +chmod +x ./mkcmp + +# Build minikube binary +make out/minikube # Make sure there aren't any old minikube clusters laying around out/minikube delete --all -# Run mkcmp -out/mkcmp out/minikube pr://${MINIKUBE_LOCATION} | tee mkcmp.log +# Run mkcmp +./mkcmp out/minikube pr://${MINIKUBE_LOCATION} | tee mkcmp.log if [ $? -gt 0 ]; then # Comment that mkcmp failed gh pr comment ${MINIKUBE_LOCATION} --body "timing minikube failed, please try again" @@ -48,3 +52,5 @@ if [ $? -gt 0 ]; then fi output=$(cat mkcmp.log) gh pr comment ${MINIKUBE_LOCATION} --body "${output}" + +docker system prune -a --volumes -f diff --git a/hack/jenkins/preload_generation.sh b/hack/jenkins/preload_generation.sh old mode 100644 new mode 100755 index 66e2ba112543..459f178bfaa5 --- a/hack/jenkins/preload_generation.sh +++ b/hack/jenkins/preload_generation.sh @@ -20,9 +20,11 @@ set -eux -o pipefail +source ./hack/jenkins/installers/check_install_linux_crons.sh + # Make sure the right golang version is installed based on Makefile -WANT_GOLANG_VERSION=$(grep '^GO_VERSION' Makefile | awk '{ print $3 }') -./hack/jenkins/installers/check_install_golang.sh $WANT_GOLANG_VERSION /usr/local +./hack/jenkins/installers/check_install_golang.sh /usr/local +make update-kubeadm-constants make upload-preloaded-images-tar make clean diff --git a/hack/jenkins/release_build_and_upload.sh b/hack/jenkins/release_build_and_upload.sh index 48cf78d1987e..9a460400f18a 100755 --- a/hack/jenkins/release_build_and_upload.sh +++ b/hack/jenkins/release_build_and_upload.sh @@ -22,7 +22,7 @@ # VERSION_MINOR: The minor version of the tag to be released. # VERSION_BUILD: The build version of the tag to be released. # BUCKET: The GCP bucket the build files should be uploaded to. -# GITHUB_TOKEN: The Github API access token. Injected by the Jenkins credential provider. +# GITHUB_TOKEN: The GitHub API access token. Injected by the Jenkins credential provider. set -eux -o pipefail readonly VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}" @@ -37,13 +37,19 @@ grep -E "^VERSION_MAJOR \\?=" Makefile | grep "${VERSION_MAJOR}" grep -E "^VERSION_MINOR \\?=" Makefile | grep "${VERSION_MINOR}" grep -E "^VERSION_BUILD \\?=" Makefile | grep "${VERSION_BUILD}" -# Force go packages to the Jekins home directory -export GOPATH=$HOME/go +# Force go packages to the Jenkins home directory +# export GOPATH=$HOME/go +./hack/jenkins/installers/check_install_golang.sh "/usr/local" +# Make sure docker is installed and configured +./hack/jenkins/installers/check_install_docker.sh # Verify ISO exists echo "Verifying ISO exists ..." make verify-iso +# Generate licenses +make generate-licenses + # Build and upload env BUILD_IN_DOCKER=y \ make -j 16 \ @@ -58,25 +64,30 @@ env BUILD_IN_DOCKER=y \ "out/minikube_${DEB_VERSION}-${DEB_REVISION}_armhf.deb" \ "out/minikube_${DEB_VERSION}-${DEB_REVISION}_ppc64el.deb" \ "out/minikube_${DEB_VERSION}-${DEB_REVISION}_s390x.deb" \ + +env BUILD_IN_DOCKER=y \ + make \ "out/minikube-${RPM_VERSION}-${RPM_REVISION}.x86_64.rpm" \ "out/minikube-${RPM_VERSION}-${RPM_REVISION}.aarch64.rpm" \ "out/minikube-${RPM_VERSION}-${RPM_REVISION}.armv7hl.rpm" \ "out/minikube-${RPM_VERSION}-${RPM_REVISION}.ppc64le.rpm" \ "out/minikube-${RPM_VERSION}-${RPM_REVISION}.s390x.rpm" \ - "out/docker-machine-driver-kvm2_${DEB_VERSION}-${DEB_REVISION}_amd64.deb" \ - "out/docker-machine-driver-kvm2_${DEB_VERSION}-${DEB_REVISION}_arm64.deb" \ - "out/docker-machine-driver-kvm2-${RPM_VERSION}-${RPM_REVISION}.x86_64.rpm" # check if 'commit: ' line contains '-dirty' commit suffix -BUILT_VERSION=$("out/minikube-$(go env GOOS)-$(go env GOARCH)" version) -echo ${BUILT_VERSION} - -COMMIT=$(echo ${BUILT_VERSION} | grep 'commit:' | awk '{print $2}') -if (echo ${COMMIT} | grep -q dirty); then - echo "'minikube version' reports dirty commit: ${COMMIT}" +BUILT_VERSION="$(out/minikube-$(go env GOOS)-$(go env GOARCH) version)" +echo "$BUILT_VERSION" +# Extract commit hash from the correct line +COMMIT=$(echo "$BUILT_VERSION" | grep '^commit:' | awk '{print $2}') + +if echo "$COMMIT" | grep -q dirty; then + echo "'minikube version' reports dirty commit: $COMMIT" + echo "------------------------------------------------------------------------" + echo "The following uncommitted changes are causing the build to be dirty:" + git status --porcelain + echo "------------------------------------------------------------------------" + echo "To fix this, commit or stash the above changes." exit 1 fi - # Don't upload temporary copies, avoid unused duplicate files in the release storage rm -f out/minikube-linux-x86_64 rm -f out/minikube-linux-i686 @@ -91,9 +102,35 @@ make checksum # unversioned names to avoid updating upstream Kubernetes documentation each release cp "out/minikube_${DEB_VERSION}-0_amd64.deb" out/minikube_latest_amd64.deb cp "out/minikube_${DEB_VERSION}-0_arm64.deb" out/minikube_latest_arm64.deb +cp "out/minikube_${DEB_VERSION}-0_armhf.deb" out/minikube_latest_armhf.deb +cp "out/minikube_${DEB_VERSION}-0_ppc64el.deb" out/minikube_latest_ppc64el.deb +cp "out/minikube_${DEB_VERSION}-0_s390x.deb" out/minikube_latest_s390x.deb + cp "out/minikube-${RPM_VERSION}-0.x86_64.rpm" out/minikube-latest.x86_64.rpm cp "out/minikube-${RPM_VERSION}-0.aarch64.rpm" out/minikube-latest.aarch64.rpm +cp "out/minikube-${RPM_VERSION}-0.armv7hl.rpm" out/minikube-latest.armv7hl.rpm +cp "out/minikube-${RPM_VERSION}-0.ppc64le.rpm" out/minikube-latest.ppc64le.rpm +cp "out/minikube-${RPM_VERSION}-0.s390x.rpm" out/minikube-latest.s390x.rpm + + +echo "Generating tarballs for kicbase images" +# first get the correct tag of the kic base image +KIC_VERSION=$(grep -E "Version =" pkg/drivers/kic/types.go | cut -d \" -f 2 | cut -d "-" -f 1) +# then generate tarballs for all architectures +for ARCH in "amd64" "arm64" "arm/v7" "ppc64le" "s390x" +do + SUFFIX=$(echo $ARCH | sed 's/\///g') + IMAGE_NAME=kicbase/stable:${KIC_VERSION} + TARBALL_NAME=out/kicbase-${KIC_VERSION}-${SUFFIX}.tar + docker pull ${IMAGE_NAME} --platform linux/${ARCH} + docker image save ${IMAGE_NAME} -o ${TARBALL_NAME} + openssl sha256 "${TARBALL_NAME}" | awk '{print $2}' > "${TARBALL_NAME}.sha256" + docker rmi -f ${IMAGE_NAME} +done + + +# upload to google bucket gsutil -m cp out/* "gs://$BUCKET/releases/$TAGNAME/" # Update "latest" release for non-beta/non-alpha builds @@ -105,5 +142,6 @@ fi #echo "Updating Docker images ..." #make push-gvisor-addon-image push-storage-provisioner-manifest + echo "Updating latest bucket for ${VERSION} release ..." gsutil cp -r "gs://${BUCKET}/releases/${TAGNAME}/*" "gs://${BUCKET}/releases/latest/" diff --git a/hack/jenkins/release_github_page.sh b/hack/jenkins/release_github_page.sh index 472682054f3c..c5f699170676 100755 --- a/hack/jenkins/release_github_page.sh +++ b/hack/jenkins/release_github_page.sh @@ -14,15 +14,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -# This script generates the Github Release page and uploads all the binaries/etc to that page +# This script generates the GitHub Release page and uploads all the binaries/etc to that page # This is intended to be run on a new release tag in order to generate the github release page for that release # The script expects the following env variables: # VERSION_MAJOR: The major version of the tag to be released. # VERSION_MINOR: The minor version of the tag to be released. # VERSION_BUILD: The build version of the tag to be released. -# ISO_SHA256: The sha 256 of the minikube-iso for the current release. -# GITHUB_TOKEN: The Github API access token. Injected by the Jenkins credential provider. +# ISO_SHA256_AMD64: The sha 256 of the amd64 minikube-iso for the current release. +# ISO_SHA256_ARM64: The sha 256 of the arm64 minikube-iso for the current release. +# GITHUB_TOKEN: The GitHub API access token. Injected by the Jenkins credential provider. set -eux -o pipefail readonly VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}" @@ -35,6 +36,11 @@ readonly GITHUB_ORGANIZATION="kubernetes" readonly GITHUB_REPO="minikube" readonly PROJECT_NAME="${GITHUB_REPO}" +# installing golang to install github-release +./hack/jenkins/installers/check_install_golang.sh "/usr/local" +# installing latest version of github-release +#./hack/jenkins/installers/check_install_github_release.sh + RELEASE_FLAGS="" if ! [[ ${VERSION_BUILD} =~ ^[0-9]+$ ]]; then RELEASE_FLAGS="-p" # Pre-release @@ -55,9 +61,14 @@ ${RELEASE_NOTES} See [Getting Started](https://minikube.sigs.k8s.io/docs/start/) -## ISO Checksum +## Binary Checksums + +$(cat binary_checksums.txt) + +## ISO Checksums -\`${ISO_SHA256}\`" +amd64: \`${ISO_SHA256_AMD64}\` +arm64: \`${ISO_SHA256_ARM64}\`" # ================================================================================ # Deleting release from github before creating new one @@ -81,7 +92,7 @@ for path in $(gsutil ls "gs://${ISO_BUCKET}/minikube-v${VERSION}*" || true); do done # Upload all end-user assets other than preload files, as they are release independent -for file in $( find out \( -name "minikube[_-]*" -or -name "docker-machine-*" \) -and ! -name "*latest*"); do +for file in $( find out \( -name "minikube[_-]*" -or -name "docker-machine-*" -or -name "kic*" -or -name "licenses.tar.gz" \) ); do n=0 until [ $n -ge 5 ] do diff --git a/hack/jenkins/release_update_brew.sh b/hack/jenkins/release_update_brew.sh deleted file mode 100755 index 8032533d9cf0..000000000000 --- a/hack/jenkins/release_update_brew.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -# Copyright 2016 The Kubernetes Authors All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# This script should be run from the minikube repo root, and requires -# the following env variables to be set: -# VERSION_MAJOR -# VERSION_MINOR -# VERSION_BUILD -# access_token - -set -eux -o pipefail - -readonly REPO_DIR=$PWD -readonly NEW_VERSION=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} -readonly SRC_DIR=$(mktemp -d) -readonly TAG="v${NEW_VERSION}" - -if ! [[ "${VERSION_BUILD}" =~ ^[0-9]+$ ]]; then - echo "NOTE: ${NEW_VERSION} appears to be a non-standard release, not updating brew" - exit 0 -fi - -cd "${SRC_DIR}" -git clone https://github.com/kubernetes/minikube -cd minikube -readonly revision=$(git rev-list -n1 "${TAG}") - -# Required for the brew command -export HOMEBREW_GITHUB_API_TOKEN="${access_token}" - -# brew installed as the Jenkins user using: -# sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)" -export PATH=/home/linuxbrew/.linuxbrew/bin:$PATH - -# avoid "error: you need to resolve your current index first" message -cd "${SRC_DIR}" - -brew bump-formula-pr \ - --strict minikube \ - --revision="${revision}" \ - --message="This PR was automatically created by minikube release scripts. Contact @medyagh with any questions." \ - --no-browse \ - --tag="${TAG}" \ - && status=0 || status=$? - -rm -Rf "${SRC_DIR}" -exit $status diff --git a/hack/jenkins/release_update_releases_json.go b/hack/jenkins/release_update_releases_json.go new file mode 100644 index 000000000000..1a556d2bac98 --- /dev/null +++ b/hack/jenkins/release_update_releases_json.go @@ -0,0 +1,266 @@ +/* +Copyright 2022 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "encoding/json" + "flag" + "fmt" + "log" + "os" +) + +type operatingSystems struct { + Darwin string `json:"darwin,omitempty"` + Linux string `json:"linux,omitempty"` + Windows string `json:"windows,omitempty"` +} + +type checksums struct { + AMD64 *operatingSystems `json:"amd64,omitempty"` + ARM *operatingSystems `json:"arm,omitempty"` + ARM64 *operatingSystems `json:"arm64,omitempty"` + PPC64LE *operatingSystems `json:"ppc64le,omitempty"` + S390X *operatingSystems `json:"s390x,omitempty"` + operatingSystems +} + +type release struct { + Checksums checksums `json:"checksums"` + Name string `json:"name"` +} + +type releases struct { + Releases []release +} + +func (r *releases) UnmarshalJSON(p []byte) error { + return json.Unmarshal(p, &r.Releases) +} + +func main() { + legacy := flag.Bool("legacy", false, "Updated the releases file using the legacy format") + releasesFile := flag.String("releases-file", "", "The path to the releases file") + version := flag.String("version", "", "The version of minikube to create the entry for") + flag.Parse() + + if *releasesFile == "" || *version == "" { + fmt.Println("The releases-file & version flags are required and cannot be empty") + flag.PrintDefaults() + os.Exit(1) + } + + if *legacy { + if err := updateReleasesLegacy(*releasesFile, *version); err != nil { + log.Fatal(err) + } + return + } + + if err := updateReleases(*releasesFile, *version); err != nil { + log.Fatal(err) + } +} + +func updateReleases(releasesFile, version string) error { + r, err := getReleases(releasesFile) + if err != nil { + return err + } + + e := createBareRelease(version) + + shaMap := getSHAMap(&e.Checksums) + for os, archs := range shaMap { + for arch, sumVars := range archs { + sha, err := getSHA(os, arch) + if err != nil { + return err + } + for _, sumVar := range sumVars { + *sumVar = sha + } + + } + } + + r.Releases = append([]release{e}, r.Releases...) + + return updateJSON(releasesFile, r) +} + +func getReleases(path string) (releases, error) { + r := releases{} + + b, err := os.ReadFile(path) + if err != nil { + return r, fmt.Errorf("failed to read in releases file %q: %v", path, err) + } + + if err := json.Unmarshal(b, &r); err != nil { + return r, fmt.Errorf("failed to unmarshal releases file: %v", err) + } + + return r, nil +} + +func createBareRelease(name string) release { + return release{ + Checksums: checksums{ + AMD64: &operatingSystems{}, + ARM: &operatingSystems{}, + ARM64: &operatingSystems{}, + PPC64LE: &operatingSystems{}, + S390X: &operatingSystems{}, + }, + Name: name, + } +} + +func getSHAMap(c *checksums) map[string]map[string][]*string { + return map[string]map[string][]*string{ + "darwin": { + "amd64": {&c.AMD64.Darwin, &c.Darwin}, + "arm64": {&c.ARM64.Darwin}, + }, + "linux": { + "amd64": {&c.AMD64.Linux, &c.Linux}, + "arm": {&c.ARM.Linux}, + "arm64": {&c.ARM64.Linux}, + "ppc64le": {&c.PPC64LE.Linux}, + "s390x": {&c.S390X.Linux}, + }, + "windows": { + "amd64": {&c.AMD64.Windows, &c.Windows}, + }, + } +} + +func getSHA(operatingSystem, arch string) (string, error) { + if operatingSystem == "windows" { + arch += ".exe" + } + filePath := fmt.Sprintf("out/minikube-%s-%s.sha256", operatingSystem, arch) + b, err := os.ReadFile(filePath) + if err != nil { + return "", fmt.Errorf("failed to read file %q: %v", filePath, err) + } + // trim off new line character + sha := string(b[:len(b)-1]) + fmt.Printf("%s-%s: `%s`\n", operatingSystem, arch, sha) + return sha, nil +} + +func updateJSON(path string, r releases) error { + b, err := json.MarshalIndent(r.Releases, "", " ") + if err != nil { + return fmt.Errorf("failed to marshal releases to JSON: %v", err) + } + + if err := os.WriteFile(path, b, 0644); err != nil { + return fmt.Errorf("failed to write JSON to file: %v", err) + } + return nil +} + +type releaseLegacy struct { + Checksums *operatingSystems `json:"checksums,omitempty"` + Name string `json:"name"` +} + +type releasesLegacy struct { + Releases []releaseLegacy +} + +func (r *releasesLegacy) UnmarshalJSON(p []byte) error { + return json.Unmarshal(p, &r.Releases) +} + +func updateReleasesLegacy(releasesFile, version string) error { + r, err := getReleasesLegacy(releasesFile) + if err != nil { + return err + } + + e := createBareReleaseLegacy(version) + + shaMap := getSHAMapLegacy(e.Checksums) + for os, archs := range shaMap { + for arch, sumVars := range archs { + sha, err := getSHA(os, arch) + if err != nil { + return err + } + for _, sumVar := range sumVars { + *sumVar = sha + } + + } + } + + r.Releases = append([]releaseLegacy{e}, r.Releases...) + + return updateJSONLegacy(releasesFile, r) +} + +func getReleasesLegacy(path string) (releasesLegacy, error) { + r := releasesLegacy{} + + b, err := os.ReadFile(path) + if err != nil { + return r, fmt.Errorf("failed to read in releases file %q: %v", path, err) + } + + if err := json.Unmarshal(b, &r); err != nil { + return r, fmt.Errorf("failed to unmarshal releases file: %v", err) + } + + return r, nil +} + +func createBareReleaseLegacy(name string) releaseLegacy { + return releaseLegacy{ + Checksums: &operatingSystems{}, + Name: name, + } +} + +func getSHAMapLegacy(c *operatingSystems) map[string]map[string][]*string { + return map[string]map[string][]*string{ + "darwin": { + "amd64": {&c.Darwin}, + }, + "linux": { + "amd64": {&c.Linux}, + }, + "windows": { + "amd64": {&c.Windows}, + }, + } +} + +func updateJSONLegacy(path string, r releasesLegacy) error { + b, err := json.MarshalIndent(r.Releases, "", " ") + if err != nil { + return fmt.Errorf("failed to marshal releases to JSON: %v", err) + } + + if err := os.WriteFile(path, b, 0644); err != nil { + return fmt.Errorf("failed to write JSON to file: %v", err) + } + return nil +} diff --git a/hack/jenkins/release_update_releases_json.sh b/hack/jenkins/release_update_releases_json.sh index 71a10602d4c4..2d8979b2a222 100755 --- a/hack/jenkins/release_update_releases_json.sh +++ b/hack/jenkins/release_update_releases_json.sh @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# This script generates the Github Release page and uploads all the binaries/etc to that page +# This script generates the GitHub Release page and uploads all the binaries/etc to that page # This is intended to be run on a new release tag in order to generate the github release page for that release # The script expects the following env variables: @@ -24,11 +24,12 @@ set -e -export TAGNAME=v${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} +./hack/jenkins/installers/check_install_golang.sh "/usr/local" + +# Get directory of script. +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -export DARWIN_SHA256=$(cat out/minikube-darwin-amd64.sha256) -export LINUX_SHA256=$(cat out/minikube-linux-amd64.sha256) -export WINDOWS_SHA256=$(cat out/minikube-windows-amd64.exe.sha256) +export TAGNAME=v${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} # Update releases.json w/ new release in gcs and github git config user.name "minikube-bot" @@ -39,35 +40,37 @@ git checkout -b "jenkins-releases.json-${TAGNAME}" git status if ! [[ "${VERSION_BUILD}" =~ ^[0-9]+$ ]]; then - #Prepends the new version to the release-beta.json file - sed -i "0,/{/s/{/{\n \"name\": \"${TAGNAME}\",\n \"checksums\": {\n \"darwin\": \"${DARWIN_SHA256}\",\n \"linux\": \"${LINUX_SHA256}\",\n \"windows\": \"${WINDOWS_SHA256}\"\n }\n },\n {"/ deploy/minikube/releases-beta.json + go run "${DIR}/release_update_releases_json.go" --releases-file deploy/minikube/releases-beta.json --version "$TAGNAME" --legacy + go run "${DIR}/release_update_releases_json.go" --releases-file deploy/minikube/releases-beta-v2.json --version "$TAGNAME" > binary_checksums.txt - git add -A - git commit -m "Update releases-beta.json to include ${TAGNAME}" + git add deploy/minikube/* + git commit -m "Update releases-beta.json & releases-beta-v2.json to include ${TAGNAME}" git remote add minikube-bot git@github.com:minikube-bot/minikube.git git push -f minikube-bot jenkins-releases.json-${TAGNAME} # Send PR from minikube-bot/minikube to kubernetes/minikube - curl -X POST -u minikube-bot:${BOT_PASSWORD} -k -d "{\"title\": \"update releases-beta.json to include ${TAGNAME}\",\"head\": \"minikube-bot:jenkins-releases.json-${TAGNAME}\",\"base\": \"master\"}" https://api.github.com/repos/kubernetes/minikube/pulls + curl -X POST -u minikube-bot:${BOT_PASSWORD} -k -d "{\"title\": \"Post-release: update releases-beta.json & releases-beta-v2.json to include ${TAGNAME}\",\"head\": \"minikube-bot:jenkins-releases.json-${TAGNAME}\",\"base\": \"master\"}" https://api.github.com/repos/kubernetes/minikube/pulls # Upload file to GCS so that minikube can see the new version gsutil cp deploy/minikube/releases-beta.json gs://minikube/releases-beta.json + gsutil cp deploy/minikube/releases-beta-v2.json gs://minikube/releases-beta-v2.json else - #Prepends the new version to the release.json file - sed -i "0,/{/s/{/{\n \"name\": \"${TAGNAME}\",\n \"checksums\": {\n \"darwin\": \"${DARWIN_SHA256}\",\n \"linux\": \"${LINUX_SHA256}\",\n \"windows\": \"${WINDOWS_SHA256}\"\n }\n },\n {"/ deploy/minikube/releases.json + go run "${DIR}/release_update_releases_json.go" --releases-file deploy/minikube/releases.json --version "$TAGNAME" --legacy + go run "${DIR}/release_update_releases_json.go" --releases-file deploy/minikube/releases-v2.json --version "$TAGNAME" > binary_checksums.txt #Update the front page of our documentation now=$(date +"%b %d, %Y") sed -i "s/Latest Release: .* (/Latest Release: ${TAGNAME} - ${now} (/" site/content/en/docs/_index.md - git add -A - git commit -m "Update releases.json to include ${TAGNAME}" + git add deploy/minikube/* site/content/en/docs/_index.md + git commit -m "Update releases.json & releases-v2.json to include ${TAGNAME}" git remote add minikube-bot git@github.com:minikube-bot/minikube.git git push -f minikube-bot jenkins-releases.json-${TAGNAME} # Send PR from minikube-bot/minikube to kubernetes/minikube - curl -X POST -u minikube-bot:${BOT_PASSWORD} -k -d "{\"title\": \"update releases.json to include ${TAGNAME}\",\"head\": \"minikube-bot:jenkins-releases.json-${TAGNAME}\",\"base\": \"master\"}" https://api.github.com/repos/kubernetes/minikube/pulls + curl -X POST -u minikube-bot:${BOT_PASSWORD} -k -d "{\"title\": \"Post-release: update releases.json & releases-v2.json to include ${TAGNAME}\",\"head\": \"minikube-bot:jenkins-releases.json-${TAGNAME}\",\"base\": \"master\"}" https://api.github.com/repos/kubernetes/minikube/pulls # Upload file to GCS so that minikube can see the new version gsutil cp deploy/minikube/releases.json gs://minikube/releases.json + gsutil cp deploy/minikube/releases-v2.json gs://minikube/releases-v2.json fi diff --git a/hack/jenkins/setup_docker_desktop_macos.sh b/hack/jenkins/setup_docker_desktop_macos.sh index ed090ddb5be3..9e888dd27fe7 100755 --- a/hack/jenkins/setup_docker_desktop_macos.sh +++ b/hack/jenkins/setup_docker_desktop_macos.sh @@ -21,7 +21,10 @@ if docker system info > /dev/null 2>&1; then exit 0 fi -# kill docker first +# kill Docker so we can freshly start it +# IMPORTANT: Docker Desktop has to be stopped before Docker Engine +# See https://github.com/kubernetes/minikube/pull/16150 +osascript -e 'quit app "Docker Desktop"' osascript -e 'quit app "Docker"' # wait 2 minutes for it to start back up diff --git a/hack/jenkins/setup_docker_desktop_windows.ps1 b/hack/jenkins/setup_docker_desktop_windows.ps1 index fe71f046cf9b..75924b879cc8 100644 --- a/hack/jenkins/setup_docker_desktop_windows.ps1 +++ b/hack/jenkins/setup_docker_desktop_windows.ps1 @@ -12,14 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. -Get-Process "*Docker Desktop*" | Stop-Process +if (Get-Process "*Docker Desktop*") { + Write-Host "Docker is already running!" + exit 0 +} $attempt = 1 while($attempt -le 10) { Write-Host "Attempt ", $attempt - Write-Host "Wait for 5 minutes" + Write-Host "Wait for 3 minutes" & "C:\Program Files\Docker\Docker\Docker Desktop.exe" - Start-Sleep 300 + Start-Sleep 180 $dockerInfo = docker info Write-Host "Docker Info ", $dockerInfo $serverVersion = $dockerInfo | Where-Object {$_ -Match "Server Version"} diff --git a/hack/jenkins/storage_provisioner.sh b/hack/jenkins/storage_provisioner.sh index afe877e9d8fb..fb77142f8f70 100755 --- a/hack/jenkins/storage_provisioner.sh +++ b/hack/jenkins/storage_provisioner.sh @@ -44,7 +44,7 @@ if [ $ec -gt 0 ]; then fi # Bump the preload version -PLV=$(egrep "PreloadVersion =" pkg/minikube/download/preload.go | cut -d \" -f 2) +PLV=$(grep -E "PreloadVersion =" pkg/minikube/download/preload.go | cut -d \" -f 2) RAW=${PLV:1} RAW=$((RAW+1)) PLV=v${RAW} diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.go b/hack/jenkins/test-flake-chart/compute_flake_rate.go index 3b1f0904018d..89e5bc6e85a8 100644 --- a/hack/jenkins/test-flake-chart/compute_flake_rate.go +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.go @@ -58,13 +58,14 @@ func main() { } // One entry of a test run. -// Example: TestEntry { -// name: "TestFunctional/parallel/LogsCmd", -// environment: "Docker_Linux", -// date: time.Now, -// status: "Passed", -// duration: 0.1, -// } +// +// Example: TestEntry { +// name: "TestFunctional/parallel/LogsCmd", +// environment: "Docker_Linux", +// date: time.Now, +// status: "Passed", +// duration: 0.1, +// } type testEntry struct { name string environment string @@ -73,7 +74,7 @@ type testEntry struct { duration float32 } -// A map with keys of (environment, test_name) to values of slcies of TestEntry. +// A map with keys of (environment, test_name) to values of slices of TestEntry. type splitEntryMap map[string]map[string][]testEntry // Reads CSV `file` and consumes each line to be a single TestEntry. @@ -105,7 +106,7 @@ func readData(file io.Reader) []testEntry { } } if len(fields) != 9 { - fmt.Printf("Found line with wrong number of columns. Expectd 9, but got %d - skipping\n", len(fields)) + fmt.Printf("Found line with wrong number of columns. Expected 9, but got %d - skipping\n", len(fields)) continue } previousLine = fields diff --git a/hack/jenkins/test-flake-chart/compute_flake_rate.sh b/hack/jenkins/test-flake-chart/compute_flake_rate.sh old mode 100644 new mode 100755 index eb4c6d51657f..186af3dcdfaa --- a/hack/jenkins/test-flake-chart/compute_flake_rate.sh +++ b/hack/jenkins/test-flake-chart/compute_flake_rate.sh @@ -39,7 +39,7 @@ CLOSE_ISSUE_THRESHOLD=20 "${DIR}/../installers/check_install_gh.sh" || true -# Get a list of issues from Github and extract only those that look like flake issues. +# Get a list of issues from GitHub and extract only those that look like flake issues. # Sort by test name for later usage. EXISTING_ISSUES_LIST=$(mktemp) gh issue list -L 10000 -s all -A "minikube-bot" -l kind/failing-test \ @@ -161,7 +161,7 @@ for ROW in $(cat ${MID_FLAKES_ISSUES}); do # Clear $ISSUE_BODY_TMP and fill with the standard header. printf "This test has high flake rates for the following environments:\n\n|Environment|Flake Rate (%%)|\n|---|---|\n" > "${ISSUE_BODY_TMP}" - TEST_CHART_LINK_FORMAT='https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=%1$s&test='${TEST_NAME} + TEST_CHART_LINK_FORMAT='https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=%1$s&test='${TEST_NAME} # 1) Filter $MID_FLAKES_DATA to only include entries with the given test name # 2) Sort by flake rates in descending order # 3) Format the entry into a row in the table diff --git a/hack/jenkins/test-flake-chart/flake_chart.html b/hack/jenkins/test-flake-chart/flake_chart.html index 6f4e8a083f0b..e963023c5bff 100644 --- a/hack/jenkins/test-flake-chart/flake_chart.html +++ b/hack/jenkins/test-flake-chart/flake_chart.html @@ -23,10 +23,9 @@ +
- +
+ + + + +

kubernetes/minikube

+
2016-01-01 — 2016-12-31
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/2017.html b/site/content/en/docs/contrib/leaderboard/2017.html new file mode 100644 index 000000000000..bc5e6192a5cc --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/2017.html @@ -0,0 +1,519 @@ +--- +title: "2017" +linkTitle: "2017" +weight: -99992017 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2017-01-01 — 2017-12-31
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/2018.html b/site/content/en/docs/contrib/leaderboard/2018.html new file mode 100644 index 000000000000..b8c850768b78 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/2018.html @@ -0,0 +1,522 @@ +--- +title: "2018" +linkTitle: "2018" +weight: -99992018 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2018-01-01 — 2018-12-31
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/2019.html b/site/content/en/docs/contrib/leaderboard/2019.html new file mode 100644 index 000000000000..25b4baefb1f9 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/2019.html @@ -0,0 +1,520 @@ +--- +title: "2019" +linkTitle: "2019" +weight: -99992019 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2019-01-01 — 2019-12-31
+

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/2020.html b/site/content/en/docs/contrib/leaderboard/2020.html new file mode 100644 index 000000000000..639400da8d91 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/2020.html @@ -0,0 +1,522 @@ +--- +title: "2020" +linkTitle: "2020" +weight: -99992020 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2020-01-01 — 2020-12-31
+

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/2021.html b/site/content/en/docs/contrib/leaderboard/2021.html new file mode 100644 index 000000000000..690b78cde500 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/2021.html @@ -0,0 +1,521 @@ +--- +title: "2021" +linkTitle: "2021" +weight: -99992021 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2021-01-01 — 2021-12-31
+

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/2022.html b/site/content/en/docs/contrib/leaderboard/2022.html new file mode 100644 index 000000000000..ac377eeb67eb --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/2022.html @@ -0,0 +1,520 @@ +--- +title: "2022" +linkTitle: "2022" +weight: -99992022 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2022-01-01 — 2022-12-31
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/2023.html b/site/content/en/docs/contrib/leaderboard/2023.html new file mode 100644 index 000000000000..04e39a10ac9b --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/2023.html @@ -0,0 +1,517 @@ +--- +title: "2023" +linkTitle: "2023" +weight: -99992023 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2023-01-01 — 2023-12-31
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/2024.html b/site/content/en/docs/contrib/leaderboard/2024.html new file mode 100644 index 000000000000..f65c9fb8bb49 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/2024.html @@ -0,0 +1,519 @@ +--- +title: "2024" +linkTitle: "2024" +weight: -99992024 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2024-01-01 — 2024-12-31
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/2025.html b/site/content/en/docs/contrib/leaderboard/2025.html new file mode 100644 index 000000000000..e0936fd22948 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/2025.html @@ -0,0 +1,505 @@ +--- +title: "2025" +linkTitle: "2025" +weight: -99992025 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2025-01-01 — 2025-11-30
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/_index.md b/site/content/en/docs/contrib/leaderboard/_index.md index f122356b13b2..e72c922b4acc 100644 --- a/site/content/en/docs/contrib/leaderboard/_index.md +++ b/site/content/en/docs/contrib/leaderboard/_index.md @@ -3,5 +3,5 @@ title: "Triage & Contributions Leaderboard" linkTitle: "Triage & Contributions Leaderboard" weight: 10 description: > - Contributions split by release ---- \ No newline at end of file + Contributions split by year and release +--- diff --git a/site/content/en/docs/contrib/leaderboard/v1.22.0.html b/site/content/en/docs/contrib/leaderboard/v1.22.0.html index 4055e04a32d9..4a89ff27b2a3 100644 --- a/site/content/en/docs/contrib/leaderboard/v1.22.0.html +++ b/site/content/en/docs/contrib/leaderboard/v1.22.0.html @@ -6,6 +6,7 @@ kubernetes/minikube - Leaderboard + @@ -188,9 +189,9 @@

Most Demanding

["sharifelgamal", 16, "16"], ["ilya-zuyev", 8, "8"], ["spowelljr", 7, "7"], - ["prezha", 0, "0"], - ["tharun208", 0, "0"], ["afbjorklund", 0, "0"], + ["tharun208", 0, "0"], + ["prezha", 0, "0"], ]); @@ -236,11 +237,11 @@

Most Active

["jeffmaury", 4, "4"], ["afbjorklund", 3, "3"], ["dinever", 2, "2"], - ["MaximeKjaer", 1, "1"], - ["RA489", 1, "1"], - ["sharmarajdaksh", 1, "1"], ["vishjain", 1, "1"], - ["daehyeok", 1, "1"], + ["zhangdb-git", 1, "1"], + ["sharmarajdaksh", 1, "1"], + ["felipecrescencio", 1, "1"], + ["JacekDuszenko", 1, "1"], ["dongjoon-hyun", 1, "1"], ]); @@ -288,7 +289,7 @@

Big Movers

["MaximeKjaer", 30, "30"], ["JacekDuszenko", 6, "6"], ["felipecrescencio", 4, "4"], - ["RA489", 2, "2"], + ["zhangdb-git", 2, "2"], ]); @@ -372,21 +373,21 @@

Most Active

function drawcomments() { var data = new google.visualization.arrayToDataTable([ [{label:'',type:'string'},{label: '# of comments', type: 'number'}, { role: 'annotation' }], - ["afbjorklund", 36, "36"], - ["sharifelgamal", 22, "22"], - ["medyagh", 22, "22"], - ["spowelljr", 7, "7"], - ["vishjain", 6, "6"], - ["andriyDev", 5, "5"], + ["afbjorklund", 30, "30"], + ["sharifelgamal", 17, "17"], + ["medyagh", 14, "14"], + ["vishjain", 5, "5"], ["JacekDuszenko", 5, "5"], - ["mahalrs", 4, "4"], - ["RA489", 4, "4"], ["mathieuruellan", 4, "4"], - ["rajdevworks", 3, "3"], - ["secmobi", 2, "2"], - ["andrewmiron", 2, "2"], + ["spowelljr", 4, "4"], + ["mahalrs", 3, "3"], ["totore86", 2, "2"], + ["J-Curragh", 2, "2"], ["ilya-zuyev", 2, "2"], + ["andriyDev", 2, "2"], + ["andrewmiron", 2, "2"], + ["secmobi", 2, "2"], + ["dinever", 1, "1"], ]); @@ -419,21 +420,21 @@

Most Helpful

function drawcommentWords() { var data = new google.visualization.arrayToDataTable([ [{label:'',type:'string'},{label: '# of words (excludes authored)', type: 'number'}, { role: 'annotation' }], - ["afbjorklund", 2050, "2050"], - ["medyagh", 897, "897"], - ["spowelljr", 444, "444"], + ["afbjorklund", 1519, "1519"], + ["medyagh", 676, "676"], ["alexio777", 357, "357"], - ["prezha", 314, "314"], + ["spowelljr", 271, "271"], ["annopohjala", 249, "249"], - ["sharifelgamal", 245, "245"], ["andrewmiron", 225, "225"], ["secmobi", 221, "221"], ["J-Curragh", 207, "207"], - ["vmorris", 174, "174"], + ["sharifelgamal", 186, "186"], ["Srikrishnabh", 139, "139"], ["totore86", 127, "127"], ["cscotti", 115, "115"], ["gongpengjun", 106, "106"], + ["vmorris", 101, "101"], + ["mathieuruellan", 94, "94"], ]); diff --git a/site/content/en/docs/contrib/leaderboard/v1.23.0.html b/site/content/en/docs/contrib/leaderboard/v1.23.0.html new file mode 100644 index 000000000000..a1c5c98a8bbb --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.23.0.html @@ -0,0 +1,512 @@ +--- +title: "v1.23.0 - 2021-09-03" +linkTitle: "v1.23.0 - 2021-09-03" +weight: -99 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2021-07-07 — 2021-09-03
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.23.1.html b/site/content/en/docs/contrib/leaderboard/v1.23.1.html new file mode 100644 index 000000000000..7b11ad52ec27 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.23.1.html @@ -0,0 +1,468 @@ +--- +title: "v1.23.1 - 2021-09-17" +linkTitle: "v1.23.1 - 2021-09-17" +weight: -100 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2021-09-03 — 2021-09-17
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.23.2.html b/site/content/en/docs/contrib/leaderboard/v1.23.2.html new file mode 100644 index 000000000000..7950883300fa --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.23.2.html @@ -0,0 +1,434 @@ +--- +title: "v1.23.2 - 2021-09-21" +linkTitle: "v1.23.2 - 2021-09-21" +weight: -101 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2021-09-17 — 2021-09-21
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.24.0.html b/site/content/en/docs/contrib/leaderboard/v1.24.0.html new file mode 100644 index 000000000000..7e29fc4b943a --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.24.0.html @@ -0,0 +1,504 @@ +--- +title: "v1.24.0 - 2021-11-04" +linkTitle: "v1.24.0 - 2021-11-04" +weight: -102 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2021-09-21 — 2021-11-04
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.25.0.html b/site/content/en/docs/contrib/leaderboard/v1.25.0.html new file mode 100644 index 000000000000..14b8116e6562 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.25.0.html @@ -0,0 +1,520 @@ +--- +title: "v1.25.0 - 2022-01-19" +linkTitle: "v1.25.0 - 2022-01-19" +weight: -103 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2021-11-04 — 2022-01-19
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.25.1.html b/site/content/en/docs/contrib/leaderboard/v1.25.1.html new file mode 100644 index 000000000000..65d793142e8e --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.25.1.html @@ -0,0 +1,413 @@ +--- +title: "v1.25.1 - 2022-01-20" +linkTitle: "v1.25.1 - 2022-01-20" +weight: -104 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2022-01-19 — 2022-01-20
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.25.2.html b/site/content/en/docs/contrib/leaderboard/v1.25.2.html new file mode 100644 index 000000000000..e135516eb39c --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.25.2.html @@ -0,0 +1,509 @@ +--- +title: "v1.25.2 - 2022-02-24" +linkTitle: "v1.25.2 - 2022-02-24" +weight: -105 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2022-01-20 — 2022-02-24
+ + + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.26.0.html b/site/content/en/docs/contrib/leaderboard/v1.26.0.html new file mode 100644 index 000000000000..d16b56804d42 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.26.0.html @@ -0,0 +1,519 @@ +--- +title: "v1.26.0 - 2022-06-22" +linkTitle: "v1.26.0 - 2022-06-22" +weight: -106 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2022-02-24 — 2022-06-22
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.26.1.html b/site/content/en/docs/contrib/leaderboard/v1.26.1.html new file mode 100644 index 000000000000..cf158af72dff --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.26.1.html @@ -0,0 +1,487 @@ +--- +title: "v1.26.1 - 2022-08-02" +linkTitle: "v1.26.1 - 2022-08-02" +weight: -107 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2022-06-22 — 2022-08-02
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.27.0.html b/site/content/en/docs/contrib/leaderboard/v1.27.0.html new file mode 100644 index 000000000000..86a7dd3d1f7f --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.27.0.html @@ -0,0 +1,492 @@ +--- +title: "v1.27.0 - 2022-09-15" +linkTitle: "v1.27.0 - 2022-09-15" +weight: -108 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2022-08-02 — 2022-09-15
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.27.1.html b/site/content/en/docs/contrib/leaderboard/v1.27.1.html new file mode 100644 index 000000000000..0488fd525486 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.27.1.html @@ -0,0 +1,467 @@ +--- +title: "v1.27.1 - 2022-10-07" +linkTitle: "v1.27.1 - 2022-10-07" +weight: -109 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2022-09-15 — 2022-10-07
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.28.0.html b/site/content/en/docs/contrib/leaderboard/v1.28.0.html new file mode 100644 index 000000000000..71ef7586facb --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.28.0.html @@ -0,0 +1,474 @@ +--- +title: "v1.28.0 - 2022-11-04" +linkTitle: "v1.28.0 - 2022-11-04" +weight: -110 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2022-10-07 — 2022-11-04
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.29.0.html b/site/content/en/docs/contrib/leaderboard/v1.29.0.html new file mode 100644 index 000000000000..f5d3c2a4fe55 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.29.0.html @@ -0,0 +1,498 @@ +--- +title: "v1.29.0 - 2023-01-27" +linkTitle: "v1.29.0 - 2023-01-27" +weight: -111 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2022-11-04 — 2023-01-27
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.30.0.html b/site/content/en/docs/contrib/leaderboard/v1.30.0.html new file mode 100644 index 000000000000..1e1180dffb3b --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.30.0.html @@ -0,0 +1,493 @@ +--- +title: "v1.30.0 - 2023-04-03" +linkTitle: "v1.30.0 - 2023-04-03" +weight: -112 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2023-01-27 — 2023-04-03
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.30.1.html b/site/content/en/docs/contrib/leaderboard/v1.30.1.html new file mode 100644 index 000000000000..4c449b48e350 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.30.1.html @@ -0,0 +1,413 @@ +--- +title: "v1.30.1 - 2023-04-04" +linkTitle: "v1.30.1 - 2023-04-04" +weight: -113 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2023-04-03 — 2023-04-04
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.31.0.html b/site/content/en/docs/contrib/leaderboard/v1.31.0.html new file mode 100644 index 000000000000..823ba6503fdc --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.31.0.html @@ -0,0 +1,514 @@ +--- +title: "v1.31.0 - 2023-07-18" +linkTitle: "v1.31.0 - 2023-07-18" +weight: -114 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2023-04-04 — 2023-07-18
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.31.1.html b/site/content/en/docs/contrib/leaderboard/v1.31.1.html new file mode 100644 index 000000000000..b8f1c7db85f2 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.31.1.html @@ -0,0 +1,411 @@ +--- +title: "v1.31.1 - 2023-07-20" +linkTitle: "v1.31.1 - 2023-07-20" +weight: -115 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2023-07-18 — 2023-07-20
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.31.2.html b/site/content/en/docs/contrib/leaderboard/v1.31.2.html new file mode 100644 index 000000000000..970fa179c9e2 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.31.2.html @@ -0,0 +1,474 @@ +--- +title: "v1.31.2 - 2023-08-16" +linkTitle: "v1.31.2 - 2023-08-16" +weight: -116 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2023-07-20 — 2023-08-16
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.32.0.html b/site/content/en/docs/contrib/leaderboard/v1.32.0.html new file mode 100644 index 000000000000..23b41e7e8c2a --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.32.0.html @@ -0,0 +1,492 @@ +--- +title: "v1.32.0 - 2023-11-08" +linkTitle: "v1.32.0 - 2023-11-08" +weight: -117 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2023-08-16 — 2023-11-08
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.33.0.html b/site/content/en/docs/contrib/leaderboard/v1.33.0.html new file mode 100644 index 000000000000..87471d7085cb --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.33.0.html @@ -0,0 +1,517 @@ +--- +title: "v1.33.0 - 2024-04-19" +linkTitle: "v1.33.0 - 2024-04-19" +weight: -118 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2023-11-08 — 2024-04-19
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.33.1.html b/site/content/en/docs/contrib/leaderboard/v1.33.1.html new file mode 100644 index 000000000000..e87adace420f --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.33.1.html @@ -0,0 +1,462 @@ +--- +title: "v1.33.1 - 2024-05-13" +linkTitle: "v1.33.1 - 2024-05-13" +weight: -119 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2024-04-19 — 2024-05-13
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.34.0.html b/site/content/en/docs/contrib/leaderboard/v1.34.0.html new file mode 100644 index 000000000000..184f2821914f --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.34.0.html @@ -0,0 +1,501 @@ +--- +title: "v1.34.0 - 2024-09-09" +linkTitle: "v1.34.0 - 2024-09-09" +weight: -120 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2024-05-13 — 2024-09-09
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.35.0.html b/site/content/en/docs/contrib/leaderboard/v1.35.0.html new file mode 100644 index 000000000000..663f9455028a --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.35.0.html @@ -0,0 +1,488 @@ +--- +title: "v1.35.0 - 2025-01-16" +linkTitle: "v1.35.0 - 2025-01-16" +weight: -121 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2024-09-09 — 2025-01-16
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.36.0.html b/site/content/en/docs/contrib/leaderboard/v1.36.0.html new file mode 100644 index 000000000000..ed6ec8776885 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.36.0.html @@ -0,0 +1,488 @@ +--- +title: "v1.36.0 - 2025-05-22" +linkTitle: "v1.36.0 - 2025-05-22" +weight: -122 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2025-01-16 — 2025-05-22
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/leaderboard/v1.37.0.html b/site/content/en/docs/contrib/leaderboard/v1.37.0.html new file mode 100644 index 000000000000..8246526109a0 --- /dev/null +++ b/site/content/en/docs/contrib/leaderboard/v1.37.0.html @@ -0,0 +1,510 @@ +--- +title: "v1.37.0 - 2025-09-09" +linkTitle: "v1.37.0 - 2025-09-09" +weight: -123 +--- + + + kubernetes/minikube - Leaderboard + + + + + + + + +

kubernetes/minikube

+
2025-05-22 — 2025-09-09
+ + +

Reviewers

+ + +
+

Most Influential

+

# of Merged PRs reviewed

+
+ +
+ +
+

Most Helpful

+

# of words written in merged PRs

+
+ +
+ +
+

Most Demanding

+

# of Review Comments in merged PRs

+
+ +
+ + +

Pull Requests

+ + +
+

Most Active

+

# of Pull Requests Merged

+
+ +
+ +
+

Big Movers

+

Lines of code (delta)

+
+ +
+ +
+

Most difficult to review

+

Average PR size (added+changed)

+
+ +
+ + +

Issues

+ + +
+

Most Active

+

# of comments

+
+ +
+ +
+

Most Helpful

+

# of words (excludes authored)

+
+ +
+ +
+

Top Closers

+

# of issues closed (excludes authored)

+
+ +
+ + + + diff --git a/site/content/en/docs/contrib/releasing/binaries.md b/site/content/en/docs/contrib/releasing/binaries.md index f3c21e4c5975..54320b9cdc48 100644 --- a/site/content/en/docs/contrib/releasing/binaries.md +++ b/site/content/en/docs/contrib/releasing/binaries.md @@ -34,7 +34,7 @@ Run the `kic-release` job in Jenkins, which will automatically create a PR which Run the following script from your local upstream repo copy to generate updated release notes: ```shell -hack/release_notes.sh +make release-notes ``` Paste the output into CHANGELOG.md, sorting changes by importance to an end-user. If there are >8 changes, split them into *Improvements* and *Bug fixes* @@ -53,13 +53,6 @@ You may merge this PR at any time, or combine it with a `Makefile` update PR. Update the version numbers in `Makefile`: * `VERSION_MAJOR`, `VERSION_MINOR`, `VERSION_BUILD` -* `ISO_VERSION`: - - beta releases use: `v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD)` - - major/minor releases use: `v$(VERSION_MAJOR).$(VERSION_MINOR).0` - - if the ISO was updated, a patch release may use `v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD)` -* `DEB_REVISION`, `RPM_REVISION` - - for all major/minor releases, set to 0 - - if updating .deb/.rpm files without a major/minor release, increment by 1 {{% alert title="Warning" color="warning" %}} Merge this PR only if all non-experimental integration tests pass! @@ -73,13 +66,14 @@ sh hack/tag_release.sh 1.. ## Build the Release -This step uses the git tag to publish new binaries to GCS and create a github release: +This step uses the git tag to publish new binaries to GCS and create a GitHub release: * Navigate to the minikube "Release" jenkins job * Ensure that you are logged in (top right) * Click "▶️ Build with Parameters" (left) * `VERSION_MAJOR`, `VERSION_MINOR`, and `VERSION_BUILD` should reflect the values in your Makefile -* For `ISO_SHA256`, run: `gsutil cat gs://minikube/iso/minikube-v.iso.sha256` +* For `ISO_SHA256_AMD64`, run: `gsutil cat gs://minikube/iso/minikube-v-amd64.iso.sha256` +* For `ISO_SHA256_ARM64`, run: `gsutil cat gs://minikube/iso/minikube-v-arm64.iso.sha256` * Click *Build* ## Check the release logs @@ -92,7 +86,7 @@ After job completion, click "Console Output" to verify that the release complete The release script updates https://storage.googleapis.com/minikube/releases.json - which is used by the minikube binary to check for updates, and is live immediately. -minikube-bot will also send out a PR to merge this into the tree. Please merge this PR to keep GCS and Github in sync. +minikube-bot will also send out a PR to merge this into the tree. Please merge this PR to keep GCS and GitHub in sync. ## Package managers which include minikube @@ -113,6 +107,9 @@ Verify release checksums by running `make check-release` If there are major changes, please send a PR to update +## Update SECURITY-INSIGHTS.yml +Make appropriate changes to [SECURITY-INSIGHTS.yml](https://github.com/kubernetes/minikube/SECURITY-INSIGHTS.yml). Check [OPENSSF Security Insights Specification](https://github.com/ossf/security-insights-spec/blob/main/specification.md) for reference. + ## Announce Please mention the new release https://github.com/kubernetes/minikube/blob/master/README.md @@ -121,4 +118,4 @@ Other places: - #minikube on Slack - minikube-dev, minikube-users mailing list -- Twitter (optional!) +- Twitter (this is now automated with the @minikube_dev account) diff --git a/site/content/en/docs/contrib/releasing/iso.md b/site/content/en/docs/contrib/releasing/iso.md index 269522f7d614..dc1f10ee5341 100644 --- a/site/content/en/docs/contrib/releasing/iso.md +++ b/site/content/en/docs/contrib/releasing/iso.md @@ -16,4 +16,4 @@ Note: you can build the ISO using the `hack/jenkins/build_iso.sh` script locally * For `ISO_BUCKET`, type in `minikube/iso` * Click *Build* -The build will take roughly 50 minutes and will automatically create a PR with the changes. +The build will automatically create a PR with the changes. diff --git a/site/content/en/docs/contrib/roadmap.en.md b/site/content/en/docs/contrib/roadmap.en.md index cf72db6ce9de..fc2b11001547 100644 --- a/site/content/en/docs/contrib/roadmap.en.md +++ b/site/content/en/docs/contrib/roadmap.en.md @@ -6,53 +6,28 @@ description: > Development Roadmap --- -This roadmap is a living document outlining the major technical improvements which we would like to see in minikube during 2020, divided by how they apply to our [guiding principles]({{< ref "/docs/contrib/principles" >}}) +This roadmap is a living document outlining the major technical improvements which we would like to see in minikube over the next year, divided by how they apply to our [guiding principles]({{< ref "/docs/contrib/principles" >}}) Please send a PR to suggest any improvements to it. -# 2020 +# 2025 -## (#1) Inclusive and community-driven +## (#1) AI -- [x] Maintainers from 4 countries, 4 companies -- [ ] Installation documentation in 5+ written languages -- [x] Enhancements approved by a community-driven process +- [x] Add new macOS driver "krunkit" for GPU -## (#2) User-friendly +## (#2) Documentation -- [ ] Automatic installation of hypervisor dependencies -- [ ] Graphical User Interface -- [ ] Built-in 3rd Party ecosystem with 50+ entries +- [ ] Update outdated upstream documentation -## (#3) Support all Kubernetes features +## (#3) Docker -- [x] Multi-node -- [ ] IPv6 -- [ ] Usage documentation for 3 leading CNI providers -- [ ] Automatically publish conformance test results after a release +- [ ] Remove the "docker" container runtime -## (#4) Cross-platform +## (#4) Podman -- [x] VM-free deployment to containers (Docker, Podman) -- [x] Windows as a first-class citizen -- [x] WSL2 support (no additional VM required) -- [ ] Firecracker VM support -- [x] Generic (SSH) driver support +- [ ] Make Podman driver less experimental -## (#5) Reliable +## (#5) libmachine Refactor -- [ ] Resource alerts -- [ ] Time synchronization on HyperKit -- [ ] Prototype post-libmachine implementation of minikube - -## (#6) High Performance - -- [x] Startup latency under 30s -- [ ] Kernel-assisted mounts (CIFS, NFS) by default -- [x] Pause support -- [x] <25% CPU overhead on a single core - -## (#7) Developer Focused - -- [x] Container build integration -- [ ] Documented workflow for Kubernetes development +- [ ] Move minikube-machine inside minikube, remove Docker Machine everywhere diff --git a/site/content/en/docs/contrib/test_flakes.en.md b/site/content/en/docs/contrib/test_flakes.en.md index febd82bf3301..d72af5275001 100644 --- a/site/content/en/docs/contrib/test_flakes.en.md +++ b/site/content/en/docs/contrib/test_flakes.en.md @@ -7,16 +7,20 @@ description: > |OS|Driver|ContainerRuntime|Link| |---|---|---|---| -|Linux|docker|docker|[Docker_Linux](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Linux)| -|Linux|docker|containerd|[Docker_Linux_containerd](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Linux_containerd)| -|Linux|docker|crio|[Docker_Linux_crio](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Linux_crio)| -|Linux - arm64|docker|crio|[Docker_Linux_crio_arm64](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Linux_crio_arm64)| -|Linux - arm64|docker|docker|[Docker_Linux_docker_arm64](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Linux_docker_arm64)| -|Linux|kvm2|docker|[KVM_Linux](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=KVM_Linux)| -|Linux|kvm2|containerd|[KVM_Linux_containerd](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=KVM_Linux_containerd)| -|Linux|kvm2|crio|[KVM_Linux_crio](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=KVM_Linux_crio)| -|Linux|virtualbox|docker|[VirtualBox_Linux](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=VirtualBox_Linux)| -|Linux|none|docker|[none_Linux](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=none_Linux)| -|MacOS|docker|docker|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS)| -|MacOS|hyperkit|docker|[Hyperkit_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Hyperkit_macOS)| -|Windows|docker|docker|[Docker_Windows](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Windows)| +|Linux|docker|docker|[Docker_Linux](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Docker_Linux)| +|Linux|docker|containerd|[Docker_Linux_containerd](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Docker_Linux_containerd)| +|Linux|docker|crio|[Docker_Linux_crio](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Docker_Linux_crio)| +|Linux - arm64|docker|crio|[Docker_Linux_crio_arm64](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Docker_Linux_crio_arm64)| +|Linux - arm64|docker|containerd|[Docker_Linux_containerd_arm64](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Docker_Linux_containerd_arm64)| +|Linux - arm64|docker|docker|[Docker_Linux_docker_arm64](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Docker_Linux_docker_arm64)| +|Linux|kvm2|docker|[KVM_Linux](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=KVM_Linux)| +|Linux|kvm2|containerd|[KVM_Linux_containerd](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=KVM_Linux_containerd)| +|Linux|kvm2|crio|[KVM_Linux_crio](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=KVM_Linux_crio)| +|Linux|virtualbox|docker|[VirtualBox_Linux](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=VirtualBox_Linux)| +|Linux|none|docker|[none_Linux](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=none_Linux)| +|macOS|docker|docker|[Docker_macOS](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Docker_macOS)| +|macOS|hyperkit|docker|[Hyperkit_macOS](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Hyperkit_macOS)| +|macOS|qemu2|docker|[QEMU_macOS](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=QEMU_macOS)| +|Windows|docker|docker|[Docker_Windows](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Docker_Windows)| +|Windows|hyperv|docker|[Hyper-V_Windows](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Hyper-V_Windows)| +|Cloud Shell|docker|docker|[Docker_Cloud_Shell](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=Docker_Cloud_Shell)| diff --git a/site/content/en/docs/contrib/testing.en.md b/site/content/en/docs/contrib/testing.en.md index 85bbc6fbcd5b..33e3d182b54f 100644 --- a/site/content/en/docs/contrib/testing.en.md +++ b/site/content/en/docs/contrib/testing.en.md @@ -8,10 +8,10 @@ description: > ## Prerequisites -* Go distribution - * Specific version depends on minikube version. - * The current dependency version can be found here : [master branch's go.mod file](https://github.com/kubernetes/minikube/blob/master/go.mod). -* If you are on Linux, you will need to install `libvirt-dev`, since unit tests need kvm2 driver: +- Go distribution + - Specific version depends on minikube version. + - The current dependency version can be found here : [master branch's go.mod file](https://github.com/kubernetes/minikube/blob/master/go.mod). +- If you are on Linux, you will need to install `libvirt-dev`, since unit tests need kvm2 driver: ```shell # For Debian based @@ -45,15 +45,19 @@ make integration You may find it useful to set various options to test only a particular test against a non-default driver. For instance: ```shell - env TEST_ARGS="-minikube-start-args=--driver=hyperkit -test.run TestStartStop" make integration - ``` +make integration TEST_ARGS="-minikube-start-args='--driver=vfkit --network=vmnet-shared' -test.run TestStartStop" +``` + +IMPORTANT: +- To pass multiple flags to `-minikube-start-args` you must quote the value +- flag values cannot contain space since the string is split by space ### Quickly iterating on a single test Run a single test on an active cluster: ```shell -make integration -e TEST_ARGS="-test.run TestFunctional/parallel/MountCmd --profile=minikube --cleanup=false" +make integration TEST_ARGS="-test.run TestFunctional/parallel/MountCmd --profile=minikube --cleanup=false" ``` WARNING: For this to work repeatedly, the test must be written so that it cleans up after itself. @@ -65,7 +69,7 @@ See [main_test.go](https://github.com/kubernetes/minikube/blob/master/test/integ ### Disabling parallelism ```shell -make integration -e TEST_ARGS="-test.parallel=1" +make integration TEST_ARGS="-test.parallel=1" ``` ### Testing philosophy @@ -81,26 +85,22 @@ Tests are typically read with a great air of skepticism, because chances are the These are Kubernetes tests that run against an arbitrary cluster and exercise a wide range of Kubernetes features. You can run these against minikube by following these steps: -* Clone the Kubernetes repo somewhere on your system. -* Run `make quick-release` in the k8s repo. -* Start up a minikube cluster with: `minikube start`. -* Set following two environment variables: - -```shell -export KUBECONFIG=$HOME/.kube/config -export KUBERNETES_CONFORMANCE_TEST=y -``` +Install [docker](https://docs.docker.com/engine/install/) +Install [kubectl](https://v1-18.docs.kubernetes.io/docs/tasks/tools/install-kubectl/) +Clone the [minikube repo](https://github.com/kubernetes/minikube) -* Run the tests (from the k8s repo): +### Compile the latest minikube binary -```shell -go run hack/e2e.go -v --test --test_args="--ginkgo.focus=\[Conformance\]" --check-version-skew=false +```console +% cd +% make ``` -To run a specific conformance test, you can use the `ginkgo.focus` flag to filter the set using a regular expression. -The `hack/e2e.go` wrapper and the `e2e.sh` wrappers have a little trouble with quoting spaces though, so use the `\s` regular expression character instead. -For example, to run the test `should update annotations on modification [Conformance]`, use following command: +### Trigger the tests and get back the results -```shell -go run hack/e2e.go -v --test --test_args="--ginkgo.focus=should\supdate\sannotations\son\smodification" --check-version-skew=false +```console +% cd +./hack/conformance_tests.sh out/minikube --driver=docker --container-runtime=docker --kubernetes-version=stable ``` + +This script will run the latest sonobuoy against a minikube cluster with two nodes and the provided parameters. diff --git a/site/content/en/docs/contrib/tests.en.md b/site/content/en/docs/contrib/tests.en.md index f3c3efe62575..1423feb7e2df 100644 --- a/site/content/en/docs/contrib/tests.en.md +++ b/site/content/en/docs/contrib/tests.en.md @@ -1,7 +1,7 @@ --- -title: "Integration Tests" +title: "List of Integration Test Cases" description: > - All minikube integration tests + Auto generated list of all minikube integration tests and what they do. --- @@ -11,6 +11,9 @@ makes sure the --download-only parameter in minikube start caches the appropriat ## TestDownloadOnlyKic makes sure --download-only caches the docker driver images as well. +## TestBinaryMirror +tests functionality of --binary-mirror flag + ## TestOffline makes sure minikube works without internet, once the user has cached the necessary images. This test has to run after TestDownloadOnly. @@ -21,27 +24,63 @@ tests addons that require no special environment in parallel #### validateIngressAddon tests the ingress addon by deploying a default nginx pod +#### validateRegistryCredsAddon +tests the registry-creds addon by trying to load its configs + #### validateRegistryAddon tests the registry addon #### validateMetricsServerAddon tests the metrics server addon by making sure "kubectl top pods" returns a sensible result -#### validateHelmTillerAddon -tests the helm tiller addon by running "helm version" inside the cluster - #### validateOlmAddon tests the OLM addon #### validateCSIDriverAndSnapshots tests the csi hostpath driver by creating a persistent volume, snapshotting it and restoring it. +#### validateGCPAuthNamespaces +validates that newly created namespaces contain the gcp-auth secret. + #### validateGCPAuthAddon tests the GCP Auth addon with either phony or real credentials and makes sure the files are mounted into pods correctly +#### validateHeadlampAddon + +#### validateInspektorGadgetAddon +tests the inspektor-gadget addon by ensuring the pod has come up and addon disables + +#### validateCloudSpannerAddon +tests the cloud-spanner addon by ensuring the deployment and pod come up and addon disables + +#### validateVolcanoAddon +tests the Volcano addon, makes sure the Volcano is installed into cluster. + +#### validateLocalPathAddon +tests the functionality of the storage-provisioner-rancher addon + +#### validateEnablingAddonOnNonExistingCluster +tests enabling an addon on a non-existing cluster + +#### validateDisablingAddonOnNonExistingCluster +tests disabling an addon on a non-existing cluster + +#### validateNvidiaDevicePlugin +tests the nvidia-device-plugin addon by ensuring the pod comes up and the addon disables + +#### validateAmdGpuDevicePlugin +tests the amd-gpu-device-plugin addon by ensuring the pod comes up and the addon disables + +#### validateYakdAddon + ## TestCertOptions makes sure minikube certs respect the --apiserver-ips and --apiserver-names parameters +## TestCertExpiration +makes sure minikube can start after its profile certs have expired. +It does this by configuring minikube certs to expire after 3 minutes, then waiting 3 minutes, then starting again. +It also makes sure minikube prints a cert expiration warning to the user. + ## TestDockerFlags makes sure the --docker-env and --docker-opt parameters are respected @@ -54,11 +93,14 @@ makes sure the --force-systemd flag worked with the docker container runtime #### validateContainerdSystemd makes sure the --force-systemd flag worked with the containerd container runtime +#### validateCrioSystemd +makes sure the --force-systemd flag worked with the cri-o container runtime + ## TestForceSystemdEnv makes sure the MINIKUBE_FORCE_SYSTEMD environment variable works just as well as the --force-systemd flag -## TestKVMDriverInstallOrUpdate -makes sure our docker-machine-driver-kvm2 binary can be installed properly +## TestDockerEnvContainerd +makes sure that minikube docker-env command works when the runtime is containerd ## TestHyperKitDriverInstallOrUpdate makes sure our docker-machine-driver-hyperkit binary can be installed properly @@ -69,129 +111,340 @@ makes sure our docker-machine-driver-hyperkit binary can be installed properly ## TestErrorSpam asserts that there are no unexpected errors displayed in minikube command outputs. +## TestParseAllMounts + +## TestParseSingle + ## TestFunctional are functionality tests which can safely share a profile in parallel +## TestFunctionalNewestKubernetes +are functionality run functional tests using +NewestKubernetesVersion + #### validateNodeLabels checks if minikube cluster is created with correct kubernetes's node label -#### validateLoadImage -makes sure that `minikube image load` works as expected +Steps: +- Get the node labels from the cluster with `kubectl get nodes` +- check if the node labels matches with the expected Minikube labels: `minikube.k8s.io/*` -#### validateLoadImageFromFile -makes sure that `minikube image load` works from a local file +#### validateImageCommands +runs tests on all the `minikube image` commands, ex. `minikube image load`, `minikube image list`, etc. -#### validateRemoveImage -makes sures that `minikube image rm` works as expected +Steps: +- Make sure image building works by `minikube image build` +- Make sure image loading from Docker daemon works by `minikube image load --daemon` +- Try to load image already loaded and make sure `minikube image load --daemon` works +- Make sure a new updated tag works by `minikube image load --daemon` +- Make sure image saving works by `minikube image load --daemon` +- Make sure image removal works by `minikube image rm` +- Make sure image loading from file works by `minikube image load` +- Make sure image saving to Docker daemon works by `minikube image load` -#### validateBuildImage -makes sures that `minikube image build` works as expected - -#### validateListImages -makes sures that `minikube image ls` works as expected +Skips: +- Skips on `none` driver as image loading is not supported +- Skips on GitHub Actions and macOS as this test case requires a running docker daemon #### validateDockerEnv check functionality of minikube after evaluating docker-env +Steps: +- Run `eval $(minikube docker-env)` to configure current environment to use minikube's Docker daemon +- Run `minikube status` to get the minikube status +- Make sure minikube components have status `Running` +- Make sure `docker-env` has status `in-use` +- Run eval `$(minikube -p profile docker-env)` and check if we are point to docker inside minikube +- Make sure `docker images` hits the minikube's Docker daemon by check if `gcr.io/k8s-minikube/storage-provisioner` is in the output of `docker images` + +Skips: +- Skips on `none` drive since `docker-env` is not supported +- Skips on non-docker container runtime + #### validatePodmanEnv check functionality of minikube after evaluating podman-env +Steps: +- Run `eval $(minikube podman-env)` to configure current environment to use minikube's Podman daemon, and `minikube status` to get the minikube status +- Make sure minikube components have status `Running` +- Make sure `podman-env` has status `in-use` +- Run `eval $(minikube docker-env)` again and `docker images` to list the docker images using the minikube's Docker daemon +- Make sure `docker images` hits the minikube's Podman daemon by check if `gcr.io/k8s-minikube/storage-provisioner` is in the output of `docker images` + +Skips: +- Skips on `none` drive since `podman-env` is not supported +- Skips on non-docker container runtime +- Skips on non-Linux platforms + #### validateStartWithProxy makes sure minikube start respects the HTTP_PROXY environment variable +Steps: +- Start a local HTTP proxy +- Start minikube with the environment variable `HTTP_PROXY` set to the local HTTP proxy + #### validateStartWithCustomCerts makes sure minikube start respects the HTTPS_PROXY environment variable and works with custom certs a proxy is started by calling the mitmdump binary in the background, then installing the certs generated by the binary mitmproxy/dump creates the proxy at localhost at port 8080 -only runs on Github Actions for amd64 linux, otherwise validateStartWithProxy runs instead +only runs on GitHub Actions for amd64 linux, otherwise validateStartWithProxy runs instead #### validateAuditAfterStart makes sure the audit log contains the correct logging after minikube start +Steps: +- Read the audit log file and make sure it contains the current minikube profile name + #### validateSoftStart -validates that after minikube already started, a "minikube start" should not change the configs. +validates that after minikube already started, a `minikube start` should not change the configs. + +Steps: +- The test `validateStartWithProxy` should have start minikube, make sure the configured node port is `8441` +- Run `minikube start` again as a soft start +- Make sure the configured node port is not changed #### validateKubeContext asserts that kubectl is properly configured (race-condition prone!) +Steps: +- Run `kubectl config current-context` +- Make sure the current minikube profile name is in the output of the command + #### validateKubectlGetPods asserts that `kubectl get pod -A` returns non-zero content +Steps: +- Run `kubectl get po -A` to get all pods in the current minikube profile +- Make sure the output is not empty and contains `kube-system` components + #### validateMinikubeKubectl validates that the `minikube kubectl` command returns content +Steps: +- Run `minikube kubectl -- get pods` to get the pods in the current minikube profile +- Make sure the command doesn't raise any error + #### validateMinikubeKubectlDirectCall validates that calling minikube's kubectl +Steps: +- Run `kubectl get pods` by calling the minikube's `kubectl` binary file directly +- Make sure the command doesn't raise any error + #### validateExtraConfig verifies minikube with --extra-config works as expected +Steps: +- The tests before this already created a profile +- Soft-start minikube with different `--extra-config` command line option +- Load the profile's config +- Make sure the specified `--extra-config` is correctly returned + #### validateComponentHealth asserts that all Kubernetes components are healthy NOTE: It expects all components to be Ready, so it makes sense to run it close after only those tests that include '--wait=all' start flag +Steps: +- Run `kubectl get po po -l tier=control-plane -n kube-system -o=json` to get all the Kubernetes conponents +- For each component, make sure the pod status is `Running` + #### validateStatusCmd -makes sure minikube status outputs correctly +makes sure `minikube status` outputs correctly + +Steps: +- Run `minikube status` with custom format `host:{{.Host}},kublet:{{.Kubelet}},apiserver:{{.APIServer}},kubeconfig:{{.Kubeconfig}}` +- Make sure `host`, `kublete`, `apiserver` and `kubeconfig` statuses are shown in the output +- Run `minikube status` again as JSON output +- Make sure `host`, `kublete`, `apiserver` and `kubeconfig` statuses are set in the JSON output #### validateDashboardCmd asserts that the dashboard command works +Steps: +- Run `minikube dashboard --url` to start minikube dashboard and return the URL of it +- Send a GET request to the dashboard URL +- Make sure HTTP status OK is returned + #### validateDryRun asserts that the dry-run mode quickly exits with the right code +Steps: +- Run `minikube start --dry-run --memory 250MB` +- Since the 250MB memory is less than the required 2GB, minikube should exit with an exit code `ExInsufficientMemory` +- Run `minikube start --dry-run` +- Make sure the command doesn't raise any error + #### validateInternationalLanguage asserts that the language used can be changed with environment variables +Steps: +- Set environment variable `LC_ALL=fr` to enable minikube translation to French +- Start minikube with memory of 250MB which is too little: `minikube start --dry-run --memory 250MB` +- Make sure the dry-run output message is in French + #### validateCacheCmd tests functionality of cache command (cache add, delete, list) +Steps: +- Run `minikube cache add` and make sure we can add a remote image to the cache +- Run `minikube cache add` and make sure we can build and add a local image to the cache +- Run `minikube cache delete` and make sure we can delete an image from the cache +- Run `minikube cache list` and make sure we can list the images in the cache +- Run `minikube ssh sudo crictl images` and make sure we can list the images in the cache with `crictl` +- Delete an image from minikube node and run `minikube cache reload` to make sure the image is brought back correctly + #### validateConfigCmd asserts basic "config" command functionality +Steps: +- Run `minikube config set/get/unset` to make sure configuration is modified correctly + #### validateLogsCmd asserts basic "logs" command functionality +Steps: +- Run `minikube logs` and make sure the logs contains some keywords like `apiserver`, `Audit` and `Last Start` + #### validateLogsFileCmd asserts "logs --file" command functionality +Steps: +- Run `minikube logs --file logs.txt` to save the logs to a local file +- Make sure the logs are correctly written + #### validateProfileCmd asserts "profile" command functionality +Steps: +- Run `minikube profile lis` and make sure the command doesn't fail for the non-existent profile `lis` +- Run `minikube profile list --output json` to make sure the previous command doesn't create a new profile +- Run `minikube profile list` and make sure the profiles are correctly listed +- Run `minikube profile list -o JSON` and make sure the profiles are correctly listed as JSON output + #### validateServiceCmd asserts basic "service" command functionality +#### validateServiceCmdDeployApp +Create a new `kickbase/echo_server` deployment + +#### validateServiceCmdList +Run `minikube service list` to make sure the newly created service is correctly listed in the output + +#### validateServiceCmdJSON +Run `minikube service list -o JSON` and make sure the services are correctly listed as JSON output + +#### validateServiceCmdHTTPS +Run `minikube service` with `--https --url` to make sure the HTTPS endpoint URL of the service is printed + +#### validateServiceCmdFormat +Run `minikube service` with `--url --format={{.IP}}` to make sure the IP address of the service is printed + +#### validateServiceCmdURL +Run `minikube service` with a regular `--url` to make sure the HTTP endpoint URL of the service is printed + +#### validateServiceCmdConnect + +Steps: +- Create a new `kickbase/echo-server` deployment +- Run `minikube service` with a regular `--url` to make sure the HTTP endpoint URL of the service is printed +- Make sure we can hit the endpoint URL with an HTTP GET request + #### validateAddonsCmd asserts basic "addon" command functionality +Steps: +- Run `minikube addons list` to list the addons in a tabular format +- Make sure `dashboard`, `ingress` and `ingress-dns` is listed as available addons +- Run `minikube addons list -o JSON` lists the addons in JSON format + #### validateSSHCmd asserts basic "ssh" command functionality +Steps: +- Run `minikube ssh echo hello` to make sure we can SSH into the minikube container and run an command +- Run `minikube ssh cat /etc/hostname` as well to make sure the command is run inside minikube + #### validateCpCmd asserts basic "cp" command functionality +Steps: +- Run `minikube cp ...` to copy a file to the minikube node +- Run `minikube ssh sudo cat ...` to print out the copied file within minikube +- make sure the file is correctly copied + +Skips: +- Skips `none` driver since `cp` is not supported + #### validateMySQL validates a minimalist MySQL deployment +Steps: +- Run `kubectl replace --force -f testdata/mysql/yaml` +- Wait for the `mysql` pod to be running +- Run `mysql -e show databases;` inside the MySQL pod to verify MySQL is up and running +- Retry with exponential backoff if failed, as `mysqld` first comes up without users configured. Scan for names in case of a reschedule. + +Skips: +- Skips for ARM64 architecture since it's not supported by MySQL + #### validateFileSync to check existence of the test file +Steps: +- Test files have been synced into minikube in the previous step `setupFileSync` +- Check the existence of the test file +- Make sure the file is correctly synced + +Skips: +- Skips on `none` driver since SSH is not supported + #### validateCertSync checks to make sure a custom cert has been copied into the minikube guest and installed correctly +Steps: +- Check both the installed & reference certs and make sure they are symlinked + #### validateNotActiveRuntimeDisabled -asserts that for a given runtime, the other runtimes disabled, for example for containerd runtime, docker and crio needs to be not running +asserts that for a given runtime, the other runtimes are disabled, for example for `containerd` runtime, `docker` and `crio` needs to be not running + +Steps: +- For each container runtime, run `minikube ssh sudo systemctl is-active ...` and make sure the other container runtimes are not running #### validateUpdateContextCmd asserts basic "update-context" command functionality +Steps: +- Run `minikube update-context` +- Make sure the context has been correctly updated by checking the command output + #### validateVersionCmd asserts `minikube version` command works fine for both --short and --components +Steps: +- Run `minikube version --short` and make sure the returned version is a valid semver +- Run `minikube version --components` and make sure the component versions are returned + +#### validateLicenseCmd +asserts that the `minikube license` command downloads and untars the licenses +Note: This test will fail on release PRs as the licenses file for the new version won't be uploaded at that point + +#### validateInvalidService +makes sure minikube will not start a tunnel for an unavailable service that has no running pods + #### validateMountCmd verifies the minikube mount command works properly +for the platforms that support it, we're testing: +- a generic 9p mount +- a 9p mount on a specific port +- cleaning-mechanism for profile-specific mounts #### validatePersistentVolumeClaim makes sure PVCs work properly +verifies at least one StorageClass exists +Applies a PVC manifest (pvc.yaml) and verfies PVC named myclaim reaches phase Bound. +Creates a test pod (sp-pod) that mounts the claim (via createPVTestPod). +Writes a file foo to the mounted volume at /tmp/mount/foo. +Deletes the pod, recreates it, and verifies the file foo still exists by listing /tmp/mount, proving data persists across pod restarts. #### validateTunnelCmd makes sure the minikube tunnel command works as expected @@ -199,6 +452,9 @@ makes sure the minikube tunnel command works as expected #### validateTunnelStart starts `minikube tunnel` +#### validateNoSecondTunnel +ensures only 1 tunnel can run simultaneously + #### validateServiceStable starts nginx pod, nginx service and waits nginx having loadbalancer ingress IP @@ -220,17 +476,91 @@ NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook #### validateTunnelDelete stops `minikube tunnel` -## TestGuestEnvironment -verifies files and packges installed inside minikube ISO/Base image - ## TestGvisorAddon tests the functionality of the gVisor addon +## TestMultiControlPlane +tests all ha (multi-control plane) cluster functionality + +#### validateHAStartCluster +ensures ha (multi-control plane) cluster can start. + +#### validateHADeployApp +deploys an app to ha (multi-control plane) cluster and ensures all nodes can serve traffic. + +#### validateHAPingHostFromPods +uses app previously deployed by validateDeployAppToHACluster to verify its pods, located on different nodes, can resolve "host.minikube.internal". + +#### validateHAAddWorkerNode +uses the minikube node add command to add a worker node to an existing ha (multi-control plane) cluster. + +#### validateHANodeLabels +check if all node labels were configured correctly. + +Steps: +- Get the node labels from the cluster with `kubectl get nodes` +- check if all node labels matches with the expected Minikube labels: `minikube.k8s.io/*` + +#### validateHAStatusHAppy +ensures minikube profile list outputs correct with ha (multi-control plane) clusters. + +#### validateHACopyFile +ensures minikube cp works with ha (multi-control plane) clusters. + +#### validateHAStopSecondaryNode +tests ha (multi-control plane) cluster by stopping a secondary control-plane node using minikube node stop command. + +#### validateHAStatusDegraded +ensures minikube profile list outputs correct with ha (multi-control plane) clusters. + +#### validateHARestartSecondaryNode +tests the minikube node start command on existing stopped secondary node. + +#### validateHARestartClusterKeepsNodes +restarts minikube cluster and checks if the reported node list is unchanged. + +#### validateHADeleteSecondaryNode +tests the minikube node delete command on secondary control-plane. +note: currently, 'minikube status' subcommand relies on primary control-plane node and storage-provisioner only runs on a primary control-plane node. + +#### validateHAStopCluster +runs minikube stop on a ha (multi-control plane) cluster. + +#### validateHARestartCluster +verifies a soft restart on a ha (multi-control plane) cluster works. + +#### validateHAAddSecondaryNode +uses the minikube node add command to add a secondary control-plane node to an existing ha (multi-control plane) cluster. + +## TestImageBuild +makes sure the 'minikube image build' command works fine + +#### validateSetupImageBuild +starts a cluster for the image builds + +#### validateNormalImageBuild +is normal test case for minikube image build, with -t parameter + +#### validateNormalImageBuildWithSpecifiedDockerfile +is normal test case for minikube image build, with -t and -f parameter + +#### validateImageBuildWithBuildArg +is a test case building with --build-opt + +#### validateImageBuildWithBuildEnv +is a test case building with --build-env + +#### validateImageBuildWithDockerIgnore +is a test case building with .dockerignore + +## TestISOImage +verifies files and packages installed inside minikube ISO/Base image + ## TestJSONOutput makes sure json output works properly for the start, pause, unpause, and stop commands #### validateDistinctCurrentSteps - validateDistinctCurrentSteps makes sure each step has a distinct step number +makes sure each step has a distinct step number #### validateIncreasingCurrentSteps verifies that for a successful minikube start, 'current step' should be increasing @@ -244,9 +574,32 @@ verifies the docker driver works with a custom network ## TestKicExistingNetwork verifies the docker driver and run with an existing network +## TestKicCustomSubnet +verifies the docker/podman driver works with a custom subnet + +## TestKicStaticIP +starts minikube with the static IP flag + ## TestingKicBaseImage will return true if the integraiton test is running against a passed --base-image flag +## TestMinikubeProfile + +## TestMountStart +tests using the mount command on start + +#### validateStartWithMount +starts a cluster with mount enabled + +#### validateMount +checks if the cluster has a folder mounted + +#### validateMountStop +stops a cluster + +#### validateRestart +restarts a cluster + ## TestMultiNode tests all multi node cluster functionality @@ -260,7 +613,14 @@ uses the minikube node add command to add a node to an existing cluster make sure minikube profile list outputs correct with multinode clusters #### validateCopyFileWithMultiNode -validateProfileListWithMultiNode make sure minikube profile list outputs correct with multinode clusters +make sure minikube cp works with multinode clusters. + +#### validateMultiNodeLabels +check if all node labels were configured correctly + +Steps: +- Get the node labels from the cluster with `kubectl get nodes` +- check if all node labels matches with the expected Minikube labels: `minikube.k8s.io/*` #### validateStopRunningNode tests the minikube node stop command @@ -287,7 +647,7 @@ tests that the node name verification works as expected deploys an app to a multinode cluster and makes sure all nodes can serve traffic #### validatePodsPingHost -uses app previously deplyed by validateDeployAppToMultiNode to verify its pods, located on different nodes, can resolve "host.minikube.internal". +uses app previously deployed by validateDeployAppToMultiNode to verify its pods, located on different nodes, can resolve "host.minikube.internal". ## TestNetworkPlugins tests all supported CNI options @@ -304,8 +664,51 @@ makes sure the hairpinning (https://en.wikipedia.org/wiki/Hairpinning) is correc try to access deployment/netcat pod using external, obtained from 'netcat' service dns resolution, IP address should fail if hairpinMode is off +## TestNoKubernetes +tests starting minikube without Kubernetes, +for use cases where user only needs to use the container runtime (docker, containerd, crio) inside minikube + +#### validateStartNoK8sWithVersion +expect an error when starting a minikube cluster without kubernetes and with a kubernetes version. + +Steps: +- start minikube with no kubernetes. + +#### validateStartWithK8S +starts a minikube cluster with Kubernetes started/configured. + +Steps: +- start minikube with Kubernetes. +- return an error if Kubernetes is not running. + +#### validateStartWithStopK8s +starts a minikube cluster while stopping Kubernetes. + +Steps: +- start minikube with no Kubernetes. +- return an error if Kubernetes is not stopped. +- delete minikube profile. + +#### validateStartNoK8S +starts a minikube cluster without kubernetes started/configured + +Steps: +- start minikube with no Kubernetes. + +#### validateK8SNotRunning +validates that there is no kubernetes running inside minikube + +#### validateStopNoK8S +validates that minikube is stopped after a --no-kubernetes start + +#### validateProfileListNoK8S +validates that profile list works with --no-kubernetes + +#### validateStartNoArgs +validates that minikube start with no args works. + ## TestChangeNoneUser -tests to make sure the CHANGE_MINIKUBE_NONE_USER environemt variable is respected +tests to make sure the CHANGE_MINIKUBE_NONE_USER environment variable is respected and changes the minikube file permissions from root to the correct user. ## TestPause @@ -332,12 +735,10 @@ makes sure no left over left after deleting a profile such as containers or volu #### validateStatus makes sure paused clusters show up in minikube status correctly -## TestDebPackageInstall -TestPackageInstall tests installation of .deb packages with minikube itself and with kvm2 driver -on various debian/ubuntu docker images - ## TestPreload -verifies the preload tarballs get pulled in properly by minikube +verifies that disabling the initial preload, pulling a specific image, +and restarting the cluster preserves the image across restarts. +also tests --preload-source should work for both github and gcs ## TestScheduledStopWindows tests the schedule stop functionality on Windows diff --git a/site/content/en/docs/contrib/translations.md b/site/content/en/docs/contrib/translations.md index 49bfb230ef26..0969ec36b941 100644 --- a/site/content/en/docs/contrib/translations.md +++ b/site/content/en/docs/contrib/translations.md @@ -76,6 +76,8 @@ All translations are stored in the top-level `translations` directory. ### Testing translations +* You can verify that the translations are syntactically valid by running: `go test k8s.io/minikube/pkg/minikube/translate` + * Once you have all the translations you want, save the file and rebuild the minikube from scratch to pick up your new translations: ``` @@ -90,15 +92,23 @@ All translations are stored in the top-level `translations` directory. * You now have a fresh minikube binary in the `out` directory. If your system locale is that of the language you added translations for, a simple `out/minikube start` will work as a test, assuming you translated phrases from `minikube start`. You can use whatever command you'd like in that way. -* If you have a different system locale, you can override the printed language using the LC_ALL environment variable: +* If you have a different system locale, you can override the printed language using the LANGUAGE environment variable: ``` - ~/minikube$ LC_ALL=fr out/minikube start - 😄 minikube v1.9.2 sur Darwin 10.14.5 - ✨ Choix automatique du driver hyperkit. Autres choix: docker + ~/minikube$ LANGUAGE=fr out/minikube start + 😄 minikube v1.29.0 sur Ubuntu 18.04 + ✨ Choix automatique du pilote docker. Autres choix: kvm2, ssh + 📌 Utilisation du pilote Docker avec le privilège root 👍 Démarrage du noeud de plan de contrôle minikube dans le cluster minikube - 🔥 Création de VM hyperkit (CPUs=2, Mémoire=4000MB, Disque=20000MB)... - 🐳 Préparation de Kubernetes v1.18.0 sur Docker 19.03.8... - 🌟 Installation des addons: default-storageclass, storage-provisioner - 🏄 Terminé ! kubectl est maintenant configuré pour utiliser "minikube". + 🚜 Extraction de l'image de base... + 🔥 Création de docker container (CPUs=2, Memory=7900Mo) ... + 🐳 Préparation de Kubernetes v1.26.1 sur Docker 20.10.23... + ▪ Génération des certificats et des clés + ▪ Démarrage du plan de contrôle ... + ▪ Configuration des règles RBAC ... + 🔗 Configuration de bridge CNI (Container Networking Interface)... + ▪ Utilisation de l'image gcr.io/k8s-minikube/storage-provisioner:v5 + 🔎 Vérification des composants Kubernetes... + 🌟 Modules activés: storage-provisioner, default-storageclass + 🏄 Terminé ! kubectl est maintenant configuré pour utiliser "minikube" cluster et espace de noms "default" par défaut. ``` diff --git a/site/content/en/docs/contrib/triage.md b/site/content/en/docs/contrib/triage.md index b0a0d5a757d4..803f24b93c84 100644 --- a/site/content/en/docs/contrib/triage.md +++ b/site/content/en/docs/contrib/triage.md @@ -7,7 +7,7 @@ description: > How to triage issues in the minikube repo --- -Community triage takes place **every Wednesday** from **11AM-12PM PST**. +Community triage takes place **every Wednesday** from **11:05AM-11:55PM PT**. - Hangouts link: https://meet.google.com/sss-wdet-gwe - Google Group: https://groups.google.com/forum/#!forum/minikube-dev @@ -153,9 +153,9 @@ A sample response to ask for more info: > I don’t yet have a clear way to replicate this issue. Do you mind adding some additional details. Here is additional information that would be helpful: > -> \* The exact `minikube start` command line used +> \* The exact `minikube start` command line used > -> \* The full output of the `minikube start` command, preferably with `--alsologtostderr -v=4` for extra logging. +> \* The full output of the `minikube start` command, preferably with `--alsologtostderr -v=4` for extra logging. > > \* The full output of `minikube logs` > @@ -209,18 +209,15 @@ Then: Label with `triage/duplicate` and close the issue. If an issue hasn't been active for more than four weeks, and the author has been pinged at least once, then the issue can be closed. ->Hey @author -- hopefully it's OK if I close this - there wasn't enough information to make it actionable, and some time has already passed. If you are able to provide additional details, you may reopen it at any point by adding /reopen to your comment. +>Hi @author – is this issue still occurring? Are additional details available? If so, please feel free to re-open the issue by commenting with `/reopen`. This issue will be closed as additional information was unavailable and some time has passed. > ->Here is additional information that may be helpful to us: +>Additional information that may be helpful: > ->\* Whether the issue occurs with the latest minikube release +> \* Whether the issue occurs with the latest minikube release > ->\* The exact `minikube start` command line used -> ->\* The full output of the `minikube start` command, preferably with `--alsologtostderr -v=3` for extra logging. -> ->\* The full output of `minikube logs` +> \* The exact minikube start command line used > +> \* Attach the full output of minikube logs, run `minikube logs --file=logs.txt` to create a log file > >Thank you for sharing your experience! diff --git a/site/content/en/docs/drivers/_index.md b/site/content/en/docs/drivers/_index.md index 46758f51bdca..65460b5219b3 100644 --- a/site/content/en/docs/drivers/_index.md +++ b/site/content/en/docs/drivers/_index.md @@ -17,8 +17,9 @@ To do so, we use the [Docker Machine](https://github.com/docker/machine) library * [Docker]({{}}) - container-based (preferred) * [KVM2]({{}}) - VM-based (preferred) * [VirtualBox]({{}}) - VM +* [QEMU]({{}}) - VM * [None]({{}}) - bare-metal -* [Podman]({{}}) - container (experimental) +* [Podman]({{}}) - container-based (experimental) * [SSH]({{}}) - remote ssh @@ -28,7 +29,11 @@ To do so, we use the [Docker Machine](https://github.com/docker/machine) library * [Hyperkit]({{}}) - VM * [VirtualBox]({{}}) - VM * [Parallels]({{}}) - VM -* [VMware]({{}}) - VM +* [VMware Fusion]({{}}) - VM +* [QEMU]({{}}) - VM +* [Podman]({{}}) - VM + Container (experimental) +* [VFkit]({{}}) - VM (preferred) +* [Krunkit]({{}}) - VM (experimental) * [SSH]({{}}) - remote ssh ## Windows @@ -36,5 +41,7 @@ To do so, we use the [Docker Machine](https://github.com/docker/machine) library * [Hyper-V]({{}}) - VM (preferred) * [Docker]({{}}) - VM + Container (preferred) * [VirtualBox]({{}}) - VM -* [VMware]({{}}) - VM +* [VMware Workstation]({{}}) - VM +* [QEMU]({{}}) - VM (experimental) +* [Podman]({{}}) - VM + Container (experimental) * [SSH]({{}}) - remote ssh diff --git a/site/content/en/docs/drivers/docker.md b/site/content/en/docs/drivers/docker.md index 1300cd086715..9a78c88814ed 100644 --- a/site/content/en/docs/drivers/docker.md +++ b/site/content/en/docs/drivers/docker.md @@ -9,7 +9,50 @@ aliases: The Docker driver allows you to install Kubernetes into an existing Docker install. On Linux, this does not require virtualization to be enabled. -{{% readfile file="/docs/drivers/includes/docker_usage.inc" %}} +{{% tabs %}} +{{% tab "Standard Docker" %}} +## Requirements + +- [Install Docker](https://docs.docker.com/engine/install/) 18.09 or higher (20.10 or higher is recommended) +- amd64 or arm64 system. +- If using WSL complete [these steps]({{}}) first +- Don't forget to follow this [step](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user) to manage Docker as a non-root user. + +## Usage + +Start a cluster using the docker driver: + +```shell +minikube start --driver=docker +``` +To make docker the default driver: + +```shell +minikube config set driver docker +``` +{{% /tab %}} +{{% tab "Rootless Docker" %}} +## Requirements +- Docker 20.10 or higher, see https://rootlesscontaine.rs/getting-started/docker/ +- Cgroup v2 delegation, see https://rootlesscontaine.rs/getting-started/common/cgroup2/ +- Kernel 5.11 or later (5.13 or later is recommended when SELinux is enabled), see https://rootlesscontaine.rs/how-it-works/overlayfs/ + +## Usage + +Start a cluster using the rootless docker driver: + +```shell +dockerd-rootless-setuptool.sh install -f +docker context use rootless +minikube start --driver=docker --container-runtime=containerd +``` + +Unlike Podman driver, it is not necessary to set the `rootless` property of minikube (`minikube config set rootless true`). +When the `rootless` property is explicitly set but the current Docker host is not rootless, minikube fails with an error. + +It is recommended to set the `--container-runtime` flag to "containerd". +{{% /tab %}} +{{% /tabs %}} ## Special features @@ -21,7 +64,6 @@ The Docker driver allows you to install Kubernetes into an existing Docker insta - The following Docker runtime security options are currently *unsupported and will not work* with the Docker driver (see [#9607](https://github.com/kubernetes/minikube/issues/9607)): - [userns-remap](https://docs.docker.com/engine/security/userns-remap/) - - [rootless](https://docs.docker.com/engine/security/rootless/) - On macOS, containers might get hung and require a restart of Docker for Desktop. See [docker/for-mac#1835](https://github.com/docker/for-mac/issues/1835) @@ -31,6 +73,8 @@ The Docker driver allows you to install Kubernetes into an existing Docker insta `sudo mkdir /sys/fs/cgroup/systemd && sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd`. +Also see [co/docker-driver open issues](https://github.com/kubernetes/minikube/labels/co%2Fdocker-driver). + ## Troubleshooting [comment]: <> (this title is used in the docs links, don't change) diff --git a/site/content/en/docs/drivers/hyperv.md b/site/content/en/docs/drivers/hyperv.md index 93929826bdeb..bb677499ad41 100644 --- a/site/content/en/docs/drivers/hyperv.md +++ b/site/content/en/docs/drivers/hyperv.md @@ -20,7 +20,7 @@ The `minikube start` command supports additional hyperv specific flags: ## Issues -Also see [co/hyperv open issues](https://github.com/kubernetes/minikube/labels/co%2Fhyperv) +Also see [co/hyperv open issues](https://github.com/kubernetes/minikube/labels/co%2Fhyperv). ## Troubleshooting diff --git a/site/content/en/docs/drivers/includes/check_virtualization_linux.inc b/site/content/en/docs/drivers/includes/check_virtualization_linux.inc index 3f60068016b8..ce87dd6ea3ca 100644 --- a/site/content/en/docs/drivers/includes/check_virtualization_linux.inc +++ b/site/content/en/docs/drivers/includes/check_virtualization_linux.inc @@ -1,7 +1,7 @@ To use VM drivers, verify that your system has virtualization support enabled: ```shell -egrep -q 'vmx|svm' /proc/cpuinfo && echo yes || echo no +grep -E -q 'vmx|svm' /proc/cpuinfo && echo yes || echo no ``` If the above command outputs "no": diff --git a/site/content/en/docs/drivers/includes/docker_usage.inc b/site/content/en/docs/drivers/includes/docker_usage.inc deleted file mode 100644 index 8b1fd6c694ad..000000000000 --- a/site/content/en/docs/drivers/includes/docker_usage.inc +++ /dev/null @@ -1,18 +0,0 @@ -## Requirements - -- [Install Docker](https://hub.docker.com/search?q=&type=edition&offering=community&sort=updated_at&order=desc) 18.09 or higher -- amd64 or arm64 system. - -## Usage - -Start a cluster using the docker driver: - -```shell -minikube start --driver=docker -``` -To make docker the default driver: - -```shell -minikube config set driver docker -``` - diff --git a/site/content/en/docs/drivers/includes/kvm2_usage.inc b/site/content/en/docs/drivers/includes/kvm2_usage.inc index b8ba08120b55..408fc303a548 100644 --- a/site/content/en/docs/drivers/includes/kvm2_usage.inc +++ b/site/content/en/docs/drivers/includes/kvm2_usage.inc @@ -11,7 +11,7 @@ Proper installation of KVM and libvirt is highly specific to each Linux distribu * [Debian](https://wiki.debian.org/KVM#Installation) * [Fedora](https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-virtualization/) * [Gentoo](https://wiki.gentoo.org/wiki/QEMU) -* [OpenSUSE](https://doc.opensuse.org/documentation/leap/virtualization/html/book.virt/cha-vt-installation.html) +* [OpenSUSE](https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/cha-vt-installation.html) * [RedHat](https://access.redhat.com/articles/1344173#Q_how-install-virtualization-packages) * [Ubuntu](https://help.ubuntu.com/community/KVM/Installation) diff --git a/site/content/en/docs/drivers/includes/none_usage.inc b/site/content/en/docs/drivers/includes/none_usage.inc index e1664e6199f3..05e7e595f5e7 100644 --- a/site/content/en/docs/drivers/includes/none_usage.inc +++ b/site/content/en/docs/drivers/includes/none_usage.inc @@ -3,7 +3,9 @@ A Linux VM with the following: * systemd or OpenRC -* a container runtime, such as Docker or CRIO +* a Container Runtime Interface (CRI), such as Docker or CRI-O +* [containernetworking-plugins]({{}}) +* [cri-dockerd](https://github.com/Mirantis/cri-dockerd) (Only if using Docker CRI) This VM must also meet the [kubeadm requirements](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/), such as: @@ -12,15 +14,14 @@ This VM must also meet the [kubeadm requirements](https://kubernetes.io/docs/set * iptables (in legacy mode) * conntrack * crictl +* cni-plugins * SELinux permissive * cgroups v1 (v2 is not yet supported by Kubernetes) ## Usage -The none driver requires minikube to be run as root, until [#3760](https://github.com/kubernetes/minikube/issues/3760) can be addressed. - ```shell -sudo -E minikube start --driver=none +minikube start --driver=none ``` To make `none` the default driver: diff --git a/site/content/en/docs/drivers/includes/podman_usage.inc b/site/content/en/docs/drivers/includes/podman_usage.inc index 309044c44888..edd3bef485a0 100644 --- a/site/content/en/docs/drivers/includes/podman_usage.inc +++ b/site/content/en/docs/drivers/includes/podman_usage.inc @@ -4,7 +4,7 @@ This is an experimental driver. Please use it only for experimental reasons unti ## Usage -It's recommended to run minikube with the podman driver and [CRI-O container runtime](https://cri-o.io/): +It's recommended to run minikube with the podman driver and [CRI-O container runtime](https://cri-o.io/) (except when using Rootless Podman): ```shell minikube start --driver=podman --container-runtime=cri-o @@ -21,3 +21,20 @@ To make podman the default driver: ```shell minikube config set driver podman ``` + +## Rootless Podman + +By default, minikube executes Podman with `sudo`. +To use Podman without `sudo` (i.e., Rootless Podman), set the `rootless` property to `true`: + +```shell +minikube config set rootless true +``` + +For Rootless Podman, it is recommended to set `--container-runtime` to `containerd`: + +```shell +minikube start --driver=podman --container-runtime=containerd +``` + +See the [Rootless Docker](https://minikube.sigs.k8s.io/docs/drivers/docker/#rootless-docker) section for the requirements and the restrictions. diff --git a/site/content/en/docs/drivers/includes/ssh_usage.inc b/site/content/en/docs/drivers/includes/ssh_usage.inc index 608383fe81cc..c256861515bd 100644 --- a/site/content/en/docs/drivers/includes/ssh_usage.inc +++ b/site/content/en/docs/drivers/includes/ssh_usage.inc @@ -4,6 +4,7 @@ A Linux VM with the following: * systemd or OpenRC * a container runtime, such as Docker or CRIO +* [cri-dockerd](https://github.com/Mirantis/cri-dockerd) (if using Kubernetes +v1.24 & `docker` container-runtime) This VM must also meet the [kubeadm requirements](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/), such as: @@ -12,6 +13,7 @@ This VM must also meet the [kubeadm requirements](https://kubernetes.io/docs/set * iptables (in legacy mode) * conntrack * crictl +* cni-plugins * SELinux permissive * cgroups v1 (v2 is not yet supported by Kubernetes) diff --git a/site/content/en/docs/drivers/includes/vmware_windows_usage.inc b/site/content/en/docs/drivers/includes/vmware_windows_usage.inc index 3944dc25c1bd..46245257a1d2 100644 --- a/site/content/en/docs/drivers/includes/vmware_windows_usage.inc +++ b/site/content/en/docs/drivers/includes/vmware_windows_usage.inc @@ -1,6 +1,6 @@ ## Requirements -*VMware Workstation +* VMware Workstation ## Driver Installation diff --git a/site/content/en/docs/drivers/krunkit.md b/site/content/en/docs/drivers/krunkit.md new file mode 100644 index 000000000000..c694bd40a070 --- /dev/null +++ b/site/content/en/docs/drivers/krunkit.md @@ -0,0 +1,103 @@ +--- +title: "krunkit" +weight: 2 +aliases: + - /docs/reference/drivers/krunkit +--- + +## Overview + +[krunkit](https://github.com/containers/krunkit) is an open-source program for +macOS virtualization, optimized for GPU accelerated virtual machines and AI +workloads. + +## Requirements + +- Available only on Apple silicon. +- Requires macOS 14 or later. +- Requires minikube version 1.37.0 or later. +- Requires krunkit version 1.0.0 or later. +- Requires [vmnet-helper](https://github.com/nirs/vmnet-helper). + +## Installing krunkit + +To install krunkit run: + +```shell +brew tap slp/krunkit +brew install krunkit +``` + +## Networking + +To use the krunkit driver you must install +[vmnet-helper](https://github.com/nirs/vmnet-helper), see installation +instructions below. + +### Install vment-helper + +```shell + curl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash +``` + +The command downloads the latest release from github and installs it to +`/opt/vmnet-helper`. + +> [!IMPORTANT] +> The vmnet-helper executable and the directory where it is installed +> must be owned by root and may not be modifiable by unprivileged users. + +### Grant permission to run vmnet-helper manually (if said no to script above) + + +The vment-helper process must run as root to create a vmnet interface. +To allow users in the `staff` group to run the vmnet helper without a +password, you can install the default sudoers rule: + +The installation script will ask your permission to add to the sudoers but if you say no and prefer to do manually here is the command: + +```shell +sudo install -m 0640 /opt/vmnet-helper/share/doc/vmnet-helper/sudoers.d/vmnet-helper /etc/sudoers.d/ +``` + +You can change the sudoers configuration to allow access to specific +users or other groups. + + + +### Usage + +```shell +minikube start --driver krunkit +``` + +## Issues + +### Other + +* [Full list of open 'krunkit' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fkrunkit) + +## Troubleshooting + +### Run with logs + +Run `minikube start --driver krunkit --alsologtostderr -v=7` to debug crashes + +### Troubleshooting vmnet-helper + +Check for errors in vment-helper log: + +```shell +$MINIKUBE_HOME/.minikube/machines/MACHINE-NAME/vmnet-helper.log +``` + +Check that the `vmnet-helper` process is running: + +```shell +ps au | grep vmnet-helper | grep -v grep +``` + +If the helper is not running restart the minikube cluster. + +For help with vment-helper please use the +[discussions](https://github.com/nirs/vmnet-helper/discussions). diff --git a/site/content/en/docs/drivers/kvm2.md b/site/content/en/docs/drivers/kvm2.md index c89ea9e65fa5..dba499a0ba69 100644 --- a/site/content/en/docs/drivers/kvm2.md +++ b/site/content/en/docs/drivers/kvm2.md @@ -22,7 +22,7 @@ aliases: The `minikube start` command supports 5 additional KVM specific flags: -* **`--gpu`**: Enable experimental NVIDIA GPU support in minikube +* **`--kvm-gpu`**: Enable experimental NVIDIA GPU support in minikube * **`--hidden`**: Hide the hypervisor signature from the guest in minikube * **`--kvm-network`**: The KVM default network name * **`--network`**: The dedicated KVM private network name @@ -36,9 +36,9 @@ The `minikube start` command supports 5 additional KVM specific flags: * KVM VM's cannot be used simultaneously with VirtualBox [#4913](https://github.com/kubernetes/minikube/issues/4913) * On some distributions, libvirt bridge networking may fail until the host reboots -Also see [co/kvm2 open issues](https://github.com/kubernetes/minikube/labels/co%2Fkvm2) +Also see [co/kvm2-driver open issues](https://github.com/kubernetes/minikube/labels/co%2Fkvm2-driver). -### Nested Virtulization +### Nested Virtualization If you are running KVM in a nested virtualization environment ensure your config the kernel modules correctly follow either [this](https://stafwag.github.io/blog/blog/2018/06/04/nested-virtualization-in-kvm/) or [this](https://computingforgeeks.com/how-to-install-kvm-virtualization-on-debian/) tutorial. @@ -49,7 +49,6 @@ If you are running KVM in a nested virtualization environment ensure your config * Run `virt-host-validate` and check for the suggestions. * Run ``ls -la `which virsh` ``, `virsh uri`, `sudo virsh net-list --all` and `ip a s` to collect additional information for debugging. * Run `minikube start --alsologtostderr -v=9` to debug crashes. -* Run `docker-machine-driver-kvm2 version` to verify the kvm2 driver executes properly. * Read [How to debug Virtualization problems](https://fedoraproject.org/wiki/How_to_debug_Virtualization_problems) ### Troubleshooting KVM/libvirt networks diff --git a/site/content/en/docs/drivers/none.md b/site/content/en/docs/drivers/none.md index 363c950db539..d6911ea7bab2 100644 --- a/site/content/en/docs/drivers/none.md +++ b/site/content/en/docs/drivers/none.md @@ -38,6 +38,16 @@ This document is written for system integrators who wish to run minikube within * minikube and the Kubernetes services it starts may interfere with other running software on the system. For instance, minikube will start and stop container runtimes via systemd, such as docker, containerd, cri-o. +### Persistent storage + +* minikube expects that some mount points used for volumes are bind-mounted or symlinked to a persistent location: + + * `/data` + * `/tmp/hostpath_pv` + * `/tmp/hostpath-provisioner` + +If you don't have a dedicated disk to use for these, you can use the `/var` partition which is _usually_ persistent. + ### Data loss With the `none` driver, minikube will overwrite the following system paths: @@ -58,7 +68,7 @@ As Kubernetes has full access to both your filesystem as well as your docker ima * Many `minikube` commands are not supported, such as: `dashboard`, `mount`, `ssh` * minikube with the `none` driver has a confusing permissions model, as some commands need to be run as root ("start"), and others by a regular user ("dashboard") * CoreDNS detects resolver loop, goes into CrashLoopBackOff - [#3511](https://github.com/kubernetes/minikube/issues/3511) -* Some versions of Linux have a version of docker that is newer than what Kubernetes expects. To overwrite this, run minikube with the following parameters: `sudo -E minikube start --driver=none --kubernetes-version v1.11.8 --extra-config kubeadm.ignore-preflight-errors=SystemVerification` +* Some versions of Linux have a version of docker that is newer than what Kubernetes expects. To overwrite this, run minikube with the following parameters: `minikube start --driver=none --kubernetes-version v1.34.0 --extra-config kubeadm.ignore-preflight-errors=SystemVerification` * [Full list of open 'none' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fnone-driver) diff --git a/site/content/en/docs/drivers/parallels.md b/site/content/en/docs/drivers/parallels.md index 00489edf3e37..7e0973ca05e5 100644 --- a/site/content/en/docs/drivers/parallels.md +++ b/site/content/en/docs/drivers/parallels.md @@ -13,7 +13,7 @@ The Parallels driver is particularly useful for users who own Parallels Desktop ## Issues -* [Full list of open 'parallels' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fparallels) +* [Full list of open 'parallels' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fparallels-driver) ## Troubleshooting diff --git a/site/content/en/docs/drivers/podman.md b/site/content/en/docs/drivers/podman.md index be670dfc57ed..3497d2a69a7f 100644 --- a/site/content/en/docs/drivers/podman.md +++ b/site/content/en/docs/drivers/podman.md @@ -11,14 +11,13 @@ The podman driver is an alternative container runtime to the [Docker]({{< ref "/ ## Requirements -- Linux operating system - Install [podman](https://podman.io/getting-started/installation.html) {{% readfile file="/docs/drivers/includes/podman_usage.inc" %}} ## Known Issues -- Podman requirements passwordless running of sudo. If you run into an error about sudo, do the following: +- On Linux, Podman requires passwordless running of sudo. If you run into an error about sudo, do the following: ```shell $ sudo visudo @@ -35,6 +34,17 @@ Be sure this text is *after* `#includedir /etc/sudoers.d`. To confirm it worked, sudo -k -n podman version ``` +- On all other operating systems, make sure to create and start the virtual machine that is needed for Podman. + +```shell +podman machine init --cpus 2 --memory 2048 --disk-size 20 +podman machine start +podman system connection default podman-machine-default-root +podman info +``` + +Also see [co/podman-driver open issues](https://github.com/kubernetes/minikube/labels/co%2Fpodman-driver). + ## Troubleshooting - Run `minikube start --alsologtostderr -v=7` to debug errors and crashes diff --git a/site/content/en/docs/drivers/qemu.md b/site/content/en/docs/drivers/qemu.md new file mode 100644 index 000000000000..7ea422c327ce --- /dev/null +++ b/site/content/en/docs/drivers/qemu.md @@ -0,0 +1,101 @@ +--- +title: "qemu" +weight: 3 +description: > + QEMU driver +aliases: + - /docs/reference/drivers/qemu +--- + +## Overview + +The `qemu` driver uses QEMU (system) for VM creation. + + + +## Usage + +To start minikube with the qemu driver: + +```shell +minikube start --driver=qemu +``` + +## Special features + +minikube start supports some qemu specific flags: + +* **`--qemu-firmware-path`**: The path to the firmware image to be used. + * Note: while the flag should override the config, if the flag does not take effect try running `minikube delete`. + * MacPorts: if you are installing [minikube](https://ports.macports.org/port/minikube/) and [qemu](https://ports.macports.org/port/qemu/) via MacPorts on a Mac with M1, use the following flag: `--qemu-firmware-path=/opt/local/share/qemu/edk2-aarch64-code.fd` + +## Networking + +The QEMU driver has two networking options: `socket_vmnet` and `builtin`. `socket_vmnet` will give you full minikube networking functionality, such as the `service` and `tunnel` commands. On the other hand, the `builtin` network is not a dedicated network and therefore commands such as `service` and `tunnel` are not available. [socket_vmnet](https://github.com/lima-vm/socket_vmnet) can be installed via brew or from source (instructions below). + +{{% tabs %}} +{{% tab socket_vmnet %}} + +### Requirements + +Requires macOS 10.15 or later and [socket_vmnet](https://github.com/lima-vm/socket_vmnet). + +### Install socket_vmnet via [brew](https://brew.sh/) +```shell +brew install socket_vmnet +HOMEBREW=$(which brew) && sudo ${HOMEBREW} services start socket_vmnet +``` + +### Install socket_vmnet from source (requires [Go](https://go.dev/)) +```shell +git clone https://github.com/lima-vm/socket_vmnet.git && cd socket_vmnet +sudo make install +``` + +### Usage + +```shell +minikube start --driver qemu --network socket_vmnet +``` + +{{% /tab %}} +{{% tab builtin %}} +### Usage + +```shell +minikube start --driver qemu --network builtin +```` +{{% /tab %}} +{{% /tabs %}} + +## Known Issues + +{{% tabs %}} +{{% tab socket_vmnet %}} +## `/var/db/dhcpd_leases` errors + +If you're seeing errors related to `/var/db/dhcpd_leases` your firewall is likely blocking the bootpd process. + +Run the following to unblock bootpd from the macOS builtin firewall: +```shell +sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd +sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd +``` +{{% /tab %}} +{{% tab builtin %}} +## Start stuck on corp machine or with custom DNS + +When using the `builtin` network (default) the guest uses **only** the first `nameserver` entry in the hosts `/etc/resolv.conf` for DNS lookup. If your first `nameserver` entry is a corporate/internal DNS it's likely it will cause an issue. If you see the warning `❗ This VM is having trouble accessing https://registry.k8s.io` on `minikube start` you are likely being affected by this. This may prevent your cluster from starting entirely and you won't be able to pull remote images. More details can be found at: [#15021](https://github.com/kubernetes/minikube/issues/15021) + +#### Workarounds: + +1. If possible, reorder your `/etc/resolv.conf` to have a general `nameserver` entry first (eg. `8.8.8.8`) and reboot your machine. +2. Use `--network=socket_vmnet` +{{% /tab %}} +{{% /tabs %}} + +[Full list of open 'qemu' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fqemu-driver) + +## Troubleshooting + +* Run `minikube start --alsologtostderr -v=4` to debug crashes diff --git a/site/content/en/docs/drivers/qemu2.md b/site/content/en/docs/drivers/qemu2.md new file mode 100644 index 000000000000..58914771a9c7 --- /dev/null +++ b/site/content/en/docs/drivers/qemu2.md @@ -0,0 +1,7 @@ +--- +title: "qemu2" +--- +redirecting to /docs/drivers/qemu + diff --git a/site/content/en/docs/drivers/vfkit.md b/site/content/en/docs/drivers/vfkit.md new file mode 100644 index 000000000000..d4604bc32b96 --- /dev/null +++ b/site/content/en/docs/drivers/vfkit.md @@ -0,0 +1,117 @@ +--- +title: "vfkit" +weight: 2 +aliases: + - /docs/reference/drivers/vfkit +--- + +## Overview + +[VFKit](https://github.com/crc-org/vfkit) is an open-source program for +macOS virtualization, optimized for lightweight virtual machines and +container deployment. + +## Requirements + +- Requires macOS 14 or later. +- Requires minikube version 1.36.0 or later. + +## Networking + +The vfkit driver has two networking options: `nat` and `vmnet-shared`. +The `nat` network is always available, but it does not provide access +between minikube clusters. To access other clusters or run multi-node +cluster, you need the `vmnet-shared` network. The `vmnet-shared` network +requires [vmnet-helper](https://github.com/nirs/vmnet-helper), see +installation instructions below. + +{{% tabs %}} +{{% tab vmnet-shared %}} + +### Requirements + +- Requires [vmnet-helper](https://github.com/nirs/vmnet-helper). + +### Install vment-helper + +```shell +curl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash +``` + +The command downloads the latest release from github and installs it to +`/opt/vmnet-helper`. + +### Grant permission to run vmnet-helper manually (if said no to script above) + +vmnet-helper must run as root to create a vmnet interface. To let users in the staff group run it without a password, install the default sudoers rule. The install script offers to add this automatically; if you declined, run the command below manually: + +```shell +sudo install -m 0640 /opt/vmnet-helper/share/doc/vmnet-helper/sudoers.d/vmnet-helper /etc/sudoers.d/ +``` + +You can change the sudoers configuration to allow access to specific +users or other groups. + + +**IMPORTANT**: The vmnet-helper executable and the directory where it is +installed must be owned by root and may not be modifiable by +unprivileged users. + + +### Usage + +```shell +minikube start --driver vfkit --network vmnet-shared +``` + +{{% /tab %}} +{{% tab builtin %}} +### Usage + +```shell +minikube start --driver vfkit [--network nat] +```` + +The `nat` network is used by default if the `--network` option is not +specified. + +{{% /tab %}} +{{% /tabs %}} + +## Issues + +### Other + +* [Full list of open 'vfkit' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fvfkit) + +## Troubleshooting + +### Run with logs + +Run `minikube start --driver vfkit --alsologtostderr -v=7` to debug crashes + +### Upgrade VFKit + +```shell +brew update +brew upgrade vfkit +``` + +### Troubleshooting the vmnet-shared network + +Check for errors in vment-helper log: + +```shell +$MINIKUBE_HOME/.minikube/machines/MACHINE-NAME/vmnet-helper.log +``` + +Check that the `vmnet-helper` process is running: + +```shell +ps au | grep vmnet-helper | grep -v grep +``` + +If the helper is not running restart the minikube cluster. + +For help with vment-helper please use the +[discussions](https://github.com/nirs/vmnet-helper/discussions). diff --git a/site/content/en/docs/drivers/virtualbox.md b/site/content/en/docs/drivers/virtualbox.md index b9158788ad07..c3207b80cec0 100644 --- a/site/content/en/docs/drivers/virtualbox.md +++ b/site/content/en/docs/drivers/virtualbox.md @@ -15,7 +15,8 @@ VirtualBox is minikube's original driver. It may not provide the fastest start-u minikube start supports some VirtualBox specific flags: -* **`--host-only-cidr`**: The CIDR to be used for the minikube VM (default "192.168.99.1/24") +* **`--host-only-cidr`**: The CIDR to be used for the minikube VM (default "192.168.59.1/24") + * On Linux, Mac OS X and Oracle Solaris with VirtualBox >= 6.1.28, [only IP addresses in the 192.168.56.0/21 range are allowed for host-only networking by default](https://www.virtualbox.org/manual/ch06.html#network_hostonly). Passing a disallowed value to `--host-only-cidr` will result in a VirtualBox access denied error: `VBoxManage: error: Code E_ACCESSDENIED (0x80070005) - Access denied (extended info not available)`. * **`--no-vtx-check`**: Disable checking for the availability of hardware virtualization ## Issues @@ -25,3 +26,8 @@ minikube start supports some VirtualBox specific flags: ## Troubleshooting * Run `minikube start --alsologtostderr -v=7` to debug crashes +* If you experience slow network performance with the VirtualBox driver, changing the Network Interface Card (NIC) type may improve speed. Use the following command to start minikube with the AMD PCNet FAST III (Am79C973) for both NAT and host-only network interfaces: + + ```shell + minikube start --vm-driver=virtualbox --nat-nic-type=Am79C973 --host-only-nic-type=Am79C973 + ``` diff --git a/site/content/en/docs/drivers/vmware.md b/site/content/en/docs/drivers/vmware.md index 5172a9c1d664..12d7a60d9705 100644 --- a/site/content/en/docs/drivers/vmware.md +++ b/site/content/en/docs/drivers/vmware.md @@ -11,7 +11,7 @@ The vmware driver supports virtualization across all VMware based hypervisors. {{% tabs %}} {{% mactab %}} -{{% readfile file="/docs/drivers/includes/vmware_macos_usage.inc" %}} vmware_windows_usage.inc +{{% readfile file="/docs/drivers/includes/vmware_macos_usage.inc" %}} {{% /mactab %}} {{% linuxtab %}} No documentation is available yet. diff --git a/site/content/en/docs/faq/_index.md b/site/content/en/docs/faq/_index.md index 2f38a1fd5eec..dd586e8358ca 100644 --- a/site/content/en/docs/faq/_index.md +++ b/site/content/en/docs/faq/_index.md @@ -15,7 +15,7 @@ You can create a Kubernetes cluster with any version you desire using `--kuberne Example: ```bash -minikube start --kubernetes-version=v1.15.0 +minikube start --kubernetes-version=v1.34.0 ``` ## How can I create more than one cluster with minikube? @@ -29,11 +29,35 @@ minikube profile list minikube profiles are meant to be isolated from one another, with their own settings and drivers. If you want to create a single cluster with multiple nodes, try the [multi-node feature]({{< ref "/docs/tutorials/multi_node" >}}) instead. +## Can I use minikube as a Docker Desktop replacement? + +Yes! Follow our tutorial on [Using minikube as a Docker Desktop Replacement]({{< ref "/docs/tutorials/docker_desktop_replacement" >}}). + +## Can I start minikube without Kubernetes running? + +Yes! If you want to use minikube only as a Docker Desktop replacement without starting Kubernetes itself, try: +``` +minikube start --container-runtime=docker --no-kubernetes +``` + +Alternatively, if you want to temporarily turn off Kubernetes, you can pause and later unpause Kubernetes +``` +minikube pause +``` + +minikube also has an addon that automatically pauses Kubernetes after a certain amount of inactivity: + +``` +minikube addons enable auto-pause +``` + + ## Docker Driver: How can I set minikube's cgroup manager? -By default minikube uses the `cgroupfs` cgroup manager for Kubernetes clusters. If you are on a system with a systemd cgroup manager, this could cause conflicts. -To use the `systemd` cgroup manager, run: +For non-VM and non-SSH drivers, minikube will try to auto-detect your system's cgroups driver/manager and configure all other components accordingly. +For VM and SSH drivers, minikube will use cgroupfs cgroups driver/manager by default. +To force the `systemd` cgroup manager, run: ```bash minikube start --force-systemd=true @@ -41,7 +65,7 @@ minikube start --force-systemd=true ## How can I run minikube with the Docker driver if I have an existing cluster with a VM driver? -First please ensure your Docker service is running. Then you need to either: +First please ensure your Docker service is running. Then you need to either: (a) Delete the existing cluster and create a new one @@ -53,7 +77,7 @@ minikube start --driver=docker Alternatively, (b) Create a second cluster with a different profile name: ```bash -minikube start -p p1 --driver=docker +minikube start -p p1 --driver=docker ``` ## Does minikube support IPv6? @@ -64,7 +88,7 @@ minikube currently doesn't support IPv6. However, it is on the [roadmap]({{< ref The easiest approach is to use the `docker` driver, as the backend service always runs as `root`. -`none` users may want to try `CHANGE_MINIKUBE_NONE_USER=true`, where kubectl and such will work without `sudo`. See [environment variables]({{< ref "/docs/handbook/config.md#environment-variables" >}}) for more details. +`none` users may want to try `CHANGE_MINIKUBE_NONE_USER=true`, where kubectl and such will work without `sudo`. See [environment variables]({{< ref "/docs/handbook/config.md#environment-variables" >}}) for more details. Alternatively, you can configure `sudo` to never prompt for commands issued by minikube. @@ -78,10 +102,10 @@ minikube start --extra-config kubeadm.ignore-preflight-errors=SystemVerification ## What is the minimum resource allocation necessary for a Knative setup using minikube? -Please allocate sufficient resources for Knative setup using minikube, especially when running minikube cluster on your local machine. We recommend allocating at least 6 CPUs and 8G memory: +Please allocate sufficient resources for Knative setup using minikube, especially when running minikube cluster on your local machine. We recommend allocating at least 3 CPUs and 3G memory. ```shell -minikube start --cpus 6 --memory 8000 +minikube start --cpus 3 --memory 3072 ``` ## Do I need to install kubectl locally? @@ -95,7 +119,7 @@ Simply run the following command to be enrolled into beta notifications: minikube config set WantBetaUpdateNotification true ``` -## Can I get rid of the emoji in minikube's outpuut? +## Can I get rid of the emoji in minikube's output? Yes! If you prefer not having emoji in your minikube output 😔 , just set the `MINIKUBE_IN_STYLE` environment variable to `0` or `false`: @@ -136,3 +160,46 @@ $env:MINIKUBE_HOME = "D:\.minikube" minikube start ``` + +## Can I set a static IP for the minikube cluster? + +Currently a static IP can only be set when using the Docker or Podman driver. + +For more details see the [static IP tutorial]({{< ref "docs/tutorials/static_ip.md" >}}). + +## How to ignore the kubeadm requirements and pre-flight checks (such as minimum CPU count)? + +Kubeadm has certain software and hardware requirements to maintain a stable Kubernetes cluster. However, these requirements can be ignored (such as when running minikube on a single CPU) by running the following: +``` +minikube start --force --extra-config=kubeadm.skip-phases=preflight +``` +This is not recommended, but for some users who are willing to accept potential performance or stability issues, this may be the only option. +## I am in China, and I encounter errors when trying to start minikube, what should I do? + +After executing `minikube start`, minikube will try to pulling images from `gcr.io` or Docker Hub. However, it has been confirmed that Chinese (mainland) users may not have access to `gcr.io` or Docker Hub. So in China mainland, it is very likely that `minikube start` will fail. + +For Chinese users, the reason is that China mainland government has set up GFW firewall to block any access to `gcr.io` or Docker Hub from China mainland. + +Minikube is an open community and we are always willing to help users from any corner of the world to use our open-source software, and provide possible assistance when possible. Here are 3 possible ways to resolve the blockade. + +1. Use `minikube start --image-mirror-country='cn'` instead. Aliyun (a Chinese corporation) provides a mirror repository (`registry.cn-hangzhou.aliyuncs.com/google_containers`) for those images, to which Chinese users have access. By using `--image-mirror-country='cn'` flag, minikube will try to pull the image from Aliyun mirror site as first priority.

*Note: when a new image is published on gcr.io, it may take several days for the image to be synchronized to Aliyun mirror repo. However, minikube will always try to pull the newest image by default, which will cause a failure of pulling image. Under this circumstance, you HAVE TO use `--kubernetes-version` flag AS WELL to tell minikube to use an older version image which is available on Aliyun repo.*

*For example, `minikube start --image-mirror-country='cn' --kubernetes-version=v1.34.0` will tell minikube to pull v1.34.0 k8s image from Aliyun.* + +2. If you have a private mirror repository provided by your own cloud provider, you can specify that via `--image-repository` flag. For example, using `minikube start --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'` will tell minikube to try to pull images from `registry.cn-hangzhou.aliyuncs.com/google_containers` mirror repository as first priority. + +3. Use a proxy server/VPN, if you have one.
*Note: please obey the local laws. In some area, using an unauthorized proxy server/VPN is ILLEGAL* + +## How do I install containernetworking-plugins for none driver? + +Go to [containernetworking-plugins](https://github.com/containernetworking/plugins/releases) to find the latest version. + +Then execute the following: +```shell +CNI_PLUGIN_VERSION="" +CNI_PLUGIN_TAR="cni-plugins-linux-amd64-$CNI_PLUGIN_VERSION.tgz" # change arch if not on amd64 +CNI_PLUGIN_INSTALL_DIR="/opt/cni/bin" + +curl -LO "https://github.com/containernetworking/plugins/releases/download/$CNI_PLUGIN_VERSION/$CNI_PLUGIN_TAR" +sudo mkdir -p "$CNI_PLUGIN_INSTALL_DIR" +sudo tar -xf "$CNI_PLUGIN_TAR" -C "$CNI_PLUGIN_INSTALL_DIR" +rm "$CNI_PLUGIN_TAR" +``` diff --git a/site/content/en/docs/handbook/accessing.md b/site/content/en/docs/handbook/accessing.md index 09a77f9a2ca8..df5b1e6dd3ec 100644 --- a/site/content/en/docs/handbook/accessing.md +++ b/site/content/en/docs/handbook/accessing.md @@ -25,10 +25,74 @@ A NodePort service is the most basic way to get external traffic directly to you We also have a shortcut for fetching the minikube IP and a service's `NodePort`: ```shell -minikube service --url +minikube service --url ``` -## Getting the NodePort using kubectl +### Using `minikube service` with tunnel + +The network is limited if using the Docker driver on Darwin, Windows, or WSL, and the Node IP is not reachable directly. + +Running minikube on Linux with the Docker driver will result in no tunnel being created. + +Services of type `NodePort` can be exposed via the `minikube service --url` command. It must be run in a separate terminal window to keep the [tunnel](https://en.wikipedia.org/wiki/Port_forwarding#Local_port_forwarding) open. Ctrl-C in the terminal can be used to terminate the process at which time the network routes will be cleaned up. + +### Example of NodePort + +1. Create a Kubernetes deployment + + ```shell + kubectl create deployment hello-minikube1 --image=kicbase/echo-server:1.0 + ``` + +2. Create a Kubernetes service type NodePort + + ```shell + kubectl expose deployment hello-minikube1 --type=NodePort --port=8080 + ``` + +3. Check Node Port + + ```shell + $ kubectl get svc + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + hello-minikube1 NodePort 10.100.238.34 8080:31389/TCP 3s + ``` + +4. Run service tunnel + + ```shell + minikube service hello-minikube1 --url + ``` + + `minikube service hello-minikube1 --url` runs as a process, creating a [tunnel](https://en.wikipedia.org/wiki/Port_forwarding#Local_port_forwarding) to the cluster. The command exposes the service directly to any program running on the host operating system. + +
+ + service output example + +
+    $ minikube service hello-minikube1 --url
+    http://127.0.0.1:57123
+    ❗  Because you are using a Docker driver on darwin, the terminal needs to be open to run it.
+    
+
+ + Check ssh tunnel in another terminal + + ```shell + $ ps -ef | grep docker@127.0.0.1 + ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -N docker@127.0.0.1 -p 55972 -i /Users/FOO/.minikube/machines/minikube/id_rsa -L TUNNEL_PORT:CLUSTER_IP:TARGET_PORT + ``` + +5. Try in your browser + + Open in your browser (ensure there is no proxy set) + + ```shell + http://127.0.0.1:TUNNEL_PORT + ``` + +### Getting the NodePort using kubectl The minikube VM is exposed to the host system via a host-only IP address, that can be obtained with the `minikube ip` command. Any services of type `NodePort` can be accessed over that IP address, on the NodePort. @@ -54,77 +118,78 @@ This flag also accepts a comma separated list of ports and port ranges. A LoadBalancer service is the standard way to expose a service to the internet. With this method, each service gets its own IP address. -## Using `minikube tunnel` +### Using `minikube tunnel` Services of type `LoadBalancer` can be exposed via the `minikube tunnel` command. It must be run in a separate terminal window to keep the `LoadBalancer` running. Ctrl-C in the terminal can be used to terminate the process at which time the network routes will be cleaned up. -## Example +### Example of LoadBalancer -#### Run tunnel in a separate terminal +1. Run the tunnel in a separate terminal -it will ask for password. + It will ask for a password. -```shell -minikube tunnel -``` + ```shell + minikube tunnel + ``` -`minikube tunnel` runs as a process, creating a network route on the host to the service CIDR of the cluster using the cluster's IP address as a gateway. The tunnel command exposes the external IP directly to any program running on the host operating system. - -
- -tunnel output example - -
-Password:
-Status:
- machine: minikube
- pid: 39087
- route: 10.96.0.0/12 -> 192.168.64.194
- minikube: Running
- services: [hello-minikube]
-    errors:
-  minikube: no errors
-  router: no errors
-  loadbalancer emulator: no errors
-...
-...
-...
-
-
- -#### Create a kubernetes deployment + `minikube tunnel` runs as a process, creating a network route on the host to the service CIDR of the cluster using the cluster's IP address as a gateway. The tunnel command exposes the external IP directly to any program running on the host operating system. -```shell -kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4 -``` +
+ + tunnel output example + +
+    Password:
+    Status:
+    machine: minikube
+    pid: 39087
+    route: 10.96.0.0/12 -> 192.168.64.194
+    minikube: Running
+    services: [hello-minikube]
+        errors:
+      minikube: no errors
+      router: no errors
+      loadbalancer emulator: no errors
+    ...
+    ...
+    ...
+    
+
-#### Create a kubernetes service type LoadBalancer +2. Create a Kubernetes deployment -```shell -kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080 -``` + ```shell + kubectl create deployment hello-minikube1 --image=kicbase/echo-server:1.0 + ``` -### Check external IP +3. Create a Kubernetes service with type LoadBalancer -```shell -kubectl get svc -``` -
-$ kc get svc
-NAME              TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
-hello-minikube1   LoadBalancer   10.96.184.178   10.96.184.178   8080:30791/TCP   40s
-
+ ```shell + kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080 + ``` -note that without minikube tunnel, kubernetes would be showing external IP as "pending". +4. Check the external IP -### Try in your browser + ```shell + kubectl get svc + ``` +
+    $ kc get svc
+    NAME              TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
+    hello-minikube1   LoadBalancer   10.96.184.178   10.96.184.178   8080:30791/TCP   40s
+    
-open in your browser (make sure there is no proxy set) -``` -http://REPLACE_WITH_EXTERNAL_IP:8080 -``` + Note that without minikube tunnel, Kubernetes will show the external IP as "pending". + +5. Try in your browser + + Open in your browser (ensure there is no proxy set) -Each service will get its own external ip. + ```shell + http://REPLACE_WITH_EXTERNAL_IP:8080 + ``` + + Each service will get its own external IP. ---- @@ -150,12 +215,12 @@ Adding a route requires root privileges for the user, and thus there are differe - ### Access to ports <1024 on Windows requires root permission + If you are using Docker driver on Windows, there is a chance that you have an old version of SSH client you might get an error like - `Privileged ports can only be forwarded by root.` or you might not be able to access the service even after `minikube tunnel` if the access port is less than 1024 but for ports greater than 1024 works fine. In order to resolve this, ensure that you are running the latest version of SSH client. You can install the latest version of the SSH client on Windows by running the following in a Command Prompt with an Administrator Privileges (Requires [chocolatey package manager](https://chocolatey.org/install)) -``` +```cmd choco install openssh ``` -The latest version (`OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5`) which is available on Windows 10 by default doesn't work. You can track the issue with this over here - https://github.com/PowerShell/Win32-OpenSSH/issues/1693 \ No newline at end of file +The latest version (`OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5`) which is available on Windows 10 by default doesn't work. You can track the issue with this over here - https://github.com/PowerShell/Win32-OpenSSH/issues/1693 diff --git a/site/content/en/docs/tutorials/ambassador_ingress_controller.md b/site/content/en/docs/handbook/addons/ambassador.md similarity index 89% rename from site/content/en/docs/tutorials/ambassador_ingress_controller.md rename to site/content/en/docs/handbook/addons/ambassador.md index 32e5d5a76ed4..5eb52ffc93ba 100644 --- a/site/content/en/docs/tutorials/ambassador_ingress_controller.md +++ b/site/content/en/docs/handbook/addons/ambassador.md @@ -1,15 +1,13 @@ --- -title: "Using Ambassador Ingress Controller" -linkTitle: "Using Ambassador Ingress Controller" +title: "Using the Ambassador Addon" +linkTitle: "Ambassador" weight: 1 date: 2020-05-14 -description: > - Using Ambassador Ingress Controller with Minikube --- ## Overview -[Ambassador](https://getambassador.io/) allows access to Kubernetes services running inside Minikube. Ambassador can be +[Ambassador](https://getambassador.io/) allows access to Kubernetes services running inside minikube. Ambassador can be configured via both, [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) resources and [Mapping](https://www.getambassador.io/docs/latest/topics/using/intro-mappings/) resources. @@ -56,7 +54,7 @@ this [post](https://blog.getambassador.io/new-kubernetes-1-18-extends-ingress-c3 First, let's create a Kubernetes deployment and service which we will talk to via Ambassador. ```shell script -kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4 +kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0 kubectl expose deployment hello-minikube --port=8080 ``` @@ -105,7 +103,7 @@ that maps a target backend service to a given host or prefix. Let's create another Kubernetes deployment and service that we will expose via Ambassador - ```shell script -kubectl create deployment mapping-minikube --image=k8s.gcr.io/echoserver:1.4 +kubectl create deployment mapping-minikube --image=kicbase/echo-server:1.0 kubectl expose deployment mapping-minikube --port=8080 ``` @@ -134,4 +132,3 @@ curl http:// ``` **Note:** Read more about mappings in Ambassador's -[documentation](https://www.getambassador.io/docs/latest/topics/using/mappings/). diff --git a/site/content/en/docs/handbook/addons/cloud-spanner.md b/site/content/en/docs/handbook/addons/cloud-spanner.md new file mode 100644 index 000000000000..ee5cca988ea0 --- /dev/null +++ b/site/content/en/docs/handbook/addons/cloud-spanner.md @@ -0,0 +1,53 @@ +--- +title: "Using the Cloud Spanner Addon" +linkTitle: "Cloud Spanner" +weight: 1 +date: 2022-10-14 +--- + +## Cloud Spanner Addon + +[Cloud Spanner](https://cloud.google.com/spanner) is a fully managed relational database. The Cloud Spanner addon provides a local emulator to test your local application without incurring the cost of an actual spanner instance. + +### Enable Cloud Spanner on minikube + +To enable this addon, simply run: +```shell script +minikube addons enable cloud-spanner +``` + +### Cloud Spanner Endpoints +Cloud Spanner provides two different ports, HTTP and GRPC. List Cloud Spanner emulator urls by running: +``` shell +minikube service cloud-spanner-emulator + +####################Sample Output######################### +|-----------|------------------------|-------------|---------------------------| +| NAMESPACE | NAME | TARGET PORT | URL | +|-----------|------------------------|-------------|---------------------------| +| default | cloud-spanner-emulator | http/9020 | http://192.168.49.2:30233 | +| | | grpc/9010 | http://192.168.49.2:30556 | +|-----------|------------------------|-------------|---------------------------| +[default cloud-spanner-emulator http/9020 +grpc/9010 http://192.168.49.2:30233 +http://192.168.49.2:30556] +``` + +### Using Cloud Spanner within a cluster +Cloud Spanner emulator can be used via endpoint `cloud-spanner-emulator:9020` for http clients and `cloud-spanner-emulator:9010` for grpc clients respectively. If you're using the standard client library for Cloud Spanner then set `SPANNER_EMULATOR_HOST` to the GRPC endpoint `cloud-spanner-emulator:9010`. + +### Testing installation + +```shell script +kubectl get pods -n cloud-spanner-emulator +``` + +If everything went well, there should be no errors about Cloud Spanner's installation in your minikube cluster. + +### Disable Cloud Spanner + +To disable this addon, simply run: + +```shell script +minikube addons disable cloud-spanner +``` diff --git a/site/content/en/docs/handbook/addons/custom-images.md b/site/content/en/docs/handbook/addons/custom-images.md index a66c44ee092b..344ae99b884b 100644 --- a/site/content/en/docs/handbook/addons/custom-images.md +++ b/site/content/en/docs/handbook/addons/custom-images.md @@ -19,8 +19,8 @@ minikube addons images efk |----------------------|------------------------------|-------------------| | IMAGE NAME | DEFAULT IMAGE | DEFAULT REGISTRY | |----------------------|------------------------------|-------------------| -| Elasticsearch | elasticsearch:v5.6.2 | k8s.gcr.io | -| FluentdElasticsearch | fluentd-elasticsearch:v2.0.2 | k8s.gcr.io | +| Elasticsearch | elasticsearch:v5.6.2 | registry.k8s.io | +| FluentdElasticsearch | fluentd-elasticsearch:v2.0.2 | registry.k8s.io | | Alpine | alpine:3.6 | | | Kibana | kibana/kibana:5.6.2 | docker.elastic.co | |----------------------|------------------------------|-------------------| @@ -31,7 +31,7 @@ An empty registry means the image is stored locally or default registry `docker. The `IMAGE NAME` column is used to customize the corresponding image and registry. -Assume we have a private registry at `192.168.10.2:5555` to replace `k8s.gcr.io` and a locally built Kibana called `kibana/kibana:5.6.2-custom`. +Assume we have a private registry at `192.168.10.2:5555` to replace `registry.k8s.io` and a locally built Kibana called `kibana/kibana:5.6.2-custom`. We could load local images to minikube by: @@ -54,4 +54,4 @@ minikube addons enable efk --images="Kibana=kibana/kibana:5.6.2-custom" --regist 🌟 The 'efk' addon is enabled ``` -Now the `efk` addon is using the custom registry and images. \ No newline at end of file +Now the `efk` addon is using the custom registry and images. diff --git a/site/content/en/docs/handbook/addons/gcp-auth.md b/site/content/en/docs/handbook/addons/gcp-auth.md index 46f71bbe1d04..0b908671abd6 100644 --- a/site/content/en/docs/handbook/addons/gcp-auth.md +++ b/site/content/en/docs/handbook/addons/gcp-auth.md @@ -5,9 +5,18 @@ weight: 1 date: 2020-07-15 --- -## Tutorial -If you have a containerized GCP app with a Kubernetes yaml, you can automatically add your credentials to all your deployed pods dynamically with this minikube addon. You just need to have a credentials file, which can be generated with `gcloud auth application-default login`. If you already have a json credentials file you want specify, use the GOOGLE_APPLICATION_CREDENTIALS environment variable. +The `gcp-auth` addon automatically and dynamically configures pods to use your credentials, allowing applications to access Google Cloud services as if they were running within Google Cloud. + +The addon defaults to using your environment's [Application Default Credentials](https://google.aip.dev/auth/4110), which you can configure with `gcloud auth application-default login`. +Alternatively, you can specify a JSON credentials file (e.g. service account key) by setting the `GOOGLE_APPLICATION_CREDENTIALS` environment variable to the location of that file. + +The addon also defaults to using your local gcloud project, which you can configure with `gcloud config set project `. You can override this by setting the `GOOGLE_CLOUD_PROJECT` environment variable to the name of the desired project. + +Once the addon is enabled, pods in your cluster will be configured with environment variables (e.g. `GOOGLE_APPLICATION_DEFAULTS`, `GOOGLE_CLOUD_PROJECT`) that are automatically used by GCP client libraries. Additionally, the addon configures [registry pull secrets](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/), allowing your cluster to access the container images hosted in [Artifact Registry](https://cloud.google.com/artifact-registry) and [Google Container Registry](https://cloud.google.com/container-registry). + + +## Tutorial - Start a cluster: @@ -86,8 +95,18 @@ spec: ## Refreshing existing pods -If you had already deployed pods to your minikube cluster before enabling the gcp-auth addon, then these pods will not have any GCP credentials. There are two ways to solve this issue. +Pods that were deployed to your minikube cluster before the `gcp-auth` addon was enabled will not be configured with GCP credentials. +To resolve this problem, run: + +`minikube addons enable gcp-auth --refresh` + +## Adding new namespaces + +### minikube v1.29.0+ +Newly created namespaces automatically have the image pull secret configured, no action is required. -1. If you use a Deployment to deploy your pods, just delete the existing pods with `kubectl delete pod `. The deployment will then automatically recreate the pod and it will have the correct credentials. +### minikube v1.28.0 and before +Namespaces that are added after enabling gcp-auth addon will not be configured with the image pull secret. +To resolve this problem, run: -2. minikube can delete and recreate your pods for you, by running `minikube addons enable gcp-auth --refresh`. It does not matter if you have already enabled the addon or not. \ No newline at end of file +`minikube addons enable gcp-auth --refresh` diff --git a/site/content/en/docs/handbook/addons/gvisor.md b/site/content/en/docs/handbook/addons/gvisor.md new file mode 100644 index 000000000000..10f8839d80c8 --- /dev/null +++ b/site/content/en/docs/handbook/addons/gvisor.md @@ -0,0 +1,81 @@ +--- +title: "Using the gVisor Addon" +linkTitle: "gVisor" +weight: 1 +date: 2018-01-02 +--- + +## gVisor Addon +[gVisor](https://gvisor.dev/), a sandboxed container runtime, allows users to securely run pods with untrusted workloads within minikube. + +### Starting minikube +gVisor depends on the containerd runtime to run in minikube. +When starting minikube, specify the following flags, along with any additional desired flags: + +```shell +$ minikube start --container-runtime=containerd \ + --docker-opt containerd=/var/run/containerd/containerd.sock +``` + +### Enabling gVisor +To enable this addon, simply run: + +``` +$ minikube addons enable gvisor +``` + +Within one minute, the addon manager should pick up the change and you should +see the `gvisor` pod and `gvisor` [Runtime Class](https://kubernetes.io/docs/concepts/containers/runtime-class/): + +``` +$ kubectl get pod,runtimeclass gvisor -n kube-system +NAME READY STATUS RESTARTS AGE +pod/gvisor 1/1 Running 0 2m52s + +NAME CREATED AT +runtimeclass.node.k8s.io/gvisor 2019-06-15T04:35:09Z +``` + +Once the pod has status `Running`, gVisor is enabled in minikube. + +### Running pods in gVisor + +To run a pod in gVisor, add the `gvisor` runtime class to the Pod spec in your +Kubernetes yaml: + +``` +runtimeClassName: gvisor +``` + +An example Pod is shown below: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: nginx-untrusted +spec: + runtimeClassName: gvisor + containers: + - name: nginx + image: nginx +``` + +### Disabling gVisor + +To disable gVisor, run: + +``` +$ minikube addons disable gvisor +``` + +Within one minute, the addon manager should pick up the change. +Once the `gvisor` pod has status `Terminating`, or has been deleted, the gvisor addon should be disabled. + +``` +$ kubectl get pod gvisor -n kube-system +NAME READY STATUS RESTARTS AGE +gvisor 1/1 Terminating 0 5m +``` + +_Note: Once gVisor is disabled, any pod with the `gvisor` Runtime Class will fail with a FailedCreatePodSandBox error._ diff --git a/site/content/en/docs/handbook/addons/headlamp.md b/site/content/en/docs/handbook/addons/headlamp.md new file mode 100644 index 000000000000..3dde5094d798 --- /dev/null +++ b/site/content/en/docs/handbook/addons/headlamp.md @@ -0,0 +1,51 @@ +--- +title: "Using the Headlamp Addon" +linkTitle: "Headlamp" +weight: 1 +date: 2022-06-08 +--- + +## Headlamp Addon + +[Headlamp](https://kinvolk.github.io/headlamp) is an easy-to-use and extensible Kubernetes web UI. + +### Enable Headlamp on minikube + +To enable this addon, simply run: +```shell script +minikube addons enable headlamp +``` + +Once the addon is enabled, you can access the Headlamp's web UI using the following command. +```shell script +minikube service headlamp -n headlamp +``` + +To authenticate in Headlamp, fetch the Authentication Token using the following command: + +```shell script +export SECRET=$(kubectl get secrets --namespace headlamp -o custom-columns=":metadata.name" | grep "headlamp-token") +kubectl get secret $SECRET --namespace headlamp --template=\{\{.data.token\}\} | base64 --decode +``` + +Headlamp can display more detailed information when metrics-server is installed. To install it, run: + +```shell script +minikube addons enable metrics-server +``` + +### Testing installation + +```shell script +kubectl get pods -n headlamp +``` + +If everything went well, there should be no errors about Headlamp's installation in your minikube cluster. + +### Disable headlamp + +To disable this addon, simply run: + +```shell script +minikube addons disable headlamp +``` diff --git a/site/content/en/docs/handbook/addons/ingress-dns.md b/site/content/en/docs/handbook/addons/ingress-dns.md index 84eb968468d3..4f49f7806151 100644 --- a/site/content/en/docs/handbook/addons/ingress-dns.md +++ b/site/content/en/docs/handbook/addons/ingress-dns.md @@ -1,33 +1,35 @@ --- title: "Ingress DNS" -linkTitle: "Minikube Ingress DNS" +linkTitle: "Ingress DNS" weight: 1 -date: 2021-06-03 +date: 2021-11-08 --- DNS service for ingress controllers running on your minikube server ## Overview ### Problem -When running minikube locally you are highly likely to want to run your services on an ingress controller so that you -don't have to use minikube tunnel or NodePorts to access your services. While NodePort might be ok in a lot of -circumstances in order to test some features an ingress is necessary. Ingress controllers are great because you can -define your entire architecture in something like a helm chart and all your services will be available. There is only -1 problem. That is that your ingress controller works basically off of dns and while running minikube that means that -your local dns names like `myservice.test` will have to resolve to `$(minikube ip)` not really a big deal except the -only real way to do this is to add an entry for every service in your `/etc/hosts` file. This gets messy for obvious -reasons. If you have a lot of services running that each have their own dns entry then you have to set those up -manually. Even if you automate it you then need to rely on the host operating system storing configurations instead of -storing them in your cluster. To make it worse it has to be constantly maintained and updated as services are added, -remove, and renamed. I call it the `/ets/hosts` pollution problem. +When running minikube locally, you may want to run your services on an ingress controller so that you don't have to use +minikube tunnel or NodePorts to access your services. While NodePort might be okay in a lot of circumstances, an ingress +is necessary to test some features. Ingress controllers are great because you can define your entire architecture in +something like a helm chart, and all your services will be available. + +However, for minikube, there is an additional challenge. Your ingress controller relies on DNS, so local DNS names like +`myservice.test` will have to resolve to your `minikube ip`. The only real way to do this is to add an entry for every +service in your `/etc/hosts` file. This gets messy for obvious reasons. For each service you are running that each has +its own DNS entry, you will need to configure it manually. Even if you automate it, you then need to rely on the host +operating system for storing configurations instead of storing them in your cluster. To make it worse, these +configurations have to be constantly maintained and updated as services are added, removed, and renamed. I call it the +`/etc/hosts` pollution problem. ### Solution -What if you could just access your local services magically without having to edit your `/etc/hosts` file? Well now you -can. This addon acts as a DNS service that runs inside your kubernetes cluster. All you have to do is install the -service and add the `$(minikube ip)` as a DNS server on your host machine. Each time the dns service is queried an -API call is made to the kubernetes master service for a list of all the ingresses. If a match is found for the name a -response is given with an IP address as the `$(minikube ip)`. So for example lets say my minikube ip address is -`192.168.99.106` and I have an ingress controller with the name of `myservice.test` then I would get a result like so: +What if you could just access your local services magically without having to edit your `/etc/hosts` file? Well, now you +can. The `ingress-dns` addon acts as a DNS service that runs inside your Kubernetes cluster. All you have to do is +install the service and add the `minikube ip` as a DNS server on your host machine. Each time the DNS service is +queried, an API call is made to the Kubernetes master service for a list of all the ingresses. If a match is found for +the name, a response is given with an IP address matching `minikube ip`. For example, with a `minikube ip` of +`192.168.99.169` and an ingress rule for `myservice.test` configured in the cluster, a DNS query from the host would +produce: ```text #bash:~$ nslookup myservice.test $(minikube ip) @@ -41,114 +43,236 @@ Address: 192.168.99.169 ## Installation -### Start minikube -``` +

1Start minikube

+ +```bash minikube start ``` -### Install the kubernetes resources +

2Enable the addons

+ ```bash +minikube addons enable ingress minikube addons enable ingress-dns ``` -### Add the minikube ip as a dns server +

3Add the `minikube ip` as a DNS server

-#### Mac OS -Create a file in `/etc/resolver/minikube-profilename-test` -``` -domain test -nameserver 192.168.99.169 -search_order 1 -timeout 5 -``` -Replace `192.168.99.169` with your minikube ip and `profilename` is the name of the minikube profile for the -corresponding ip address +{{% tabs %}} +{{% linuxtab %}} -If you have multiple minikube ips you must configure multiple files +On Linux, you should identify your domain name resolver configuration, and update its configuration accordingly. To that end, look at the first lines of `/etc/resolv.conf`: -See https://www.unix.com/man-page/opendarwin/5/resolver/ -Note that even though the `port` feature is documented. It does not actually work. +- if it mentions `resolvconf`, resolution is likely handled by **resolvconf**, +- if it is `# Generated by NetworkManager`, resolution is handled by **NetworkManager**, +- if it similar to `# This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8)`, resolution is handled by **systemd-resolved**. + +Start minikube, and apply the configuration below matching your system configuration. + +## Linux OS with resolvconf + +Update the file `/etc/resolvconf/resolv.conf.d/base` to have the following contents. -#### Linux -Update the file `/etc/resolvconf/resolv.conf.d/base` to have the following contents ``` search test nameserver 192.168.99.169 timeout 5 ``` -Replace `192.168.99.169` with your minikube ip -If your linux OS uses `systemctl` run the following commands +Replace `192.168.99.169` with the output of `minikube ip`. + +If your Linux OS uses `systemctl`, run the following commands. + ```bash sudo resolvconf -u systemctl disable --now resolvconf.service ``` -If your linux does not use `systemctl` run the following commands +If your Linux OS does not use `systemctl`, run the following commands. -TODO add supporting docs for Linux OS that do not use `systemctl` +```bash +# TODO add supporting docs for Linux OS that do not use `systemctl` +``` See https://linux.die.net/man/5/resolver -When you are using Network Manager with the dnsmasq plugin, you can add an additional configuration file, but you need -to restart NetworkManager to activate the change. + +## Linux OS with NetworkManager + +NetworkManager can run integrated caching DNS server - `dnsmasq` plugin and can be configured to use separate nameservers per domain. + +Edit `/etc/NetworkManager/NetworkManager.conf` and enable `dns=dnsmasq` by adding: + +``` +[main] +dns=dnsmasq +``` + +Also see `dns=` in [NetworkManager.conf](https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html). + +Configure dnsmasq to handle domain names ending with `.test`: ```bash -echo "server=/test/$(minikube ip)" >/etc/NetworkManager/dnsmasq.d/minikube.conf +sudo mkdir -p /etc/NetworkManager/dnsmasq.d/ +echo "server=/test/$(minikube ip)" | sudo tee /etc/NetworkManager/dnsmasq.d/minikube.conf +``` + +Restart Network Manager: + +``` systemctl restart NetworkManager.service ``` -Also see `dns=` in [NetworkManager.conf](https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html). +Ensure your `/etc/resolv.conf` contains only single nameserver: + +```bash +cat /etc/resolv.conf | grep nameserver +nameserver 127.0.0.1 +``` + +## Linux OS with systemd-resolved + +Run the following commands to add the minikube DNS for `.test` domains: + +```bash +sudo mkdir -p /etc/systemd/resolved.conf.d +sudo tee /etc/systemd/resolved.conf.d/minikube.conf << EOF +[Resolve] +DNS=$(minikube ip) +Domains=~test +EOF +sudo systemctl restart systemd-resolved +``` + +{{% /linuxtab %}} + +{{% mactab %}} + +Create a file in `/etc/resolver/minikube-test` with the following contents. + +``` +domain test +nameserver 192.168.99.169 +search_order 1 +timeout 5 +``` + +Replace `192.168.99.169` with your `minikube ip`. + +If you have multiple minikube IPs, you must configure a file for each. -#### Windows +See https://www.unix.com/man-page/opendarwin/5/resolver/ + +Note that the `port` feature does not work as documented. + +{{% /mactab %}} -TODO +{{% windowstab %}} + +Open `Powershell` as Administrator and execute the following. +```sh +Add-DnsClientNrptRule -Namespace ".test" -NameServers "$(minikube ip)" +``` + +The following will remove any matching rules before creating a new one. This is useful for updating the `minikube ip`. +```sh +Get-DnsClientNrptRule | Where-Object {$_.Namespace -eq '.test'} | Remove-DnsClientNrptRule -Force; Add-DnsClientNrptRule -Namespace ".test" -NameServers "$(minikube ip)" +``` + +{{% /windowstab %}} +{{% /tabs %}} + +

4(optional) Configure in-cluster DNS server to resolve local DNS names inside cluster

+ +Sometimes it's useful to access other applications inside cluster via ingress and by their local DNS name - microservices/APIs/tests. +In such case ingress-dns addon should be used by in-cluster DNS server - [CoreDNS](https://coredns.io/) to resolve local DNS names. + +Edit your CoreDNS config +```sh +kubectl edit configmap coredns -n kube-system +``` +and add block for your local domain +``` + test:53 { + errors + cache 30 + forward . 192.168.99.169 + } + +``` +Replace `192.168.99.169` with your `minikube ip`. + +The final ConfigMap should look like: +```yaml +apiVersion: v1 +data: + Corefile: | + .:53 { + errors + health { + lameduck 5s + } +... + } + test:53 { + errors + cache 30 + forward . 192.168.99.169 + } +kind: ConfigMap +metadata: +... +``` +See https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/ ## Testing -### Add the test ingress +

1Add the test ingress

+ ```bash kubectl apply -f https://raw.githubusercontent.com/kubernetes/minikube/master/deploy/addons/ingress-dns/example/example.yaml ``` -Note: Minimum Kubernetes version for example ingress is 1.19 +Note: Minimum Kubernetes version for the example ingress is 1.19 + +

2Confirm that DNS queries are returning A records

-### Validate DNS queries are returning A records ```bash nslookup hello-john.test $(minikube ip) nslookup hello-jane.test $(minikube ip) ``` -### Validate domain names are resolving on host OS +

3Confirm that domain names are resolving on the host OS

+ ```bash ping hello-john.test +ping hello-jane.test ``` + Expected results: ```text PING hello-john.test (192.168.99.169): 56 data bytes 64 bytes from 192.168.99.169: icmp_seq=0 ttl=64 time=0.361 ms ``` -```bash -ping hello-jane.test -``` + ```text PING hello-jane.test (192.168.99.169): 56 data bytes 64 bytes from 192.168.99.169: icmp_seq=0 ttl=64 time=0.262 ms ``` -### Curl the example server +

4Curl the example server

+ ```bash curl http://hello-john.test +curl http://hello-jane.test ``` -Expected result: + +Expected results: ```text Hello, world! Version: 1.0.0 Hostname: hello-world-app-557ff7dbd8-64mtv ``` -```bash -curl http://hello-jane.test -``` -Expected result: + ```text Hello, world! Version: 1.0.0 @@ -157,8 +281,8 @@ Hostname: hello-world-app-557ff7dbd8-64mtv ## Known issues -### .localhost domains will not resolve on chromium -.localhost domains will not correctly resolve on chromium since it is used as a loopback address. Instead use .test, .example, or .invalid +### .localhost always resolves to the loopback address +.localhost will often resolve to the loopback address (see [RFC 2606](https://datatracker.ietf.org/doc/html/rfc2606#section-2) and [RFC 6761](https://datatracker.ietf.org/doc/html/rfc6761#section-6.3)), so it can't be used for `minikube ip`. Instead use .test, .example, or .invalid ### .local is a reserved TLD Do not use .local as this is a reserved TLD for mDNS and bind9 DNS servers @@ -167,10 +291,24 @@ Do not use .local as this is a reserved TLD for mDNS and bind9 DNS servers #### mDNS reloading Each time a file is created or a change is made to a file in `/etc/resolver` you may need to run the following to reload Mac OS mDNS resolver. +For macOS versions prior to Big Sur, you can reload the mDNS resolver using the following legacy commands: + ```bash sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ``` +However, if you're using a newer macOS version (Big Sur and beyond), running the legacy commands may result in the following error: + +```bash +Load failed: 5: Input/output error +Try running `launchctl bootstrap` as root for richer errors. +``` +In this case, the recommended approach is to use the following commands instead: + +```bash +sudo launchctl enable system/com.apple.mDNSResponder.reloaded +sudo launchctl disable system/com.apple.mDNSResponder.reloaded +``` ## TODO - Add a service that runs on the host OS which will update the files in `/etc/resolver` automatically @@ -185,4 +323,4 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.pli | Image | Source | Owner | | :--- | :--- | :--- | | [ingress-nginx](https://quay.io/repository/kubernetes-ingress-controller/nginx-ingress-controller) | [ingress-nginx](https://github.com/kubernetes/ingress-nginx) | Kubernetes ingress-nginx -| [minikube-ingress-dns](https://hub.docker.com/r/cryptexlabs/minikube-ingress-dns) | [minikube-ingress-dns](https://gitlab.com/cryptexlabs/public/development/minikube-ingress-dns) | Cryptex Labs \ No newline at end of file +| [minikube-ingress-dns](https://hub.docker.com/r/cryptexlabs/minikube-ingress-dns) | [minikube-ingress-dns](https://gitlab.com/cryptexlabs/public/development/minikube-ingress-dns) | Cryptex Labs diff --git a/site/content/en/docs/handbook/addons/inspektor-gadget.md b/site/content/en/docs/handbook/addons/inspektor-gadget.md new file mode 100644 index 000000000000..f19ded66319b --- /dev/null +++ b/site/content/en/docs/handbook/addons/inspektor-gadget.md @@ -0,0 +1,33 @@ +--- +title: "Using the Inspektor Gadget Addon" +linkTitle: "Inspektor Gadget" +weight: 1 +date: 2023-02-16 +--- + +## Inspektor Gadget Addon + +[Inspektor Gadget](https://github.com/inspektor-gadget/inspektor-gadget) is a collection of tools (or gadgets) to debug and inspect Kubernetes resources and applications. It manages the packaging, deployment and execution of [eBPF](https://ebpf.io/) programs in a Kubernetes cluster, including many based on [BCC](https://github.com/iovisor/bcc) tools, as well as some developed specifically for use in Inspektor Gadget. It automatically maps low-level kernel primitives to high-level Kubernetes resources, making it easier and quicker to find the relevant information. + +### Enable Inspektor Gadget on minikube + +To enable this addon, simply run: +```shell script +minikube addons enable inspektor-gadget +``` + +### Testing installation + +```shell script +kubectl get pods -n gadget +``` + +If everything went well, there should be no errors about Inspektor Gadget's installation in your minikube cluster. + +### Disable Inspektor Gadget + +To disable this addon, simply run: + +```shell script +minikube addons disable inspektor-gadget +``` diff --git a/site/content/en/docs/handbook/addons/istio.md b/site/content/en/docs/handbook/addons/istio.md new file mode 100644 index 000000000000..998c2ef7df69 --- /dev/null +++ b/site/content/en/docs/handbook/addons/istio.md @@ -0,0 +1,40 @@ +--- +title: "Using the Istio Addon" +linkTitle: "Istio" +weight: 1 +date: 2019-12-25 +--- + +## istio Addon +[istio](https://istio.io/docs/setup/getting-started/) - Cloud platforms provide a wealth of benefits for the organizations that use them. + +### Enable istio on minikube +Make sure to start minikube with at least 8192 MB of memory and 4 CPUs. +See official [Platform Setup](https://istio.io/docs/setup/platform-setup/) documentation. + +```shell script +minikube start --memory=8192mb --cpus=4 +``` + +To enable this addon, simply run: +```shell script +minikube addons enable istio-provisioner +minikube addons enable istio +``` + +In a minute or so istio default components will be installed into your cluster. You could run `kubectl get po -n istio-system` to see the progress for istio installation. + +### Testing installation + +```shell script +kubectl get po -n istio-system +``` + +If everything went well you shouldn't get any errors about istio being installed in your cluster. If you haven't deployed any releases `kubectl get po -n istio-system` won't return anything. + +### Disable istio +To disable this addon, simply run: +```shell script +minikube addons disable istio-provisioner +minikube addons disable istio +``` diff --git a/site/content/en/docs/handbook/addons/kong-ingress.md b/site/content/en/docs/handbook/addons/kong-ingress.md new file mode 100644 index 000000000000..c524960cf1a9 --- /dev/null +++ b/site/content/en/docs/handbook/addons/kong-ingress.md @@ -0,0 +1,203 @@ +--- +title: "Using the Kong Ingress Controller Addon" +linkTitle: "Kong Ingress" +weight: 1 +date: 2022-01-25 +--- +Kong Ingress Controller (KIC) running on your minikube server. + +1. Start `minikube` + + ```bash + minikube start + ``` + + It will take a few minutes to get all resources provisioned. + + ```bash + kubectl get nodes + ``` + +## Deploy the Kong Ingress Controller + +Enable Kong Ingress Controller via `minikube` command. + +```bash +$ minikube addons enable kong + +🌟 The 'kong' addon is enabled +``` + +> Note: this process could take up to five minutes the first time. + +## Setup environment variables + +Next, we will set up an environment variable with the IP address at which +Kong is accessible. +We can use it to send requests into the Kubernetes cluster. + +```bash +$ export PROXY_IP=$(minikube service -n kong kong-proxy --url | head -1) +$ echo $PROXY_IP +http://192.168.99.100:32728 +``` + +Alternatively, you can use `minikube tunnel` command. + +```bash + +# open another terminal window and run +minikube tunnel + +# you may need to enter an admin password because minikube need to use ports 80 and 443 +``` + +Let's test if KIC is up and running. + +```bash +$ curl -v localhost + +* Trying 127.0.0.1:80... +* Connected to localhost (127.0.0.1) port 80 (#0) +> GET / HTTP/1.1 +> Host: localhost +> User-Agent: curl/7.86.0 +> Accept: */* +> +* Mark bundle as not supporting multiuse +< HTTP/1.1 404 Not Found +< Date: Wed, 03 May 2023 01:34:31 GMT +< Content-Type: application/json; charset=utf-8 +< Connection: keep-alive +< Content-Length: 48 +< X-Kong-Response-Latency: 0 +< Server: kong/3.2.2 +< +* Connection #0 to host localhost left intact +{"message":"no Route matched with those values"}% +```` + +## Creating Ingress object + +To proxy requests, you need an upstream application to proxy to. +Deploying this echo server provides a simple application that returns information about the Pod it’s running in: + +```bash +echo " +apiVersion: v1 +kind: Service +metadata: + labels: + app: echo + name: echo +spec: + ports: + - port: 1025 + name: tcp + protocol: TCP + targetPort: 1025 + - port: 1026 + name: udp + protocol: TCP + targetPort: 1026 + - port: 1027 + name: http + protocol: TCP + targetPort: 1027 + selector: + app: echo +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: echo + name: echo +spec: + replicas: 1 + selector: + matchLabels: + app: echo + strategy: {} + template: + metadata: + creationTimestamp: null + labels: + app: echo + spec: + containers: + - image: kong/go-echo:latest + name: echo + ports: + - containerPort: 1027 + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + resources: {} +" | kubectl apply -f - +``` + +Next, we will create routing configuration to proxy `/echo` requests to the echo server: + +```bash +echo " +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: echo + annotations: + konghq.com/strip-path: 'true' +spec: + ingressClassName: kong + rules: + - host: kong.example + http: + paths: + - path: /echo + pathType: ImplementationSpecific + backend: + service: + name: echo + port: + number: 1027 +" | kubectl apply -f - +``` + +Let's test our ingress object. + +```bash +$ curl -i localhost/echo -H "Host: kong.example" + +HTTP/1.1 200 OK +Content-Type: text/plain; charset=utf-8 +Content-Length: 133 +Connection: keep-alive +Date: Wed, 03 May 2023 01:59:25 GMT +X-Kong-Upstream-Latency: 1 +X-Kong-Proxy-Latency: 1 +Via: kong/3.2.2 + +Welcome, you are connected to node minikube. +Running on Pod echo-f4fdf987c-qdv7s. +In namespace default. +With IP address 10.244.0.6. +``` + +## Next + +**Note:** Read more about KIC and different use cases in official +[documentation](https://docs.konghq.com/kubernetes-ingress-controller/latest/). diff --git a/site/content/en/docs/tutorials/kubevirt.md b/site/content/en/docs/handbook/addons/kubevirt.md similarity index 91% rename from site/content/en/docs/tutorials/kubevirt.md rename to site/content/en/docs/handbook/addons/kubevirt.md index 5fddb46ba5a9..7c0ffa64c93f 100644 --- a/site/content/en/docs/tutorials/kubevirt.md +++ b/site/content/en/docs/handbook/addons/kubevirt.md @@ -1,10 +1,8 @@ --- -title: "How to use KubeVirt with minikube" -linkTitle: "KubeVirt Support" +title: "Using the KubeVirt Addon" +linkTitle: "KubeVirt" weight: 1 date: 2020-05-26 -description: > - Using KubeVirt with minikube --- ## Prerequisites diff --git a/site/content/en/docs/tutorials/using_psp.md b/site/content/en/docs/handbook/addons/pod-security-policy.md similarity index 94% rename from site/content/en/docs/tutorials/using_psp.md rename to site/content/en/docs/handbook/addons/pod-security-policy.md index 55974c8a808d..27c5c9d47569 100644 --- a/site/content/en/docs/tutorials/using_psp.md +++ b/site/content/en/docs/handbook/addons/pod-security-policy.md @@ -1,10 +1,8 @@ --- -title: "Using Minikube with Pod Security Policies" -linkTitle: "Using Minikube with Pod Security Policies" +title: "Using the Pod Security Policy Addon" +linkTitle: "Pod Security Policy" weight: 1 date: 2019-11-24 -description: > - Using Minikube with Pod Security Policies --- ## Overview @@ -13,7 +11,7 @@ This tutorial explains how to start minikube with Pod Security Policies (PSP) en ## Prerequisites -- Minikube 1.11.1 with Kubernetes 1.16.x or higher +- minikube 1.11.1 with Kubernetes 1.16.x or higher ## Tutorial @@ -32,7 +30,7 @@ controller to prevent issues during bootstrap. Older versions of minikube do not ship with the `pod-security-policy` addon, so the policies that addon enables must be separately applied to the cluster. -## Minikube 1.5.2 through 1.6.2 +## minikube 1.5.2 through 1.6.2 Before starting minikube, you need to give it the PSP YAMLs in order to allow minikube to bootstrap. @@ -183,7 +181,7 @@ subjects: apiGroup: rbac.authorization.k8s.io ``` -### Minikube between 1.6.2 and 1.11.1 +### minikube between 1.6.2 and 1.11.1 With minikube versions greater than 1.6.2 and less than 1.11.1, the YAML files shown above will not be automatically applied to the cluster. You may have diff --git a/site/content/en/docs/handbook/addons/registry-aliases.md b/site/content/en/docs/handbook/addons/registry-aliases.md new file mode 100644 index 000000000000..e7b414d7fd24 --- /dev/null +++ b/site/content/en/docs/handbook/addons/registry-aliases.md @@ -0,0 +1,156 @@ +--- +title: "Using the Registry Aliases Addon" +linkTitle: "Registry Aliases" +weight: 1 +date: 2020-03-07 +--- + +## Registry Aliases Addon + +An addon to minikube that can help push and pull from the minikube registry using custom domain names. The custom domain names will be made resolveable from with in cluster and at minikube node. + +## How to use ? + +### Start minikube + +```shell +minikube start -p demo +``` +This addon depends on `registry` addon, it need to be enabled before the alias addon is installed: + +### Enable internal registry + +```shell +minikube addons enable registry +``` + +Verifying the registry deployment + +```shell +watch kubectl get pods -n kube-system +``` + +```shell +NAME READY STATUS RESTARTS AGE +coredns-6955765f44-kpbzt 1/1 Running 0 16m +coredns-6955765f44-lzlsv 1/1 Running 0 16m +etcd-demo 1/1 Running 0 16m +kube-apiserver-demo 1/1 Running 0 16m +kube-controller-manager-demo 1/1 Running 0 16m +kube-proxy-q8rb9 1/1 Running 0 16m +kube-scheduler-demo 1/1 Running 0 16m +*registry-4k8zs* 1/1 Running 0 40s +registry-proxy-vs8jt 1/1 Running 0 40s +storage-provisioner 1/1 Running 0 16m +``` + +```shell +kubectl get svc -n kube-system +``` + +```shell +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 17m +registry ClusterIP 10.97.247.75 80/TCP 94s +``` + +> +> **NOTE:** +> Please make a note of the CLUSTER-IP of `registry` service + +### Enable registry aliases addon + +```shell +minikube addons enable registry-aliases +🌟 The 'registry-aliases' addon is enabled +``` + +You can check the mikikube vm's `/etc/hosts` file for the registry aliases entries: + +```shell +watch minikube ssh -- cat /etc/hosts +``` + +```shell +127.0.0.1 localhost +127.0.1.1 demo +10.97.247.75 example.org +10.97.247.75 example.com +10.97.247.75 test.com +10.97.247.75 test.org +``` + +The above output shows that the Daemonset has added the `registryAliases` from the ConfigMap pointing to the internal registry's __CLUSTER-IP__. + +### Update CoreDNS + +The coreDNS would have been automatically updated by the patch-coredns. A successful job run will have coredns ConfigMap updated like: + +```yaml +apiVersion: v1 +data: + Corefile: |- + .:53 { + errors + health + rewrite name example.com registry.kube-system.svc.cluster.local + rewrite name example.org registry.kube-system.svc.cluster.local + rewrite name test.com registry.kube-system.svc.cluster.local + rewrite name test.org registry.kube-system.svc.cluster.local + kubernetes cluster.local in-addr.arpa ip6.arpa { + pods insecure + upstream + fallthrough in-addr.arpa ip6.arpa + } + prometheus :9153 + proxy . /etc/resolv.conf + cache 30 + loop + reload + loadbalance + } +kind: ConfigMap +metadata: + name: coredns +``` + +To verify it run the following command: + +```shell +kubectl get cm -n kube-system coredns -o yaml +``` + +Once you have successfully patched you can now push and pull from the registry using suffix `example.com`, `example.org`,`test.com` and `test.org`. + +The successful run will show the following extra pods (Daemonset, Job) in `kube-system` namespace: + +```shell +NAME READY STATUS RESTARTS AGE +registry-aliases-hosts-update-995vx 1/1 Running 0 47s +registry-aliases-patch-core-dns-zsxfc 0/1 Completed 0 47s +``` + +## Verify with sample application + +You can verify the deployment end to end using the example [application](https://github.com/kameshsampath/minikube-registry-aliases-demo). + +```shell +git clone https://github.com/kameshsampath/minikube-registry-aliases-demo +cd minikube-registry-aliases-demo +``` + +Make sure you set the docker context using `eval $(minikube -p demo docker-env)` + +Deploy the application using [Skaffold](https://skaffold.dev): + +```shell +skaffold dev --port-forward +``` + +Once the application is running try doing `curl localhost:8080` to see the `Hello World` response + +You can also update [skaffold.yaml](./skaffold.yaml) and [app.yaml](.k8s/app.yaml), to use `test.org`, `test.com` or `example.org` as container registry urls, and see all the container image names resolves to internal registry, resulting in successful build and deployment. + +> **NOTE**: +> +> You can also update [skaffold.yaml](./skaffold.yaml) and [app. yaml](.k8s/app.yaml), to use `test.org`, `test.com` or > `example.org` as container registry urls, and see all the > container image names resolves to internal registry, resulting in successful build and deployment. diff --git a/site/content/en/docs/handbook/addons/yakd-kubernetes-dashboard.md b/site/content/en/docs/handbook/addons/yakd-kubernetes-dashboard.md new file mode 100644 index 000000000000..038b20440466 --- /dev/null +++ b/site/content/en/docs/handbook/addons/yakd-kubernetes-dashboard.md @@ -0,0 +1,42 @@ +--- +title: "Using the YAKD - Kubernetes Dashboard Addon" +linkTitle: "YAKD - Kubernetes Dashboard" +weight: 1 +date: 2023-12-12 +--- + +## YAKD - Kubernetes Dashboard Addon + +[YAKD - Kubernetes Dashboard](https://github.com/manusa/yakd) is a full-featured web-based Kubernetes Dashboard with special functionality for minikube. + +The dashboard features a real-time Search pane that allows you to search for Kubernetes resources and see them update in real-time as you type. + +### Enable YAKD - Kubernetes Dashboard on minikube + +To enable this addon, simply run: + +```shell script +minikube addons enable yakd +``` + +Once the addon is enabled, you can access the YAKD - Kubernetes Dashboard's web UI using the following command. + +```shell script +minikube service yakd-dashboard -n yakd-dashboard +``` + +The dashboard will open in a new browser window and you should be able to start using it with no further hassle. + +YAKD - Kubernetes Dashboard is also compatible with metrics-server. To install it, run: + +```shell script +minikube addons enable metrics-server +``` + +### Disable YAKD - Kubernetes Dashboard + +To disable this addon, simply run: + +```shell script +minikube addons disable yakd +``` diff --git a/site/content/en/docs/handbook/config.md b/site/content/en/docs/handbook/config.md index b2168b6850bd..c4eb4c83df3e 100644 --- a/site/content/en/docs/handbook/config.md +++ b/site/content/en/docs/handbook/config.md @@ -2,7 +2,7 @@ title: "Configuration" weight: 4 description: > - Configuring your cluster + Configuring your cluster aliases: - /docs/reference/environment_variables/ - /docs/reference/configuration/kubernetes/ @@ -50,9 +50,9 @@ This flag is repeated, so you can pass it several times with several different v By default, minikube installs the latest stable version of Kubernetes that was available at the time of the minikube release. You may select a different Kubernetes release by using the `--kubernetes-version` flag, for example: ```shell -minikube start --kubernetes-version=v1.11.10 +minikube start --kubernetes-version=v1.34.0 ``` - + minikube follows the [Kubernetes Version and Version Skew Support Policy](https://kubernetes.io/docs/setup/version-skew-policy/), so we guarantee support for the latest build for the last 3 minor Kubernetes releases. When practical, minikube aims to support older releases as well so that users can emulate legacy environments. For up to date information on supported versions, see `OldestKubernetesVersion` and `NewestKubernetesVersion` in [constants.go](https://github.com/kubernetes/minikube/blob/master/pkg/minikube/constants/constants.go) @@ -89,16 +89,19 @@ minikube start --extra-config=kubeadm.ignore-preflight-errors=SystemVerification ## Runtime configuration -The default container runtime in minikube is Docker. You can select it explicitly by using: +The default container runtime in minikube varies. You can select one explicitly by using: ```shell minikube start --container-runtime=docker ``` -Other options available are: +Options available are: + +* [containerd]({{}}) +* [cri-o]({{}}) +* [docker]({{}}) -* [containerd](https://github.com/containerd/containerd) -* [cri-o](https://github.com/cri-o/cri-o) +See ## Environment variables @@ -110,28 +113,54 @@ For example the `minikube start --iso-url="$ISO_URL"` flag can also be set by se Some features can only be accessed by minikube specific environment variables, here is a list of these features: -* **MINIKUBE_HOME** - (string) sets the path for the .minikube directory that minikube uses for state/configuration. *Please note: this is used only by minikube and does not affect anything related to Kubernetes tools such as kubectl.* +* **MINIKUBE_HOME** - (string) sets the path for the .minikube directory that minikube uses for state/configuration. If you specify it to `/path/to/somewhere` and `somewhere` is not equal to `.minikube`, the final MINIKUBE_HOME will be `/path/to/somewhere/.minikube`. Defaults to `~/.minikube` if unspecified. *Please note: this is used only by minikube and does not affect anything related to Kubernetes tools such as kubectl.* * **MINIKUBE_IN_STYLE** - (bool) manually sets whether or not emoji and colors should appear in minikube. Set to false or 0 to disable this feature, true or 1 to force it to be turned on. -* **MINIKUBE_WANTUPDATENOTIFICATION** - (bool) sets whether the user wants an update notification for new minikube versions - -* **MINIKUBE_REMINDERWAITPERIODINHOURS** - (int) sets the number of hours to check for an update notification - * **CHANGE_MINIKUBE_NONE_USER** - (bool) automatically change ownership of ~/.minikube to the value of $SUDO_USER * **MINIKUBE_ENABLE_PROFILING** - (int, `1` enables it) enables trace profiling to be generated for minikube +* **MINIKUBE_SUPPRESS_DOCKER_PERFORMANCE** - (bool) suppresses Docker performance warnings when Docker is slow + ### Example: Disabling emoji +{{% tabs %}} + +{{% linuxtab %}} + ```shell export MINIKUBE_IN_STYLE=false minikube start ``` +{{% /linuxtab %}} + +{{% mactab %}} + +```shell +export MINIKUBE_IN_STYLE=false +minikube start +``` + +{{% /mactab %}} + +{{% windowstab %}} + +```shell +$env:MINIKUBE_IN_STYLE=false +minikube start +``` + +{{% /windowstab %}} +{{% /tabs %}} + ### Making environment values persistent To make the exported variables persistent across reboots: * Linux and macOS: Add these declarations to `~/.bashrc` or wherever your shells environment variables are stored. -* Windows: Add these declarations via [system settings](https://support.microsoft.com/en-au/help/310519/how-to-manage-environment-variables-in-windows-xp) or using [setx](https://stackoverflow.com/questions/5898131/set-a-persistent-environment-variable-from-cmd-exe) +* Windows: Either add these declarations to your `~\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1` or run the following in a PowerShell terminal: +```shell +[Environment]::SetEnvironmentVariable("key", "value", [EnvironmentVariableTarget]::User) +``` diff --git a/site/content/en/docs/handbook/controls.md b/site/content/en/docs/handbook/controls.md index 0301da5e18d5..d831039b9918 100644 --- a/site/content/en/docs/handbook/controls.md +++ b/site/content/en/docs/handbook/controls.md @@ -25,7 +25,7 @@ minikube dashboard Once started, you can interact with your cluster using `kubectl`, just like any other Kubernetes cluster. For instance, starting a server: ```shell -kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4 +kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0 ``` Exposing a service as a NodePort diff --git a/site/content/en/docs/handbook/deploying.md b/site/content/en/docs/handbook/deploying.md index 9a07b0e5ea1e..7fb76cb1f74d 100644 --- a/site/content/en/docs/handbook/deploying.md +++ b/site/content/en/docs/handbook/deploying.md @@ -11,7 +11,7 @@ aliases: ## kubectl ```shell -kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4 +kubectl create deployment hello-minikube1 --image=kicbase/echo-server:1.0 kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080 ``` diff --git a/site/content/en/docs/handbook/filesync.md b/site/content/en/docs/handbook/filesync.md index 048193d70af1..669ed6a11ada 100644 --- a/site/content/en/docs/handbook/filesync.md +++ b/site/content/en/docs/handbook/filesync.md @@ -1,6 +1,6 @@ --- title: "File Sync" -weight: 12 +weight: 13 description: > How to sync files into minikube aliases: diff --git a/site/content/en/docs/handbook/kubectl.md b/site/content/en/docs/handbook/kubectl.md index 22d398ed38f6..7877d668836b 100644 --- a/site/content/en/docs/handbook/kubectl.md +++ b/site/content/en/docs/handbook/kubectl.md @@ -10,13 +10,24 @@ aliases: By default, [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) gets configured to access the kubernetes cluster control plane inside minikube when the `minikube start` command is executed. +```shell +kubectl +``` + However if `kubectl` is not installed locally, minikube already includes kubectl which can be used like this: ```shell minikube kubectl -- ``` -You can also `alias kubectl="minikube kubectl --"` for easier usage. +{{% tabs %}} + +{{% linuxtab %}} +You can also alias kubectl for easier usage. + +```shell +alias kubectl="minikube kubectl --" +``` Alternatively, you can create a symbolic link to minikube's binary named 'kubectl'. @@ -24,6 +35,43 @@ Alternatively, you can create a symbolic link to minikube's binary named 'kubect ln -s $(which minikube) /usr/local/bin/kubectl ``` +{{% /linuxtab %}} + +{{% mactab %}} +You can also alias kubectl for easier usage. + +```shell +alias kubectl="minikube kubectl --" +``` + +Alternatively, you can create a symbolic link to minikube's binary named 'kubectl'. + +```shell +ln -s $(which minikube) /usr/local/bin/kubectl +``` + +{{% /mactab %}} + +{{% windowstab %}} +You can also alias kubectl for easier usage. + +Powershell. + +```shell +function kubectl { minikube kubectl -- $args } +``` + +Command Prompt. + +```shell +doskey kubectl=minikube kubectl $* +``` + + +{{% /windowstab %}} + +{{% /tabs %}} + Get pods ```shell @@ -33,7 +81,7 @@ minikube kubectl -- get pods Creating a deployment inside kubernetes cluster ```shell -minikube kubectl -- create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4 +minikube kubectl -- create deployment hello-minikube --image=kicbase/echo-server:1.0 ``` Exposing the deployment with a NodePort service @@ -48,6 +96,10 @@ For more help minikube kubectl -- --help ``` +Documentation + + + ### Shell autocompletion -After applying the alias or the symbolic link you can follow https://kubernetes.io/docs/tasks/tools/included/optional-kubectl-configs-bash-linux/ to enable shell-autocompletion. +After applying the alias or the symbolic link you can follow https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#enable-shell-autocompletion to enable shell-autocompletion. diff --git a/site/content/en/docs/handbook/mount.md b/site/content/en/docs/handbook/mount.md index 8a020a7d9607..a88f5e59fc0d 100644 --- a/site/content/en/docs/handbook/mount.md +++ b/site/content/en/docs/handbook/mount.md @@ -1,7 +1,7 @@ --- title: "Mounting filesystems" date: 2017-01-05 -weight: 11 +weight: 12 description: > How to mount a host directory into the VM aliases: @@ -74,10 +74,14 @@ Some hypervisors, have built-in host folder sharing. Driver mounts are reliable | VirtualBox | Windows | C://Users | /c/Users | | VMware Fusion | macOS | /Users | /mnt/hgfs/Users | | KVM | Linux | Unsupported | | -| HyperKit | Linux | Unsupported (see NFS mounts) | | +| HyperKit | macOS | Supported | | These mounts can be disabled by passing `--disable-driver-mounts` to `minikube start`. +HyperKit mounts can use the following flags: +`--nfs-share=[]`: Local folders to share with Guest via NFS mounts +`--nfs-shares-root='/nfsshares'`: Where to root the NFS Shares, defaults to /nfsshares + ## File Sync See [File Sync]({{}}) diff --git a/site/content/en/docs/handbook/network_policy.md b/site/content/en/docs/handbook/network_policy.md new file mode 100644 index 000000000000..f0b0bb3e295a --- /dev/null +++ b/site/content/en/docs/handbook/network_policy.md @@ -0,0 +1,72 @@ +--- +title: "Network Policy" +linkTitle: "Network Policy" +weight: 10 +date: 2022-01-31 +description: > + Controlling traffic flowing through the cluster +aliases: + - /docs/reference/network_policy +--- + +minikube allows users to create and test network policies in the local Kubernetes cluster. This is useful since it allows the network policies to be, considered, built, and evaluated during the application development, as an integral part of the process rather than "bolted on" at the end of development. + +[Kubernetes NetworkPolicies](https://kubernetes.io/docs/concepts/services-networking/network-policies/) allow the control of pod network traffic passing through the cluster, at the IP address or port level (OSI layer 3 or 4). The linked page provides much more information about the functionality and implementation. + +However, the [prerequisites](https://kubernetes.io/docs/concepts/services-networking/network-policies/#prerequisites) note that Network policies are implemented by the Container Network Interface (CNI) network plugin. Therefore to use or test network policies in any Kubernetes cluster, you must be using a networking solution which supports NetworkPolicy. Creating a NetworkPolicy resource without a controller that implements it will have no effect. + +A vanilla minikube installation (`minikube start`) does not support any NetworkPolicies, since the default CNI, [Kindnet](https://github.com/aojea/kindnet), does not support Network Policies, [by design](https://github.com/kubernetes-sigs/kind/issues/842#issuecomment-528824670). + +However, minikube can support [NetworkPolicies](https://kubernetes.io/docs/concepts/services-networking/network-policies/) if a supported CNI, such as [Calico](https://projectcalico.docs.tigera.io/about/about-calico), is installed. In addition, in this scenario both [Kubernetes network policy](https://projectcalico.docs.tigera.io/security/kubernetes-network-policy) and [Calico network policy](https://projectcalico.docs.tigera.io/security/calico-network-policy) are supported. + +**Calico network policy** provides a richer set of policy capabilities than **Kubernetes network policy** including: +* policy ordering/priority +* deny rules +* more flexible match rules + +## Enabling Calico on a minikube cluster + +It is possible to replace the CNI on a running minikube cluster, but it is significantly easier to simply append the `--cni calico` flag to the `minikube start` command when following the instructions on the [Get Started!]({{}}) page to build the minikube cluster with Calico installed from the outset. + +## Kubernetes Network Policy example + +The [Kubernetes documentation on declaring network policy](https://kubernetes.io/docs/tasks/administer-cluster/declare-network-policy/) is a good place to start to understand the possibilities. In addition, the tutorials in [Further reading]({{< ref "#further-reading" >}}) below give much more guidance. + +The YAML below from the [Kubernetes NetworkPolicies](https://kubernetes.io/docs/concepts/services-networking/network-policies/#default-deny-all-ingress-traffic) documentation shows a very simple default ingress isolation policy on a namespace by creating a NetworkPolicy that selects all pods but does not allow any ingress traffic to those pods. + +```yaml +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: default-deny-ingress +spec: + podSelector: {} + policyTypes: + - Ingress +``` + +## Calico Network Policy example + +The [Calico network policy documentation](https://projectcalico.docs.tigera.io/security/calico-policy) is the best place to learn about the extended feature set of Calico network policy and how it coexists with Kubernetes network policy. + +The YAML below from the [Calico policy tutorial](https://projectcalico.docs.tigera.io/security/tutorials/calico-policy) shows a very simple default deny **Global** Calico Network Policy (not available with vanilla Kubernetes network policy) that is often used as a starting point for an effective zero-trust network model. Note that **Global** Calico Network Policies are not namespaced and affect all pods that match the policy selector. In contrast, Kubernetes Network Policies are namespaced, so you would need to create a default deny policy per namespace to achieve the same effect. In this example pods in the kube-system namespace are excluded to keep Kubernetes itself running smoothly. + +```yaml +--- +apiVersion: projectcalico.org/v3 +kind: GlobalNetworkPolicy +metadata: + name: default-deny +spec: + selector: projectcalico.org/namespace != "kube-system" + types: + - Ingress + - Egress +``` + +## Further reading + +This [Advanced Kubernetes policy tutorial](https://docs.tigera.io/calico/latest/network-policy/get-started/kubernetes-policy/kubernetes-policy-advanced) gives an example of what can be achieved with Kubernetes network policy. It walks through using Kubernetes NetworkPolicy to define more complex network policies. + +This [Calico policy tutorial](https://projectcalico.docs.tigera.io/security/tutorials/calico-policy) demonstrates the extended functionalities Calico network policy offers over and above vanilla Kubernetes network policies. To demonstrate this, this tutorial follows a similar approach to the tutorial above, but instead uses Calico network policies and highlights differences between the two policy types, making use of features that are not available in Kubernetes network policies. diff --git a/site/content/en/docs/handbook/offline.md b/site/content/en/docs/handbook/offline.md index d9238520fb13..b81f391e12e7 100644 --- a/site/content/en/docs/handbook/offline.md +++ b/site/content/en/docs/handbook/offline.md @@ -10,9 +10,11 @@ description: > minikube has built-in support for caching downloaded resources into `$MINIKUBE_HOME/cache`. Here are the important file locations: * `~/.minikube/cache` - Top-level folder -* `~/.minikube/cache/iso` - VM ISO image. Typically updated once per major minikube release. -* `~/.minikube/cache/images` - Docker images used by Kubernetes. -* `~/.minikube/cache/` - Kubernetes binaries, such as `kubeadm` and `kubelet` +* `~/.minikube/cache/iso/` - VM ISO image. Typically updated once per major minikube release. +* `~/.minikube/cache/kic/` - Docker base image. Typically updated once per major minikube release. +* `~/.minikube/cache/images/` - Images used by Kubernetes, only exists if preload doesn't exist. +* `~/.minikube/cache///` - Kubernetes binaries, such as `kubeadm` and `kubelet` +* `~/.minikube/cache/preloaded-tarball` - Tarball of preloaded images to improve start time ## Kubernetes image cache @@ -22,25 +24,13 @@ NOTE: the `none` driver caches images directly into Docker rather than a separat ## Sharing the minikube cache -For offline use on other hosts, one can copy the contents of `~/.minikube/cache`. As of the v1.0 release, this directory contains 685MB of data: +For offline use on other hosts, one can copy the contents of `~/.minikube/cache`. ```text -cache/iso/minikube-v1.0.0.iso -cache/images/gcr.io/k8s-minikube/storage-provisioner_v1.8.1 -cache/images/k8s.gcr.io/k8s-dns-sidecar-amd64_1.14.13 -cache/images/k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64_1.14.13 -cache/images/k8s.gcr.io/kubernetes-dashboard-amd64_v1.10.1 -cache/images/k8s.gcr.io/kube-scheduler_v1.14.0 -cache/images/k8s.gcr.io/coredns_1.3.1 -cache/images/k8s.gcr.io/kube-controller-manager_v1.14.0 -cache/images/k8s.gcr.io/kube-apiserver_v1.14.0 -cache/images/k8s.gcr.io/pause_3.1 -cache/images/k8s.gcr.io/etcd_3.3.10 -cache/images/k8s.gcr.io/kube-addon-manager_v9.0 -cache/images/k8s.gcr.io/k8s-dns-kube-dns-amd64_1.14.13 -cache/images/k8s.gcr.io/kube-proxy_v1.14.0 -cache/v1.14.0/kubeadm -cache/v1.14.0/kubelet +cache/linux/amd64/v1.26.1/kubectl +cache/kic/amd64/kicbase_v0.0.37@sha256_8bf7a0e8a062bc5e2b71d28b35bfa9cc862d9220e234e86176b3785f685d8b15.tar +cache/preloaded-tarball/preloaded-images-k8s-v18-v1.26.1-docker-overlay2-amd64.tar.lz4 +cache/preloaded-tarball/preloaded-images-k8s-v18-v1.26.1-docker-overlay2-amd64.tar.lz4.checksum ``` If any of these files exist, minikube will use copy them into the VM directly rather than pulling them from the internet. diff --git a/site/content/en/docs/handbook/persistent_volumes.md b/site/content/en/docs/handbook/persistent_volumes.md index 8f4966b5c77d..9b04360614c3 100644 --- a/site/content/en/docs/handbook/persistent_volumes.md +++ b/site/content/en/docs/handbook/persistent_volumes.md @@ -1,7 +1,7 @@ --- title: "Persistent Volumes" linkTitle: "Persistent Volumes" -weight: 10 +weight: 11 date: 2019-08-01 description: > About persistent volumes (hostPath) @@ -15,14 +15,16 @@ minikube supports [PersistentVolumes](https://kubernetes.io/docs/concepts/storag minikube is configured to persist files stored under the following directories, which are made in the Minikube VM (or on your localhost if running on bare metal). You may lose data from other directories on reboots. -* `/data` +* `/data`* * `/var/lib/minikube` * `/var/lib/docker` * `/var/lib/containerd` * `/var/lib/buildkit` * `/var/lib/containers` -* `/tmp/hostpath_pv` -* `/tmp/hostpath-provisioner` +* `/tmp/hostpath_pv`* +* `/tmp/hostpath-provisioner`* + +\* mount point for another directory, stored under `/var` or on a separate data disk Here is an example PersistentVolume config to persist data in the '/data' directory: @@ -49,3 +51,5 @@ In addition, minikube implements a very simple, canonical implementation of dyna The default [Storage Provisioner Controller](https://github.com/kubernetes/minikube/blob/master/pkg/storage/storage_provisioner.go) is managed internally, in the minikube codebase, demonstrating how easy it is to plug a custom storage controller into kubernetes as a storage component of the system, and provides pods with dynamically, to test your pod's behaviour when persistent storage is mapped to it. Note that this is not a CSI based storage provider, rather, it simply declares a PersistentVolume object of type hostpath dynamically when the controller see's that there is an outstanding storage request. + +There is also [CSI Hostpath Driver]({{< ref "/docs/tutorials/volume_snapshots_and_csi" >}}) addon that enables dynamic provisioning and supports multi-node clusters as well as snapshots. diff --git a/site/content/en/docs/handbook/pushing.md b/site/content/en/docs/handbook/pushing.md index 753ffe96efa7..c8951aa464d9 100644 --- a/site/content/en/docs/handbook/pushing.md +++ b/site/content/en/docs/handbook/pushing.md @@ -31,18 +31,18 @@ Here is a comparison table to help you choose: | Method | Supported Runtimes | Performance | Load | Build | |--- |--- |--- |--- |--- |--- |--- | -| [docker-env command](/docs/handbook/pushing/#1pushing-directly-to-the-in-cluster-docker-daemon-docker-env) | only docker | good | yes | yes | -| [podman-env command](/docs/handbook/pushing/#3-pushing-directly-to-in-cluster-crio-podman-env) | only cri-o | good | yes | yes | -| [ctr/buildctl command](/docs/handbook/pushing/#6-pushing-directly-to-in-cluster-containerd-buildkitd) | only containerd | good | yes | yes | -| [image load command](/docs/handbook/pushing/#7-loading-directly-to-in-cluster-container-runtime) | all | ok | yes | no | -| [image build command](/docs/handbook/pushing/#8-building-images-to-in-cluster-container-runtime) | all | ok | no | yes | +| [docker-env command](/docs/handbook/pushing/#1-pushing-directly-to-the-in-cluster-docker-daemon-docker-env) | docker & containerd | good | yes | yes | | [cache command](/docs/handbook/pushing/#2-push-images-using-cache-command) | all | ok | yes | no | +| [podman-env command](/docs/handbook/pushing/#3-pushing-directly-to-in-cluster-cri-o-podman-env) | only cri-o | good | yes | yes | | [registry addon](/docs/handbook/pushing/#4-pushing-to-an-in-cluster-using-registry-addon) | all | ok | yes | no | | [minikube ssh](/docs/handbook/pushing/#5-building-images-inside-of-minikube-using-ssh) | all | best | yes\* | yes\* | +| [ctr/buildctl command](/docs/handbook/pushing/#6-pushing-directly-to-in-cluster-containerd-buildkitd) | only containerd | good | yes | yes | +| [image load command](/docs/handbook/pushing/#7-loading-directly-to-in-cluster-container-runtime) | all | ok | yes | no | +| [image build command](/docs/handbook/pushing/#8-building-images-to-in-cluster-container-runtime) | all | ok | no | yes | -* note1 : the default container-runtime on minikube is 'docker'. -* note2 : 'none' driver (bare metal) does not need pushing image to the cluster, as any image on your system is already available to the kubernetes. -* note3: when using ssh to run the commands, the files to load or build must already be available on the node (not only on the client host). +* Note 1: The default container-runtime on minikube is `docker`. +* Note 2: The `none` driver (bare metal) does not need pushing image to the cluster, as any image on your system is already available to the Kubernetes cluster. +* Note 3: When using ssh to run the commands, the files to load or build must already be available on the node (not only on the client host). --- @@ -54,9 +54,29 @@ This means you don't have to build on your host machine and push the image into To point your terminal to use the docker daemon inside minikube run this: +{{% tabs %}} +{{% linuxtab %}} ```shell eval $(minikube docker-env) ``` +{{% /linuxtab %}} +{{% mactab %}} +```shell +eval $(minikube docker-env) +``` +{{% /mactab %}} +{{% windowstab %}} +PowerShell +```shell +& minikube -p minikube docker-env --shell powershell | Invoke-Expression +``` + +cmd +```shell +@FOR /f "tokens=*" %i IN ('minikube -p minikube docker-env --shell cmd') DO @%i +``` +{{% /windowstab %}} +{{% /tabs %}} Now any 'docker' command you run in this current terminal will run against the docker inside minikube cluster. @@ -139,6 +159,8 @@ For more information, see: ## 3. Pushing directly to in-cluster CRI-O. (podman-env) +{{% tabs %}} +{{% linuxtab %}} This is similar to docker-env but only for CRI-O runtime. To push directly to CRI-O, configure podman client on your host using the podman-env command in your shell: @@ -148,9 +170,6 @@ eval $(minikube podman-env) You should now be able to use podman client on the command line on your host machine talking to the podman service inside the minikube VM: -{{% tabs %}} -{{% linuxtab %}} - ```shell podman-remote help ``` @@ -167,12 +186,20 @@ Note: On Linux the remote client is called "podman-remote", while the local prog {{% /linuxtab %}} {{% mactab %}} +This is similar to docker-env but only for CRI-O runtime. +To push directly to CRI-O, configure Podman client on your host using the podman-env command in your shell: + +```shell +eval $(minikube podman-env) +``` + +You should now be able to use Podman client on the command line on your host machine talking to the Podman service inside the minikube VM: ```shell podman help ``` -now you can 'build' against the storage inside minikube, which is instantly accessible to kubernetes cluster. +Now you can 'build' against the storage inside minikube, which is instantly accessible to Kubernetes cluster. ```shell podman build -t my_image . @@ -184,8 +211,22 @@ Note: On macOS the remote client is called "podman", since there is no local "po {{% /mactab %}} {{% windowstab %}} +This is similar to docker-env but only for CRI-O runtime. +To push directly to CRI-O, configure Podman client on your host using the podman-env command in your shell: + +PowerShell +```shell +& minikube -p minikube podman-env --shell powershell | Invoke-Expression +``` + +cmd +```shell +@FOR /f "tokens=*" %i IN ('minikube -p minikube podman-env --shell cmd') DO @%i +``` + +You should now be able to use Podman client on the command line on your host machine talking to the Podman service inside the minikube VM: -now you can 'build' against the storage inside minikube, which is instantly accessible to kubernetes cluster. +Now you can 'build' against the storage inside minikube, which is instantly accessible to Kubernetes cluster. ```shell podman help @@ -351,7 +392,7 @@ buildctl --addr unix://buildkitd.sock build \ --frontend=dockerfile.v0 \ --local context=. \ --local dockerfile=. \ - --output type=image,name=k8s.gcr.io/username/imagename:latest + --output type=image,name=registry.k8s.io/username/imagename:latest ``` Now you can 'build' against the storage inside minikube. which is instantly accessible to kubernetes cluster. diff --git a/site/content/en/docs/handbook/registry.md b/site/content/en/docs/handbook/registry.md index 12995de88259..0aefbc211658 100644 --- a/site/content/en/docs/handbook/registry.md +++ b/site/content/en/docs/handbook/registry.md @@ -29,6 +29,8 @@ registry-creds was successfully configured $ minikube addons enable registry-creds ``` +**Google Artifact Registry**: minikube has an addon, `gcp-auth`, which maps credentials into minikube to support pulling from Google Artifact Registry. Run `minikube addons enable gcp-auth` to configure the authentication. You can refer to the full docs [here](https://minikube.sigs.k8s.io/docs/handbook/addons/gcp-auth/). + For additional information on private container registries, see [this page](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/). We recommend you use _ImagePullSecrets_, but if you would like to configure access on the minikube VM you can place the `.dockercfg` in the `/home/docker` directory or the `config.json` in the `/var/lib/kubelet` directory. Make sure to restart your kubelet (for kubeadm) process with `sudo systemctl restart kubelet`. @@ -83,13 +85,19 @@ The first step is to enable the registry addon: minikube addons enable registry ``` -When enabled, the registry addon exposes its port 5000 on the minikube's virtual machine. +When enabled, the registry addon exposes its port 80 on the minikube's virtual machine. You can confirm this by: +```shell +kubectl get service --namespace kube-system +> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +> kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 54m +> registry ClusterIP 10.98.34.133 80/TCP,443/TCP 37m +``` -In order to make docker accept pushing images to this registry, we have to redirect port 5000 on the docker virtual machine over to port 5000 on the minikube machine. Unfortunately, the docker vm cannot directly see the IP address of the minikube vm. To fix this, you will have to add one more level of redirection. +In order to make docker accept pushing images to this registry, we have to redirect port 5000 on the docker virtual machine over to port 80 on the minikube registry service. Unfortunately, the docker vm cannot directly see the IP address of the minikube vm. To fix this, you will have to add one more level of redirection. Use kubectl port-forward to map your local workstation to the minikube vm ```shell -kubectl port-forward --namespace kube-system 5000:5000 +kubectl port-forward --namespace kube-system service/registry 5000:80 ``` On your local machine you should now be able to reach the minikube registry by using `curl http://localhost:5000/v2/_catalog` diff --git a/site/content/en/docs/handbook/troubleshooting.md b/site/content/en/docs/handbook/troubleshooting.md index 6d2630ca8182..e7f492c6477b 100644 --- a/site/content/en/docs/handbook/troubleshooting.md +++ b/site/content/en/docs/handbook/troubleshooting.md @@ -25,7 +25,7 @@ minikube stores post-mortem logs in the temporary directory of your system. One find $TMPDIR -mtime -1 -type f -name "*minikube*" -ls 2>/dev/null ``` -For instance after running `minikube start`, the above comamnd will show: +For instance after running `minikube start`, the above command will show: `-rw-r--r-- 1 user grp 718 Aug 18 12:40 /var/folders/n1/qxvd9kc/T//minikube_start_dc950831e1a232e0318a6d6ca82aaf4f4a8a048b_0.log` diff --git a/site/content/en/docs/handbook/vpn_and_proxy.md b/site/content/en/docs/handbook/vpn_and_proxy.md index 5b9260185346..9e19afa6367a 100644 --- a/site/content/en/docs/handbook/vpn_and_proxy.md +++ b/site/content/en/docs/handbook/vpn_and_proxy.md @@ -18,9 +18,9 @@ If a HTTP proxy is required to access the internet, you may need to pass the pro * `HTTPS_PROXY` - The URL to your HTTPS proxy * `NO_PROXY` - A comma-separated list of hosts which should not go through the proxy. -The NO_PROXY variable here is important: Without setting it, minikube may not be able to access resources within the VM. minikube uses two IP ranges, which should not go through the proxy: +The NO_PROXY variable here is important: Without setting it, minikube may not be able to access resources within the VM. minikube uses four default IP ranges, which should not go through the proxy: -* **192.168.99.0/24**: Used by the minikube VM. Configurable for some hypervisors via `--host-only-cidr` +* **192.168.59.0/24**: Used by the minikube VM. Configurable for some hypervisors via `--host-only-cidr` * **192.168.39.0/24**: Used by the minikube kvm2 driver. * **192.168.49.0/24**: Used by the minikube docker driver's first cluster. * **10.96.0.0/12**: Used by service cluster IP's. Configurable via `--service-cluster-ip-range` @@ -34,7 +34,7 @@ One important note: If NO_PROXY is required by non-Kubernetes applications, such ```shell export HTTP_PROXY=http:// export HTTPS_PROXY=https:// -export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.99.0/24,192.168.39.0/24 +export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24 minikube start ``` @@ -46,7 +46,7 @@ To make the exported variables permanent, consider adding the declarations to ~/ ```shell set HTTP_PROXY=http:// set HTTPS_PROXY=https:// -set NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.99.0/24,192.168.39.0/24 +set NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24 minikube start ``` @@ -72,8 +72,8 @@ This error indicates that the host:port combination defined by HTTPS_PROXY or HT ```text Unable to pull images, which may be OK: -failed to pull image "k8s.gcr.io/kube-apiserver:v1.13.3": output: Error response from daemon: -Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection +failed to pull image "registry.k8s.io/kube-apiserver:v1.13.3": output: Error response from daemon: +Get https://registry.k8s.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) ``` @@ -82,9 +82,9 @@ This error indicates that the container runtime running within the VM does not h #### x509: certificate signed by unknown authority ```text -[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.13.3: +[ERROR ImagePull]: failed to pull image registry.k8s.io/kube-apiserver:v1.13.3: output: Error response from daemon: -Get https://k8s.gcr.io/v2/: x509: certificate signed by unknown authority +Get https://registry.k8s.io/v2/: x509: certificate signed by unknown authority ``` This is because minikube VM is stuck behind a proxy that rewrites HTTPS responses to contain its own TLS certificate. The [solution](https://github.com/kubernetes/minikube/issues/3613#issuecomment-461034222) is to install the proxy certificate into a location that is copied to the VM at startup, so that it can be validated. @@ -107,7 +107,7 @@ The supplied value of `HTTPS_PROXY` is probably incorrect. Verify that this valu minikube requires access from the host to the following IP ranges: -* **192.168.99.0/24**: Used by the minikube VM. Configurable for some hypervisors via `--host-only-cidr` +* **192.168.59.0/24**: Used by the minikube VM. Configurable for some hypervisors via `--host-only-cidr` * **192.168.39.0/24**: Used by the minikube kvm2 driver. * **10.96.0.0/12**: Used by service cluster IP's. Configurable via `--service-cluster-ip-range` diff --git a/site/content/en/docs/presentations/_index.md b/site/content/en/docs/presentations/_index.md index bfde5340dae5..e80e9fb33582 100644 --- a/site/content/en/docs/presentations/_index.md +++ b/site/content/en/docs/presentations/_index.md @@ -7,108 +7,83 @@ description: > Presentations about the minikube project, mostly from the Kubernetes blog and the KubeCon conference. -## Kubernetes Blog - -### 2016 - -2016-05-30, Kubernetes 1.3, Minikube 0.1.0 - -* _This is the initial release of Minikube._ - -2016-07-11, Kubernetes 1.3, Minikube 0.5.0 - -* - -### 2019 - -2019-03-28, Kubernetes 1.14, Minikube 1.0.0 +## Conferences -* +### KubeCon NA 2023 (Chicago, Illinois) -## KubeCon + CloudNativeCon - -### KubeCon NA 2016 (Seattle, Washington) +* [Minikube Project Update - YouTube](https://youtu.be/QTAijBeS5ys?si=OOyxOXnKkhiq-b1N) (30:43) + * Medya Ghazizadeh, Google - +### KubeCon EU 2023 (Amsterdam, Netherlands) -### KubeCon EU 2017 (Berlin, Germany) +* [Minikube from CLI to GUI! - YouTube](https://youtu.be/74X1RmqfUzs) (38:35) + * Medya Ghazizadeh, Google - +### KubeCon EU 2022 (Valencia, Spain) -### KubeCon NA 2017 (Austin, Texas) +* [Deep Dive into Minikube - YouTube](https://youtu.be/Iyq_MlSku-I) (38:37) + * Medya Ghazizadeh & Sharif Elgamal, Google - +### KubeCon NA 2021 (Los Angeles, California) -### KubeCon EU 2018 (Copenhagen, Denmark) +* [A Deep Dive Into 5 years of Minikube - YouTube](https://youtu.be/GHczvbzuVvc) (47:47) + * Medya Ghazizadeh, Google - +### KubeCon EU 2021 (Online, Europe) - Virtual -* (28:30) - * "Minikube Intro" - * Dan Lorenc, Google +* [Minikube & Three Different Local Kubernetes Learning Environments - YouTube](https://youtu.be/nqKYgeUtk8s) (32:48) + * Anders Björklund & Predrag Rogic -### KubeCon NA 2018 (Seattle, Washington) +### KubeCon EU 2020 (Amsterdam, Netherlands) - Virtual - +* [Minikube - YouTube](https://youtu.be/xdoOmSSCxo8) (37:31) + * Rohit Anand, NEC Corporation & Medya Ghazizadeh, Google -* (38:49) - * "Intro: Minikube" - * Thomas Strömberg & Bálint Pató, Google +* [Improving the Performance of Your Kubernetes Cluster - YouTube](https://youtu.be/tvreJem3xIw) (36:10) + * Priya Wadhwa, Google -* (44:05) - * "Deep Dive: Minikube" - * Bálint Pató & Thomas Strömberg, Google +### KubeCon NA 2019 (San Diego, California) -### KubeCon EU 2019 (Barcelona, Spain) +* [Minikube - YouTube](https://youtu.be/3giynG20f3I) (47:27) + * Thomas Strömberg & Medya Ghazizadeh, Google - +### Helm Summit EU 2019 (Amsterdam, The Netherlands) -* _No results found for minikube_ +* [Dancing with Helm, Skaffold and Minikube! - YouTube](https://youtu.be/Ww7JvxKY478) (35:26) + * Medya Ghazizadeh, Google ### KubeCon CN 2019 (Shanghai, China) - - -* (33:21) - * "Minikube: Bringing Kubernetes to the Next Billion Users" +* [Minikube: Bringing Kubernetes to the Next Billion Users - YouTube](https://youtu.be/ahb-_NBtOL0) (33:21) * Thomas Strömberg, Google -### KubeCon NA 2019 (San Diego, California) - - +### KubeCon NA 2018 (Seattle, Washington) -* (47:27) - * "Minikube" - * Thomas Strömberg & Medya Ghazizadeh, Google +* [Intro: Minikube - YouTube](https://youtu.be/2yBOVlonHQw) (38:49) + * Thomas Strömberg & Bálint Pató, Google -### KubeCon EU 2020 (Amsterdam, Netherlands) - Virtual +* [Deep Dive: Minikube - YouTube](https://youtu.be/46-FXiSEfE4) (44:05) + * Bálint Pató & Thomas Strömberg, Google - +### KubeCon EU 2018 (Copenhagen, Denmark) -* (37:31) - * "Minikube" - * Rohit Anand, NEC Corporation & Medya Ghazizadeh, Google +* [Minikube Intro - YouTube](https://youtu.be/4x0CZmF_U5o) (28:30) + * Dan Lorenc, Google -* (36:10) - * "Improving the Performance of Your Kubernetes Cluster" - * Priya Wadhwa, Google +## Kubernetes Blog -### KubeCon NA 2020 (Boston, Massachusetts) - Virtual +### 2019 - +2019-03-28, Kubernetes 1.14, Minikube 1.0.0 -* _No results found for minikube_ +* [Running Kubernetes locally on Linux with Minikube - now with Kubernetes 1.14 support](https://kubernetes.io/blog/2019/03/28/running-kubernetes-locally-on-linux-with-minikube-now-with-kubernetes-1.14-support/) -### KubeCon EU 2021 (Online, Europe) - Virtual +### 2016 -* (32:48) - * "Minikube and Three Different Local Kubernetes Learning Environments" - * Anders Björklund & Predrag Rogic +2016-07-11, Kubernetes 1.3, Minikube 0.5.0 -## Other conferences +* [Minikube: easily run Kubernetes locally](https://kubernetes.io/blog/2016/07/minikube-easily-run-kubernetes-locally/) -### Helm Summit EU 2019 (Amsterdam, The Netherlands) +2016-05-30, Kubernetes 1.3, Minikube 0.1.0 -* (35:26) - * "Dancing with Helm, Skaffold and Minikube!" - * Medya Ghazizadeh, Google +* _This is the initial release of Minikube._ diff --git a/site/content/en/docs/runtimes/_index.md b/site/content/en/docs/runtimes/_index.md new file mode 100644 index 000000000000..f14c104b1b84 --- /dev/null +++ b/site/content/en/docs/runtimes/_index.md @@ -0,0 +1,26 @@ +--- +title: "Runtimes" +linkTitle: "Runtimes" +weight: 8 +no_list: true +description: > + Configuring various container runtimes +aliases: + - /docs/reference/runtimes +--- +Kubernetes requires a container runtime to be installed. + +Here is what's supported: + +## containerd + +* [containerd]({{}}) + +## cri-o + +* [cri-o]({{}}) + +## docker + +* [docker]({{}}) + diff --git a/site/content/en/docs/runtimes/containerd.md b/site/content/en/docs/runtimes/containerd.md new file mode 100644 index 000000000000..d12fb8963234 --- /dev/null +++ b/site/content/en/docs/runtimes/containerd.md @@ -0,0 +1,10 @@ +--- +title: "containerd" +aliases: + - /docs/reference/runtimes/containerd +--- + +Home page: + + + diff --git a/site/content/en/docs/runtimes/cri-o.md b/site/content/en/docs/runtimes/cri-o.md new file mode 100644 index 000000000000..b11953bb6abe --- /dev/null +++ b/site/content/en/docs/runtimes/cri-o.md @@ -0,0 +1,11 @@ +--- +title: "cri-o" +aliases: + - /docs/reference/runtimes/cri-o +--- + +Home page: + +See also `minikube podman-env` + + diff --git a/site/content/en/docs/runtimes/docker.md b/site/content/en/docs/runtimes/docker.md new file mode 100644 index 000000000000..4b3f66adbf16 --- /dev/null +++ b/site/content/en/docs/runtimes/docker.md @@ -0,0 +1,11 @@ +--- +title: "docker" +aliases: + - /docs/reference/runtimes/docker +--- + +Home page: + +See also `minikube docker-env` + + diff --git a/site/content/en/docs/start/_index.md b/site/content/en/docs/start/_index.md index 59174dd807e2..b23ef1952ca3 100644 --- a/site/content/en/docs/start/_index.md +++ b/site/content/en/docs/start/_index.md @@ -16,10 +16,43 @@ All you need is Docker (or similarly compatible) container or a Virtual Machine * 2GB of free memory * 20GB of free disk space * Internet connection -* Container or virtual machine manager, such as: [Docker]({{}}), [Hyperkit]({{}}), [Hyper-V]({{}}), [KVM]({{}}), [Parallels]({{}}), [Podman]({{}}), [VirtualBox]({{}}), or [VMWare]({{}}) +* Container or virtual machine manager, such as: [Docker]({{}}), [QEMU]({{}}), [Hyperkit]({{}}), [Hyper-V]({{}}), [KVM]({{}}), [Parallels]({{}}), [Podman]({{}}), [VirtualBox]({{}}), or [VMware Fusion/Workstation]({{}})

1Installation

+ + {{% card %}} Click on the buttons that describe your target platform. For other architectures, see [the release page](https://github.com/kubernetes/minikube/releases/latest) for a complete list of minikube binaries. @@ -33,7 +66,7 @@ Click on the buttons that describe your target platform. For other architectures {{% /quiz_row %}} {{% quiz_row base="/Linux/x86-64" name="Release type" %}} -{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" %}} +{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" hide="true" %}} {{% /quiz_row %}} {{% quiz_row base="/Linux/x86-64/Stable" name="Installer type" %}} @@ -45,7 +78,7 @@ Click on the buttons that describe your target platform. For other architectures {{% /quiz_row %}} {{% quiz_row base="/Linux/ARM64" name="Release type" %}} -{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" %}} +{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" hide="true" %}} {{% /quiz_row %}} {{% quiz_row base="/Linux/ARM64/Stable" name="Installer type" %}} @@ -57,7 +90,7 @@ Click on the buttons that describe your target platform. For other architectures {{% /quiz_row %}} {{% quiz_row base="/Linux/ppc64" name="Release type" %}} -{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" %}} +{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" hide="true" %}} {{% /quiz_row %}} {{% quiz_row base="/Linux/ppc64/Stable" name="Installer type" %}} @@ -69,7 +102,7 @@ Click on the buttons that describe your target platform. For other architectures {{% /quiz_row %}} {{% quiz_row base="/Linux/S390x" name="Release type" %}} -{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" %}} +{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" hide="true" %}} {{% /quiz_row %}} {{% quiz_row base="/Linux/S390x/Stable" name="Installer type" %}} @@ -81,7 +114,7 @@ Click on the buttons that describe your target platform. For other architectures {{% /quiz_row %}} {{% quiz_row base="/Linux/ARMv7" name="Release type" %}} -{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" %}} +{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" hide="true" %}} {{% /quiz_row %}} {{% quiz_row base="/Linux/ARMv7/Stable" name="Installer type" %}} @@ -97,7 +130,7 @@ Click on the buttons that describe your target platform. For other architectures {{% /quiz_row %}} {{% quiz_row base="/macOS/x86-64" name="Release type" %}} -{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" %}} +{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" hide="true" %}} {{% /quiz_row %}} {{% quiz_row base="/macOS/x86-64/Stable" name="Installer type" %}} @@ -109,11 +142,11 @@ Click on the buttons that describe your target platform. For other architectures {{% /quiz_row %}} {{% quiz_row base="/macOS/ARM64" name="Release type" %}} -{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" %}} +{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" hide="true" %}} {{% /quiz_row %}} {{% quiz_row base="/macOS/ARM64/Stable" name="Installer type" %}} -{{% quiz_button option="Binary download" %}} +{{% quiz_button option="Binary download" %}} {{% quiz_button option="Homebrew" %}} {{% /quiz_row %}} {{% quiz_row base="/macOS/ARM64/Beta" name="Installer type" %}} @@ -125,7 +158,7 @@ Click on the buttons that describe your target platform. For other architectures {{% /quiz_row %}} {{% quiz_row base="/Windows/x86-64" name="Release type" %}} -{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" %}} +{{% quiz_button option="Stable" %}} {{% quiz_button option="Beta" hide="true" %}} {{% /quiz_row %}} {{% quiz_row base="/Windows/x86-64/Stable" name="Installer type" %}} @@ -138,8 +171,8 @@ Click on the buttons that describe your target platform. For other architectures {{% quiz_instruction id="/Linux/x86-64/Stable/Binary download" %}} ```shell -curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -sudo install minikube-linux-amd64 /usr/local/bin/minikube +curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64 +sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64 ``` {{% /quiz_instruction %}} @@ -147,7 +180,7 @@ sudo install minikube-linux-amd64 /usr/local/bin/minikube ```shell r=https://api.github.com/repos/kubernetes/minikube/releases curl -LO $(curl -s $r | grep -o 'http.*download/v.*beta.*/minikube-linux-amd64' | head -n1) -sudo install minikube-linux-amd64 /usr/local/bin/minikube +sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64 ``` {{% /quiz_instruction %}} @@ -183,8 +216,8 @@ curl -L $u > minikube-beta.x86_64.rpm && sudo rpm -Uvh minikube-beta.x86_64.rpm {{% quiz_instruction id="/Linux/ARM64/Stable/Binary download" %}} ```shell -curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64 -sudo install minikube-linux-arm64 /usr/local/bin/minikube +curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-arm64 +sudo install minikube-linux-arm64 /usr/local/bin/minikube && rm minikube-linux-arm64 ``` {{% /quiz_instruction %}} @@ -192,7 +225,7 @@ sudo install minikube-linux-arm64 /usr/local/bin/minikube ```shell r=https://api.github.com/repos/kubernetes/minikube/releases curl -LO $(curl -s $r | grep -o 'http.*download/v.*beta.*/minikube-linux-arm64' | head -n1) -sudo install minikube-linux-arm64 /usr/local/bin/minikube +sudo install minikube-linux-arm64 /usr/local/bin/minikube && rm minikube-linux-arm64 ``` {{% /quiz_instruction %}} @@ -228,8 +261,8 @@ curl -L $u > minikube-beta.aarch64.rpm && sudo rpm -Uvh minikube-beta.aarch64.rp {{% quiz_instruction id="/Linux/ppc64/Stable/Binary download" %}} ```shell -curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-ppc64le -sudo install minikube-linux-ppc64le /usr/local/bin/minikube +curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-ppc64le +sudo install minikube-linux-ppc64le /usr/local/bin/minikube && rm minikube-linux-ppc64le ``` {{% /quiz_instruction %}} @@ -237,7 +270,7 @@ sudo install minikube-linux-ppc64le /usr/local/bin/minikube ```shell r=https://api.github.com/repos/kubernetes/minikube/releases curl -LO $(curl -s $r | grep -o 'http.*download/v.*beta.*/minikube-linux-ppc64le' | head -n1) -sudo install minikube-linux-ppc64le /usr/local/bin/minikube +sudo install minikube-linux-ppc64le /usr/local/bin/minikube && rm minikube-linux-ppc64le ``` {{% /quiz_instruction %}} @@ -273,8 +306,8 @@ curl -L $u > minikube-beta.ppc64el.rpm && sudo rpm -Uvh minikube-beta.ppc64el.rp {{% quiz_instruction id="/Linux/S390x/Stable/Binary download" %}} ```shell -curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-s390x -sudo install minikube-linux-s390x /usr/local/bin/minikube +curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-s390x +sudo install minikube-linux-s390x /usr/local/bin/minikube && rm minikube-linux-s390x ``` {{% /quiz_instruction %}} @@ -282,7 +315,7 @@ sudo install minikube-linux-s390x /usr/local/bin/minikube ```shell r=https://api.github.com/repos/kubernetes/minikube/releases curl -LO $(curl -s $r | grep -o 'http.*download/v.*beta.*/minikube-linux-s390x' | head -n1) -sudo install minikube-linux-s390x /usr/local/bin/minikube +sudo install minikube-linux-s390x /usr/local/bin/minikube && rm minikube-linux-s390x ``` {{% /quiz_instruction %}} @@ -318,8 +351,8 @@ curl -L $u > minikube-beta.s390x.rpm && sudo rpm -Uvh minikube-beta.s390x.rpm {{% quiz_instruction id="/Linux/ARMv7/Stable/Binary download" %}} ```shell -curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm -sudo install minikube-linux-arm /usr/local/bin/minikube +curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-arm +sudo install minikube-linux-arm /usr/local/bin/minikube && rm minikube-linux-arm ``` {{% /quiz_instruction %}} @@ -327,7 +360,7 @@ sudo install minikube-linux-arm /usr/local/bin/minikube ```shell r=https://api.github.com/repos/kubernetes/minikube/releases curl -LO $(curl -s $r | grep -o 'http.*download/v.*beta.*/minikube-linux-arm' | head -n1) -sudo install minikube-linux-arm /usr/local/bin/minikube +sudo install minikube-linux-arm /usr/local/bin/minikube && rm minikube-linux-arm ``` {{% /quiz_instruction %}} @@ -362,7 +395,7 @@ curl -L $u > minikube-beta.armv7hl.rpm && sudo rpm -Uvh minikube-beta.armv7hl.rp {{% /quiz_instruction %}} {{% quiz_instruction id="/macOS/x86-64/Stable/Homebrew" %}} -If the [Brew Package Manager](https://brew.sh/) is installed: +If the [Homebrew Package Manager](https://brew.sh/) is installed: ```shell brew install minikube @@ -378,7 +411,7 @@ brew link minikube {{% quiz_instruction id="/macOS/x86-64/Stable/Binary download" %}} ```shell -curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 +curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-darwin-amd64 sudo install minikube-darwin-amd64 /usr/local/bin/minikube ``` {{% /quiz_instruction %}} @@ -393,11 +426,26 @@ sudo install minikube-darwin-amd64 /usr/local/bin/minikube {{% quiz_instruction id="/macOS/ARM64/Stable/Binary download" %}} ```shell -curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64 +curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-darwin-arm64 sudo install minikube-darwin-arm64 /usr/local/bin/minikube ``` {{% /quiz_instruction %}} +{{% quiz_instruction id="/macOS/ARM64/Stable/Homebrew" %}} +If the [Homebrew Package Manager](https://brew.sh/) is installed: + +```shell +brew install minikube +``` + +If `which minikube` fails after installation via brew, you may have to remove the old minikube links and link the newly installed binary: + +```shell +brew unlink minikube +brew link minikube +``` +{{% /quiz_instruction %}} + {{% quiz_instruction id="/macOS/ARM64/Beta/Binary download" %}} ```shell r=https://api.github.com/repos/kubernetes/minikube/releases @@ -410,7 +458,7 @@ sudo install minikube-darwin-arm64 /usr/local/bin/minikube If the [Windows Package Manager](https://docs.microsoft.com/en-us/windows/package-manager/) is installed, use the following command to install minikube: ```shell -winget install minikube +winget install Kubernetes.minikube ``` {{% /quiz_instruction %}} @@ -423,46 +471,46 @@ choco install minikube {{% /quiz_instruction %}} {{% quiz_instruction id="/Windows/x86-64/Stable/.exe download" %}} -1. Download the [latest release](https://storage.googleapis.com/minikube/releases/latest/minikube-installer.exe). +1. Download and run the installer for the [latest release](https://storage.googleapis.com/minikube/releases/latest/minikube-installer.exe).
- Or if you have `curl` installed, use this command: - ```shell - curl -Lo minikube.exe https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe - New-Item -Path "c:\" -Name "minikube" -ItemType "directory" -Force - Move-Item .\minikube.exe c:\minikube\minikube.exe -Force + Or if using `PowerShell`, use this command: + ```powershell + New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force + $ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe' -UseBasicParsing ``` -2. Add the binary in to your `PATH`. +2. Add the `minikube.exe` binary to your `PATH`.
_Make sure to run PowerShell as Administrator._ - ```shell - $oldpath=[Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) - if($oldpath -notlike "*;C:\minikube*"){` - [Environment]::SetEnvironmentVariable("Path", $oldpath+";C:\minikube", [EnvironmentVariableTarget]::Machine)` + ```powershell + $oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine) + if ($oldPath.Split(';') -inotcontains 'C:\minikube'){ + [Environment]::SetEnvironmentVariable('Path', $('{0};C:\minikube' -f $oldPath), [EnvironmentVariableTarget]::Machine) } ``` - _If you used a CLI to perform the installation, you will need to close that CLI and open a new one before proceeding._ + + If you used a terminal (like powershell) for the installation, please close the terminal and reopen it before running minikube. {{% /quiz_instruction %}} {{% quiz_instruction id="/Windows/x86-64/Beta/.exe download" %}} -1. Download the latest beta release. +1. Download and run the installer for the latest beta release.
- Or if you have `curl` installed, use this command: - ```shell - $r='https://api.github.com/repos/kubernetes/minikube/releases' - $u=curl -s $r | Select-String -Pattern 'http.*download/v.*beta.*/minikube-windows-amd64.exe' | Select Matches -First 1 - curl -Lo minikube.exe $u.Matches.Value - New-Item -Path "c:\" -Name "minikube" -ItemType "directory" -Force - Move-Item .\minikube.exe c:\minikube\minikube.exe -Force + Or if using `PowerShell`, use this command: + ```powershell + New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force + $response = Invoke-WebRequest -Uri 'https://api.github.com/repos/kubernetes/minikube/releases' -UseBasicParsing + $json = $response.Content | ConvertFrom-Json + $item = ($json | ?{ $_.prerelease -eq $true })[0].assets | ?{ $_.name -eq 'minikube-windows-amd64.exe' } + Invoke-WebRequest -Uri $item.browser_download_url -OutFile 'c:\minikube\minikube.exe' -UseBasicParsing ``` -2. Add the binary in to your `PATH`. +2. Add the `minikube.exe` binary to your `PATH`.
_Make sure to run PowerShell as Administrator._ - ```shell - $oldpath=[Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) - if($oldpath -notlike "*;C:\minikube*"){` - [Environment]::SetEnvironmentVariable("Path", $oldpath+";C:\minikube", [EnvironmentVariableTarget]::Machine)` + ```powershell + $oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine) + if ($oldPath.Split(';') -inotcontains 'C:\minikube'){ + [Environment]::SetEnvironmentVariable('Path', $('{0};C:\minikube' -f $oldPath), [EnvironmentVariableTarget]::Machine) } ``` _If you used a CLI to perform the installation, you will need to close that CLI and open a new one before proceeding._ @@ -495,17 +543,21 @@ If minikube fails to start, see the [drivers page]({{}}) fo

3Interact with your cluster

-If you already have kubectl installed, you can now use it to access your shiny new cluster: +If you already have kubectl installed (see [documentation](https://kubernetes.io/docs/tasks/tools/install-kubectl/)), you can now use it to access your shiny new cluster: ```shell kubectl get po -A ``` -Alternatively, minikube can download the appropriate version of kubectl, if you don't mind the double-dashes in the command-line: +Alternatively, minikube can download the appropriate version of kubectl and you should be able to use it like this: ```shell minikube kubectl -- get po -A ``` +You can also make your life easier by adding the following to your shell config: (for more details see: [kubectl]({{}})) +```shell +alias kubectl="minikube kubectl --" +``` Initially, some services such as the storage-provisioner, may not yet be in a Running state. This is a normal condition during cluster bring-up, and will resolve itself momentarily. For additional insight into your cluster state, minikube bundles the Kubernetes Dashboard, allowing you to get easily acclimated to your new environment: @@ -515,10 +567,12 @@ minikube dashboard

4Deploy applications

+{{% tabs %}} +{{% tab Service %}} Create a sample deployment and expose it on port 8080: ```shell -kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4 +kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0 kubectl expose deployment hello-minikube --type=NodePort --port=8080 ``` @@ -540,14 +594,15 @@ Alternatively, use kubectl to forward the port: kubectl port-forward service/hello-minikube 7080:8080 ``` -Tada! Your application is now available at [http://localhost:7080/](http://localhost:7080/) - -### LoadBalancer deployments +Tada! Your application is now available at [http://localhost:7080/](http://localhost:7080/). +You should be able to see the request metadata in the application output. Try changing the path of the request and observe the changes. Similarly, you can do a POST request and observe the body show up in the output. +{{% /tab %}} +{{% tab LoadBalancer %}} To access a LoadBalancer deployment, use the "minikube tunnel" command. Here is an example deployment: ```shell -kubectl create deployment balanced --image=k8s.gcr.io/echoserver:1.4 +kubectl create deployment balanced --image=kicbase/echo-server:1.0 kubectl expose deployment balanced --type=LoadBalancer --port=8080 ``` @@ -564,6 +619,110 @@ kubectl get services balanced ``` Your deployment is now available at <EXTERNAL-IP>:8080 +{{% /tab %}} +{{% tab Ingress %}} +Enable ingress addon: +```shell +minikube addons enable ingress +``` + +The following example creates simple echo-server services and an Ingress object to route to these services. +```shell +kind: Pod +apiVersion: v1 +metadata: + name: foo-app + labels: + app: foo +spec: + containers: + - name: foo-app + image: 'kicbase/echo-server:1.0' +--- +kind: Service +apiVersion: v1 +metadata: + name: foo-service +spec: + selector: + app: foo + ports: + - port: 8080 +--- +kind: Pod +apiVersion: v1 +metadata: + name: bar-app + labels: + app: bar +spec: + containers: + - name: bar-app + image: 'kicbase/echo-server:1.0' +--- +kind: Service +apiVersion: v1 +metadata: + name: bar-service +spec: + selector: + app: bar + ports: + - port: 8080 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: example-ingress +spec: + rules: + - http: + paths: + - pathType: Prefix + path: /foo + backend: + service: + name: foo-service + port: + number: 8080 + - pathType: Prefix + path: /bar + backend: + service: + name: bar-service + port: + number: 8080 +--- +``` + +Apply the contents +```shell +kubectl apply -f https://storage.googleapis.com/minikube-site-examples/ingress-example.yaml +``` + +Wait for ingress address +```shell +kubectl get ingress +NAME CLASS HOSTS ADDRESS PORTS AGE +example-ingress nginx * 80 5m45s +``` + +**Note for Docker Desktop Users:** +
+To get ingress to work you'll need to open a new terminal window and run `minikube tunnel` and in the following step use `127.0.0.1` in place of ``. + +Now verify that the ingress works +```shell +$ curl /foo +Request served by foo-app +... + +$ curl /bar +Request served by bar-app +... +``` +{{% /tab %}} +{{% /tabs %}}

5Manage your cluster

@@ -584,10 +743,10 @@ Halt the cluster: minikube stop ``` -Increase the default memory limit (requires a restart): +Change the default memory limit (requires a restart): ```shell -minikube config set memory 16384 +minikube config set memory 9001 ``` Browse the catalog of easily installed Kubernetes services: @@ -599,7 +758,7 @@ minikube addons list Create a second cluster running an older Kubernetes release: ```shell -minikube start -p aged --kubernetes-version=v1.16.1 +minikube start -p aged --kubernetes-version=v1.34.0 ``` Delete all of the minikube clusters: diff --git a/site/content/en/docs/tutorials/ai-playground.md b/site/content/en/docs/tutorials/ai-playground.md new file mode 100644 index 000000000000..0e2e3d28afe8 --- /dev/null +++ b/site/content/en/docs/tutorials/ai-playground.md @@ -0,0 +1,467 @@ +--- +title: "Minikube AI playground on Apple silicon" +linkTitle: "Minikube AI playground on Apple silicon" +weight: 1 +date: 2024-10-04 +--- + +This tutorial shows how to create an AI playground with minikube on Apple +silicon devices such as a MacBook Pro. We'll create a cluster that shares your +Mac's GPU using the krunkit driver, deploy two large language models, and +interact with the models using Open WebUI. + +![Open WebUI Chat](/images/open-webui-chat.png) + +## Prerequisites + +- Apple silicon Mac +- [krunkit](https://github.com/containers/krunkit) v1.0.0 or later +- [vmnet-helper](https://github.com/nirs/vmnet-helper) v0.6.0 or later +- [generic-device-plugin](https://github.com/squat/generic-device-plugin) +- minikube v1.37.0 or later (krunkit driver only) + +## Installing krunkit and vmnet-helper + +Install latest krunkit: + +```shell +brew tap slp/krunkit +brew install krunkit +krunkit --version +``` + +Instal latest vmnet-helper: + +```shell +curl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash +/opt/vmnet-helper/bin/vmnet-helper --version +``` + +For more information, see the [krunkit driver](https://minikube.sigs.k8s.io/docs/drivers/krunkit/) +documentation. + +## Download models + +Download some models to the local disk. By keeping the models outside of +minikube, you can create and delete clusters quickly without downloading the +models again. + +```shell +mkdir ~/models +cd ~/models +curl -LO 'https://huggingface.co/instructlab/granite-7b-lab-GGUF/resolve/main/granite-7b-lab-Q4_K_M.gguf?download=true' +curl -LO 'https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/tinyllama-1.1b-chat-v1.0.Q8_0.gguf?download=true' +``` + +**Important**: The model must be in *GGUF* format. + +## Start minikube + +Start a minikube cluster with the krunkit driver, mounting the `~/models` +directory at `/mnt/models`: + +```shell +minikube start --driver krunkit --mount-string ~/models:/mnt/models +``` + +Output: +``` +😄 minikube v1.37.0 on Darwin 15.6.1 (arm64) +✨ Using the krunkit (experimental) driver based on user configuration +👍 Starting "minikube" primary control-plane node in "minikube" cluster +🔥 Creating krunkit VM (CPUs=2, Memory=6144MB, Disk=20000MB) ... +🐳 Preparing Kubernetes v1.34.0 on Docker 28.4.0 ... +🔗 Configuring bridge CNI (Container Networking Interface) ... +🔎 Verifying Kubernetes components... + ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5 +🌟 Enabled addons: storage-provisioner, default-storageclass +🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default +``` + +### Verifying that the GPU is available + +The krunkit driver exposes your host GPU as a virtio-gpu device: + +``` +% minikube ssh -- tree /dev/dri +/dev/dri +|-- by-path +| |-- platform-a007000.virtio_mmio-card -> ../card0 +| `-- platform-a007000.virtio_mmio-render -> ../renderD128 +|-- card0 +`-- renderD128 +``` + +## Deploying the generic-device-plugin + +To use the GPU in pods, we need the generic-device-plugin. Deploy it with: + +```shell +cat <<'EOF' | kubectl apply -f - +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: generic-device-plugin + namespace: kube-system + labels: + app.kubernetes.io/name: generic-device-plugin +spec: + selector: + matchLabels: + app.kubernetes.io/name: generic-device-plugin + template: + metadata: + labels: + app.kubernetes.io/name: generic-device-plugin + spec: + priorityClassName: system-node-critical + tolerations: + - operator: "Exists" + effect: "NoExecute" + - operator: "Exists" + effect: "NoSchedule" + containers: + - image: squat/generic-device-plugin + args: + - --device + - | + name: dri + groups: + - count: 4 + paths: + - path: /dev/dri + name: generic-device-plugin + resources: + requests: + cpu: 50m + memory: 10Mi + limits: + cpu: 50m + memory: 20Mi + ports: + - containerPort: 8080 + name: http + securityContext: + privileged: true + volumeMounts: + - name: device-plugin + mountPath: /var/lib/kubelet/device-plugins + - name: dev + mountPath: /dev + volumes: + - name: device-plugin + hostPath: + path: /var/lib/kubelet/device-plugins + - name: dev + hostPath: + path: /dev + updateStrategy: + type: RollingUpdate +EOF +``` + +**Note**: This configuration allows up to 4 pods to use `/dev/dri`. You can +increase `count` to run more pods using the GPU. + +Wait until the generic-device-plugin DaemonSet is available: + +```shell +% kubectl get daemonset generic-device-plugin -n kube-system -w +NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE +generic-device-plugin 1 1 1 1 1 45s +``` + +## Deploying the granite model + +To play with the granite model you downloaded, start a llama-server pod serving +the model and a service to make the pod available to other pods. + +```shell +cat <<'EOF' | kubectl apply -f - +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: granite +spec: + replicas: 1 + selector: + matchLabels: + app: granite + template: + metadata: + labels: + app: granite + name: granite + spec: + containers: + - name: llama-server + image: quay.io/ramalama/ramalama:latest + command: [ + llama-server, + --host, "0.0.0.0", + --port, "8080", + --model, /mnt/models/granite-7b-lab-Q4_K_M.gguf, + --alias, "ibm/granite:7b", + --ctx-size, "2048", + --temp, "0.8", + --cache-reuse, "256", + -ngl, "999", + --threads, "6", + --no-warmup, + --log-colors, auto, + ] + resources: + limits: + squat.ai/dri: 1 + volumeMounts: + - name: models + mountPath: /mnt/models + volumes: + - name: models + hostPath: + path: /mnt/models +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: granite + name: granite +spec: + ports: + - protocol: TCP + port: 8080 + selector: + app: granite +EOF +``` + +Wait until the deployment is available: + +```shell +% kubectl get deploy granite +NAME READY UP-TO-DATE AVAILABLE AGE +granite 1/1 1 1 8m17s +``` + +Check the granite service: + +```shell +% kubectl get service granite +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +granite ClusterIP 10.105.145.9 8080/TCP 28m +``` + +## Deploying the tinyllama model + +To play with the tinyllama model you downloaded, start a llama-server pod +serving the model and a service to make the pod available to other pods. + +```shell +cat <<'EOF' | kubectl apply -f - +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: tinyllama +spec: + replicas: 1 + selector: + matchLabels: + app: tinyllama + template: + metadata: + labels: + app: tinyllama + name: tinyllama + spec: + containers: + - name: llama-server + image: quay.io/ramalama/ramalama:latest + command: [ + llama-server, + --host, "0.0.0.0", + --port, "8080", + --model, /mnt/models/tinyllama-1.1b-chat-v1.0.Q8_0.gguf, + --alias, tinyllama, + --ctx-size, "2048", + --temp, "0.8", + --cache-reuse, "256", + -ngl, "999", + --threads, "6", + --no-warmup, + --log-colors, auto, + ] + resources: + limits: + squat.ai/dri: 3 + volumeMounts: + - name: models + mountPath: /mnt/models + volumes: + - name: models + hostPath: + path: /mnt/models +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: tinyllama + name: tinyllama +spec: + ports: + - protocol: TCP + port: 8080 + selector: + app: tinyllama +EOF +``` + +Wait until the deployment is available: + +``` +% kubectl get deploy tinyllama +NAME READY UP-TO-DATE AVAILABLE AGE +tinyllama 1/1 1 1 9m14s +``` + +Check the tinyllama service: + +```shell +% kubectl get service tinyllama +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +tinyllama ClusterIP 10.98.219.117 8080/TCP 23m +``` + +## Deploying Open WebUI + +The [Open WebUI](https://docs.openwebui.com) project provides an easy-to-use web +interface for interacting with OpenAI-compatible APIs such as our llama-server +pods. + +To deploy Open WebUI, run: + +```shell +--- +cat <<'EOF' | kubectl apply -f - +apiVersion: apps/v1 +kind: Deployment +metadata: + name: open-webui +spec: + replicas: 1 + selector: + matchLabels: + app: open-webui + template: + metadata: + labels: + app: open-webui + spec: + containers: + - name: open-webui + image: ghcr.io/open-webui/open-webui:dev-slim + ports: + - containerPort: 8080 + env: + # Preconfigure OpenAI-compatible endpoints + - name: OPENAI_API_BASE_URLS + value: "http://granite:8080/v1;http://tinyllama:8080/v1" + volumeMounts: + - name: open-webui-data + mountPath: /app/backend/data + volumes: + - name: open-webui-data + persistentVolumeClaim: + claimName: open-webui-data +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: open-webui-data +spec: + storageClassName: standard + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi +--- +apiVersion: v1 +kind: Service +metadata: + name: open-webui +spec: + ports: + - protocol: TCP + port: 8080 + nodePort: 30080 + selector: + app: open-webui + type: NodePort +EOF +``` + +We configured our llama-server OpenAI compatible API endpoints using the +`OPENAI_API_BASE_URLS` environment variable. +Check [Open WebUI documenation](https://docs.openwebui.com) to learn how to +configure it using the Admin Panel. + +Wait until the deployment is available: + +```shell +% kubectl get deploy open-webui +NAME READY UP-TO-DATE AVAILABLE AGE +open-webui 1/1 1 1 69s +``` + +## Interacting with the models + +Open a browser with Open WebUI console: + +```shell +open $(minikube service open-webui --url) +``` + +Create an Admin account to start using Open WebUI. + +### Chatting with the granite model + +You can start chatting with the "ibm/granite:7b" model. + +Type a prompt: + +``` +> Write a very technical haiku about playing with large language models with Minikube on Apple silicon + +Mighty model, Minikube, +Silicon-powered speed, +Learning's dance, ever-changing. +Through data streams it weaves, +Inference's wisdom, vast and deep, +Apple's heartbeat, in code, resounds. +Exploring AI's vast frontier, +Minikube, language model's playground, +Innovation's rhythm, forever. +``` + +### Chatting with the tinyllama model + +Click the "New Chat" button on the left and select the "tinyllama" model from +the model menu in the top left. + +Type a prompt: + +``` +> How do you feel inside this fancy Minikube cluster? + +I do not have a physical body. However, based on the given text material, the +author is describing feeling inside a cluster of Minikube, a type of jellyfish. +The use of the word "fancy" suggests that the author is impressed or appreciates +the intricate design of the cluster, while the adjective "minikube" connotes its +smooth texture, delicate shape, and iridescent colors. The word "cluster" +suggests a group of these jellyfish, while "inside" implies being in the +vicinity or enclosed within. +``` diff --git a/site/content/en/docs/tutorials/amd.md b/site/content/en/docs/tutorials/amd.md new file mode 100644 index 000000000000..8760e6762a78 --- /dev/null +++ b/site/content/en/docs/tutorials/amd.md @@ -0,0 +1,114 @@ +--- +title: "Using AMD GPUs with minikube" +linkTitle: "Using AMD GPUs with minikube" +weight: 1 +date: 2024-10-04 +--- + +This tutorial shows how to start minikube with support for AMD GPUs. + +Support is provided by the [AMD GPU device plugin for Kubernetes](https://github.com/ROCm/k8s-device-plugin). + + +## Prerequisites + +- Linux +- Latest AMD GPU Drivers 6.2.1 or greater +- minikube v1.35.0 or later (docker driver only) + +## Using the docker driver + +- Ensure you have an AMD driver installed, you can check if one is installed by running `rocminfo`, if one is not installed follow the [Radeon™ Driver Installation Guide](https://amdgpu-install.readthedocs.io/en/latest/) + +- Delete existing minikube (optional) + + If you have an existing minikube instance, you may need to delete it if it was built before installing the AMD drivers. + ```shell + minikube delete + ``` + +- Start minikube: + ```shell + minikube start --driver docker --container-runtime docker --gpus amd + ``` + +## Verifying the GPU is available + +Test the AMD GPUs are available to the cluster. + +1. Create the following Job: + + ```shell + cat <<'EOF' | kubectl apply -f - + apiVersion: batch/v1 + kind: Job + metadata: + name: amd-gpu-check + labels: + purpose: amd-gpu-check + spec: + ttlSecondsAfterFinished: 100 + template: + spec: + restartPolicy: Never + securityContext: + supplementalGroups: + - 44 + - 110 + containers: + - name: amd-gpu-checker + image: rocm/rocm-terminal + workingDir: /root + command: ["rocminfo"] + args: [] + resources: + limits: + amd.com/gpu: 1 # requesting a GPU + EOF + ``` + +2. Check the Job output `kubectl logs jobs/amd-gpu-check` looks something like the following: + + ```plain + ROCk module version 6.8.5 is loaded + ===================== + HSA System Attributes + ===================== + Runtime Version: 1.14 + Runtime Ext Version: 1.6 + System Timestamp Freq.: 1000.000000MHz + Sig. Max Wait Duration: 18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count) + Machine Model: LARGE + System Endianness: LITTLE + Mwaitx: DISABLED + DMAbuf Support: YES + + ========== + HSA Agents + ========== + ******* + Agent 1 + ******* + Name: AMD Ryzen 7 7840U w/ Radeon 780M Graphics + Uuid: CPU-XX + ... + ``` + +## Where can I learn more about GPU passthrough? + +See the excellent documentation at + + +## Why does minikube not support AMD GPUs on Windows? + +minikube supports Windows host through Hyper-V or VirtualBox. + +- VirtualBox doesn't support PCI passthrough for [Windows + host](https://www.virtualbox.org/manual/ch09.html#pcipassthrough). + +- Hyper-V supports DDA (discrete device assignment) but [only for Windows Server + 2016](https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/plan/plan-for-deploying-devices-using-discrete-device-assignment) + +Since the only possibility of supporting GPUs on minikube on Windows is on a +server OS where users don't usually run minikube, we haven't invested time in +trying to support GPUs on minikube on Windows. diff --git a/site/content/en/docs/tutorials/configuring_creds_for_aws_ecr.md b/site/content/en/docs/tutorials/configuring_creds_for_aws_ecr.md index 1a478127c9b7..9fc8e95473a0 100644 --- a/site/content/en/docs/tutorials/configuring_creds_for_aws_ecr.md +++ b/site/content/en/docs/tutorials/configuring_creds_for_aws_ecr.md @@ -61,6 +61,10 @@ Enable the minikube registry-creds addon with the following command: minikube addons enable registry-creds ``` +The add-on will create secrets in each namespace other than `kube-system` that can be used for `imagePullSecrets` on a pod. It also +updates the `default` service account in each namespace to use these `imagePullSecrets`, which means any pod created outside +the `kube-system` namespace without an explicit service account other than `default` will use the image pull secrets automatically. + ### Create a deployment that uses an image in AWS ECR This tutorial will use a vanilla alpine image that has been already uploaded into a repository in AWS ECR. @@ -122,11 +126,9 @@ In the above tutorial, we configured the `registry-creds` addon to refresh the c - Check if you have a secret called `awsecr-cred` in the `default` namespace by running `kubectl get secrets`. - Check if the image path is valid. - Check if the registry-creds addon is enabled by using `minikube addons list`. - -## Caveats - -The service account token for the `default` service account in the `default` namespace is kept updated by the addon. If you create your deployment in a different namespace, the image pull will not work. +- Check if you have specified `imagePullSecrets` on the workload or related service account if you're using a custom service account. ## Related articles - [registry-creds addon](https://github.com/kubernetes/minikube/tree/master/deploy/addons/registry-creds) +- [registry-creds controller source](https://github.com/upmc-enterprises/registry-creds#registry-credentials) diff --git a/site/content/en/docs/tutorials/continuous_integration.md b/site/content/en/docs/tutorials/continuous_integration.md index c4ced226c3f2..b797876c6371 100644 --- a/site/content/en/docs/tutorials/continuous_integration.md +++ b/site/content/en/docs/tutorials/continuous_integration.md @@ -2,14 +2,35 @@ title: "Continuous Integration" weight: 1 description: > - Using minikube for Continuous Integration + How to run minikube in CI (Continuous Integration) --- ## Overview + Most continuous integration environments are already running inside a VM, and may not support nested virtualization. +You could use either `none` or `docker` driver in CI. + +To see a working example of running minikube in CI checkout [minikube-ci/examples](https://github.com/minikube-ci/examples) that contains working examples. + + +## Supported / Tested CI Platforms + + +For any platform not yet listed we are looking for your help! Please file Pull Requests and / or Issues for missing CI platforms 😄 + +| Platform | Known to Work? | Status | +|---|---|--| +| [Prow](https://github.com/kubernetes/test-infra/tree/master/prow) | [Yes](https://github.com/kubernetes/test-infra/tree/master/config/jobs/kubernetes/minikube) ✔️ | [![Prow](https://prow.k8s.io/badge.svg?jobs=pull-minikube-build)](https://prow.k8s.io/?job=pull-minikube-build) | +| [Google Cloud Build](https://cloud.google.com/cloud-build/) | [Yes](https://github.com/minikube-ci/examples/blob/master/gcb.md) ✔️ | | +| [GitHub](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-continuous-integration) | [Yes](https://github.com/minikube-ci/examples/blob/master/.github/workflows/minikube.yml) ✔️ | [![GitHub](https://github.com/minikube-ci/examples/workflows/Minikube/badge.svg)](https://github.com/minikube-ci/examples/actions) | +| [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/) | [Yes](https://github.com/minikube-ci/examples/blob/master/azure-pipelines.yml) ✔️ | [![Azure Pipelines](https://dev.azure.com/medyagh0825/minikube-ci/_apis/build/status/examples?api-version=5.1-preview.1)](https://dev.azure.com/medyagh0825/minikube-ci/_build) +| [Travis CI](https://travis-ci.com/) | [Yes](https://github.com/minikube-ci/examples/blob/master/.travis.yml) ✔️ | [![Travis CI](https://travis-ci.com/minikube-ci/examples.svg?branch=master)](https://travis-ci.com/minikube-ci/examples/) | +| [CircleCI](https://circleci.com/) | [Yes](https://github.com/minikube-ci/examples/blob/master/.circleci) ✔️ | [![CircleCI](https://circleci.com/gh/minikube-ci/examples.svg?style=svg)](https://circleci.com/gh/minikube-ci/examples) | +| [Gitlab](https://about.gitlab.com/product/continuous-integration/) | [Yes](https://github.com/minikube-ci/examples/blob/master/.gitlab-ci.yml) ✔️ | Gitlab | + + -The `docker` driver was designed for this use case, as well as the older `none` driver. ## Example @@ -20,11 +41,11 @@ curl -LO \ https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \ && install minikube-linux-amd64 /tmp/ -kv=$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt) +kv=$(curl -sSL https://dl.k8s.io/release/stable.txt) curl -LO \ - https://storage.googleapis.com/kubernetes-release/release/$kv/bin/linux/amd64/kubectl \ + https://dl.k8s.io/$kv/bin/linux/amd64/kubectl \ && install kubectl /tmp/ -export MINIKUBE_WANTUPDATENOTIFICATION=false +/tmp/minikube-linux-amd64 config set WantUpdateNotification false /tmp/minikube-linux-amd64 start --driver=docker ``` diff --git a/site/content/en/docs/tutorials/custom_cert_ingress.md b/site/content/en/docs/tutorials/custom_cert_ingress.md index f13054990373..10f6b6da96e2 100644 --- a/site/content/en/docs/tutorials/custom_cert_ingress.md +++ b/site/content/en/docs/tutorials/custom_cert_ingress.md @@ -7,7 +7,8 @@ date: 2020-11-30 ## Overview -- This tutorial will show you how to configure custom TLS certificatate for ingress addon. +- This tutorial will show you how to configure custom TLS certificatate for ingress addon. +- [mkcert](https://github.com/FiloSottile/mkcert) is a simple tool for making locally-trusted development certificates. It requires no configuration. ## Tutorial diff --git a/site/content/en/docs/tutorials/docker_desktop_replacement.md b/site/content/en/docs/tutorials/docker_desktop_replacement.md new file mode 100644 index 000000000000..66062ad9d076 --- /dev/null +++ b/site/content/en/docs/tutorials/docker_desktop_replacement.md @@ -0,0 +1,118 @@ +--- +title: "Using minikube as Docker Desktop Replacement" +linkTitle: "Using minikube as Docker Desktop Replacement" +weight: 1 +date: 2022-02-02 +--- + +## Overview + +- This guide will show you how to use minikube as a Docker Desktop replacement. + +## Before You Begin +- This only works with the `docker` container runtime, not with `containerd` or `crio`. + +- You need to start minikube with a VM driver instead of `docker`, such as `hyperkit` on macOS and `hyperv` on Windows. + +- Alternatively, you can use the [`minikube image build`]({{< ref "/docs/commands/image#minikube-image-build" >}}) command instead of `minikube docker-env` and `docker build`. + +## Steps +

1Install the Docker CLI

+{{% tabs %}} +{{% mactab %}} +{{% tabs %}} +{{% tab brew %}} +```shell +brew install docker +``` +{{% /tab %}} +{{% tab Manual %}} +1. Download the static binary archive. Go to https://download.docker.com/mac/static/stable/ and select `x86_64` (for Mac on Intel chip) or `aarch64` (for Mac on Apple silicon), and then download the `.tgz` file relating to the version of Docker Engine you want to install. + +2. Extract the archive using the `tar` utility. The `docker` binary is extracted. +```shell +tar xzvf /path/to/.tar.gz +``` + +3. Clear the extended attributes to allow it run. +```shell +sudo xattr -rc docker +``` + +4. Move the binary to a directory on your executable path, such as `/usr/local/bin/`. +```shell +sudo cp docker/docker /usr/local/bin/ +``` +{{% /tab %}} +{{% /tabs %}} +{{% /mactab %}} +{{% windowstab %}} +{{% tabs %}} +{{% tab Chocolatey %}} +**Please Note**: The docker engine requires the Windows Features: Containers and Microsoft-Hyper-V to be installed in order to function correctly. You can install these with the chocolatey command: +```shell +choco install Containers Microsoft-Hyper-V --source windowsfeatures +``` + +1. Install docker-engine +```shell +choco install docker-engine +``` + +2. This package creates the group `docker-users` and adds the installing user to it. In order to communicate with docker you will need to log out and back in. +{{% /tab %}} +{{% tab Manual %}} +1. Download the static binary archive. Go to https://download.docker.com/win/static/stable/x86_64 and select the latest version from the list. + +2. Run the following PowerShell commands to install and extract the archive to your program files: +```shell +Expand-Archive /path/to/.zip -DestinationPath $Env:ProgramFiles +``` + +3. Add the path to the Docker CLI binary (`C:\Program Files\Docker`) to the `PATH` environment variable, [guide to setting environment variables in Windows](https://www.architectryan.com/2018/08/31/how-to-change-environment-variables-on-windows-10/). + +4. Restart Windows for the `PATH` change to take effect. +{{% /tab %}} +{{% /tabs %}} +{{% /windowstab %}} +{{% /tabs %}} + +

2Start minikube

+Start minikube with a VM driver and `docker` container runtime if not already running. + +```shell +minikube start --container-runtime=docker --vm=true +``` + +

3Point Docker CLI to minikube

+Use the `minikube docker-env` command to point your terminal's Docker CLI to the Docker instance inside minikube. + +
Note: the default profile name is `minikube` + +{{% tabs %}} +{{% tab "bash/zsh" %}} +``` +eval $(minikube -p docker-env) +``` +{{% /tab %}} +{{% tab PowerShell %}} +``` +& minikube -p docker-env --shell powershell | Invoke-Expression +``` +{{% /tab %}} +{{% tab cmd %}} +``` +@FOR /f "tokens=*" %i IN ('minikube -p docker-env --shell cmd') DO @%i +``` +{{% /tab %}} +{{% tab fish %}} +``` +minikube -p docker-env | source +``` +{{% /tab %}} +{{% tab tcsh %}} +``` +eval `minikube -p docker-env` +``` +{{% /tab %}} +{{% /tabs %}} diff --git a/site/content/en/docs/tutorials/ebpf_tools_in_minikube.md b/site/content/en/docs/tutorials/ebpf_tools_in_minikube.md index 5a7f410bdf28..74d3c0d08e34 100644 --- a/site/content/en/docs/tutorials/ebpf_tools_in_minikube.md +++ b/site/content/en/docs/tutorials/ebpf_tools_in_minikube.md @@ -13,29 +13,20 @@ eBPF tools are performance tools used for observing the Linux kernel. These tools can be used to monitor your Kubernetes application in minikube. This tutorial will cover how to set up your minikube cluster so that you can run eBPF tools from a Docker container within minikube. -## Prerequisites -- Latest minikube binary +## Requirement +- use VM Driver (not docker or podman) +- x86 (currently the [bcc image](https://hub.docker.com/r/zlim/bcc/tags) does not support arm64) +- Latest minikube version ## Tutorial -First, start minikube: +First, start minikube with a VM driver: ``` -$ minikube start --iso-url https://storage.googleapis.com/minikube-performance/minikube.iso +$ minikube start --vm=true ``` -You will need to download and extract necessary kernel headers within minikube: - -```shell -minikube ssh -- curl -Lo /tmp/kernel-headers-linux-4.19.94.tar.lz4 https://storage.googleapis.com/minikube-kernel-headers/kernel-headers-linux-4.19.94.tar.lz4 - -minikube ssh -- sudo mkdir -p /lib/modules/4.19.94/build - -minikube ssh -- sudo tar -I lz4 -C /lib/modules/4.19.94/build -xvf /tmp/kernel-headers-linux-4.19.94.tar.lz4 - -minikube ssh -- rm /tmp/kernel-headers-linux-4.19.94.tar.lz4 -``` You can now run [BCC tools](https://github.com/iovisor/bcc) as a Docker container in minikube: @@ -59,3 +50,4 @@ runc 5059 2011 0 /usr/bin/runc --version docker-init 5065 2011 0 /usr/bin/docker-init --version nice 5066 4012 0 /usr/bin/nice -n 19 du -x -s -B 1 /var/lib/kubelet/pods/1cf22976-f3e0-498b-bc04-8c7068e6e545/volumes/kubernetes.io~secret/storage-provisioner-token-cvk4x ``` + diff --git a/site/content/en/docs/tutorials/includes/hello-deployment.yaml b/site/content/en/docs/tutorials/includes/hello-deployment.yaml deleted file mode 100644 index da4d8a415676..000000000000 --- a/site/content/en/docs/tutorials/includes/hello-deployment.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: hello -spec: - replicas: 2 - strategy: - type: RollingUpdate - rollingUpdate: - maxUnavailable: 100% - selector: - matchLabels: - app: hello - template: - metadata: - labels: - app: hello - spec: - affinity: - # ⬇⬇⬇ This ensures pods will land on separate hosts - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: [{ key: app, operator: In, values: [hello] }] - topologyKey: "kubernetes.io/hostname" - containers: - - name: hello-from - image: pbitty/hello-from:latest - ports: - - name: http - containerPort: 80 - terminationGracePeriodSeconds: 1 diff --git a/site/content/en/docs/tutorials/includes/hello-svc.yaml b/site/content/en/docs/tutorials/includes/hello-svc.yaml deleted file mode 100644 index 6db3dd8647a5..000000000000 --- a/site/content/en/docs/tutorials/includes/hello-svc.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -apiVersion: v1 -kind: Service -metadata: - name: hello -spec: - type: NodePort - selector: - app: hello - ports: - - protocol: TCP - nodePort: 31000 - port: 80 - targetPort: http diff --git a/site/content/en/docs/tutorials/includes/kube-flannel.yaml b/site/content/en/docs/tutorials/includes/kube-flannel.yaml deleted file mode 100644 index bfed51be44a8..000000000000 --- a/site/content/en/docs/tutorials/includes/kube-flannel.yaml +++ /dev/null @@ -1,602 +0,0 @@ ---- -apiVersion: policy/v1beta1 -kind: PodSecurityPolicy -metadata: - name: psp.flannel.unprivileged - annotations: - seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default - seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default - apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default - apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default -spec: - privileged: false - volumes: - - configMap - - secret - - emptyDir - - hostPath - allowedHostPaths: - - pathPrefix: "/etc/cni/net.d" - - pathPrefix: "/etc/kube-flannel" - - pathPrefix: "/run/flannel" - readOnlyRootFilesystem: false - # Users and groups - runAsUser: - rule: RunAsAny - supplementalGroups: - rule: RunAsAny - fsGroup: - rule: RunAsAny - # Privilege Escalation - allowPrivilegeEscalation: false - defaultAllowPrivilegeEscalation: false - # Capabilities - allowedCapabilities: ['NET_ADMIN'] - defaultAddCapabilities: [] - requiredDropCapabilities: [] - # Host namespaces - hostPID: false - hostIPC: false - hostNetwork: true - hostPorts: - - min: 0 - max: 65535 - # SELinux - seLinux: - # SELinux is unused in CaaSP - rule: 'RunAsAny' ---- -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1beta1 -metadata: - name: flannel -rules: - - apiGroups: ['extensions'] - resources: ['podsecuritypolicies'] - verbs: ['use'] - resourceNames: ['psp.flannel.unprivileged'] - - apiGroups: - - "" - resources: - - pods - verbs: - - get - - apiGroups: - - "" - resources: - - nodes - verbs: - - list - - watch - - apiGroups: - - "" - resources: - - nodes/status - verbs: - - patch ---- -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1beta1 -metadata: - name: flannel -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: flannel -subjects: -- kind: ServiceAccount - name: flannel - namespace: kube-system ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: flannel - namespace: kube-system ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: kube-flannel-cfg - namespace: kube-system - labels: - tier: node - app: flannel -data: - cni-conf.json: | - { - "name": "cbr0", - "cniVersion": "0.3.1", - "plugins": [ - { - "type": "flannel", - "delegate": { - "hairpinMode": true, - "isDefaultGateway": true - } - }, - { - "type": "portmap", - "capabilities": { - "portMappings": true - } - } - ] - } - net-conf.json: | - { - "Network": "10.244.0.0/16", - "Backend": { - "Type": "vxlan" - } - } ---- -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: kube-flannel-ds-amd64 - namespace: kube-system - labels: - tier: node - app: flannel -spec: - selector: - matchLabels: - app: flannel - template: - metadata: - labels: - tier: node - app: flannel - spec: - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: beta.kubernetes.io/os - operator: In - values: - - linux - - key: beta.kubernetes.io/arch - operator: In - values: - - amd64 - hostNetwork: true - tolerations: - - operator: Exists - effect: NoSchedule - serviceAccountName: flannel - initContainers: - - name: install-cni - image: quay.io/coreos/flannel:v0.11.0-amd64 - command: - - cp - args: - - -f - - /etc/kube-flannel/cni-conf.json - - /etc/cni/net.d/10-flannel.conflist - volumeMounts: - - name: cni - mountPath: /etc/cni/net.d - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - containers: - - name: kube-flannel - image: quay.io/coreos/flannel:v0.11.0-amd64 - command: - - /opt/bin/flanneld - args: - - --ip-masq - - --kube-subnet-mgr - resources: - requests: - cpu: "100m" - memory: "50Mi" - limits: - cpu: "100m" - memory: "50Mi" - securityContext: - privileged: false - capabilities: - add: ["NET_ADMIN"] - env: - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - volumeMounts: - - name: run - mountPath: /run/flannel - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - volumes: - - name: run - hostPath: - path: /run/flannel - - name: cni - hostPath: - path: /etc/cni/net.d - - name: flannel-cfg - configMap: - name: kube-flannel-cfg ---- -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: kube-flannel-ds-arm64 - namespace: kube-system - labels: - tier: node - app: flannel -spec: - selector: - matchLabels: - app: flannel - template: - metadata: - labels: - tier: node - app: flannel - spec: - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: beta.kubernetes.io/os - operator: In - values: - - linux - - key: beta.kubernetes.io/arch - operator: In - values: - - arm64 - hostNetwork: true - tolerations: - - operator: Exists - effect: NoSchedule - serviceAccountName: flannel - initContainers: - - name: install-cni - image: quay.io/coreos/flannel:v0.11.0-arm64 - command: - - cp - args: - - -f - - /etc/kube-flannel/cni-conf.json - - /etc/cni/net.d/10-flannel.conflist - volumeMounts: - - name: cni - mountPath: /etc/cni/net.d - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - containers: - - name: kube-flannel - image: quay.io/coreos/flannel:v0.11.0-arm64 - command: - - /opt/bin/flanneld - args: - - --ip-masq - - --kube-subnet-mgr - resources: - requests: - cpu: "100m" - memory: "50Mi" - limits: - cpu: "100m" - memory: "50Mi" - securityContext: - privileged: false - capabilities: - add: ["NET_ADMIN"] - env: - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - volumeMounts: - - name: run - mountPath: /run/flannel - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - volumes: - - name: run - hostPath: - path: /run/flannel - - name: cni - hostPath: - path: /etc/cni/net.d - - name: flannel-cfg - configMap: - name: kube-flannel-cfg ---- -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: kube-flannel-ds-arm - namespace: kube-system - labels: - tier: node - app: flannel -spec: - selector: - matchLabels: - app: flannel - template: - metadata: - labels: - tier: node - app: flannel - spec: - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: beta.kubernetes.io/os - operator: In - values: - - linux - - key: beta.kubernetes.io/arch - operator: In - values: - - arm - hostNetwork: true - tolerations: - - operator: Exists - effect: NoSchedule - serviceAccountName: flannel - initContainers: - - name: install-cni - image: quay.io/coreos/flannel:v0.11.0-arm - command: - - cp - args: - - -f - - /etc/kube-flannel/cni-conf.json - - /etc/cni/net.d/10-flannel.conflist - volumeMounts: - - name: cni - mountPath: /etc/cni/net.d - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - containers: - - name: kube-flannel - image: quay.io/coreos/flannel:v0.11.0-arm - command: - - /opt/bin/flanneld - args: - - --ip-masq - - --kube-subnet-mgr - resources: - requests: - cpu: "100m" - memory: "50Mi" - limits: - cpu: "100m" - memory: "50Mi" - securityContext: - privileged: false - capabilities: - add: ["NET_ADMIN"] - env: - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - volumeMounts: - - name: run - mountPath: /run/flannel - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - volumes: - - name: run - hostPath: - path: /run/flannel - - name: cni - hostPath: - path: /etc/cni/net.d - - name: flannel-cfg - configMap: - name: kube-flannel-cfg ---- -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: kube-flannel-ds-ppc64le - namespace: kube-system - labels: - tier: node - app: flannel -spec: - selector: - matchLabels: - app: flannel - template: - metadata: - labels: - tier: node - app: flannel - spec: - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: beta.kubernetes.io/os - operator: In - values: - - linux - - key: beta.kubernetes.io/arch - operator: In - values: - - ppc64le - hostNetwork: true - tolerations: - - operator: Exists - effect: NoSchedule - serviceAccountName: flannel - initContainers: - - name: install-cni - image: quay.io/coreos/flannel:v0.11.0-ppc64le - command: - - cp - args: - - -f - - /etc/kube-flannel/cni-conf.json - - /etc/cni/net.d/10-flannel.conflist - volumeMounts: - - name: cni - mountPath: /etc/cni/net.d - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - containers: - - name: kube-flannel - image: quay.io/coreos/flannel:v0.11.0-ppc64le - command: - - /opt/bin/flanneld - args: - - --ip-masq - - --kube-subnet-mgr - resources: - requests: - cpu: "100m" - memory: "50Mi" - limits: - cpu: "100m" - memory: "50Mi" - securityContext: - privileged: false - capabilities: - add: ["NET_ADMIN"] - env: - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - volumeMounts: - - name: run - mountPath: /run/flannel - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - volumes: - - name: run - hostPath: - path: /run/flannel - - name: cni - hostPath: - path: /etc/cni/net.d - - name: flannel-cfg - configMap: - name: kube-flannel-cfg ---- -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: kube-flannel-ds-s390x - namespace: kube-system - labels: - tier: node - app: flannel -spec: - selector: - matchLabels: - app: flannel - template: - metadata: - labels: - tier: node - app: flannel - spec: - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: beta.kubernetes.io/os - operator: In - values: - - linux - - key: beta.kubernetes.io/arch - operator: In - values: - - s390x - hostNetwork: true - tolerations: - - operator: Exists - effect: NoSchedule - serviceAccountName: flannel - initContainers: - - name: install-cni - image: quay.io/coreos/flannel:v0.11.0-s390x - command: - - cp - args: - - -f - - /etc/kube-flannel/cni-conf.json - - /etc/cni/net.d/10-flannel.conflist - volumeMounts: - - name: cni - mountPath: /etc/cni/net.d - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - containers: - - name: kube-flannel - image: quay.io/coreos/flannel:v0.11.0-s390x - command: - - /opt/bin/flanneld - args: - - --ip-masq - - --kube-subnet-mgr - resources: - requests: - cpu: "100m" - memory: "50Mi" - limits: - cpu: "100m" - memory: "50Mi" - securityContext: - privileged: false - capabilities: - add: ["NET_ADMIN"] - env: - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - volumeMounts: - - name: run - mountPath: /run/flannel - - name: flannel-cfg - mountPath: /etc/kube-flannel/ - volumes: - - name: run - hostPath: - path: /run/flannel - - name: cni - hostPath: - path: /etc/cni/net.d - - name: flannel-cfg - configMap: - name: kube-flannel-cfg diff --git a/site/content/en/docs/tutorials/kubernetes_101/_index.md b/site/content/en/docs/tutorials/kubernetes_101/_index.md new file mode 100644 index 000000000000..0e626323c84e --- /dev/null +++ b/site/content/en/docs/tutorials/kubernetes_101/_index.md @@ -0,0 +1,6 @@ +--- +title: "Kubernetes 101" +weight: -1 +description: > + Tutorial showing how to deploy, explore, expose, scale, and update your applications +--- diff --git a/site/content/en/docs/tutorials/kubernetes_101/module1.md b/site/content/en/docs/tutorials/kubernetes_101/module1.md new file mode 100644 index 000000000000..9883a828a752 --- /dev/null +++ b/site/content/en/docs/tutorials/kubernetes_101/module1.md @@ -0,0 +1,53 @@ +--- +title: "Module 1 - Create a Kubernetes Cluster" +weight: 1 +--- + +**Difficulty**: Beginner +**Estimated Time:** 10 minutes + +The goal of this scenario is to deploy a local development Kubernetes cluster using minikube + +## Step 1 - Cluster up and running + +If you haven't already, first [install minikube]({{< ref "/docs/start" >}}). Check that it is properly installed, by running the *minikube version* command: + +```shell +minikube version +``` + +Once minikube is installed, start the cluster, by running the *minikube start* command: + +```shell +minikube start +``` + +Great! You now have a running Kubernetes cluster in your terminal. minikube started a virtual environment for you, and a Kubernetes cluster is now running in that environment. + +## Step 2 - Cluster version + +To interact with Kubernetes during this bootcamp we'll use the command line interface, kubectl. We'll explain kubectl in detail in the next modules, but for now, we're just going to look at some cluster information. To check if kubectl is installed you can run the *kubectl version* command: + +```shell +kubectl version +``` + +OK, kubectl is configured and we can see both the version of the client and as well as the server. The client version is the kubectl version; the server version is the Kubernetes version installed on the master. You can also see details about the build. + +## Step 3 - Cluster details + +Let's view the cluster details. We'll do that by running *kubectl cluster-info*: + +```shell +kubectl cluster-info +``` + +During this tutorial, we'll be focusing on the command line for deploying and exploring our application. To view the nodes in the cluster, run the *kubectl get nodes* command: + +```shell +kubectl get nodes +``` + +This command shows all nodes that can be used to host our applications. Now we have only one node, and we can see that its status is ready (it is ready to accept applications for deployment). + +{{% button link="/docs/tutorials/kubernetes_101/module2" %}} diff --git a/site/content/en/docs/tutorials/kubernetes_101/module2.md b/site/content/en/docs/tutorials/kubernetes_101/module2.md new file mode 100644 index 000000000000..4737deddde91 --- /dev/null +++ b/site/content/en/docs/tutorials/kubernetes_101/module2.md @@ -0,0 +1,93 @@ +--- +title: "Module 2 - Deploy an app" +weight: 2 +--- + +**Difficulty**: Beginner +**Estimated Time:** 10 minutes + +The goal of this scenario is to help you deploy your first app on Kubernetes using kubectl. You will learn the basics about kubectl cli and how to interact with your application. + +## Step 1 - kubectl basics + +Type kubectl in the terminal to see its usage. The common format of a kubectl command is: kubectl action resource. This performs the specified action (like create, describe) on the specified resource (like node, container). You can use `--help` after the command to get additional info about possible parameters (`kubectl get nodes --help`). + +Check the kubectl is configured to talk to your cluster, by running the `kubectl version` command: + +```shell +kubectl version +``` + +OK, kubectl is installed and you can see both the client and the server versions. + +To view the nodes in the cluster, run the `kubectl get nodes` command: + +```shell +kubectl get nodes +``` + +Here we see the available nodes (1 in our case). Kubernetes will choose where to deploy our application based on Node available resources. + +## Step 2 - Deploy our app + +Let's deploy our first app on Kubernetes with the `kubectl create deployment` command. We need to provide the deployment name and app image location (include the full repository url for images hosted outside Docker Hub). + +```shell +kubectl create deployment kubernetes-bootcamp --image=registry.k8s.io/minikube/kubernetes-bootcamp:v1 +``` + +Great! You just deployed your first application by creating a deployment. This performed a few things for you: + +- searched for a suitable node where an instance of the application could be run (we have only 1 available node) +- scheduled the application to run on that Node +- configured the cluster to reschedule the instance on a new Node when needed + +To list your deployments use the `get deployments` command: + +```shell +kubectl get deployments +``` + +We see that there is 1 deployment running a single instance of your app. The instance is running inside a Docker container on your node. + +## Step 3 - View our app + +Pods that are running inside Kubernetes are running on a private, isolated network. By default they are visible from other pods and services within the same Kubernetes cluster, but not outside that network. When we use `kubectl`, we're interacting through an API endpoint to communicate with our application. + +We will cover other options on how to expose your application outside the Kubernetes cluster in Module 4. + +The `kubectl` command can create a proxy that will forward communications into the cluster-wide, private network. The proxy can be terminated by pressing control-C and won't show any output while its running. + +We will open a second terminal window to run the proxy. + +```shell +echo -e "Starting Proxy. After starting it will not output a response. Please return to your original terminal window\n"; kubectl proxy +``` + +We now have a connection between our host (the online terminal) and the Kubernetes cluster. The proxy enabled direct access to the API from these terminals. + +You can see all those APIs hosted through the proxy endpoint. For example, we can query the version directly through the API using the `curl` command: +```shell +curl http://localhost:8001/version +``` + +*Note: The proxy was run in a new tab, and the recent commands were executed in the original tab. The proxy still runs in the second tab, and this allowed our curl command to work using `localhost:8001`.* + +**If Port 8001 is not accessible, ensure that the `kubectl proxy` started above is running.** + +The API server will automatically create an endpoint for each pod, based on the pod name, that is also accessible through the proxy. + +First we need to get the Pod name, and we'll store in the environment variable POD_NAME: +```shell +export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') +echo Name of the Pod: $POD_NAME +``` + +You can access the Pod through the API by running: +```shell +curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME +``` + +In order for the new deployment to be accessible without using the Proxy, a Service is required which will be explained in the next modules. + +{{% button link="/docs/tutorials/kubernetes_101/module3" %}} diff --git a/site/content/en/docs/tutorials/kubernetes_101/module3.md b/site/content/en/docs/tutorials/kubernetes_101/module3.md new file mode 100644 index 000000000000..457445251f05 --- /dev/null +++ b/site/content/en/docs/tutorials/kubernetes_101/module3.md @@ -0,0 +1,96 @@ +--- +title: "Module 3 - Explore your app" +weight: 3 +--- + +**Difficulty**: Beginner +**Estimated Time:** 10 minutes + +In this scenario you will learn how to troubleshoot Kubernetes applications using the kubectl get, describe, logs and exec commands. + +## Step 1 - Check application configuration + +Let's verify that the application we deployed in the previous scenario is running. We'll use the `kubectl get` command and look for existing Pods: + +```shell +kubectl get pods +``` + +Next, to view what containers are inside that Pod and what images are used to build those containers we run the `describe pods` command: + +```shell +kubectl describe pods +``` + +We see here details about the Pod's container: IP address, the ports used and a list of events related to the lifecycle of the Pod. + +The output of the `describe` command is extensive and covers some concepts that we didn't explain yet, but don't worry, they will become familiar by the end of this bootcamp. + +*Note: the describe command can be used to get detailed information about most of the Kubernetes primitives: node, pods, deployments. The describe output is designed to be human readable, not to be scripted against.* + +## Step 2 - Show the app in the terminal + +Recall that Pods are running in an isolated, private network - so we need to proxy access to them so we can debug and interact with them. To do this, we'll use the `kubectl proxy` command to run a proxy in a second terminal window. Run the command below in a new terminal window to run the proxy: + +```shell +echo -e "Starting Proxy. After starting it will not output a response. Please return to your original terminal window\n"; kubectl proxy +``` + +Now again, we'll get the Pod name and query that pod directly through the proxy. To get the Pod name and store it in the POD_NAME ennvironment variable: + +```shell +export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') +echo Name of the Pod: $POD_NAME +``` + +To see the output of our application, run a `curl` request. + +```shell +curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME +``` + +The url is the route to the API of the Pod. + +## Step 3 - View the container logs + +Anything that the application would normally send to `STDOUT` becomes logs for the container within the Pod. We can retrieve these logs using the `kubectl logs` command: + +```shell +kubectl logs $POD_NAME +``` + +*Note: We don't need to specify the container name, because we only have one container inside the pod. + +## Step 4 - Executing command on the container + +We can execute commands directly on the container once the Pod is up and running. For this, we use the `exec` command and use the name of the Pod as a parameter. Let's list the environment variables: + +```shell +kubectl exec $POD_NAME -- env +``` + +Again, worth mentioning that the name of the container itself can be omitted since we only have a single container in the Pod. + +Next let's start a bash session in the Pod's container: + +```shell +kubectl exec -ti $POD_NAME -- bash +``` + +We have now an open console on the container where we run our NodeJS application. The source code of the app is in the server.js file: + +```shell +cat server.js +``` + +You can check that the application is up by running a curl command: + +```shell +curl localhost:8080 +``` + +*Note: here we used localhost because we executed the command inside the NodeJS Pod. If you cannot connect to localhost:8080, check to make sure you have run the kubectl exec command and are launching the command from within the Pod* + +To close your container connection type `exit`. + +{{% button link="/docs/tutorials/kubernetes_101/module4" %}} diff --git a/site/content/en/docs/tutorials/kubernetes_101/module4.md b/site/content/en/docs/tutorials/kubernetes_101/module4.md new file mode 100644 index 000000000000..412d0d86662c --- /dev/null +++ b/site/content/en/docs/tutorials/kubernetes_101/module4.md @@ -0,0 +1,137 @@ +--- +title: "Module 4 - Expose your app publicly" +weight: 4 +--- + +**Difficulty**: Beginner +**Estimated Time:** 10 minutes + +In this scenario you will learn how to expose Kubernetes applications outside the cluster using the kubectl expose command. You will also learn how to view and apply labels to objects with the kubectl label command. + +## Step 1 - Create a new service + +Let's verify that our application is running. We'll use the `kubectl get` command and look for existing Pods: + +```shell +kubectl get pods +``` + +Next, let's list the current Services from our cluster: + +```shell +kubectl get services +``` + +We have a Service called Kubernetes that is created by default when minikube starts the cluster. To create a new service and expose it to external traffic we'll use the expose command with NodePort as parameter. + +```shell +kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 +``` + +Let's run again the `get services` command: + +```shell +kubectl get services +``` + +**Note for Docker Desktop users:** Due to Docker Desktop networking limitations, by default you're unable to access pods directly from the host. Run `minikube service kubernetes-bootcamp`, this will create a SSH tunnel from the pod to your host and open a window in your default browser that's connected to the service. The tunnel can be terminated by pressing control-C, then continue on to Step 2. + +We have now a running Service called kubernetes-bootcamp. Here we see that the Service received a unique cluster-IP, an internal port and an external-IP (the IP of the Node). + +To find out what port was opened externally (by the NodePort option) we'll run the `describe service` command: + +```shell +kubectl describe services/kubernetes-bootcamp +``` + +Create an environment variable called NODE_PORT that has the value of the Node port assigned: + +```shell +export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') +echo NODE_PORT=$NODE_PORT +``` + +Now we can test that the app is exposed outside of the cluster using `curl`, the IP of the Node and the externally exposed port: + +```shell +curl $(minikube ip):$NODE_PORT +``` + +And we get a response from the server. The Service is exposed. + +## Step 2 - Using labels + +The Deployment created automatically a label for our Pod. With `describe deployment` command you can see the name of the label: + +```shell +kubectl describe deployment +``` + +Let's use this label to query our list of Pods. We'll use the `kubectl get pods` command with `-l` as a parameter, followed by the label values: + +```shell +kubectl get pods -l app=kubernetes-bootcamp +``` + +You can do the same to list the existing services: + +```shell +kubectl get services -l app=kubernetes-bootcamp +``` + +Get the name of the Pod and store it in the POD_NAME environment variable: + +```shell +export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') +echo Name of the Pod: $POD_NAME +``` + +To apply a new label we use the label command followed by the object type, object name and the new label: + +```shell +kubectl label pods $POD_NAME version=v1 +``` + +This will apply a new label to our Pod (we pinned the application version to the Pod), and we can check it with the describe pod command: + +```shell +kubectl describe pods $POD_NAME +``` + +We see here that the label is attached new to our Pod. And we can query now the list of pods using the new label: + +```shell +kubectl get pods -l version=v1 +``` + +And we see the Pod. + +## Step 3 - Deleting a service + +To delete Services you can use the `delete service` command. Labels can be used also here: + +```shell +kubectl delete service -l app=kubernetes-bootcamp +``` + +Confirm that the service is gone: + +```shell +kubectl get services +``` + +This confirms that our Service was removed. To confirm that route is not exposed anymore you can `curl` the previously exposed IP and port: + +```shell +curl $(minikube ip):$NODE_PORT +``` + +This proves that the app is not reachable anymore from outside of the cluster. You can confirm that the app is still running with a curl inside the pod: + +```shell +kubectl exec -ti $POD_NAME -- curl localhost:8080 +``` + +We see here that the application is up. This is because the Deployment is managing the application. To shut down the application, you would need to delete the Deployment as well. + +{{% button link="/docs/tutorials/kubernetes_101/module5" %}} diff --git a/site/content/en/docs/tutorials/kubernetes_101/module5.md b/site/content/en/docs/tutorials/kubernetes_101/module5.md new file mode 100644 index 000000000000..734ca73adfd0 --- /dev/null +++ b/site/content/en/docs/tutorials/kubernetes_101/module5.md @@ -0,0 +1,120 @@ +--- +title: "Module 5 - Scale up your app" +weight: 5 +--- + +**Difficulty**: Beginner +**Estimated Time:** 10 minutes + +The goal of this scenario is to scale a deployment with kubectl scale and to see the load balancing in action + +## Step 1 - Scaling a deployment + +First, let's list the deployments using the `get deployment` command: + +```shell +kubectl get deployments +``` + +The output should be similar to: + +```shell +NAME READY UP-TO_DATE AVAILABLE AGE +kubernetes-bootcamp 1/1 1 1 11m +``` + +We should have 1 Pod. If not, run the command again. This shows: + +- *NAME* lists the names of the Deployments in the cluster. +- *READY* shows the ratio of CURRENT/DESIRED replicas +- *UP-TO-DATE* displays the number of replicas that have been updated to achieve the desired state. +- *AVAILABLE* displays how many replicas of the application are available to your users. +- *AGE* displays the amount of time that the application has been running. + +To see the ReplicaSet created by the Deployment, run: + +```shell +kubectl get rs +``` + +Notice that the name of the ReplicaSet is always formatted as `[DEPLOYMENT-NAME]-[RANDOM-STRING]`. The random string is randomly generated and uses the pod-template-hash as a seed. + +Two important columns of this command are: + +- *DESIRED* displays the desired number of replicas of the application, which you define when you create the Deployment. This is the desired state. +- *CURRENT* displays how many replicas are currently running. + +Next, let's scale the Deployment to 4 replicas. We'll use the `kubectl scale` command, following by the deployment type, name and desired number of instances: + +```shell +kubectl scale deployments/kubernetes-bootcamp --replicas=4 +``` + +To list your Deployments once again, use `get deployments`: + +```shell +kubectl get deployments +``` + +The change was applied, and we have 4 instances of the application available. Next, let's check if the number of Pods changed: + +```shell +kubectl get pods -o wide +``` + +There are 4 Pods now, with different IP addresses. The change was registered in the Deployment events log. The check that, use the describe command: + +```shell +kubectl describe deployments/kubernetes-bootcamp +``` + +You can also view in the output of this command that there are 4 replicas now. + +## Step 2 - Load Balancing + +Let's check that the Service is load-balancing the traffic. To find out the exposed IP and Port we can use the describe service as we learned in the previous Module: + +```shell +kubectl describe services/kubernetes-bootcamp +``` + +**Note for Docker Desktop users:** Due to Docker Desktop networking limitations, by default you're unable to access pods directly from the host. Run `minikube service kubernetes-bootcamp`, this will create a SSH tunnel from the pod to your host and open a window in your default browser that's connected to the service. Refresh the browser page to see the load-balancing working. The tunnel can be terminated by pressing control-C, then continue on to Step 3. + +Create an environment variable called NODE_PORT that has a value as the Node port: + +```shell +export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') +echo NODE_PORT=$NODE_PORT +``` + +Next, we'll do a `curl` to the exposed IP and port. Execute the command multiple times: + +```shell +curl $(minikube ip):$NODE_PORT +``` + +We hit a different Pod with every request. This demonstrates that the load-balancing is working. + +## Step 3 - Scale Down + +To scale down the Service to 2 replicas, run again the `scale` command: + +```shell +kubectl scale deployments/kubernetes-bootcamp --replicas=2 +``` + +List the Deployments to check if the change was applied with the `get deployments` command: + +```shell +kubectl get deployments +``` + +The number of replicas decreased to 2. List the number of Pods, with `get pods`: + +```shell +kubectl get pods -o wide +``` + +This confirms that 2 Pods were terminated. + +{{% button link="/docs/tutorials/kubernetes_101/module6" %}} diff --git a/site/content/en/docs/tutorials/kubernetes_101/module6.md b/site/content/en/docs/tutorials/kubernetes_101/module6.md new file mode 100644 index 000000000000..9abdb68fe824 --- /dev/null +++ b/site/content/en/docs/tutorials/kubernetes_101/module6.md @@ -0,0 +1,133 @@ +--- +title: "Module 6 - Update your app" +weight: 6 +--- + +**Difficulty:** Beginner +**Estimated Time:** 10 minutes + +The goal of this scenario is to update a deployed application with kubectl set image and to rollback with the rollout undo command. + +## Step 1 - Update the version of the app + +To list your deployments, run the `get deployments` command: + +```shell +kubectl get deployments +``` + +To list the running Pods, run the `get pods` command: + +```shell +kubectl get pods +``` + +To view the current image version of the app, run the `describe pods` command and look for the `Image` field: + +```shell +kubectl describe pods +``` + +To update the image of the application to version 2, use the `set image` command, followed by the deployment name and the new image version: + +```shell +kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=registry.k8s.io/minikube/kubernetes-bootcamp:v2 +``` + +The command notified the Deployment to use a different image for your app and initiated a rolling update. Check the status of the new Pods, and view the old one terminating with the `get pods` command: + +```shell +kubectl get pods +``` + +## Step 2 - Verify an update + +First, check that the app is running. To find the exposed IP and Port, run the `describe service` command: + +```shell +kubectl describe services/kubernetes-bootcamp +``` + +**Note for Docker Desktop users:** Due to Docker Desktop networking limitations, by default you're unable to access pods directly from the host. Run `minikube service kubernetes-bootcamp`, this will create a SSH tunnel from the pod to your host and open a window in your default browser that's connected to the service. The tunnel can be terminated by pressing control-C, then continue the tutorial after the `curl $(minikube ip):$NODE_PORT` command. + +Create an environment variable called `NODE_PORT` that has the value of the Node port assigned: + +```shell +export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') +echo NODE_PORT=$NODE_PORT +``` + +Next, do a `curl` to the exposed IP and port: + +```shell +curl $(minikube ip):$NODE_PORT +``` + +Every time you run the `curl` command, you will hit a different Pod. Notice that all Pods are running the latest version (v2). + +You can also confirm the update by running the `rollout status` command: + +```shell +kubectl rollout status deployments/kubernetes-bootcamp +``` + +To view the current image version of the app, run the `describe pods` command: + +```shell +kubectl describe pods +``` + +In the `Image` field of the output, verify that you are running the latest image version (v2). + + +## Step 3 - Rollback an update + +Let's perform another update, and deploy an image tagged with `v10`: + +```shell +kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/k8s-minikube/kubernetes-bootcamp:v11 +``` + +Use `get deployments` to see the status of the deployment: + +```shell +kubectl get deployments +``` + +Notice that the output doesn't list the desired number of available Pods. Run the `get pods` command to list all Pods: + +```shell +kubectl get pods +``` + +Notice that some of the Pods have a status of `ImagePullBackOff`. + +To get more insight into the problem, run the `describe pods` command: + +```shell +kubectl describe pods +``` + +In the `Events` section of the output for the affected Pods, notice that the `v10` image version did not exist in the repository. + +To roll back the deployment to your last working version, use the `rollout undo` command: + +```shell +kubectl rollout undo deployments/kubernetes-bootcamp +``` + +The `rollout undo` command reverts the deployment to the previous known state (v2 of the image). Updates are versioned and you can revert to any previously known state of a deployment. + +Use the `get pods` commands to list the Pods again: + +```shell +kubectl get pods +``` + +Four Pods are running. To check the image deployed on these Pods, use the `describe pods` command: + +```shell +kubectl describe pods +``` + +The deployment is once again using a stable version of the app (v2). The rollback was successful. diff --git a/site/content/en/docs/tutorials/local_path_provisioner.md b/site/content/en/docs/tutorials/local_path_provisioner.md new file mode 100644 index 000000000000..804d8806c1a6 --- /dev/null +++ b/site/content/en/docs/tutorials/local_path_provisioner.md @@ -0,0 +1,103 @@ +--- +title: "Using Local Path Provisioner" +linkTitle: "Using Local Path Provisioner" +weight: 1 +date: 2022-10-05 +description: > + Using Local Path Provisioner +--- + +## Overview + +[Local Path Provisioner](https://github.com/rancher/local-path-provisioner), provides a way for the Kubernetes users to utilize the local storage in each node. It supports multi-node setups. This tutorial will show you how to setup local-path-prvisioner on two node minikube cluster. + +## Prerequisites + +- Minikube version higher than v1.27.0 +- kubectl + +## Tutorial + +- Start a cluster with 2 nodes: + +```shell +$ minikube start -n 2 +``` + +- Enable `storage-provisioner-rancher` addon: + +``` +$ minikube addons enable storage-provisioner-rancher +``` + +- You should be able to see Pod in the `local-path-storage` namespace: + +``` +$ kubectl get pods -n local-path-storage +NAME READY STATUS RESTARTS AGE +local-path-provisioner-7f58b4649-hcbk9 1/1 Running 0 38s +``` + +- The `local-path` StorageClass should be marked as `default`: + +``` +$ kubectl get sc +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 107s +standard k8s.io/minikube-hostpath Delete Immediate false 4m27s +``` + +- The following `yaml` creates PVC and Pod that creates file with content on second node (minikube-m02): + +``` +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: test-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 64Mi +--- +apiVersion: v1 +kind: Pod +metadata: + name: test-local-path +spec: + restartPolicy: OnFailure + nodeSelector: + "kubernetes.io/hostname": "minikube-m02" + containers: + - name: busybox + image: busybox:stable + command: ["sh", "-c", "echo 'local-path-provisioner' > /test/file1"] + volumeMounts: + - name: data + mountPath: /test + volumes: + - name: data + persistentVolumeClaim: + claimName: test-pvc +``` + +``` +$ kubectl get pvc +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE +test-pvc Bound pvc-f07e253b-fea7-433a-b0ac-1bcea3f77076 64Mi RWO local-path 5m19s +``` + +``` +$ kubectl get pods -o wide +NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES +test-local-path 0/1 Completed 0 5m19s 10.244.1.5 minikube-m02 +``` + +- On the second node we are able to see created file with content `local-path-provisioner`: + +``` +$ minikube ssh -n minikube-m02 "cat /opt/local-path-provisioner/pvc-f07e253b-fea7-433a-b0ac-1bcea3f77076_default_test-pvc/file1" +local-path-provisioner +``` diff --git a/site/content/en/docs/tutorials/multi_control_plane_ha_clusters.md b/site/content/en/docs/tutorials/multi_control_plane_ha_clusters.md new file mode 100644 index 000000000000..85046465c2c7 --- /dev/null +++ b/site/content/en/docs/tutorials/multi_control_plane_ha_clusters.md @@ -0,0 +1,444 @@ +--- +title: "Using Multi-Control Plane - HA Clusters" +linkTitle: "Using Multi-Control Plane - HA Clusters" +weight: 1 +date: 2024-03-10 +--- + +## Overview + +minikube implements Kubernetes highly available cluster topology using [stacked control plane nodes with colocated etcd nodes](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/#stacked-etcd-topology) using [kube-vip](https://kube-vip.io/) in [ARP](https://kube-vip.io/#arp) mode. + +This tutorial will show you how to start and explore a multi-control plane - HA cluster on minikube. + +## Prerequisites + +- minikube > v1.32.0 +- kubectl + +### Optional + +- ip_vs kernel modules: ip_vs, ip_vs_rr and nf_conntrack + +rationale: + +kube-vip supports the [control-plane load-balancing](https://kube-vip.io/docs/about/architecture/?query=load-balanc#control-plane-load-balancing) by distributing API requests across control-plane nodes using IPVS (IP Virtual Server) and Layer 4 (TCP-based) round-robin. + +minikube will try to automatically enable control-plane load-balancing if these ip_vs kernel modules are available, whereas (see the [drivers]({{}}) section for more details): + +- for VM-based drivers (eg, kvm2 or qemu): minikube will automatically try to load ip_vs kernel modules +- for container-based or bare-metal-based drivers (eg, docker or "none"): minikube will only check if ip_vs kernel modules are already loaded, but will not try to load them automatically (to avoid unintentional modification of the underlying host's os/kernel), so it's up to the user to make them available, if applicable and desired + +## Caveat + +While a minikube HA cluster will continue to operate (although in degraded mode) after losing any one control-plane node, keep in mind that there might be some components that are attached only to the primary control-plane node, like the storage-provisioner. + +## Tutorial + +- optional: if you plan on using a container-based or bare-metal-based driver on top of a Linux OS, check if the ip_vs kernel modules are already loaded + +```shell +lsmod | grep ip_vs +``` +``` +ip_vs_rr 12288 1 +ip_vs 233472 3 ip_vs_rr +nf_conntrack 217088 9 xt_conntrack,nf_nat,nf_conntrack_tftp,nft_ct,xt_nat,nf_nat_tftp,nf_conntrack_netlink,xt_MASQUERADE,ip_vs +nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs +libcrc32c 12288 5 nf_conntrack,nf_nat,btrfs,nf_tables,ip_vs +``` + +- Start a HA cluster with the driver and container runtime of your choice (here we chose docker driver and containerd container runtime): + +```shell +minikube start --ha --driver=docker --container-runtime=containerd --profile ha-demo +``` +``` +😄 [ha-demo] minikube v1.32.0 on Opensuse-Tumbleweed 20240311 +✨ Using the docker driver based on user configuration +📌 Using Docker driver with root privileges +👍 Starting "ha-demo" primary control-plane node in "ha-demo" cluster +🚜 Pulling base image v0.0.42-1710284843-18375 ... +🔥 Creating docker container (CPUs=2, Memory=5266MB) ... +📦 Preparing Kubernetes v1.28.4 on containerd 1.6.28 ... + ▪ Generating certificates and keys ... + ▪ Booting up control plane ... + ▪ Configuring RBAC rules ... +🔗 Configuring CNI (Container Networking Interface) ... + ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5 +🌟 Enabled addons: storage-provisioner, default-storageclass + +👍 Starting "ha-demo-m02" control-plane node in "ha-demo" cluster +🚜 Pulling base image v0.0.42-1710284843-18375 ... +🔥 Creating docker container (CPUs=2, Memory=5266MB) ... +🌐 Found network options: + ▪ NO_PROXY=192.168.49.2 +📦 Preparing Kubernetes v1.28.4 on containerd 1.6.28 ... + ▪ env NO_PROXY=192.168.49.2 +🔎 Verifying Kubernetes components... + +👍 Starting "ha-demo-m03" control-plane node in "ha-demo" cluster +🚜 Pulling base image v0.0.42-1710284843-18375 ... +🔥 Creating docker container (CPUs=2, Memory=5266MB) ... +🌐 Found network options: + ▪ NO_PROXY=192.168.49.2,192.168.49.3 +📦 Preparing Kubernetes v1.28.4 on containerd 1.6.28 ... + ▪ env NO_PROXY=192.168.49.2 + ▪ env NO_PROXY=192.168.49.2,192.168.49.3 +🔎 Verifying Kubernetes components... +🏄 Done! kubectl is now configured to use "ha-demo" cluster and "default" namespace by default +``` + +- List your HA cluster nodes: + +```shell +kubectl get nodes -owide +``` +``` +NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME +ha-demo Ready control-plane 4m21s v1.28.4 192.168.49.2 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +ha-demo-m02 Ready control-plane 4m v1.28.4 192.168.49.3 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +ha-demo-m03 Ready control-plane 3m37s v1.28.4 192.168.49.4 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +``` + +- Check the status of your HA cluster: + +```shell +minikube profile list +``` +``` +|---------|-----------|------------|----------------|------|---------|--------|-------|--------| +| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active | +|---------|-----------|------------|----------------|------|---------|--------|-------|--------| +| ha-demo | docker | containerd | 192.168.49.254 | 8443 | v1.28.4 | HAppy | 3 | | +|---------|-----------|------------|----------------|------|---------|--------|-------|--------| +``` + +- Check the status of your HA cluster nodes: + +```shell +minikube status -p ha-demo +``` +``` +ha-demo +type: Control Plane +host: Running +kubelet: Running +apiserver: Running +kubeconfig: Configured + +ha-demo-m02 +type: Control Plane +host: Running +kubelet: Running +apiserver: Running +kubeconfig: Configured + +ha-demo-m03 +type: Control Plane +host: Running +kubelet: Running +apiserver: Running +kubeconfig: Configured +``` + +- For a HA cluster, kubeconfig points to the Virual Kubernetes API Server IP + +```shell +kubectl config view --context ha-demo +``` +``` +apiVersion: v1 +clusters: +- cluster: + certificate-authority: /home/prezha/.minikube/ca.crt + extensions: + - extension: + last-update: Thu, 14 Mar 2024 21:38:07 GMT + provider: minikube.sigs.k8s.io + version: v1.32.0 + name: cluster_info + server: https://192.168.49.254:8443 + name: ha-demo +contexts: +- context: + cluster: ha-demo + extensions: + - extension: + last-update: Thu, 14 Mar 2024 21:38:07 GMT + provider: minikube.sigs.k8s.io + version: v1.32.0 + name: context_info + namespace: default + user: ha-demo + name: ha-demo +current-context: ha-demo +kind: Config +preferences: {} +users: +- name: ha-demo + user: + client-certificate: /home/prezha/.minikube/profiles/ha-demo/client.crt + client-key: /home/prezha/.minikube/profiles/ha-demo/client.key +``` + +- Overview of the current leader and follower API servers + +```shell +minikube ssh -p ha-demo -- 'find /var/lib/minikube/binaries -iname kubectl -exec sudo {} --kubeconfig=/var/lib/minikube/kubeconfig logs -n kube-system pod/kube-vip-ha-demo \; -quit' +``` +``` +time="2024-03-14T21:38:34Z" level=info msg="Starting kube-vip.io [v0.7.1]" +time="2024-03-14T21:38:34Z" level=info msg="namespace [kube-system], Mode: [ARP], Features(s): Control Plane:[true], Services:[false]" +time="2024-03-14T21:38:34Z" level=info msg="prometheus HTTP server started" +time="2024-03-14T21:38:34Z" level=info msg="Starting Kube-vip Manager with the ARP engine" +time="2024-03-14T21:38:34Z" level=info msg="Beginning cluster membership, namespace [kube-system], lock name [plndr-cp-lock], id [ha-demo]" +I0314 21:38:34.042420 1 leaderelection.go:250] attempting to acquire leader lease kube-system/plndr-cp-lock... +I0314 21:38:34.069509 1 leaderelection.go:260] successfully acquired lease kube-system/plndr-cp-lock +time="2024-03-14T21:38:34Z" level=info msg="Node [ha-demo] is assuming leadership of the cluster" +time="2024-03-14T21:38:34Z" level=info msg="Starting IPVS LoadBalancer" +time="2024-03-14T21:38:34Z" level=info msg="IPVS Loadbalancer enabled for 1.2.1" +time="2024-03-14T21:38:34Z" level=info msg="Gratuitous Arp broadcast will repeat every 3 seconds for [192.168.49.254]" +time="2024-03-14T21:38:34Z" level=info msg="Kube-Vip is watching nodes for control-plane labels" +time="2024-03-14T21:38:34Z" level=info msg="Added backend for [192.168.49.254:8443] on [192.168.49.3:8443]" +time="2024-03-14T21:38:48Z" level=info msg="Added backend for [192.168.49.254:8443] on [192.168.49.4:8443]" +``` + +```shell +minikube ssh -p ha-demo -- 'find /var/lib/minikube/binaries -iname kubectl -exec sudo {} --kubeconfig=/var/lib/minikube/kubeconfig logs -n kube-system pod/kube-vip-ha-demo-m02 \; -quit' +``` +``` +time="2024-03-14T21:38:25Z" level=info msg="Starting kube-vip.io [v0.7.1]" +time="2024-03-14T21:38:25Z" level=info msg="namespace [kube-system], Mode: [ARP], Features(s): Control Plane:[true], Services:[false]" +time="2024-03-14T21:38:25Z" level=info msg="prometheus HTTP server started" +time="2024-03-14T21:38:25Z" level=info msg="Starting Kube-vip Manager with the ARP engine" +time="2024-03-14T21:38:25Z" level=info msg="Beginning cluster membership, namespace [kube-system], lock name [plndr-cp-lock], id [ha-demo-m02]" +I0314 21:38:25.990817 1 leaderelection.go:250] attempting to acquire leader lease kube-system/plndr-cp-lock... +time="2024-03-14T21:38:34Z" level=info msg="Node [ha-demo] is assuming leadership of the cluster" +``` + +```shell +minikube ssh -p ha-demo -- 'find /var/lib/minikube/binaries -iname kubectl -exec sudo {} --kubeconfig=/var/lib/minikube/kubeconfig logs -n kube-system pod/kube-vip-ha-demo-m03 \; -quit' +``` +``` +time="2024-03-14T21:38:48Z" level=info msg="Starting kube-vip.io [v0.7.1]" +time="2024-03-14T21:38:48Z" level=info msg="namespace [kube-system], Mode: [ARP], Features(s): Control Plane:[true], Services:[false]" +time="2024-03-14T21:38:48Z" level=info msg="prometheus HTTP server started" +time="2024-03-14T21:38:48Z" level=info msg="Starting Kube-vip Manager with the ARP engine" +time="2024-03-14T21:38:48Z" level=info msg="Beginning cluster membership, namespace [kube-system], lock name [plndr-cp-lock], id [ha-demo-m03]" +I0314 21:38:48.856781 1 leaderelection.go:250] attempting to acquire leader lease kube-system/plndr-cp-lock... +time="2024-03-14T21:38:48Z" level=info msg="Node [ha-demo] is assuming leadership of the cluster" +``` + +- Overview of multi-etcd instances + +```shell +minikube ssh -p ha-demo -- 'find /var/lib/minikube/binaries -iname kubectl -exec sudo {} --kubeconfig=/var/lib/minikube/kubeconfig exec -ti pod/etcd-ha-demo -n kube-system -- /bin/sh -c "ETCDCTL_API=3 etcdctl member list --write-out=table --cacert=/var/lib/minikube/certs/etcd/ca.crt --cert=/var/lib/minikube/certs/etcd/server.crt --key=/var/lib/minikube/certs/etcd/server.key" \; -quit' +``` +``` ++------------------+---------+-------------+---------------------------+---------------------------+------------+ +| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER | ++------------------+---------+-------------+---------------------------+---------------------------+------------+ +| 3c464e4a52eb93c5 | started | ha-demo-m03 | https://192.168.49.4:2380 | https://192.168.49.4:2379 | false | +| 59bde6852118b2a5 | started | ha-demo-m02 | https://192.168.49.3:2380 | https://192.168.49.3:2379 | false | +| aec36adc501070cc | started | ha-demo | https://192.168.49.2:2380 | https://192.168.49.2:2379 | false | ++------------------+---------+-------------+---------------------------+---------------------------+------------+ +``` + +- Losing a control-plane node - degrades cluster, but not a problem! + +```shell +minikube node delete m02 -p ha-demo +``` +``` +🔥 Deleting node m02 from cluster ha-demo +✋ Stopping node "ha-demo-m02" ... +🛑 Powering off "ha-demo-m02" via SSH ... +🔥 Deleting "ha-demo-m02" in docker ... +💀 Node m02 was successfully deleted. +``` +```shell +kubectl get nodes -owide +``` +``` +NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME +ha-demo Ready control-plane 7m16s v1.28.4 192.168.49.2 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +ha-demo-m03 Ready control-plane 6m32s v1.28.4 192.168.49.4 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +``` +```shell +minikube profile list +``` +``` +|---------|-----------|------------|----------------|------|---------|----------|-------|--------| +| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active | +|---------|-----------|------------|----------------|------|---------|----------|-------|--------| +| ha-demo | docker | containerd | 192.168.49.254 | 8443 | v1.28.4 | Degraded | 2 | | +|---------|-----------|------------|----------------|------|---------|----------|-------|--------| +``` + +- Add a control-plane node + +```shell +minikube node add --control-plane -p ha-demo +``` +``` +😄 Adding node m04 to cluster ha-demo as [worker control-plane] +👍 Starting "ha-demo-m04" control-plane node in "ha-demo" cluster +🚜 Pulling base image v0.0.42-1710284843-18375 ... +🔥 Creating docker container (CPUs=2, Memory=5266MB) ... +📦 Preparing Kubernetes v1.28.4 on containerd 1.6.28 ... +🔎 Verifying Kubernetes components... +🏄 Successfully added m04 to ha-demo! +``` +```shell +kubectl get nodes -owide +``` +``` +NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME +ha-demo Ready control-plane 8m34s v1.28.4 192.168.49.2 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +ha-demo-m03 Ready control-plane 7m50s v1.28.4 192.168.49.4 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +ha-demo-m04 Ready control-plane 36s v1.28.4 192.168.49.5 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +``` +```shell +minikube profile list +``` +``` +|---------|-----------|------------|----------------|------|---------|--------|-------|--------| +| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active | +|---------|-----------|------------|----------------|------|---------|--------|-------|--------| +| ha-demo | docker | containerd | 192.168.49.254 | 8443 | v1.28.4 | HAppy | 3 | | +|---------|-----------|------------|----------------|------|---------|--------|-------|--------| +``` + +- Add a worker node + +```shell +minikube node add -p ha-demo +``` +``` +😄 Adding node m05 to cluster ha-demo as [worker] +👍 Starting "ha-demo-m05" worker node in "ha-demo" cluster +🚜 Pulling base image v0.0.42-1710284843-18375 ... +🔥 Creating docker container (CPUs=2, Memory=5266MB) ... +📦 Preparing Kubernetes v1.28.4 on containerd 1.6.28 ... +🔎 Verifying Kubernetes components... +🏄 Successfully added m05 to ha-demo! +``` + +```shell +kubectl get nodes -owide +``` +``` +NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME +ha-demo Ready control-plane 9m35s v1.28.4 192.168.49.2 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +ha-demo-m03 Ready control-plane 8m51s v1.28.4 192.168.49.4 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +ha-demo-m04 Ready control-plane 97s v1.28.4 192.168.49.5 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +ha-demo-m05 Ready 22s v1.28.4 192.168.49.6 Ubuntu 22.04.4 LTS 6.7.7-1-default containerd://1.6.28 +``` + +- Test by deploying a hello service, which just spits back the IP address the request was served from: + +```shell +kubectl apply -f - < +hello-7bf57d9696-7gtlk 1/1 Running 0 18s 10.244.2.2 ha-demo-m03 +hello-7bf57d9696-99qsw 1/1 Running 0 18s 10.244.0.4 ha-demo +``` + +- Look at our service, to know what URL to hit + +```shell +minikube service list -p ha-demo +``` +``` +|-------------|------------|--------------|---------------------------| +| NAMESPACE | NAME | TARGET PORT | URL | +|-------------|------------|--------------|---------------------------| +| default | hello | 80 | http://192.168.49.2:31000 | +| default | kubernetes | No node port | | +| kube-system | kube-dns | No node port | | +|-------------|------------|--------------|---------------------------| +``` + +- Let's hit the URL a few times and see what comes back + +```shell +curl http://192.168.49.2:31000 +``` +``` +Hello from hello-7bf57d9696-99qsw (10.244.0.4) + +curl http://192.168.49.2:31000 +Hello from hello-7bf57d9696-7gtlk (10.244.2.2) + +curl http://192.168.49.2:31000 +Hello from hello-7bf57d9696-7gtlk (10.244.2.2) + +curl http://192.168.49.2:31000 +Hello from hello-7bf57d9696-64v6m (10.244.3.2) +``` diff --git a/site/content/en/docs/tutorials/multi_node.md b/site/content/en/docs/tutorials/multi_node.md index 51eab5b21690..2aefde937b05 100644 --- a/site/content/en/docs/tutorials/multi_node.md +++ b/site/content/en/docs/tutorials/multi_node.md @@ -14,6 +14,10 @@ date: 2019-11-24 - minikube 1.10.1 or higher - kubectl +## Caveat + +Default [host-path volume provisioner]({{< ref "/docs/handbook/persistent_volumes" >}}) doesn't support multi-node clusters ([#12360](https://github.com/kubernetes/minikube/issues/12360)). To be able to provision or claim volumes in multi-node clusters, you could use [CSI Hostpath Driver]({{< ref "/docs/tutorials/volume_snapshots_and_csi" >}}) addon. + ## Tutorial - Start a cluster with 2 nodes in the driver of your choice: @@ -22,7 +26,7 @@ date: 2019-11-24 minikube start --nodes 2 -p multinode-demo ``` ``` -😄 [multinode-demo] minikube v1.18.1 on Opensuse-Tumbleweed +😄 [multinode-demo] minikube v1.18.1 on Opensuse-Tumbleweed ✨ Automatically selected the docker driver 👍 Starting control plane node multinode-demo in cluster multinode-demo 🔥 Creating docker container (CPUs=2, Memory=8000MB) ... @@ -151,12 +155,55 @@ Hello from hello-695c67cf9c-frcvw (10.244.0.3) {{% tab hello-deployment.yaml %}} ``` -{{% readfile file="/docs/tutorials/includes/hello-deployment.yaml" %}} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hello +spec: + replicas: 2 + strategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 100% + selector: + matchLabels: + app: hello + template: + metadata: + labels: + app: hello + spec: + affinity: + # ⬇⬇⬇ This ensures pods will land on separate hosts + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: [{ key: app, operator: In, values: [hello] }] + topologyKey: "kubernetes.io/hostname" + containers: + - name: hello-from + image: pbitty/hello-from:latest + ports: + - name: http + containerPort: 80 + terminationGracePeriodSeconds: 1 ``` {{% /tab %}} {{% tab hello-svc.yaml %}} ``` -{{% readfile file="/docs/tutorials/includes/hello-svc.yaml" %}} +apiVersion: v1 +kind: Service +metadata: + name: hello +spec: + type: NodePort + selector: + app: hello + ports: + - protocol: TCP + nodePort: 31000 + port: 80 + targetPort: http ``` {{% /tab %}} {{% /tabs %}} diff --git a/site/content/en/docs/tutorials/nginx_tcp_udp_ingress.md b/site/content/en/docs/tutorials/nginx_tcp_udp_ingress.md index 7c9fd083ceba..640ac08e65f3 100644 --- a/site/content/en/docs/tutorials/nginx_tcp_udp_ingress.md +++ b/site/content/en/docs/tutorials/nginx_tcp_udp_ingress.md @@ -202,6 +202,16 @@ Connected to 192.168.99.179. Escape character is '^]' ``` +You can chat with the redis service: + +```text +SET minikube:1 "it works!" ++OK +GET minikube:1 +$9 +it works! +``` + To exit telnet enter the `Ctrl` key and `]` at the same time. Then type `quit` and press enter. If you were not able to connect please review your steps above. @@ -228,5 +238,5 @@ for the latest info on these potential changes. ## Related articles -- [Routing traffic multiple services on ports 80 and 443 in minikube with the Kubernetes Ingress resource](https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/) +- [Set up Ingress on Minikube with the NGINX Ingress Controller](https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/) - [Use port forwarding to access applications in a cluster](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) diff --git a/site/content/en/docs/tutorials/nvidia_gpu.md b/site/content/en/docs/tutorials/nvidia.md similarity index 62% rename from site/content/en/docs/tutorials/nvidia_gpu.md rename to site/content/en/docs/tutorials/nvidia.md index ca5ee78620aa..b2971b1d5671 100644 --- a/site/content/en/docs/tutorials/nvidia_gpu.md +++ b/site/content/en/docs/tutorials/nvidia.md @@ -1,26 +1,90 @@ --- -title: "NVIDIA GPU Support" -linkTitle: "NVIDIA GPU Support" +title: "Using NVIDIA GPUs with minikube" +linkTitle: "Using NVIDIA GPUs with minikube" weight: 1 date: 2018-01-02 -description: > - Using NVIDIA GPU support within minikube --- ## Prerequisites - Linux -- kvm2 driver - Latest NVIDIA GPU drivers +- minikube v1.32.0-beta.0 or later (docker driver only) -## Using the KVM2 driver +## Instructions per driver -When using NVIDIA GPUs with the kvm2 driver, we passthrough spare GPUs on the -host to the minikube VM. Doing so has a few prerequisites: +{{% tabs %}} +{{% tab docker %}} +## Using the docker driver + +- Ensure you have an NVIDIA driver installed, you can check if one is installed by running `nvidia-smi`, if one is not installed follow the [NVIDIA Driver Installation Guide](https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html) + +- Check if `bpf_jit_harden` is set to `0` + ```shell + sudo sysctl net.core.bpf_jit_harden + ``` + + - If it's not `0` run: + ```shell + echo "net.core.bpf_jit_harden=0" | sudo tee -a /etc/sysctl.conf + sudo sysctl -p + ``` + +- Install NVIDIA support using one of: + - Install the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) on your host machine + - Enable [NVIDIA CDI resources](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/cdi-support.html) on your host machine. + +- Configure Docker: + ```shell + sudo nvidia-ctk runtime configure --runtime=docker && sudo systemctl restart docker + ``` + +- Delete existing minikube (optional) + + If you have an existing minikube instance, you may need to delete it if it was built before installing the nvidia runtime shim. + ```shell + minikube delete + ``` + This will make sure minikube does any required setup or addon installs now that the nvidia runtime is available. + +- Start minikube with one of: + - The NVIDIA Container Toolkit + ```shell + minikube start --driver docker --container-runtime docker --gpus all + ``` + - NVIDIA CDI resources + ```shell + minikube start --driver docker --container-runtime docker --gpus nvidia.com + ``` + +{{% /tab %}} +{{% tab none %}} +## Using the 'none' driver + +NOTE: This approach used to expose GPUs here is different than the approach used +to expose GPUs with `--driver=kvm`. Please don't mix these instructions. + +- Install minikube. + +- Install the nvidia driver, nvidia-docker and configure docker with nvidia as + the default runtime. See instructions at + + +- Start minikube: + ```shell + minikube start --driver=none --apiserver-ips 127.0.0.1 --apiserver-name localhost + ``` + +- Install NVIDIA's device plugin: + ```shell + minikube addons enable nvidia-device-plugin + ``` +{{% /tab %}} +{{% tab kvm %}} +## Using the kvm driver -- You must install the [kvm2 driver]({{< ref "/docs/drivers/kvm2" >}}) If you already had - this installed make sure that you fetch the latest - `docker-machine-driver-kvm2` binary that has GPU support. +When using NVIDIA GPUs with the kvm driver, we passthrough spare GPUs on the +host to the minikube VM. Doing so has a few prerequisites: - Your CPU must support IOMMU. Different vendors have different names for this technology. Intel calls it Intel VT-d. AMD calls it AMD-Vi. Your motherboard @@ -42,9 +106,9 @@ host to the minikube VM. Doing so has a few prerequisites: group of these GPUs. - Once you reboot the system after doing the above, you should be ready to use - GPUs with kvm2. Run the following command to start minikube: + GPUs with kvm. Run the following command to start minikube: ```shell - minikube start --driver kvm2 --kvm-gpu + minikube start --driver kvm --kvm-gpu ``` This command will check if all the above conditions are satisfied and @@ -52,9 +116,10 @@ host to the minikube VM. Doing so has a few prerequisites: If this succeeded, run the following commands: ```shell - minikube addons enable nvidia-gpu-device-plugin + minikube addons enable nvidia-device-plugin minikube addons enable nvidia-driver-installer ``` + NOTE: `nvidia-gpu-device-plugin` addon has been deprecated and it's functionality is merged inside of `nvidia-device-plugin` addon. This will install the NVIDIA driver (that works for GeForce/Quadro cards) on the VM. @@ -70,31 +135,12 @@ host to the minikube VM. Doing so has a few prerequisites: See the excellent documentation at -### Why are so many manual steps required to use GPUs with kvm2 on minikube? +### Why are so many manual steps required to use GPUs with kvm on minikube? These steps require elevated privileges which minikube doesn't run with and they are disruptive to the host, so we decided to not do them automatically. - -## Using the 'none' driver - -NOTE: This approach used to expose GPUs here is different than the approach used -to expose GPUs with `--driver=kvm2`. Please don't mix these instructions. - -- Install minikube. - -- Install the nvidia driver, nvidia-docker and configure docker with nvidia as - the default runtime. See instructions at - - -- Start minikube: - ```shell - minikube start --driver=none --apiserver-ips 127.0.0.1 --apiserver-name localhost - ``` - -- Install NVIDIA's device plugin: - ```shell - kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/master/nvidia-device-plugin.yml - ``` +{{% /tab %}} +{{% /tabs %}} ## Why does minikube not support NVIDIA GPUs on macOS? diff --git a/site/content/en/docs/tutorials/setup_minikube_gui.md b/site/content/en/docs/tutorials/setup_minikube_gui.md new file mode 100644 index 000000000000..589c22f266c1 --- /dev/null +++ b/site/content/en/docs/tutorials/setup_minikube_gui.md @@ -0,0 +1,49 @@ +--- +title: "Setting Up minikube GUI" +linkTitle: "Setting Up minikube GUI" +weight: 1 +date: 2022-02-25 +--- + +## Overview + +- This guide will show you how to setup the minikube GUI +- **WARNING!** This GUI is a prototype and therefore may be unstable or contain bugs. Please use at your own risk, we are not responsible for damages. +- If you experience any bugs or have suggestions to improve the GUI feel free to create a [GitHub Issue](https://github.com/kubernetes-sigs/minikube-gui/issues/new). +- Please note that the SSH functionality currently only works on Linux. + +## Before You Begin + +- minikube setup and available on your path, follow the [Getting Start doc]({{< ref "/docs/start" >}}) if not already done + +## Steps + +{{% tabs %}} +{{% mactab %}} +1. [Download minikube-gui](https://github.com/kubernetes-sigs/minikube-gui/releases/latest/download/minikube-gui-macos.dmg) + +2. Open the dmg and copy minikube-gui to your Applications folder + +3. Run this command to allow running the unsigned application: +```shell +xattr -d com.apple.quarantine /Applications/minikube-gui.app +``` + +4. Run the application +{{% /mactab %}} +{{% windowstab %}} +1. [Download minikube-gui](https://github.com/kubernetes-sigs/minikube-gui/releases/latest/download/minikube-gui-windows.zip) + +2. Unzip and run minikube-gui.exe + +3. If you see the following, click `More info` and then `Run anyway` + +![Windows unrecognized app](/images/gui/windows.png) +{{% /windowstab %}} +{{% linuxtab %}} +1. [Download minikube-gui](https://github.com/kubernetes-sigs/minikube-gui/releases/latest/download/minikube-gui-linux.tar.gz) + +2. Untar and run minikube-gui +{{% /linuxtab %}} +{{% /tabs %}} + diff --git a/site/content/en/docs/tutorials/setup_minikube_in_github_actions.md b/site/content/en/docs/tutorials/setup_minikube_in_github_actions.md index 100c2e38edc7..9c4962667311 100644 --- a/site/content/en/docs/tutorials/setup_minikube_in_github_actions.md +++ b/site/content/en/docs/tutorials/setup_minikube_in_github_actions.md @@ -1,22 +1,22 @@ --- -title: "Setup minikube as CI step in github actions" -linkTitle: "Minikube in Github Actions" +title: "Setup minikube as CI step in GitHub Actions" +linkTitle: "Minikube in GitHub Actions" weight: 1 date: 2020-06-02 description: > - How to use minikube in github actions for testing your app + How to use minikube in GitHub Actions for testing your app --- -To install and start a minikube cluster, add the following step to your [github action workflow](https://help.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow). +To install and start a minikube cluster, add the following step to your [GitHub Actions workflow](https://docs.github.com/en/actions/writing-workflows/quickstart). - ```yaml - steps: - - name: start minikube - id: minikube - uses: medyagh/setup-minikube@master - ``` +```yaml +steps: +- name: start minikube + id: minikube + uses: medyagh/setup-minikube@latest +``` -for more information see github actions marketplace [setup-minikube]( https://github.com/marketplace/actions/setup-minikube). +for more information see GitHub Actions marketplace [setup-minikube](https://github.com/marketplace/actions/setup-minikube). ## Example: build image & deploy to minikube on each PR @@ -38,27 +38,26 @@ Create workflow: runs-on: ubuntu-latest name: build example and deploy to minikube steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + with: + repository: medyagh/local-dev-example-with-minikube - name: Start minikube - uses: medyagh/setup-minikube@master - - name: Try the cluster ! + uses: medyagh/setup-minikube@latest + - name: Try the cluster! run: kubectl get pods -A - name: Build image run: | - export SHELL=/bin/bash - eval $(minikube -p minikube docker-env) - docker build -f ./Dockerfile -t local/example . - echo -n "verifying images:" - docker images + minikube image build -t local/devex:v1 . - name: Deploy to minikube run: - kubectl apply -f deploy-to-minikube.yaml + kubectl apply -f deploy/k8s.yaml + kubectl wait --for=condition=ready pod -l app=local-devex - name: Test service URLs run: | minikube service list - minikube service example --url + minikube service local-devex-svc --url echo "------------------opening the service------------------" - curl $(minikube service example --url) + curl $(minikube service local-devex-svc --url) ``` The above example workflow yaml, will do the following steps on each coming PR: diff --git a/site/content/en/docs/tutorials/static_ip.md b/site/content/en/docs/tutorials/static_ip.md new file mode 100644 index 000000000000..6c416f946010 --- /dev/null +++ b/site/content/en/docs/tutorials/static_ip.md @@ -0,0 +1,51 @@ +--- +title: "Setting a Static IP for a Cluster" +linkTitle: "Setting a Static IP for a Cluster" +weight: 1 +date: 2023-01-04 +--- + +## Overview + +This tutorial will show you how to create a minikube cluster with a static IP. + +## Prerequisites + +- minikube v1.29.0 or higher +- Docker or Podman driver + +## Selecting a static IP + +The static IP must be IPv4, private, and the last octet must be between 2-254 (X.X.X.2 - X.X.X.254). + +Valid static IPs:
+10.0.0.2 - 10.255.255.254
+172.16.0.2 - 172.31.255.254
+192.168.0.2 - 192.168.255.254 + +## Tutorial + +Use the `--static-ip` flag on `minikube start` to set the static IP. + +**Note:** You cannot add a static IP to an existing cluster, you have to delete and recreate the cluster with the flag. + +``` +$ minikube start --driver docker --static-ip 192.168.200.200 +😄 minikube v1.28.0 on Darwin 13.1 (arm64) +✨ Using the docker driver based on user configuration +📌 Using Docker Desktop driver with root privileges +👍 Starting control plane node minikube in cluster minikube +🚜 Pulling base image ... +🔥 Creating docker container (CPUs=2, Memory=4000MB) ... +🐳 Preparing Kubernetes v1.25.3 on Docker 20.10.21 ... + ▪ Generating certificates and keys ... + ▪ Booting up control plane ... + ▪ Configuring RBAC rules ... +🔎 Verifying Kubernetes components... + ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5 +🌟 Enabled addons: default-storageclass +🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default + +$ minikube ip +192.168.200.200 +``` diff --git a/site/content/en/docs/tutorials/telemetry.md b/site/content/en/docs/tutorials/telemetry.md index b3dc9ab3a3a3..61f64a64340a 100644 --- a/site/content/en/docs/tutorials/telemetry.md +++ b/site/content/en/docs/tutorials/telemetry.md @@ -7,11 +7,11 @@ date: 2020-11-24 ## Overview -minikube provides telemetry suppport via [OpenTelemetry tracing](https://opentelemetry.io/about/) to collect trace data for `minikube start`. +minikube provides telemetry support via [OpenTelemetry tracing](https://opentelemetry.io/about/) to collect trace data for `minikube start`. Currently, minikube supports the following exporters for tracing data: -- [Stackdriver](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/master/exporter/stackdriverexporter) +- [Stackdriver](https://github.com/GoogleCloudPlatform/k8s-stackdriver) To collect trace data with minikube and the Stackdriver exporter, run: diff --git a/site/content/en/docs/tutorials/token-auth-file.md b/site/content/en/docs/tutorials/token-auth-file.md index e1d105093e18..4b3cf7485ef6 100644 --- a/site/content/en/docs/tutorials/token-auth-file.md +++ b/site/content/en/docs/tutorials/token-auth-file.md @@ -9,7 +9,7 @@ description: > ## Overview -A [static token file](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#static-token-file) can be used to ensure only authenticated users access the API server. As minikube nodes are run in VMs/containers, this adds a complication to ensuring this token file is accessable to the node. This tutorial explains how to configure a static token file. +A [static token file](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#static-token-file) can be used to ensure only authenticated users access the API server. As minikube nodes are run in VMs/containers, this adds a complication to ensuring this token file is accessible to the node. This tutorial explains how to configure a static token file. ## Tutorial diff --git a/site/content/en/docs/tutorials/user_flag.md b/site/content/en/docs/tutorials/user_flag.md index 55e8ee475280..c0bf2846e5d2 100644 --- a/site/content/en/docs/tutorials/user_flag.md +++ b/site/content/en/docs/tutorials/user_flag.md @@ -46,7 +46,7 @@ Here you can see that passing `--user=mary` overwrote the OS user with `mary` as ## How do I use minikube in a script? -If you are using minikube in a script or plugin it is recommeneded to add `--user=your_script_name` to all operations. +If you are using minikube in a script or plugin it is recommended to add `--user=your_script_name` to all operations. Example: ``` diff --git a/site/content/en/docs/tutorials/volume_snapshots_and_csi.md b/site/content/en/docs/tutorials/volume_snapshots_and_csi.md index 33024b2dcddf..11bbd78d739a 100644 --- a/site/content/en/docs/tutorials/volume_snapshots_and_csi.md +++ b/site/content/en/docs/tutorials/volume_snapshots_and_csi.md @@ -14,7 +14,7 @@ This tutorial explains how to set up the CSI Hostpath Driver in minikube and cre ## Prerequisites - latest version of minikube -- kubernetes v1.20 or later +- kubernetes v1.28 or later ## What you’ll need @@ -46,6 +46,10 @@ Once both addons are enabled, you can create persistent volumes and snapshots us volume snapshots, you can find some example yaml files along with a step-by-step [here](https://kubernetes-csi.github.io/docs/snapshot-restore-feature.html)). The driver stores all persistent volumes in the `/var/lib/csi-hostpath-data/` directory of minikube's host. +## Multi-Node Clusters + +`csi-hostpath-driver` addon supports [Multi-Node Clusters]({{< ref "/docs/tutorials/multi_node" >}}) volume provisioning. It deploys `DaemonSet` that runs `hostpath` on each node to provision and claim volumes (See [#12360](https://github.com/kubernetes/minikube/issues/12360) for more details). + ## Tutorial In this tutorial, you use `volumesnapshots` addon(1) and `csi-hostpath-driver` addon(2a). @@ -65,6 +69,13 @@ minikube addons enable volumesnapshots minikube addons enable csi-hostpath-driver ``` +Optionally you could use it as a default storage class for the dynamic volume claims: +```shell +minikube addons disable storage-provisioner +minikube addons disable default-storageclass +kubectl patch storageclass csi-hostpath-sc -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' +``` +

3Check volume snapshot class

When you create the volume snapshot, you have to register [Volume Snapshot Classes](https://kubernetes.io/docs/concepts/storage/volume-snapshot-classes/) to your cluster. diff --git a/site/content/en/docs/tutorials/wsl_docker_driver.md b/site/content/en/docs/tutorials/wsl_docker_driver.md new file mode 100644 index 000000000000..c751c9973759 --- /dev/null +++ b/site/content/en/docs/tutorials/wsl_docker_driver.md @@ -0,0 +1,17 @@ +--- +title: "Setting Up WSL 2 & Docker Desktop" +linkTitle: "Setting Up WSL 2 & Docker Desktop" +weight: 1 +date: 2022-01-12 +--- + +## Overview + +- This guide will show you how to setup WSL 2 and Docker Desktop. + + +## Steps +Microsoft and Docker have in-depth guides for both, just follow along for a successful setup! + +1. [Install WSL](https://docs.microsoft.com/en-us/windows/wsl/install) +2. Install and setup [Docker Desktop for Windows](https://docs.docker.com/desktop/windows/wsl/#download) diff --git a/site/layouts/partials/footer.html b/site/layouts/partials/footer.html new file mode 100644 index 000000000000..d9565bdf1bc1 --- /dev/null +++ b/site/layouts/partials/footer.html @@ -0,0 +1,60 @@ +{{/* minikube-docsy file override */ -}} +{{ $links := .Site.Params.links }} +
+
+
+
+ {{ with $links }} + {{ with index . "user"}} + {{ template "footer-links-block" . }} + {{ end }} + {{ end }} +
+
+ {{ with $links }} + {{ with index . "developer"}} + {{ template "footer-links-block" . }} + {{ end }} + {{ end }} +
+
+ {{ with .Site.Params.copyright }}© {{ now.Year}} {{ . }} + + {{ end }} + {{ with .Site.Params.privacy_policy }}{{ T "footer_privacy_policy" }}{{ end }} + {{ if not .Site.Params.ui.footer_about_disable }} + {{ with .Site.GetPage "about" -}} +

{{ .Title }} | + Trademark Usage | + Terms of Use +

+ {{- end }} + {{ end }} +
+
+ +
+
+{{ define "footer-links-block" }} +
    + {{ range . }} +
  • + + + +
  • + {{ end }} +
+{{ end }} + diff --git a/site/layouts/partials/hooks/head-end.html b/site/layouts/partials/hooks/head-end.html index 308555d158ac..55c9fedf8708 100644 --- a/site/layouts/partials/hooks/head-end.html +++ b/site/layouts/partials/hooks/head-end.html @@ -1,6 +1,7 @@ - + + diff --git a/site/layouts/partials/sidebar-tree.html b/site/layouts/partials/sidebar-tree.html index 1f04a940935f..a68dd038cfd6 100644 --- a/site/layouts/partials/sidebar-tree.html +++ b/site/layouts/partials/sidebar-tree.html @@ -63,7 +63,6 @@ href="{{ $s.RelPermalink }}" class="align-left pl-0 pr-2{{ if not $expandSection }} collapsed{{ end }}{{ if $activeSection}} active{{ end }} td-sidebar-link td-sidebar-link__section" > - {{ if $activeSection}} ⦿ {{ else }} ⦾ {{ end }} {{$s.LinkTitle }} diff --git a/site/layouts/shortcodes/button.html b/site/layouts/shortcodes/button.html new file mode 100644 index 000000000000..095e30b379db --- /dev/null +++ b/site/layouts/shortcodes/button.html @@ -0,0 +1 @@ + diff --git a/site/layouts/shortcodes/quiz_button.html b/site/layouts/shortcodes/quiz_button.html index 1100d1e92a41..ac0210557531 100644 --- a/site/layouts/shortcodes/quiz_button.html +++ b/site/layouts/shortcodes/quiz_button.html @@ -1 +1 @@ - + diff --git a/site/layouts/shortcodes/quiz_instruction.html b/site/layouts/shortcodes/quiz_instruction.html index b02229e47537..53dcea58ac1b 100644 --- a/site/layouts/shortcodes/quiz_instruction.html +++ b/site/layouts/shortcodes/quiz_instruction.html @@ -6,7 +6,7 @@ {{ $release := index $selected 3 }} {{ $installer := index $selected 4 }} -
+

To install the latest minikube {{ lower $release }} release on {{ $arch }} {{ $os }} using {{ replace $installer "Binary" "binary" }}:

{{ .Inner }}
diff --git a/site/layouts/shortcodes/quiz_instruction_plain.html b/site/layouts/shortcodes/quiz_instruction_plain.html new file mode 100644 index 000000000000..7ac7b4259c26 --- /dev/null +++ b/site/layouts/shortcodes/quiz_instruction_plain.html @@ -0,0 +1,3 @@ +
+{{ .Inner }} +
diff --git a/site/layouts/shortcodes/quiz_row.html b/site/layouts/shortcodes/quiz_row.html index c36b739eee33..f16fdd96e3de 100644 --- a/site/layouts/shortcodes/quiz_row.html +++ b/site/layouts/shortcodes/quiz_row.html @@ -1,6 +1,6 @@ {{ $level := .Get "base" | strings.Count "/" }} -
+

{{ with .Get "name"}}{{.}}{{end}}

diff --git a/site/package-lock.json b/site/package-lock.json index bbcb3785d0b1..14ff5a823da6 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -1,2871 +1,898 @@ { - "name": "tech-doc-hugo", - "version": "0.0.1", - "lockfileVersion": 1, + "name": "site", + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" + "packages": { + "": { + "devDependencies": { + "autoprefixer": "^10.4.21", + "postcss-cli": "^11.0.1" } }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "requires": { - "color-convert": "^1.9.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, + "license": "MIT", "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.4.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.6.tgz", - "integrity": "sha512-Yp51mevbOEdxDUy5WjiKtpQaecqYq9OqZSL04rSoCiry7Tc5I9FEyo3bfxiTJc1DfHeKwSFCUYbBAiOQ2VGfiw==", - "dev": true, - "requires": { - "browserslist": "^4.4.1", - "caniuse-lite": "^1.0.30000929", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.13", - "postcss-value-parser": "^3.3.1" + "color-convert": "^2.0.1" }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "engines": { + "node": ">=8" }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "browserslist": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", - "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000929", - "electron-to-chromium": "^1.3.103", - "node-releases": "^1.1.3" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000932", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000932.tgz", - "integrity": "sha512-4bghJFItvzz8m0T3lLZbacmEY9X1Z2AtIzTr7s7byqZIOumASfr4ynDx7rtm0J85nDmx8vsgR6vnaSoeU8Oh0A==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "dev": true, - "requires": { - "color-name": "1.1.1" - } - }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.4.3", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "os-homedir": "^1.0.1", - "parse-json": "^2.2.0", - "require-from-string": "^1.1.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "dependency-graph": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", - "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", - "dev": true - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - } - }, - "electron-to-chromium": { - "version": "1.3.108", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.108.tgz", - "integrity": "sha512-/QI4hMpAh48a1Sea6PALGv+kuVne9A2EWGd8HrWHMdYhIzGtbhVVHh6heL5fAzGaDnZuPyrlWJRl8WPm4RyiQQ==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "picomatch": "^2.0.4" }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "engines": { + "node": ">= 8" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "optional": true + { + "type": "github", + "url": "https://github.com/sponsors/ai" } - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, + ], + "license": "MIT", "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "bin": { + "autoprefixer": "bin/autoprefixer" }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-releases": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", - "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "engines": { + "node": "^10 || ^12 || >=14" }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "peerDependencies": { + "postcss": "^8.1.0" } }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "requires": { - "isobject": "^3.0.0" + "engines": { + "node": ">=8" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "requires": { - "isobject": "^3.0.1" + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/browserslist": { + "version": "4.25.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", + "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", "dev": true, - "requires": { - "wrappy": "1" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001733", + "electron-to-chromium": "^1.5.199", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "node_modules/caniuse-lite": { + "version": "1.0.30001734", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz", + "integrity": "sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==", "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "requires": { - "p-try": "^1.0.0" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "p-limit": "^1.1.0" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", "dev": true, - "requires": { - "error-ex": "^1.2.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "node_modules/electron-to-chromium": { + "version": "1.5.200", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz", + "integrity": "sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==", + "dev": true, + "license": "ISC" }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "requires": { - "pify": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "postcss-cli": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-5.0.1.tgz", - "integrity": "sha512-yrvWl8axFdiXlJuVQRIHM4qskvl0F4/fWUUIYyYo0RV6lOdB0Vcyt8Rv7lBvtwVuNa0pClz88LgxzT4ZzC7UWA==", + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, - "requires": { - "chalk": "^2.1.0", - "chokidar": "^2.0.0", - "dependency-graph": "^0.7.0", - "fs-extra": "^5.0.0", - "get-stdin": "^6.0.0", - "globby": "^8.0.0", - "postcss": "^6.0.1", - "postcss-load-config": "^1.1.0", - "postcss-reporter": "^5.0.0", - "pretty-hrtime": "^1.0.3", - "read-cache": "^1.0.0", - "yargs": "^11.0.0" + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" } }, - "postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "node_modules/fs-extra": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", + "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", "dev": true, - "requires": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0", - "postcss-load-options": "^1.2.0", - "postcss-load-plugins": "^2.3.0" + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "requires": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "requires": { - "cosmiconfig": "^2.1.1", - "object-assign": "^4.1.0" + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "postcss-reporter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz", - "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { - "chalk": "^2.0.1", - "lodash": "^4.17.4", - "log-symbols": "^2.0.0", - "postcss": "^6.0.8" + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pump": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { - "pify": "^2.3.0" - }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "license": "MIT", + "engines": { + "node": ">=0.12.0" } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "requires": { - "ret": "~0.1.10" + "engines": { + "node": ">=0.10.0" } }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "engines": { + "node": ">=8.6" }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "requires": { - "shebang-regex": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "node_modules/postcss-cli": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz", + "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==", "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, + "license": "MIT", "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } + "chokidar": "^3.3.0", + "dependency-graph": "^1.0.0", + "fs-extra": "^11.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^5.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "tinyglobby": "^0.2.12", + "yargs": "^17.0.0" + }, + "bin": { + "postcss": "index.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-load-config": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1", + "yaml": "^2.4.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "postcss": { + "optional": true }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "tsx": { + "optional": true } } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/postcss-reporter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz", + "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==", "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "engines": { + "node": ">= 0.8" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { - "extend-shallow": "^3.0.0" + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "license": "MIT", + "engines": { + "node": ">=14.16" }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "ansi-regex": "^3.0.0" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "node_modules/thenby": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", + "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", + "dev": true, + "license": "Apache-2.0" }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dev": true, - "requires": { - "has-flag": "^3.0.0" + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "dev": true, - "requires": { - "kind-of": "^3.0.2" + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "peerDependenciesMeta": { + "picomatch": { + "optional": true } } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "license": "MIT", + "engines": { + "node": ">= 10.0.0" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { - "isexe": "^2.0.0" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "license": "ISC", + "bin": { + "yaml": "bin.mjs" }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "engines": { + "node": ">= 14.6" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", - "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.0", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "requires": { - "camelcase": "^4.1.0" + "license": "ISC", + "engines": { + "node": ">=12" } } } diff --git a/site/package.json b/site/package.json index ce3b9af2e4c3..478122832d85 100644 --- a/site/package.json +++ b/site/package.json @@ -1,24 +1,7 @@ { - "name": "tech-doc-hugo", - "version": "0.0.1", - "description": "Hugo theme for technical documentation.", - "main": "none.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/bep/tech-doc-hugo.git" - }, - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/bep/tech-doc-hugo/issues" - }, - "homepage": "https://github.com/bep/tech-doc-hugo#readme", - "dependencies": {}, + "private": true, "devDependencies": { - "autoprefixer": "^9.4.6", - "postcss-cli": "^5.0.1" + "autoprefixer": "^10.4.21", + "postcss-cli": "^11.0.1" } } diff --git a/site/static/css/button.css b/site/static/css/button.css new file mode 100644 index 000000000000..5b1a0ea4a6b5 --- /dev/null +++ b/site/static/css/button.css @@ -0,0 +1,13 @@ +.module-button { + color: #fff; + background: #306EE5; + border-radius: 0.5rem; + font-size: 2rem; + border: none; + padding: 0.5rem 1rem; + margin: 2rem 0; +} + +.module-button:hover { + background: #164cb2; +} diff --git a/site/static/css/tabs.css b/site/static/css/tabs.css index be981ea36848..a576653534eb 100644 --- a/site/static/css/tabs.css +++ b/site/static/css/tabs.css @@ -20,6 +20,7 @@ div.code-tabs li.nav-tab { border-left: 1px solid #ccc; border-right: 1px solid #ccc; margin-right: 0.5em; + margin-bottom: 0; border-top-left-radius: 4px; border-top-right-radius: 4px; @@ -52,6 +53,9 @@ div.code-tabs div.highlight { background-color: #fff; } +.tab-content .tab-pane .highlight { + margin-bottom: 1.25em; +} div.code-tabs a.nav-tab { all: unset; diff --git a/site/static/images/benchmarks/timeToK8s/v1.23.0.png b/site/static/images/benchmarks/timeToK8s/v1.23.0.png new file mode 100644 index 000000000000..ba9e8ab2e600 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.23.0.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.23.1.png b/site/static/images/benchmarks/timeToK8s/v1.23.1.png new file mode 100644 index 000000000000..e3d2fb55dc82 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.23.1.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.23.2.png b/site/static/images/benchmarks/timeToK8s/v1.23.2.png new file mode 100644 index 000000000000..5800a51cfdfb Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.23.2.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.24.0.png b/site/static/images/benchmarks/timeToK8s/v1.24.0.png new file mode 100644 index 000000000000..852e8914647d Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.24.0.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.25.0.png b/site/static/images/benchmarks/timeToK8s/v1.25.0.png new file mode 100644 index 000000000000..be67143c3b82 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.25.0.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.25.1.png b/site/static/images/benchmarks/timeToK8s/v1.25.1.png new file mode 100644 index 000000000000..2c43c7b211df Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.25.1.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.25.2.png b/site/static/images/benchmarks/timeToK8s/v1.25.2.png new file mode 100644 index 000000000000..69385ba55403 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.25.2.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.26.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.26.0-cpu.png new file mode 100644 index 000000000000..487fc5582fd0 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.26.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.26.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.26.0-time.png new file mode 100644 index 000000000000..55f9a1580852 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.26.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.26.1-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.26.1-cpu.png new file mode 100644 index 000000000000..eb876531843a Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.26.1-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.26.1-time.png b/site/static/images/benchmarks/timeToK8s/v1.26.1-time.png new file mode 100644 index 000000000000..c9a6afb2dfab Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.26.1-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.27.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.27.0-cpu.png new file mode 100644 index 000000000000..5eb61c067bc6 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.27.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.27.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.27.0-time.png new file mode 100644 index 000000000000..e93201d82c80 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.27.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.27.1-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.27.1-cpu.png new file mode 100644 index 000000000000..777cf762d1ed Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.27.1-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.27.1-time.png b/site/static/images/benchmarks/timeToK8s/v1.27.1-time.png new file mode 100644 index 000000000000..2256ba52a399 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.27.1-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.28.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.28.0-cpu.png new file mode 100644 index 000000000000..1245117fc3b7 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.28.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.28.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.28.0-time.png new file mode 100644 index 000000000000..777cc0b6e896 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.28.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.29.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.29.0-cpu.png new file mode 100644 index 000000000000..397f0004f1e9 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.29.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.29.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.29.0-time.png new file mode 100644 index 000000000000..51e574c28495 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.29.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.30.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.30.0-cpu.png new file mode 100644 index 000000000000..33f13328d99c Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.30.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.30.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.30.0-time.png new file mode 100644 index 000000000000..2adec9e5e94b Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.30.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.30.1-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.30.1-cpu.png new file mode 100644 index 000000000000..d5aabad4a7fa Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.30.1-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.30.1-time.png b/site/static/images/benchmarks/timeToK8s/v1.30.1-time.png new file mode 100644 index 000000000000..c1ac9fd110fe Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.30.1-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.31.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.31.0-cpu.png new file mode 100644 index 000000000000..d4dea2aff3c4 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.31.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.31.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.31.0-time.png new file mode 100644 index 000000000000..8d95fd8b8c2f Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.31.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.31.1-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.31.1-cpu.png new file mode 100644 index 000000000000..5e3ef062d7fe Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.31.1-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.31.1-time.png b/site/static/images/benchmarks/timeToK8s/v1.31.1-time.png new file mode 100644 index 000000000000..acbd0fd7dee7 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.31.1-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.31.2-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.31.2-cpu.png new file mode 100644 index 000000000000..0533ff030e2b Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.31.2-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.31.2-time.png b/site/static/images/benchmarks/timeToK8s/v1.31.2-time.png new file mode 100644 index 000000000000..80f6be3a6f89 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.31.2-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.32.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.32.0-cpu.png new file mode 100644 index 000000000000..4663a6c6ca3e Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.32.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.32.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.32.0-time.png new file mode 100644 index 000000000000..ed4c099c7a49 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.32.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.33.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.33.0-cpu.png new file mode 100644 index 000000000000..a37502c685ad Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.33.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.33.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.33.0-time.png new file mode 100644 index 000000000000..c0e5711e4422 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.33.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.33.1-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.33.1-cpu.png new file mode 100644 index 000000000000..571db5be4c14 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.33.1-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.33.1-time.png b/site/static/images/benchmarks/timeToK8s/v1.33.1-time.png new file mode 100644 index 000000000000..5a72e6289a8a Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.33.1-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.34.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.34.0-cpu.png new file mode 100644 index 000000000000..eded33157303 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.34.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.34.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.34.0-time.png new file mode 100644 index 000000000000..5f106f62a748 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.34.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.35.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.35.0-cpu.png new file mode 100644 index 000000000000..ba4345ee7a19 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.35.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.35.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.35.0-time.png new file mode 100644 index 000000000000..bb9bc8435331 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.35.0-time.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.36.0-cpu.png b/site/static/images/benchmarks/timeToK8s/v1.36.0-cpu.png new file mode 100644 index 000000000000..7d2f3e9f8e09 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.36.0-cpu.png differ diff --git a/site/static/images/benchmarks/timeToK8s/v1.36.0-time.png b/site/static/images/benchmarks/timeToK8s/v1.36.0-time.png new file mode 100644 index 000000000000..c03b66d33927 Binary files /dev/null and b/site/static/images/benchmarks/timeToK8s/v1.36.0-time.png differ diff --git a/site/static/images/gui/windows.png b/site/static/images/gui/windows.png new file mode 100644 index 000000000000..4fb10af86b1f Binary files /dev/null and b/site/static/images/gui/windows.png differ diff --git a/site/static/images/open-webui-chat.png b/site/static/images/open-webui-chat.png new file mode 100644 index 000000000000..6d8bb5248145 Binary files /dev/null and b/site/static/images/open-webui-chat.png differ diff --git a/site/static/js/quiz.js b/site/static/js/quiz.js index 68a6e4ce1167..32f84a6288ee 100644 --- a/site/static/js/quiz.js +++ b/site/static/js/quiz.js @@ -1,57 +1,121 @@ -function selectQuizOption(selectedId) { - const currentLevel = selectedId.split('/').length - 1; - $('.option-row').each(function (i) { - const rowId = $(this).attr('data-quiz-id'); - // don't hide option rows if it has a lower level - // e.g. when clicking "x86_64" under Linux, we don't want to hide the operating system row - if ($(this).attr('data-level') < currentLevel) { - return; - } - if (rowId === selectedId) { - $(this).removeClass('hide'); - $(this).find('.option-button').removeClass('active'); - return; - } - // hide all other option rows - $(this).addClass('hide'); - }); - // hide other answers - $('.quiz-instruction').addClass('hide'); - // show the selected answer - $('.quiz-instruction[data-quiz-id=\'' + selectedId + '\']').removeClass('hide'); - - const buttons = $('.option-row[data-quiz-id=\'' + selectedId + '\']').find('.option-button'); - // auto-select the first option for the user, to reduce the number of clicks - if (buttons.length > 0) { - const btn = buttons.first(); - btn.addClass('active'); - selectQuizOption(btn.attr('data-quiz-id')); +function selectQuizOption(selectedId, autoselect = true) { + const currentLevel = selectedId.split("/").length - 1; + $(".option-row").each(function (i) { + const rowId = $(this).attr("data-quiz-id"); + // don't hide option rows if it has a lower level + // e.g. when clicking "x86_64" under Linux, we don't want to hide the operating system row + if ($(this).attr("data-level") < currentLevel) { + return; } + if (rowId === selectedId) { + $(this).removeClass("hide"); + $(this).find(".option-button").removeClass("active"); + return; + } + // hide all other option rows + $(this).addClass("hide"); + }); + // hide other answers + $(".quiz-instruction").addClass("hide"); + // show the selected answer + $(".quiz-instruction[data-quiz-id='" + selectedId + "']").removeClass("hide"); + + const buttons = $(".option-row[data-quiz-id='" + selectedId + "']").find( + ".option-button" + ); + // auto-select the first option for the user, to reduce the number of clicks + if (buttons.length > 0 && autoselect) { + const btn = buttons.first(); + const dataContainerId = btn.attr("data-quiz-id"); + btn.addClass("active"); + const url = new URL(window.location); + url.searchParams.set("arch", dataContainerId); // Add selectedId as query parameter + + // Update the browser's location with the new URL + window.history.replaceState({}, document.title, url); + + selectQuizOption(dataContainerId); + } } -function initQuiz() { +async function initQuiz() { + try { + $(".option-button").click(function (e) { + $(this).parent().find(".option-button").removeClass("active"); + $(this).addClass("active"); + const dataContainerId = $(this).attr("data-quiz-id"); + + const url = new URL(window.location); + url.searchParams.set("arch", dataContainerId); // Add selectedId as query parameter + + window.history.replaceState({}, document.title, url); + // Update the browser's location with the new URL + + selectQuizOption(dataContainerId); + }); + let userOS = getUserOS().toLowerCase(); + if (userOS === "mac") { + // use the name "macos" to match the button + userOS = "macos"; + } + let arch = null; try { - $('.option-button').click(function(e) { - $(this).parent().find('.option-button').removeClass('active'); - $(this).addClass('active'); - const dataContainerId = $(this).attr('data-quiz-id'); - - selectQuizOption(dataContainerId); - }); - let userOS = getUserOS(); - if (userOS === 'Mac') { - // use the name "macOS" to match the button - userOS = 'macOS'; - } - $('.option-row[data-level=0]').removeClass('hide'); - // auto-select the OS for user - const btn = $('.option-button[data-quiz-id=\'/' + userOS + '\']').first(); - btn.addClass('active'); - selectQuizOption(btn.attr('data-quiz-id')); + // currently compatible with these browsers: https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData/getHighEntropyValues#browser_compatibility + const architecture = await navigator.userAgentData.getHighEntropyValues(['architecture']) + switch (architecture.architecture) { + case "arm": + arch = "arm64" + break + case "x86": + arch = "x86-64" + break + } } catch(e) { - const elements = document.getElementsByClassName("quiz-instruction"); - for (let element of elements) { - element.classList.remove("hide"); + console.log(e) + } + $(".option-row[data-level=0]").removeClass("hide"); + + const urlParams = new URLSearchParams(window.location.search); + const archParam = urlParams.get("arch"); + + // checks for query params and process each option one by one + + if (archParam) { + const options = archParam.split("/").filter(Boolean); + let quizId = ""; + options.forEach((option, index) => { + quizId = quizId + "/" + option; + const archBtn = $( + ".option-button[data-quiz-id='" + quizId + "']" + ).first(); + archBtn.addClass("active"); + + // passes false as argument when there are more options to process to prevent auto selection of 1st option in following options + if (index === option.length - 1) { + selectQuizOption(archBtn.attr("data-quiz-id")); + } else { + selectQuizOption(archBtn.attr("data-quiz-id"), false); } + }); + } else { + // auto-select the OS for user + const btn = $(".option-button[data-quiz-id='/" + userOS + "']").first(); + btn.addClass("active"); + selectQuizOption(btn.attr("data-quiz-id")); + // auto-select OS arch for user + if (arch) { + const btn = $(".option-button[data-quiz-id='/" + userOS + "/" + arch + "']").first(); + // disacitve all buttons of the row first + const row = $(".option-row[data-quiz-id='/" + userOS + "']").first() + row.find(".option-button").removeClass("active"); + btn.addClass("active"); + selectQuizOption(btn.attr("data-quiz-id")); + } + } + } catch (e) { + const elements = document.getElementsByClassName("quiz-instruction"); + for (let element of elements) { + element.classList.remove("hide"); } + } } diff --git a/site/static/js/tabs.js b/site/static/js/tabs.js index 56ab6ca9b1c7..b0d72a2137c4 100644 --- a/site/static/js/tabs.js +++ b/site/static/js/tabs.js @@ -1,34 +1,70 @@ /* Tabs JS implementation. Borrowed from Skaffold */ function initTabs() { - try{ - $('.tab-content').find('.tab-pane').each(function(idx, item) { - var navTabs = $(this).closest('.code-tabs').find('.nav-tabs'), - title = escape($(this).attr('title')), - os = escape($(this).attr('os')); - navTabs.append(''); - }); + try { + $(".tab-content") + .children(".tab-pane") + .each(function (idx, item) { + var navTabs = $(this).closest(".code-tabs").children(".nav-tabs"), + title = escape($(this).attr("title")).replace(/%20/g, " "), + os = escape($(this).attr("os") || ""); + navTabs.append( + '" + ); + }); - $('.code-tabs ul.nav-tabs').each(function() { + $(".code-tabs ul.nav-tabs").each(function () { let tabSelector = getTabSelector(this); - $(this).find('li'+tabSelector).addClass('active'); + $(this) + .find("li" + tabSelector) + .addClass("active"); }); - $('.code-tabs .tab-content').each(function() { + $(".code-tabs .tab-content").each(function () { let tabSelector = getTabSelector(this); - $(this).find('div'+tabSelector).addClass('active'); - }) + $(this) + .find("div" + tabSelector) + .addClass("active"); + }); - $('.nav-tabs a').click(function(e){ + $(".nav-tabs a").click(function (e) { e.preventDefault(); var tab = $(this).parent(), - tabIndex = tab.index(), - tabPanel = $(this).closest('.code-tabs'), - tabPane = tabPanel.find('.tab-pane').eq(tabIndex); - tabPanel.find('.active').removeClass('active'); - tab.addClass('active'); - tabPane.addClass('active'); + tabIndex = tab.index(), + tabPanel = $(this).closest(".code-tabs"), + tabPane = tabPanel + .find(".tab-content:first") + .children(".tab-pane") + .eq(tabIndex); + tab.siblings().removeClass("active"); + tabPane.siblings().removeClass("active"); + tab.addClass("active"); + tabPane.addClass("active"); + + // changes the anchor in the url + var tabTitle = $(this).attr("href"); + window.location.hash = tabTitle; }); - } catch(e) { + + const hash = window.location.hash; + + // checks for anchor in the url and simulate anchor click to see the particular tab + if (hash) { + const tabTitle = unescape(hash.replace("#", "")); + const tab = $(".nav-tabs a[href='#" + tabTitle + "']"); + tab.click(); // Trigger click to activate the tab + } + const url = new URL(window.location); + if (url.pathname === "/docs/handbook/addons/ingress-dns/") { + url.hash = getUserOS(); + window.history.replaceState({}, document.title, url); + } + } catch (e) { const elements = document.getElementsByClassName("tab-pane"); for (let element of elements) { element.style.display = "block"; @@ -40,17 +76,17 @@ function initTabs() { } } -const getTabSelector = currElement => { - let osSelector = '.'+getUserOS(); - let hasMatchingOSTab = $(currElement).find(osSelector).length; - return hasMatchingOSTab ? osSelector : ':first'; -} +const getTabSelector = (currElement) => { + let osSelector = "." + getUserOS(); + let hasMatchingOSTab = $(currElement).find(osSelector).length; + return hasMatchingOSTab ? osSelector : ":first"; +}; const getUserOS = () => { - let os = ['Linux', 'Mac', 'Windows']; - let userAgent = navigator.userAgent; - for (let currentOS of os) { - if (userAgent.indexOf(currentOS) !== -1) return currentOS; - } - return 'Linux'; -} + let os = ["Linux", "Mac", "Windows"]; + let userAgent = navigator.userAgent; + for (let currentOS of os) { + if (userAgent.indexOf(currentOS) !== -1) return currentOS; + } + return "Linux"; +}; diff --git a/site/themes/docsy b/site/themes/docsy index 2536303cad19..ace4e37ceedc 160000 --- a/site/themes/docsy +++ b/site/themes/docsy @@ -1 +1 @@ -Subproject commit 2536303cad19991c673037f4f16332075141364a +Subproject commit ace4e37ceedcec9c48d329adb1128201061ef23d diff --git a/test.sh b/test.sh index 7473d2d5b90a..22edcfd2696a 100755 --- a/test.sh +++ b/test.sh @@ -45,7 +45,7 @@ then readonly BDIR="${ROOT_DIR}/hack/boilerplate" pushd . >/dev/null cd ${BDIR} - missing="$(go run boilerplate.go -rootdir ${ROOT_DIR} -boilerplate-dir ${BDIR} | egrep -v '/assets.go|/translations.go|/site/themes/|/site/node_modules|\./out|/hugo/' || true)" + missing="$(go run boilerplate.go -rootdir ${ROOT_DIR} -boilerplate-dir ${BDIR} | grep -E -v '/assets.go|/translations.go|/site/themes/|/site/node_modules|\./out|/hugo/|hack/benchmark/time-to-k8s/time-to-k8s-repo|hack/benchmark/image-build/minikube-image-benchmark' || true)" if [[ -n "${missing}" ]]; then echo "boilerplate missing: $missing" echo "consider running: ${BDIR}/fix.sh" @@ -65,6 +65,7 @@ then echo "= go test ===============================================================" cov_tmp="$(mktemp)" readonly COVERAGE_PATH=./out/coverage.txt + mkdir -p "$(dirname "${COVERAGE_PATH}")" echo "mode: count" >"${COVERAGE_PATH}" pkgs=$(go list -f '{{ if .TestGoFiles }}{{.ImportPath}}{{end}}' ./cmd/... ./pkg/... | xargs) go test \ diff --git a/test/integration/aaa_download_only_test.go b/test/integration/aaa_download_only_test.go index 0037c98bd629..36f0f09b6f04 100644 --- a/test/integration/aaa_download_only_test.go +++ b/test/integration/aaa_download_only_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2019 The Kubernetes Authors All rights reserved. @@ -22,10 +22,11 @@ import ( "bufio" "bytes" "context" - "crypto/md5" + "crypto/sha256" "encoding/json" "fmt" - "io/ioutil" + "net/http" + "net/http/httptest" "os" "os/exec" "path/filepath" @@ -40,12 +41,20 @@ import ( ) // TestDownloadOnly makes sure the --download-only parameter in minikube start caches the appropriate images and tarballs. -func TestDownloadOnly(t *testing.T) { - // Stores the startup run result for later error messages - var rrr *RunResult - profile := UniqueProfileName("download-only") +func TestDownloadOnly(t *testing.T) { // nolint:gocyclo ctx, cancel := context.WithTimeout(context.Background(), Minutes(30)) - defer Cleanup(t, profile, cancel) + + // separate each k8s version testrun into individual profiles to avoid ending up with subsequently mixed up configs like: + // {Name:download-only-062906 ... KubernetesConfig:{KubernetesVersion:v1.28.4 ...} Nodes:[{Name: IP: Port:8443 KubernetesVersion:v1.16.0 ...}] ...} + // that will then get artifacts for node's not cluster's KubernetesVersion and fail checks thereafter + // at the end, cleanup all profiles + profiles := []string{} + defer func() { + for _, profile := range profiles { + Cleanup(t, profile, cancel) + } + }() + containerRuntime := ContainerRuntime() versions := []string{ @@ -61,16 +70,14 @@ func TestDownloadOnly(t *testing.T) { for _, v := range versions { t.Run(v, func(t *testing.T) { + profile := UniqueProfileName("download-only") + profiles = append(profiles, profile) defer PostMortemLogs(t, profile) t.Run("json-events", func(t *testing.T) { // --force to avoid uid check args := append([]string{"start", "-o=json", "--download-only", "-p", profile, "--force", "--alsologtostderr", fmt.Sprintf("--kubernetes-version=%s", v), fmt.Sprintf("--container-runtime=%s", containerRuntime)}, StartArgs()...) rt, err := Run(t, exec.CommandContext(ctx, Target(), args...)) - if rrr == nil { - // Preserve the initial run-result for debugging - rrr = rt - } if err != nil { t.Errorf("failed to download only. args: %q %v", args, err) } @@ -89,6 +96,9 @@ func TestDownloadOnly(t *testing.T) { } } } + if err := s.Err(); err != nil { + t.Errorf("failed to read output: %v", err) + } }) preloadExists := false @@ -99,15 +109,14 @@ func TestDownloadOnly(t *testing.T) { } // Driver does not matter here, since the only exception is none driver, // which cannot occur here. - if download.PreloadExists(v, containerRuntime, "docker", true) { - // Just make sure the tarball path exists - if _, err := os.Stat(download.TarballPath(v, containerRuntime)); err != nil { - t.Errorf("failed to verify preloaded tarball file exists: %v", err) - } - preloadExists = true - } else { + if !download.PreloadExists(v, containerRuntime, "docker", true) { t.Skip("No preload image") } + // Just make sure the tarball path exists + if _, err := os.Stat(download.TarballPath(v, containerRuntime)); err != nil { + t.Errorf("failed to verify preloaded tarball file exists: %v", err) + } + preloadExists = true }) t.Run("cached-images", func(t *testing.T) { @@ -124,8 +133,11 @@ func TestDownloadOnly(t *testing.T) { } for _, img := range imgs { + pathToImage := []string{localpath.MiniPath(), "cache", "images", runtime.GOARCH} img = strings.Replace(img, ":", "_", 1) // for example kube-scheduler:v1.15.2 --> kube-scheduler_v1.15.2 - fp := filepath.Join(localpath.MiniPath(), "cache", "images", img) + imagePath := strings.Split(img, "/") // changes "gcr.io/k8s-minikube/storage-provisioner_v5" into ["gcr.io", "k8s-minikube", "storage-provisioner_v5"] to match cache folder structure + pathToImage = append(pathToImage, imagePath...) + fp := filepath.Join(pathToImage...) _, err := os.Stat(fp) if err != nil { t.Errorf("expected image file exist at %q but got error: %v", fp, err) @@ -139,7 +151,7 @@ func TestDownloadOnly(t *testing.T) { } // checking binaries downloaded (kubelet,kubeadm) for _, bin := range constants.KubernetesReleaseBinaries { - fp := filepath.Join(localpath.MiniPath(), "cache", "linux", v, bin) + fp := filepath.Join(localpath.MiniPath(), "cache", "linux", runtime.GOARCH, v, bin) _, err := os.Stat(fp) if err != nil { t.Errorf("expected the file for binary exist at %q but got error %v", fp, err) @@ -157,7 +169,7 @@ func TestDownloadOnly(t *testing.T) { if runtime.GOOS == "windows" { binary = "kubectl.exe" } - fp := filepath.Join(localpath.MiniPath(), "cache", runtime.GOOS, v, binary) + fp := filepath.Join(localpath.MiniPath(), "cache", runtime.GOOS, runtime.GOARCH, v, binary) if _, err := os.Stat(fp); err != nil { t.Errorf("expected the file for binary exist at %q but got error %v", fp, err) } @@ -176,34 +188,29 @@ func TestDownloadOnly(t *testing.T) { } }) + // This is a weird place to test profile deletion, but this test is serial, and we have a profile to delete! + t.Run("DeleteAll", func(t *testing.T) { + if !CanCleanup() { + t.Skip("skipping, as cleanup is disabled") + } + rr, err := Run(t, exec.CommandContext(ctx, Target(), "delete", "--all")) + if err != nil { + t.Errorf("failed to delete all. args: %q : %v", rr.Command(), err) + } + }) + + // Delete should always succeed, even if previously partially or fully deleted. + t.Run("DeleteAlwaysSucceeds", func(t *testing.T) { + if !CanCleanup() { + t.Skip("skipping, as cleanup is disabled") + } + rr, err := Run(t, exec.CommandContext(ctx, Target(), "delete", "-p", profile)) + if err != nil { + t.Errorf("failed to delete. args: %q: %v", rr.Command(), err) + } + }) }) } - - // This is a weird place to test profile deletion, but this test is serial, and we have a profile to delete! - t.Run("DeleteAll", func(t *testing.T) { - defer PostMortemLogs(t, profile) - - if !CanCleanup() { - t.Skip("skipping, as cleanup is disabled") - } - rr, err := Run(t, exec.CommandContext(ctx, Target(), "delete", "--all")) - if err != nil { - t.Errorf("failed to delete all. args: %q : %v", rr.Command(), err) - } - }) - // Delete should always succeed, even if previously partially or fully deleted. - t.Run("DeleteAlwaysSucceeds", func(t *testing.T) { - defer PostMortemLogs(t, profile) - - if !CanCleanup() { - t.Skip("skipping, as cleanup is disabled") - } - rr, err := Run(t, exec.CommandContext(ctx, Target(), "delete", "-p", profile)) - if err != nil { - t.Errorf("failed to delete. args: %q: %v", rr.Command(), err) - } - }) - } // TestDownloadOnlyKic makes sure --download-only caches the docker driver images as well. @@ -217,33 +224,89 @@ func TestDownloadOnlyKic(t *testing.T) { cRuntime := ContainerRuntime() - args := []string{"start", "--download-only", "-p", profile, "--force", "--alsologtostderr"} + args := []string{"start", "--download-only", "-p", profile, "--alsologtostderr"} args = append(args, StartArgs()...) cmd := exec.CommandContext(ctx, Target(), args...) - // make sure this works even if docker daemon isn't running - cmd.Env = append(os.Environ(), "DOCKER_HOST=/does/not/exist") if _, err := Run(t, cmd); err != nil { t.Errorf("start with download only failed %q : %v", args, err) } // Make sure the downloaded image tarball exists tarball := download.TarballPath(constants.DefaultKubernetesVersion, cRuntime) - contents, err := ioutil.ReadFile(tarball) + fi, err := os.Stat(tarball) if err != nil { - t.Errorf("failed to read tarball file %q: %v", tarball, err) + t.Errorf("expected tarball file %q to exist, but got error: %v", tarball, err) + } else { + const minSize int64 = 200 * 1024 * 1024 // 200 MB + if fi.Size() <= minSize { + t.Errorf("expected tarball file %q to be larger than 200MB (>%d bytes), got %d bytes", tarball, minSize, fi.Size()) + } } if arm64Platform() { t.Skip("Skip for arm64 platform. See https://github.com/kubernetes/minikube/issues/10144") } - // Make sure it has the correct checksum - checksum := md5.Sum(contents) - remoteChecksum, err := ioutil.ReadFile(download.PreloadChecksumPath(constants.DefaultKubernetesVersion, cRuntime)) +} + +// createSha256File is a helper function which creates sha256 checksum file from given file +func createSha256File(filePath string) error { + dat, _ := os.ReadFile(filePath) + sum := sha256.Sum256(dat) + + f, err := os.Create(filePath + ".sha256") + if err != nil { + return err + } + defer f.Close() + + _, err = fmt.Fprintf(f, "%x", sum[:]) if err != nil { - t.Errorf("failed to read checksum file %q : %v", download.PreloadChecksumPath(constants.DefaultKubernetesVersion, cRuntime), err) + return err } - if string(remoteChecksum) != string(checksum[:]) { - t.Errorf("failed to verify checksum. checksum of %q does not match remote checksum (%q != %q)", tarball, string(remoteChecksum), string(checksum[:])) + return nil +} + +// TestBinaryMirror tests functionality of --binary-mirror flag +func TestBinaryMirror(t *testing.T) { + profile := UniqueProfileName("binary-mirror") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(10)) + defer Cleanup(t, profile, cancel) + + tmpDir := t.TempDir() + + // Start test server which will serve binary files + ts := httptest.NewServer( + http.FileServer(http.Dir(tmpDir)), + ) + defer ts.Close() + + binaryName := "kubectl" + if runtime.GOOS == "windows" { + binaryName = "kubectl.exe" + } + binaryPath, err := download.Binary(binaryName, constants.DefaultKubernetesVersion, runtime.GOOS, runtime.GOARCH, "") + if err != nil { + t.Errorf("Failed to download binary: %+v", err) + } + + newBinaryDir := filepath.Join(tmpDir, constants.DefaultKubernetesVersion, "bin", runtime.GOOS, runtime.GOARCH) + if err := os.MkdirAll(newBinaryDir, os.ModePerm); err != nil { + t.Errorf("Failed to create %s directories", newBinaryDir) + } + + newBinaryPath := filepath.Join(newBinaryDir, binaryName) + if err := os.Rename(binaryPath, newBinaryPath); err != nil { + t.Errorf("Failed to move binary file: %+v", err) + } + if err := createSha256File(newBinaryPath); err != nil { + t.Errorf("Failed to generate sha256 checksum file: %+v", err) + } + + args := append([]string{"start", "--download-only", "-p", profile, "--alsologtostderr", "--binary-mirror", ts.URL}, StartArgs()...) + + cmd := exec.CommandContext(ctx, Target(), args...) + if _, err := Run(t, cmd); err != nil { + t.Errorf("start with --binary-mirror failed %q : %v", args, err) } } diff --git a/test/integration/aab_offline_test.go b/test/integration/aab_offline_test.go index 2b2f29eae2ba..19f6824a70b1 100644 --- a/test/integration/aab_offline_test.go +++ b/test/integration/aab_offline_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -43,7 +43,7 @@ func TestOffline(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), Minutes(15)) defer CleanupWithLogs(t, profile, cancel) - startArgs := []string{"start", "-p", profile, "--alsologtostderr", "-v=1", "--memory=2048", "--wait=true"} + startArgs := []string{"start", "-p", profile, "--alsologtostderr", "-v=1", "--memory=3072", "--wait=true"} startArgs = append(startArgs, StartArgs()...) c := exec.CommandContext(ctx, Target(), startArgs...) env := os.Environ() diff --git a/test/integration/addons_test.go b/test/integration/addons_test.go index 59025f671f91..67aa1dd049e6 100644 --- a/test/integration/addons_test.go +++ b/test/integration/addons_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -21,7 +21,9 @@ package integration import ( "bytes" "context" + "encoding/base64" "encoding/json" + "errors" "fmt" "net/http" "net/url" @@ -29,90 +31,132 @@ import ( "os/exec" "path/filepath" "reflect" - "runtime" + "regexp" "strings" + "sync" "testing" "time" + "github.com/blang/semver/v4" retryablehttp "github.com/hashicorp/go-retryablehttp" + core "k8s.io/api/core/v1" "k8s.io/minikube/pkg/kapi" + "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/detect" "k8s.io/minikube/pkg/util/retry" ) // TestAddons tests addons that require no special environment in parallel func TestAddons(t *testing.T) { + FailFastDockerHubRateLimited(t) + profile := UniqueProfileName("addons") ctx, cancel := context.WithTimeout(context.Background(), Minutes(40)) defer Cleanup(t, profile, cancel) - // We don't need a dummy file is we're on GCE - if !detect.IsOnGCE() || detect.IsCloudShell() { + t.Run("PreSetup", func(t *testing.T) { + tests := []struct { + name string + validator validateFunc + }{ + {"EnablingAddonOnNonExistingCluster", validateEnablingAddonOnNonExistingCluster}, + {"DisablingAddonOnNonExistingCluster", validateDisablingAddonOnNonExistingCluster}, + } + for _, tc := range tests { + tc := tc + if ctx.Err() == context.DeadlineExceeded { + t.Fatalf("Unable to run more tests (deadline exceeded)") + } + t.Run(tc.name, func(t *testing.T) { + MaybeParallel(t) + tc.validator(ctx, t, profile) + }) + } + }) + + setupSucceeded := t.Run("Setup", func(t *testing.T) { // Set an env var to point to our dummy credentials file + // don't use t.Setenv because we sometimes manually unset the env var later manually err := os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", filepath.Join(*testdataDir, "gcp-creds.json")) - defer os.Unsetenv("GOOGLE_APPLICATION_CREDENTIALS") + t.Cleanup(func() { + os.Unsetenv("GOOGLE_APPLICATION_CREDENTIALS") + }) if err != nil { t.Fatalf("Failed setting GOOGLE_APPLICATION_CREDENTIALS env var: %v", err) } err = os.Setenv("GOOGLE_CLOUD_PROJECT", "this_is_fake") - defer os.Unsetenv("GOOGLE_CLOUD_PROJECT") + t.Cleanup(func() { + os.Unsetenv("GOOGLE_CLOUD_PROJECT") + }) if err != nil { t.Fatalf("Failed setting GOOGLE_CLOUD_PROJECT env var: %v", err) } - } - args := append([]string{"start", "-p", profile, "--wait=true", "--memory=4000", "--alsologtostderr", "--addons=registry", "--addons=metrics-server", "--addons=olm", "--addons=volumesnapshots", "--addons=csi-hostpath-driver"}, StartArgs()...) - if !NoneDriver() && !(runtime.GOOS == "darwin" && KicDriver()) { // none driver and macos docker driver does not support ingress - args = append(args, "--addons=ingress") - } - if !arm64Platform() { - args = append(args, "--addons=helm-tiller") - } - if !detect.IsOnGCE() { - args = append(args, "--addons=gcp-auth") - } - rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) - if err != nil { - t.Fatalf("%s failed: %v", rr.Command(), err) - } + // MOCK_GOOGLE_TOKEN forces the gcp-auth webhook to use a mock token instead of trying to get a valid one from the credentials. + os.Setenv("MOCK_GOOGLE_TOKEN", "true") - // If we're running the integration tests on GCE, which is frequently the case, first check to make sure we exit out properly, - // then use force to actually test using creds. - if detect.IsOnGCE() { - args = []string{"-p", profile, "addons", "enable", "gcp-auth"} + // for some reason, (Docker_Cloud_Shell) sets 'MINIKUBE_FORCE_SYSTEMD=true' while having cgroupfs set in docker (and probably os itself), which might make it unstable and occasionally fail: + // - I1226 15:05:24.834294 11286 out.go:177] - MINIKUBE_FORCE_SYSTEMD=true + // - I1226 15:05:25.070037 11286 info.go:266] docker info: {... CgroupDriver:cgroupfs ...} + // ref: https://storage.googleapis.com/minikube-builds/logs/15463/27154/Docker_Cloud_Shell.html + // so we override that here to let minikube auto-detect appropriate cgroup driver + os.Setenv(constants.MinikubeForceSystemdEnv, "") + + args := append([]string{"start", "-p", profile, "--wait=true", "--memory=4096", "--alsologtostderr", "--addons=registry", "--addons=registry-creds", "--addons=metrics-server", "--addons=volumesnapshots", "--addons=csi-hostpath-driver", "--addons=gcp-auth", "--addons=cloud-spanner", "--addons=inspektor-gadget", "--addons=nvidia-device-plugin", "--addons=yakd", "--addons=volcano", "--addons=amd-gpu-device-plugin"}, StartArgs()...) + if !NoneDriver() { + args = append(args, "--addons=ingress", "--addons=ingress-dns", "--addons=storage-provisioner-rancher") + } rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) - if err == nil { - t.Errorf("Expected error but didn't get one. command %v, output %v", rr.Command(), rr.Output()) - } else { - if !strings.Contains(rr.Output(), "It seems that you are running in GCE") { - t.Errorf("Unexpected error message: %v", rr.Output()) - } else { - // ok, use force here since we are in GCE - // do not use --force unless absolutely necessary - args = append(args, "--force") - rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) - if err != nil { - t.Errorf("%s failed: %v", rr.Command(), err) - } - } + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) } + + }) + + if !setupSucceeded { + t.Fatalf("Failed setup for addon tests") } + type TestCase = struct { + name string + validator validateFunc + } + // Run tests in serial to avoid collision + t.Run("serial", func(t *testing.T) { + tests := []TestCase{ + {"Volcano", validateVolcanoAddon}, + {"GCPAuth", validateGCPAuthAddon}, + } + for _, tc := range tests { + tc := tc + if ctx.Err() == context.DeadlineExceeded { + t.Fatalf("Unable to run more tests (deadline exceeded)") + } + t.Run(tc.name, func(t *testing.T) { + tc.validator(ctx, t, profile) + }) + } + }) + // Parallelized tests t.Run("parallel", func(t *testing.T) { - tests := []struct { - name string - validator validateFunc - }{ + tests := []TestCase{ {"Registry", validateRegistryAddon}, + {"RegistryCreds", validateRegistryCredsAddon}, {"Ingress", validateIngressAddon}, + {"InspektorGadget", validateInspektorGadgetAddon}, {"MetricsServer", validateMetricsServerAddon}, - {"HelmTiller", validateHelmTillerAddon}, {"Olm", validateOlmAddon}, {"CSI", validateCSIDriverAndSnapshots}, - {"GCPAuth", validateGCPAuthAddon}, + {"Headlamp", validateHeadlampAddon}, + {"CloudSpanner", validateCloudSpannerAddon}, + {"LocalPath", validateLocalPathAddon}, + {"NvidiaDevicePlugin", validateNvidiaDevicePlugin}, + {"Yakd", validateYakdAddon}, + {"AmdGpuDevicePlugin", validateAmdGpuDevicePlugin}, } + for _, tc := range tests { tc := tc if ctx.Err() == context.DeadlineExceeded { @@ -125,44 +169,71 @@ func TestAddons(t *testing.T) { } }) - // Assert that disable/enable works offline - rr, err = Run(t, exec.CommandContext(ctx, Target(), "stop", "-p", profile)) - if err != nil { - t.Errorf("failed to stop minikube. args %q : %v", rr.Command(), err) - } - rr, err = Run(t, exec.CommandContext(ctx, Target(), "addons", "enable", "dashboard", "-p", profile)) - if err != nil { - t.Errorf("failed to enable dashboard addon: args %q : %v", rr.Command(), err) - } - rr, err = Run(t, exec.CommandContext(ctx, Target(), "addons", "disable", "dashboard", "-p", profile)) - if err != nil { - t.Errorf("failed to disable dashboard addon: args %q : %v", rr.Command(), err) - } + t.Run("StoppedEnableDisable", func(t *testing.T) { + // Assert that disable/enable works offline + rr, err := Run(t, exec.CommandContext(ctx, Target(), "stop", "-p", profile)) + if err != nil { + t.Errorf("failed to stop minikube. args %q : %v", rr.Command(), err) + } + rr, err = Run(t, exec.CommandContext(ctx, Target(), "addons", "enable", "dashboard", "-p", profile)) + if err != nil { + t.Errorf("failed to enable dashboard addon: args %q : %v", rr.Command(), err) + } + rr, err = Run(t, exec.CommandContext(ctx, Target(), "addons", "disable", "dashboard", "-p", profile)) + if err != nil { + t.Errorf("failed to disable dashboard addon: args %q : %v", rr.Command(), err) + } + // Disable a non-enabled addon + rr, err = Run(t, exec.CommandContext(ctx, Target(), "addons", "disable", "gvisor", "-p", profile)) + if err != nil { + t.Errorf("failed to disable non-enabled addon: args %q : %v", rr.Command(), err) + } + }) } // validateIngressAddon tests the ingress addon by deploying a default nginx pod func validateIngressAddon(ctx context.Context, t *testing.T, profile string) { - defer PostMortemLogs(t, profile) - if NoneDriver() || (runtime.GOOS == "darwin" && KicDriver()) { - t.Skipf("skipping: ingress not supported ") + if NoneDriver() { + t.Skipf("skipping: ingress not supported") } + defer disableAddon(t, "ingress", profile) + defer disableAddon(t, "ingress-dns", profile) + defer PostMortemLogs(t, profile) client, err := kapi.Client(profile) if err != nil { t.Fatalf("failed to get Kubernetes client: %v", client) } - if err := kapi.WaitForDeploymentToStabilize(client, "ingress-nginx", "ingress-nginx-controller", Minutes(6)); err != nil { - t.Errorf("failed waiting for ingress-controller deployment to stabilize: %v", err) - } - if _, err := PodWait(ctx, t, profile, "ingress-nginx", "app.kubernetes.io/name=ingress-nginx", Minutes(12)); err != nil { - t.Fatalf("failed waititing for ingress-nginx-controller : %v", err) + // avoid timeouts like: + // Error from server (InternalError): Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": dial tcp 10.107.218.58:443: i/o timeout + // Error from server (InternalError): Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": context deadline exceeded + if _, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "wait", "--for=condition=ready", "--namespace=ingress-nginx", "pod", "--selector=app.kubernetes.io/component=controller", "--timeout=90s")); err != nil { + t.Fatalf("failed waiting for ingress-nginx-controller : %v", err) + } + + // use nginx ingress yaml that corresponds to k8s version + // default: k8s >= v1.19, ingress api v1 + ingressYaml := "nginx-ingress-v1.yaml" + ingressDNSYaml := "ingress-dns-example-v1.yaml" + v, err := client.ServerVersion() + if err == nil { + // for pre-release k8s version, remove any "+" suffix in minor version to be semver-compliant and not panic + // ref: https://github.com/kubernetes/minikube/pull/16145#issuecomment-1483283260 + minor := strings.TrimSuffix(v.Minor, "+") + if semver.MustParseRange("<1.19.0")(semver.MustParse(fmt.Sprintf("%s.%s.0", v.Major, minor))) { + // legacy: k8s < v1.19 & ingress api v1beta1 + ingressYaml = "nginx-ingress-v1beta1.yaml" + ingressDNSYaml = "ingress-dns-example-v1beta1.yaml" + } + } else { + t.Log("failed to get k8s version, assuming v1.19+ => ingress api v1") } - // create networking.k8s.io/v1beta1 ingress - createv1betaIngress := func() error { - // apply networking.k8s.io/v1beta1 ingress - rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "replace", "--force", "-f", filepath.Join(*testdataDir, "nginx-ingv1beta.yaml"))) + // create networking.k8s.io/v1 ingress + createv1Ingress := func() error { + // apply networking.k8s.io/v1 ingress + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "replace", "--force", "-f", filepath.Join(*testdataDir, ingressYaml))) if err != nil { return err } @@ -171,9 +242,7 @@ func validateIngressAddon(ctx context.Context, t *testing.T, profile string) { } return nil } - - // create networking.k8s.io/v1beta1 ingress - if err := retry.Expo(createv1betaIngress, 1*time.Second, Seconds(90)); err != nil { + if err := retry.Expo(createv1Ingress, 1*time.Second, Seconds(90)); err != nil { t.Errorf("failed to create ingress: %v", err) } @@ -182,8 +251,8 @@ func validateIngressAddon(ctx context.Context, t *testing.T, profile string) { t.Errorf("failed to kubectl replace nginx-pod-svc. args %q. %v", rr.Command(), err) } - if _, err := PodWait(ctx, t, profile, "default", "run=nginx", Minutes(4)); err != nil { - t.Fatalf("failed waiting for ngnix pod: %v", err) + if _, err := PodWait(ctx, t, profile, "default", "run=nginx", Minutes(8)); err != nil { + t.Fatalf("failed waiting for nginx pod: %v", err) } if err := kapi.WaitForService(client, "default", "nginx", true, time.Millisecond*500, Minutes(10)); err != nil { t.Errorf("failed waiting for nginx service to be up: %v", err) @@ -191,98 +260,116 @@ func validateIngressAddon(ctx context.Context, t *testing.T, profile string) { want := "Welcome to nginx!" addr := "http://127.0.0.1/" - // check if the ingress can route nginx app with networking.k8s.io/v1beta1 ingress - checkv1betaIngress := func() error { - var rr *RunResult - var err error - if NoneDriver() { // just run curl directly on the none driver - rr, err = Run(t, exec.CommandContext(ctx, "curl", "-s", addr, "-H", "'Host: nginx.example.com'")) - if err != nil { - return err - } - } else { - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("curl -s %s -H 'Host: nginx.example.com'", addr))) - if err != nil { - return err - } + + // check if the ingress can route nginx app with networking.k8s.io/v1 ingress + checkv1Ingress := func() error { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("curl -s %s -H 'Host: nginx.example.com'", addr))) + if err != nil { + return err } stderr := rr.Stderr.String() if rr.Stderr.String() != "" { t.Logf("debug: unexpected stderr for %v:\n%s", rr.Command(), stderr) } - stdout := rr.Stdout.String() if !strings.Contains(stdout, want) { return fmt.Errorf("%v stdout = %q, want %q", rr.Command(), stdout, want) } return nil } - - // check if the ingress can route nginx app with networking.k8s.io/v1beta1 ingress - if err := retry.Expo(checkv1betaIngress, 500*time.Millisecond, Seconds(90)); err != nil { + if err := retry.Expo(checkv1Ingress, 500*time.Millisecond, Seconds(90)); err != nil { t.Errorf("failed to get expected response from %s within minikube: %v", addr, err) } - // create networking.k8s.io/v1 ingress - createv1Ingress := func() error { - // apply networking.k8s.io/v1beta1 ingress - rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "replace", "--force", "-f", filepath.Join(*testdataDir, "nginx-ingv1.yaml"))) - if err != nil { - return err - } - if rr.Stderr.String() != "" { - t.Logf("%v: unexpected stderr: %s (may be temporary)", rr.Command(), rr.Stderr) - } - return nil + if NeedsPortForward() { + t.Skip("skipping ingress DNS test for any combination that needs port forwarding") } - // create networking.k8s.io/v1 ingress - if err := retry.Expo(createv1Ingress, 1*time.Second, Seconds(90)); err != nil { - t.Errorf("failed to create ingress: %v", err) + // check the ingress-dns addon here as well + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "replace", "--force", "-f", filepath.Join(*testdataDir, ingressDNSYaml))) + if err != nil { + t.Errorf("failed to kubectl replace ingress-dns-example. args %q. %v", rr.Command(), err) } - // check if the ingress can route nginx app with networking.k8s.io/v1 ingress - checkv1Ingress := func() error { - var rr *RunResult - var err error - if NoneDriver() { // just run curl directly on the none driver - rr, err = Run(t, exec.CommandContext(ctx, "curl", "-s", addr, "-H", "'Host: nginx.example.com'")) - if err != nil { - return err - } - } else { - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("curl -s %s -H 'Host: nginx.example.com'", addr))) - if err != nil { - return err - } - } + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ip")) + if err != nil { + t.Errorf("failed to retrieve minikube ip. args %q : %v", rr.Command(), err) + } + ip := strings.TrimSuffix(rr.Stdout.String(), "\n") - stderr := rr.Stderr.String() - if rr.Stderr.String() != "" { - t.Logf("debug: unexpected stderr for %v:\n%s", rr.Command(), stderr) - } + rr, err = Run(t, exec.CommandContext(ctx, "nslookup", "hello-john.test", ip)) + if err != nil { + t.Errorf("failed to nslookup hello-john.test host. args %q : %v", rr.Command(), err) + } + // nslookup should include info about the hello-john.test host, including minikube's ip + if !strings.Contains(rr.Stdout.String(), ip) { + t.Errorf("unexpected output from nslookup. stdout: %v\nstderr: %v", rr.Stdout.String(), rr.Stderr.String()) + } +} - stdout := rr.Stdout.String() - if !strings.Contains(stdout, want) { - return fmt.Errorf("%v stdout = %q, want %q", rr.Command(), stdout, want) - } - return nil +// validateRegistryCredsAddon tests the registry-creds addon by trying to load its configs +func validateRegistryCredsAddon(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "registry-creds", profile) + defer PostMortemLogs(t, profile) + + client, err := kapi.Client(profile) + if err != nil { + t.Fatalf("failed to get Kubernetes client for %s : %v", profile, err) } - // check if the ingress can route nginx app with networking.k8s.io/v1 ingress - if err := retry.Expo(checkv1Ingress, 500*time.Millisecond, Seconds(90)); err != nil { - t.Errorf("failed to get expected response from %s within minikube: %v", addr, err) + start := time.Now() + if err := kapi.WaitForDeploymentToStabilize(client, "kube-system", "registry-creds", Minutes(6)); err != nil { + t.Errorf("failed waiting for registry-creds deployment to stabilize: %v", err) } + t.Logf("registry-creds stabilized in %s", time.Since(start)) - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "ingress", "--alsologtostderr", "-v=1")) + rr, err := Run(t, exec.CommandContext(ctx, Target(), "addons", "configure", "registry-creds", "-f", "./testdata/addons_testconfig.json", "-p", profile)) if err != nil { - t.Errorf("failed to disable ingress addon. args %q : %v", rr.Command(), err) + t.Errorf("failed to configure addon. args %q : %v", rr.Command(), err) + } + + // Check a few secrets exists that match our test data + // In our test aws and gcp are set, docker and acr are disabled - so they will be set to "changeme" + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "-n", "kube-system", "get", "secret", "-o", "yaml")) + if err != nil { + t.Errorf("failed to get secrets. args %q : %v", rr.Command(), err) + } + + base64OfDefaultValue := base64.StdEncoding.EncodeToString([]byte("changeme")) + expected := []string{ + fmt.Sprintf("DOCKER_PRIVATE_REGISTRY_PASSWORD: %s", base64OfDefaultValue), + fmt.Sprintf("DOCKER_PRIVATE_REGISTRY_SERVER: %s", base64OfDefaultValue), + fmt.Sprintf("DOCKER_PRIVATE_REGISTRY_USER: %s", base64OfDefaultValue), + + fmt.Sprintf("ACR_CLIENT_ID: %s", base64OfDefaultValue), + fmt.Sprintf("ACR_PASSWORD: %s", base64OfDefaultValue), + fmt.Sprintf("ACR_URL: %s", base64OfDefaultValue), + + "AWS_ACCESS_KEY_ID: dGVzdF9hd3NfYWNjZXNzaWQ=", + "AWS_SECRET_ACCESS_KEY: dGVzdF9hd3NfYWNjZXNza2V5", + "AWS_SESSION_TOKEN: dGVzdF9hd3Nfc2Vzc2lvbl90b2tlbg==", + "aws-account: dGVzdF9hd3NfYWNjb3VudA==", + "aws-assume-role: dGVzdF9hd3Nfcm9sZQ==", + "aws-region: dGVzdF9hd3NfcmVnaW9u", + + "application_default_credentials.json: ewogICJjbGllbnRfaWQiOiAiaGFoYSIsCiAgImNsaWVudF9zZWNyZXQiOiAibmljZV90cnkiLAogICJxdW90YV9wcm9qZWN0X2lkIjogInRoaXNfaXNfZmFrZSIsCiAgInJlZnJlc2hfdG9rZW4iOiAibWF5YmVfbmV4dF90aW1lIiwKICAidHlwZSI6ICJhdXRob3JpemVkX3VzZXIiCn0K", + "gcrurl: aHR0cHM6Ly9nY3IuaW8=", + } + + rrout := strings.TrimSpace(rr.Stdout.String()) + for _, exp := range expected { + re := regexp.MustCompile(fmt.Sprintf(".*%s.*", exp)) + secret := re.FindString(rrout) + if secret == "" { + t.Errorf("Did not find expected secret: '%s'", secret) + } } } // validateRegistryAddon tests the registry addon func validateRegistryAddon(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "registry", profile) defer PostMortemLogs(t, profile) client, err := kapi.Client(profile) @@ -291,8 +378,8 @@ func validateRegistryAddon(ctx context.Context, t *testing.T, profile string) { } start := time.Now() - if err := kapi.WaitForRCToStabilize(client, "kube-system", "registry", Minutes(6)); err != nil { - t.Errorf("failed waiting for registry replicacontroller to stabilize: %v", err) + if err := kapi.WaitForDeploymentToStabilize(client, "kube-system", "registry", Minutes(6)); err != nil { + t.Errorf("failed waiting for registry deployment to stabilize: %v", err) } t.Logf("registry stabilized in %s", time.Since(start)) @@ -309,7 +396,7 @@ func validateRegistryAddon(ctx context.Context, t *testing.T, profile string) { t.Logf("pre-cleanup %s failed: %v (not a problem)", rr.Command(), err) } - rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "run", "--rm", "registry-test", "--restart=Never", "--image=busybox", "-it", "--", "sh", "-c", "wget --spider -S http://registry.kube-system.svc.cluster.local")) + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "run", "--rm", "registry-test", "--restart=Never", "--image=gcr.io/k8s-minikube/busybox", "-it", "--", "sh", "-c", "wget --spider -S http://registry.kube-system.svc.cluster.local")) if err != nil { t.Errorf("failed to hit registry.kube-system.svc.cluster.local. args %q failed: %v", rr.Command(), err) } @@ -351,15 +438,11 @@ func validateRegistryAddon(ctx context.Context, t *testing.T, profile string) { if err := retry.Expo(checkExternalAccess, 500*time.Millisecond, Seconds(150)); err != nil { t.Errorf("failed to check external access to %s: %v", u.String(), err.Error()) } - - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "registry", "--alsologtostderr", "-v=1")) - if err != nil { - t.Errorf("failed to disable registry addon. args %q: %v", rr.Command(), err) - } } // validateMetricsServerAddon tests the metrics server addon by making sure "kubectl top pods" returns a sensible result func validateMetricsServerAddon(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "metrics-server", profile) defer PostMortemLogs(t, profile) client, err := kapi.Client(profile) @@ -395,106 +478,34 @@ func validateMetricsServerAddon(ctx context.Context, t *testing.T, profile strin if err := retry.Expo(checkMetricsServer, time.Second*3, Minutes(6)); err != nil { t.Errorf("failed checking metric server: %v", err.Error()) } - - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "metrics-server", "--alsologtostderr", "-v=1")) - if err != nil { - t.Errorf("failed to disable metrics-server addon: args %q: %v", rr.Command(), err) - } -} - -// validateHelmTillerAddon tests the helm tiller addon by running "helm version" inside the cluster -func validateHelmTillerAddon(ctx context.Context, t *testing.T, profile string) { - - defer PostMortemLogs(t, profile) - - if arm64Platform() { - t.Skip("skip Helm test on arm64") - } - - client, err := kapi.Client(profile) - if err != nil { - t.Fatalf("failed to get Kubernetes client for %s: %v", profile, err) - } - - start := time.Now() - if err := kapi.WaitForDeploymentToStabilize(client, "kube-system", "tiller-deploy", Minutes(6)); err != nil { - t.Errorf("failed waiting for tiller-deploy deployment to stabilize: %v", err) - } - t.Logf("tiller-deploy stabilized in %s", time.Since(start)) - - if _, err := PodWait(ctx, t, profile, "kube-system", "app=helm", Minutes(6)); err != nil { - t.Fatalf("failed waiting for helm pod: %v", err) - } - - if NoneDriver() { - _, err := exec.LookPath("socat") - if err != nil { - t.Skipf("socat is required by kubectl to complete this test") - } - } - - want := "Server: &version.Version" - // Test from inside the cluster (`helm version` use pod.list permission. we use tiller serviceaccount in kube-system to list pod) - checkHelmTiller := func() error { - - rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "run", "--rm", "helm-test", "--restart=Never", "--image=alpine/helm:2.16.3", "-it", "--namespace=kube-system", "--serviceaccount=tiller", "--", "version")) - if err != nil { - return err - } - if rr.Stderr.String() != "" { - t.Logf("%v: unexpected stderr: %s", rr.Command(), rr.Stderr) - } - if !strings.Contains(rr.Stdout.String(), want) { - return fmt.Errorf("%v stdout = %q, want %q", rr.Command(), rr.Stdout, want) - } - return nil - } - - if err := retry.Expo(checkHelmTiller, 500*time.Millisecond, Minutes(2)); err != nil { - t.Errorf("failed checking helm tiller: %v", err.Error()) - } - - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "helm-tiller", "--alsologtostderr", "-v=1")) - if err != nil { - t.Errorf("failed disabling helm-tiller addon. arg %q.s %v", rr.Command(), err) - } } // validateOlmAddon tests the OLM addon func validateOlmAddon(ctx context.Context, t *testing.T, profile string) { + t.Skip("Skipping OLM addon test until https://github.com/operator-framework/operator-lifecycle-manager/issues/2534 is resolved") + defer disableAddon(t, "olm", profile) defer PostMortemLogs(t, profile) - - client, err := kapi.Client(profile) - if err != nil { - t.Fatalf("failed to get Kubernetes client for %s: %v", profile, err) - } - start := time.Now() - if err := kapi.WaitForDeploymentToStabilize(client, "olm", "catalog-operator", Minutes(6)); err != nil { - t.Errorf("failed waiting for catalog-operator deployment to stabilize: %v", err) + + if _, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "wait", "--for=condition=ready", "--namespace=olm", "pod", "--selector=app=catalog-operator", "--timeout=90s")); err != nil { + t.Fatalf("failed waiting for pod catalog-operator: %v", err) } t.Logf("catalog-operator stabilized in %s", time.Since(start)) - if err := kapi.WaitForDeploymentToStabilize(client, "olm", "olm-operator", Minutes(6)); err != nil { - t.Errorf("failed waiting for olm-operator deployment to stabilize: %v", err) + + if _, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "wait", "--for=condition=ready", "--namespace=olm", "pod", "--selector=app=olm-operator", "--timeout=90s")); err != nil { + t.Fatalf("failed waiting for pod olm-operator: %v", err) } t.Logf("olm-operator stabilized in %s", time.Since(start)) - if err := kapi.WaitForDeploymentToStabilize(client, "olm", "packageserver", Minutes(6)); err != nil { - t.Errorf("failed waiting for packageserver deployment to stabilize: %v", err) - } - t.Logf("packageserver stabilized in %s", time.Since(start)) - if _, err := PodWait(ctx, t, profile, "olm", "app=catalog-operator", Minutes(6)); err != nil { - t.Fatalf("failed waiting for pod catalog-operator: %v", err) - } - if _, err := PodWait(ctx, t, profile, "olm", "app=olm-operator", Minutes(6)); err != nil { + if _, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "wait", "--for=condition=ready", "--namespace=olm", "pod", "--selector=app=packageserver", "--timeout=90s")); err != nil { t.Fatalf("failed waiting for pod olm-operator: %v", err) } - if _, err := PodWait(ctx, t, profile, "olm", "app=packageserver", Minutes(6)); err != nil { - t.Fatalf("failed waiting for pod packageserver: %v", err) - } - if _, err := PodWait(ctx, t, profile, "olm", "olm.catalogSource=operatorhubio-catalog", Minutes(6)); err != nil { + t.Logf("packageserver stabilized in %s", time.Since(start)) + + if _, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "wait", "--for=condition=ready", "--namespace=olm", "pod", "--selector=olm.catalogSource=operatorhubio-catalog", "--timeout=90s")); err != nil { t.Fatalf("failed waiting for pod operatorhubio-catalog: %v", err) } + t.Logf("operatorhubio-catalog stabilized in %s", time.Since(start)) // Install one sample Operator such as etcd rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "-f", filepath.Join(*testdataDir, "etcd.yaml"))) @@ -516,7 +527,6 @@ func validateOlmAddon(ctx context.Context, t *testing.T, profile string) { } return nil } - // Operator installation takes a while if err := retry.Expo(checkOperatorInstalled, time.Second*3, Minutes(10)); err != nil { t.Errorf("failed checking operator installed: %v", err.Error()) @@ -525,6 +535,8 @@ func validateOlmAddon(ctx context.Context, t *testing.T, profile string) { // validateCSIDriverAndSnapshots tests the csi hostpath driver by creating a persistent volume, snapshotting it and restoring it. func validateCSIDriverAndSnapshots(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "csi-hostpath-driver", profile) + defer disableAddon(t, "volumesnapshots", profile) defer PostMortemLogs(t, profile) client, err := kapi.Client(profile) @@ -613,86 +625,159 @@ func validateCSIDriverAndSnapshots(ctx context.Context, t *testing.T, profile st if err != nil { t.Logf("cleanup with %s failed: %v", rr.Command(), err) } - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "csi-hostpath-driver", "--alsologtostderr", "-v=1")) +} + +// validateGCPAuthNamespaces validates that newly created namespaces contain the gcp-auth secret. +func validateGCPAuthNamespaces(ctx context.Context, t *testing.T, profile string) { + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "ns", "new-namespace")) if err != nil { - t.Errorf("failed to disable csi-hostpath-driver addon: args %q: %v", rr.Command(), err) + t.Fatalf("%s failed: %v", rr.Command(), err) } - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "volumesnapshots", "--alsologtostderr", "-v=1")) - if err != nil { - t.Errorf("failed to disable volumesnapshots addon: args %q: %v", rr.Command(), err) + + logsAsError := func() error { + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "logs", "-l", "app=gcp-auth", "-n", "gcp-auth")) + if err != nil { + return err + } + return errors.New(rr.Output()) + } + + getSecret := func() error { + _, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "secret", "gcp-auth", "-n", "new-namespace")) + if err != nil { + err = fmt.Errorf("%w: gcp-auth container logs: %v", err, logsAsError()) + } + return err + } + + if err := retry.Expo(getSecret, Seconds(2), Minutes(1)); err != nil { + t.Errorf("failed to get secret: %v", err) } } // validateGCPAuthAddon tests the GCP Auth addon with either phony or real credentials and makes sure the files are mounted into pods correctly func validateGCPAuthAddon(ctx context.Context, t *testing.T, profile string) { + defer func() { + disableGCPAuth := func() error { + disableAddon(t, "gcp-auth", profile) + return nil + } + if err := retry.Expo(disableGCPAuth, Minutes(2), Minutes(10), 5); err != nil { + t.Errorf("failed to disable GCP auth addon: %v", err) + } + }() defer PostMortemLogs(t, profile) - // schedule a pod to check environment variables - rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "-f", filepath.Join(*testdataDir, "busybox.yaml"))) - if err != nil { - t.Fatalf("%s failed: %v", rr.Command(), err) - } + t.Run("Namespaces", func(t *testing.T) { + validateGCPAuthNamespaces(ctx, t, profile) + }) - // 8 minutes, because 4 is not enough for images to pull in all cases. - names, err := PodWait(ctx, t, profile, "default", "integration-test=busybox", Minutes(8)) - if err != nil { - t.Fatalf("wait: %v", err) - } + t.Run("FakeCredentials", func(t *testing.T) { + // schedule a pod to check environment variables + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "-f", filepath.Join(*testdataDir, "busybox.yaml"))) + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) + } - // Use this pod to confirm that the env vars are set correctly - rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "exec", names[0], "--", "/bin/sh", "-c", "printenv GOOGLE_APPLICATION_CREDENTIALS")) - if err != nil { - t.Fatalf("printenv creds: %v", err) - } + serviceAccountName := "gcp-auth-test" + // create a dummy service account so we know the pull secret got added + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "sa", serviceAccountName)) + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) + } - got := strings.TrimSpace(rr.Stdout.String()) - expected := "/google-app-creds.json" - if got != expected { - t.Errorf("'printenv GOOGLE_APPLICATION_CREDENTIALS' returned %s, expected %s", got, expected) - } + // 8 minutes, because 4 is not enough for images to pull in all cases. + names, err := PodWait(ctx, t, profile, "default", "integration-test=busybox", Minutes(8)) + if err != nil { + t.Fatalf("wait: %v", err) + } - if !detect.IsOnGCE() || detect.IsCloudShell() { - // Make sure the file contents are correct - rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "exec", names[0], "--", "/bin/sh", "-c", "cat /google-app-creds.json")) + // Use this pod to confirm that the env vars are set correctly + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "exec", names[0], "--", "/bin/sh", "-c", "printenv GOOGLE_APPLICATION_CREDENTIALS")) if err != nil { - t.Fatalf("cat creds: %v", err) + t.Fatalf("printenv creds: %v", err) + } + + got := strings.TrimSpace(rr.Stdout.String()) + expected := "/google-app-creds.json" + if got != expected { + t.Errorf("'printenv GOOGLE_APPLICATION_CREDENTIALS' returned %s, expected %s", got, expected) } - var gotJSON map[string]string - err = json.Unmarshal(bytes.TrimSpace(rr.Stdout.Bytes()), &gotJSON) + // Now check the service account and make sure the "gcp-auth" image pull secret is present + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "describe", "sa", serviceAccountName)) if err != nil { - t.Fatalf("unmarshal json: %v", err) + t.Fatalf("%s failed: %v", rr.Command(), err) } - expectedJSON := map[string]string{ - "client_id": "haha", - "client_secret": "nice_try", - "quota_project_id": "this_is_fake", - "refresh_token": "maybe_next_time", - "type": "authorized_user", + + expectedPullSecret := "gcp-auth" + re := regexp.MustCompile(`.*Image pull secrets:.*`) + secrets := re.FindString(rr.Stdout.String()) + if !strings.Contains(secrets, expectedPullSecret) { + t.Errorf("Unexpected image pull secrets. expected %s, got %s", expectedPullSecret, secrets) } - if !reflect.DeepEqual(gotJSON, expectedJSON) { - t.Fatalf("unexpected creds file: got %v, expected %v", gotJSON, expectedJSON) + if !detect.IsOnGCE() || detect.IsCloudShell() { + // Make sure the file contents are correct + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "exec", names[0], "--", "/bin/sh", "-c", "cat /google-app-creds.json")) + if err != nil { + t.Fatalf("cat creds: %v", err) + } + + var gotJSON map[string]string + err = json.Unmarshal(bytes.TrimSpace(rr.Stdout.Bytes()), &gotJSON) + if err != nil { + t.Fatalf("unmarshal json: %v", err) + } + expectedJSON := map[string]string{ + "client_id": "haha", + "client_secret": "nice_try", + "quota_project_id": "this_is_fake", + "refresh_token": "maybe_next_time", + "type": "authorized_user", + } + + if !reflect.DeepEqual(gotJSON, expectedJSON) { + t.Fatalf("unexpected creds file: got %v, expected %v", gotJSON, expectedJSON) + } } - } - // Check the GOOGLE_CLOUD_PROJECT env var as well - rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "exec", names[0], "--", "/bin/sh", "-c", "printenv GOOGLE_CLOUD_PROJECT")) - if err != nil { - t.Fatalf("print env project: %v", err) - } + // Check the GOOGLE_CLOUD_PROJECT env var as well + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "exec", names[0], "--", "/bin/sh", "-c", "printenv GOOGLE_CLOUD_PROJECT")) + if err != nil { + t.Fatalf("print env project: %v", err) + } - got = strings.TrimSpace(rr.Stdout.String()) - expected = "this_is_fake" - if detect.IsOnGCE() && !detect.IsCloudShell() { - expected = "k8s-minikube" - } - if got != expected { - t.Errorf("'printenv GOOGLE_CLOUD_PROJECT' returned %s, expected %s", got, expected) - } + got = strings.TrimSpace(rr.Stdout.String()) + expected = "this_is_fake" + + if got != expected { + t.Errorf("'printenv GOOGLE_CLOUD_PROJECT' returned %s, expected %s", got, expected) + } + }) + + t.Run("RealCredentials", func(t *testing.T) { + if !detect.IsOnGCE() || detect.IsCloudShell() || VMDriver() { + t.Skip("This test requires a GCE instance (excluding Cloud Shell) with a container based driver") + } - // If we're on GCE, we have proper credentials and can test the registry secrets with an artifact registry image - if detect.IsOnGCE() && !detect.IsCloudShell() { + // If we're on GCE, we have proper credentials and can test the registry secrets with an artifact registry image + t.Skip("skipping GCPAuth addon test until 'Permission \"artifactregistry.repositories.downloadArtifacts\" denied on resource \"projects/k8s-minikube/locations/us/repositories/test-artifacts\" (or it may not exist)' issue is resolved") + // "Setting the environment variable MOCK_GOOGLE_TOKEN to true will prevent using the google application credentials to fetch the token used for the image pull secret. Instead the token will be mocked." + // ref: https://github.com/GoogleContainerTools/gcp-auth-webhook#gcp-auth-webhook + os.Unsetenv("MOCK_GOOGLE_TOKEN") + // re-set MOCK_GOOGLE_TOKEN once we're done + defer os.Setenv("MOCK_GOOGLE_TOKEN", "true") + + os.Unsetenv("GOOGLE_APPLICATION_CREDENTIALS") + os.Unsetenv("GOOGLE_CLOUD_PROJECT") + args := []string{"-p", profile, "addons", "enable", "gcp-auth"} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Errorf("%s failed: %v", rr.Command(), err) + } else if !strings.Contains(rr.Output(), "It seems that you are running in GCE") { + t.Errorf("Unexpected error message: %v", rr.Output()) + } _, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "apply", "-f", filepath.Join(*testdataDir, "private-image.yaml"))) if err != nil { t.Fatalf("print env project: %v", err) @@ -711,16 +796,264 @@ func validateGCPAuthAddon(ctx context.Context, t *testing.T, profile string) { t.Fatalf("print env project: %v", err) } - // Make sure the pod is up and running, which means we successfully pulled the private image down - // 8 minutes, because 4 is not enough for images to pull in all cases. _, err = PodWait(ctx, t, profile, "default", "integration-test=private-image-eu", Minutes(8)) if err != nil { t.Fatalf("wait for private image: %v", err) } + }) +} + +func validateHeadlampAddon(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "headlamp", profile) + defer PostMortemLogs(t, profile) + + rr, err := Run(t, exec.CommandContext(ctx, Target(), "addons", "enable", "headlamp", "-p", profile, "--alsologtostderr", "-v=1")) + if err != nil { + t.Fatalf("failed to enable headlamp addon: args: %q: %v", rr.Command(), err) + } + + if _, err := PodWait(ctx, t, profile, "headlamp", "app.kubernetes.io/name=headlamp", Minutes(8)); err != nil { + t.Fatalf("failed waiting for headlamp pod: %v", err) + } +} + +// validateInspektorGadgetAddon tests the inspektor-gadget addon by ensuring the pod has come up and addon disables +func validateInspektorGadgetAddon(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "inspektor-gadget", profile) + defer PostMortemLogs(t, profile) + + if _, err := PodWait(ctx, t, profile, "gadget", "k8s-app=gadget", Minutes(8)); err != nil { + t.Fatalf("failed waiting for inspektor-gadget pod: %v", err) } +} + +// validateCloudSpannerAddon tests the cloud-spanner addon by ensuring the deployment and pod come up and addon disables +func validateCloudSpannerAddon(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "cloud-spanner", profile) + defer PostMortemLogs(t, profile) + + client, err := kapi.Client(profile) + if err != nil { + t.Fatalf("failed to get Kubernetes client for %s: %v", profile, err) + } + if err := kapi.WaitForDeploymentToStabilize(client, "default", "cloud-spanner-emulator", Minutes(6)); err != nil { + t.Errorf("failed waiting for cloud-spanner-emulator deployment to stabilize: %v", err) + } + if _, err := PodWait(ctx, t, profile, "default", "app=cloud-spanner-emulator", Minutes(6)); err != nil { + t.Errorf("failed waiting for app=cloud-spanner-emulator pod: %v", err) + } +} + +// validateVolcanoAddon tests the Volcano addon, makes sure the Volcano is installed into cluster. +func validateVolcanoAddon(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "volcano", profile) + defer PostMortemLogs(t, profile) + if ContainerRuntime() == "crio" { + t.Skipf("skipping: crio not supported") + } + + volcanoNamespace := "volcano-system" + + client, err := kapi.Client(profile) + if err != nil { + t.Fatalf("failed to get Kubernetes client for %s: %v", profile, err) + } + + // Wait for the volcano component installation to complete + start := time.Now() + var wg sync.WaitGroup + wg.Add(3) + go func() { + if err := kapi.WaitForDeploymentToStabilize(client, volcanoNamespace, "volcano-scheduler", Minutes(6)); err != nil { + t.Errorf("failed waiting for volcano-scheduler deployment to stabilize: %v", err) + } else { + t.Logf("volcano-scheduler stabilized in %s", time.Since(start)) + } + wg.Done() + }() + go func() { + if err := kapi.WaitForDeploymentToStabilize(client, volcanoNamespace, "volcano-admission", Minutes(6)); err != nil { + t.Errorf("failed waiting for volcano-admission deployment to stabilize: %v", err) + } else { + t.Logf("volcano-admission stabilized in %s", time.Since(start)) + } + wg.Done() + }() + go func() { + if err := kapi.WaitForDeploymentToStabilize(client, volcanoNamespace, "volcano-controllers", Minutes(6)); err != nil { + t.Errorf("failed waiting for volcano-controller deployment to stabilize: %v", err) + } else { + t.Logf("volcano-controller stabilized in %s", time.Since(start)) + } + wg.Done() + }() + wg.Wait() + + if _, err := PodWait(ctx, t, profile, volcanoNamespace, "app=volcano-scheduler", Minutes(6)); err != nil { + t.Fatalf("failed waiting for app=volcano-scheduler pod: %v", err) + } + + if _, err := PodWait(ctx, t, profile, volcanoNamespace, "app=volcano-admission", Minutes(6)); err != nil { + t.Fatalf("failed waiting for app=volcano-admission pod: %v", err) + } + + if _, err := PodWait(ctx, t, profile, volcanoNamespace, "app=volcano-controller", Minutes(6)); err != nil { + t.Fatalf("failed waiting for app=volcano-controller pod: %v", err) + } + + // When the volcano deployment is complete, delete the volcano-admission-init job, it will affect the tests + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "delete", "-n", volcanoNamespace, "job", "volcano-admission-init")) + if err != nil { + t.Logf("vcjob creation with %s failed: %v", rr.Command(), err) + } + + // Create a vcjob + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "-f", filepath.Join(*testdataDir, "vcjob.yaml"))) + if err != nil { + t.Logf("vcjob creation with %s failed: %v", rr.Command(), err) + } + + want := "test-job" + checkVolcano := func() error { + // check the vcjob + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "vcjob", "-n", "my-volcano")) + if err != nil { + return err + } + if rr.Stderr.String() != "" { + t.Logf("%v: unexpected stderr: %s", rr.Command(), rr.Stderr) + } + if !strings.Contains(rr.Stdout.String(), want) { + return fmt.Errorf("%v stdout = %q, want %q", rr.Command(), rr.Stdout, want) + } + return nil + } + + if err := retry.Expo(checkVolcano, time.Second*3, Minutes(2)); err != nil { + t.Errorf("failed checking volcano: %v", err.Error()) + } + + // also ensure the job is actually running + if _, err := PodWait(ctx, t, profile, "my-volcano", "volcano.sh/job-name=test-job", Minutes(3)); err != nil { + t.Fatalf("failed waiting for test-local-path pod: %v", err) + } +} + +// validateLocalPathAddon tests the functionality of the storage-provisioner-rancher addon +func validateLocalPathAddon(ctx context.Context, t *testing.T, profile string) { + if NoneDriver() { + t.Skipf("skip local-path test on none driver") + } + defer disableAddon(t, "storage-provisioner-rancher", profile) + defer PostMortemLogs(t, profile) + + // Create a test PVC + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "apply", "-f", filepath.Join(*testdataDir, "storage-provisioner-rancher", "pvc.yaml"))) + if err != nil { + t.Fatalf("kubectl apply pvc.yaml failed: args %q: %v", rr.Command(), err) + } + + // Deploy a simple pod with PVC + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "apply", "-f", filepath.Join(*testdataDir, "storage-provisioner-rancher", "pod.yaml"))) + if err != nil { + t.Fatalf("kubectl apply pod.yaml failed: args %q: %v", rr.Command(), err) + } + if err := PVCWait(ctx, t, profile, "default", "test-pvc", Minutes(5)); err != nil { + t.Fatalf("failed waiting for PVC test-pvc: %v", err) + } + if _, err := PodWait(ctx, t, profile, "default", "run=test-local-path", Minutes(3)); err != nil { + t.Fatalf("failed waiting for test-local-path pod: %v", err) + } + + // Get info about PVC + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "pvc", "test-pvc", "-o=json")) + if err != nil { + t.Fatalf("kubectl get pvc with %s failed: %v", rr.Command(), err) + } + pvc := core.PersistentVolumeClaim{} + if err := json.NewDecoder(bytes.NewReader(rr.Stdout.Bytes())).Decode(&pvc); err != nil { + t.Fatalf("failed decoding json to pvc: %v", err) + } + + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("cat /opt/local-path-provisioner/%s_default_test-pvc/file1", pvc.Spec.VolumeName))) + if err != nil { + t.Fatalf("ssh error: %v", err) + } + + got := rr.Stdout.String() + want := "local-path-provisioner" + if !strings.Contains(got, want) { + t.Fatalf("%v stdout = %q, want %q", rr.Command(), got, want) + } + + // Cleanup + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "delete", "pod", "test-local-path")) + if err != nil { + t.Logf("cleanup with %s failed: %v", rr.Command(), err) + } + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "delete", "pvc", "test-pvc")) + if err != nil { + t.Logf("cleanup with %s failed: %v", rr.Command(), err) + } +} + +// validateEnablingAddonOnNonExistingCluster tests enabling an addon on a non-existing cluster +func validateEnablingAddonOnNonExistingCluster(ctx context.Context, t *testing.T, profile string) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "addons", "enable", "dashboard", "-p", profile)) + if err == nil { + t.Fatalf("enabling addon succeeded when it shouldn't have: %s", rr.Output()) + } + if !strings.Contains(rr.Output(), "To start a cluster, run") { + t.Fatalf("unexpected error was returned: %v", err) + } +} + +// validateDisablingAddonOnNonExistingCluster tests disabling an addon on a non-existing cluster +func validateDisablingAddonOnNonExistingCluster(ctx context.Context, t *testing.T, profile string) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "addons", "disable", "dashboard", "-p", profile)) + if err == nil { + t.Fatalf("disabling addon succeeded when it shouldn't have: %s", rr.Output()) + } + if !strings.Contains(rr.Output(), "To start a cluster, run") { + t.Fatalf("unexpected error was returned: %v", err) + } +} + +// validateNvidiaDevicePlugin tests the nvidia-device-plugin addon by ensuring the pod comes up and the addon disables +func validateNvidiaDevicePlugin(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "nvidia-device-plugin", profile) + defer PostMortemLogs(t, profile) + + if _, err := PodWait(ctx, t, profile, "kube-system", "name=nvidia-device-plugin-ds", Minutes(6)); err != nil { + t.Fatalf("failed waiting for nvidia-device-plugin-ds pod: %v", err) + } +} + +// validateAmdGpuDevicePlugin tests the amd-gpu-device-plugin addon by ensuring the pod comes up and the addon disables +func validateAmdGpuDevicePlugin(ctx context.Context, t *testing.T, profile string) { + if !DockerDriver() || !amd64Platform() { + t.Skipf("skip amd gpu test on all but docker driver and amd64 platform") + } + defer disableAddon(t, "amd-gpu-device-plugin", profile) + defer PostMortemLogs(t, profile) + + if _, err := PodWait(ctx, t, profile, "kube-system", "name=amd-gpu-device-plugin", Minutes(6)); err != nil { + t.Fatalf("failed waiting for amd-gpu-device-plugin pod: %v", err) + } +} + +func validateYakdAddon(ctx context.Context, t *testing.T, profile string) { + defer disableAddon(t, "yakd", profile) + defer PostMortemLogs(t, profile) + + if _, err := PodWait(ctx, t, profile, "yakd-dashboard", "app.kubernetes.io/name=yakd-dashboard", Minutes(2)); err != nil { + t.Fatalf("failed waiting for YAKD - Kubernetes Dashboard pod: %v", err) + } +} - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "disable", "gcp-auth", "--alsologtostderr", "-v=1")) +func disableAddon(t *testing.T, addon, profile string) { + rr, err := Run(t, exec.Command(Target(), "-p", profile, "addons", "disable", addon, "--alsologtostderr", "-v=1")) if err != nil { - t.Errorf("failed disabling gcp-auth addon. arg %q.s %v", rr.Command(), err) + t.Errorf("failed to disable %s addon: args %q: %v", addon, rr.Command(), err) } } diff --git a/test/integration/cert_options_test.go b/test/integration/cert_options_test.go index 6353eac8797b..caedfb13c0c9 100644 --- a/test/integration/cert_options_test.go +++ b/test/integration/cert_options_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -23,6 +23,9 @@ import ( "os/exec" "strings" "testing" + "time" + + "k8s.io/minikube/pkg/drivers/kic/oci" ) // TestCertOptions makes sure minikube certs respect the --apiserver-ips and --apiserver-names parameters @@ -36,8 +39,7 @@ func TestCertOptions(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), Minutes(30)) defer CleanupWithLogs(t, profile, cancel) - // Use the most verbose logging for the simplest test. If it fails, something is very wrong. - args := append([]string{"start", "-p", profile, "--memory=2048", "--apiserver-ips=127.0.0.1", "--apiserver-ips=192.168.15.15", "--apiserver-names=localhost", "--apiserver-names=www.google.com", "--apiserver-port=8555"}, StartArgs()...) + args := append([]string{"start", "-p", profile, "--memory=3072", "--apiserver-ips=127.0.0.1", "--apiserver-ips=192.168.15.15", "--apiserver-names=localhost", "--apiserver-names=www.google.com", "--apiserver-port=8555"}, StartArgs()...) // We can safely override --apiserver-name with if NeedsPortForward() { @@ -69,13 +71,68 @@ func TestCertOptions(t *testing.T) { } // verify that the apiserver is serving on port 8555 + if NeedsPortForward() { // in case of docker/podman on non-linux the port will be a "random assigned port" in kubeconfig + bin := "docker" + if PodmanDriver() { + bin = "podman" + } - rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "config", "view")) + port, err := oci.ForwardedPort(bin, profile, 8555) + if err != nil { + t.Errorf("failed to inspect container for the port %v", err) + } + if port == 0 { + t.Errorf("expected to get a non-zero forwarded port but got %d", port) + } + } else { + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "config", "view")) + if err != nil { + t.Errorf("failed to get kubectl config. args %q : %v", rr.Command(), err) + } + if !strings.Contains(rr.Stdout.String(), "8555") { + t.Errorf("Kubeconfig apiserver server port incorrect. Output of \n 'kubectl config view' = %q", rr.Output()) + } + } + + // Also check the kubeconfig inside minikube using SSH + // located at /etc/kubernetes/admin.conf + args = []string{"ssh", "-p", profile, "--", "sudo cat /etc/kubernetes/admin.conf"} + rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { - t.Errorf("failed to get kubectl config. args %q : %v", rr.Command(), err) + t.Errorf("failed to SSH to minikube with args: %q : %v", rr.Command(), err) } + if !strings.Contains(rr.Stdout.String(), "8555") { - t.Errorf("apiserver server port incorrect. Output of 'kubectl config view' = %q", rr.Output()) + t.Errorf("Internal minikube kubeconfig (admin.conf) does not contains the right api port. %s", rr.Output()) } } + +// TestCertExpiration makes sure minikube can start after its profile certs have expired. +// It does this by configuring minikube certs to expire after 3 minutes, then waiting 3 minutes, then starting again. +// It also makes sure minikube prints a cert expiration warning to the user. +func TestCertExpiration(t *testing.T) { + MaybeParallel(t) + + profile := UniqueProfileName("cert-expiration") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(30)) + defer CleanupWithLogs(t, profile, cancel) + + args := append([]string{"start", "-p", profile, "--memory=3072", "--cert-expiration=3m"}, StartArgs()...) + + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Errorf("failed to start minikube with args: %q : %v", rr.Command(), err) + } + + // Now wait 3 minutes for the certs to expire and make sure minikube starts properly + time.Sleep(time.Minute * 3) + args = append([]string{"start", "-p", profile, "--memory=3072", "--cert-expiration=8760h"}, StartArgs()...) + rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Errorf("failed to start minikube after cert expiration: %q : %v", rr.Command(), err) + } + if !strings.Contains(rr.Output(), "expired") { + t.Errorf("minikube start output did not warn about expired certs: %v", rr.Output()) + } +} diff --git a/test/integration/constats_test.go b/test/integration/constats_test.go new file mode 100644 index 000000000000..a597411e4b98 --- /dev/null +++ b/test/integration/constats_test.go @@ -0,0 +1,23 @@ +//go:build integration + +/* +Copyright 2019 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +const ( + echoServerImage = "kicbase/echo-server" +) diff --git a/test/integration/docker_test.go b/test/integration/docker_test.go index c7db90f6c29d..e7afa7c4e8fe 100644 --- a/test/integration/docker_test.go +++ b/test/integration/docker_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -20,10 +20,16 @@ package integration import ( "context" + "fmt" "os" "os/exec" + "regexp" + "runtime" "strings" "testing" + "time" + + "k8s.io/minikube/pkg/minikube/constants" ) // TestDockerFlags makes sure the --docker-env and --docker-opt parameters are respected @@ -41,7 +47,7 @@ func TestDockerFlags(t *testing.T) { defer CleanupWithLogs(t, profile, cancel) // Use the most verbose logging for the simplest test. If it fails, something is very wrong. - args := append([]string{"start", "-p", profile, "--cache-images=false", "--memory=2048", "--install-addons=false", "--wait=false", "--docker-env=FOO=BAR", "--docker-env=BAZ=BAT", "--docker-opt=debug", "--docker-opt=icc=true", "--alsologtostderr", "-v=5"}, StartArgs()...) + args := append([]string{"start", "-p", profile, "--cache-images=false", "--memory=3072", "--install-addons=false", "--wait=false", "--docker-env=FOO=BAR", "--docker-env=BAZ=BAT", "--docker-opt=debug", "--docker-opt=icc=true", "--alsologtostderr", "-v=5"}, StartArgs()...) rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Errorf("failed to start minikube with args: %q : %v", rr.Command(), err) @@ -81,7 +87,7 @@ func TestForceSystemdFlag(t *testing.T) { defer CleanupWithLogs(t, profile, cancel) // Use the most verbose logging for the simplest test. If it fails, something is very wrong. - args := append([]string{"start", "-p", profile, "--memory=2048", "--force-systemd", "--alsologtostderr", "-v=5"}, StartArgs()...) + args := append([]string{"start", "-p", profile, "--memory=3072", "--force-systemd", "--alsologtostderr", "-v=5"}, StartArgs()...) rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Errorf("failed to start minikube with args: %q : %v", rr.Command(), err) @@ -93,6 +99,8 @@ func TestForceSystemdFlag(t *testing.T) { validateDockerSystemd(ctx, t, profile) case "containerd": validateContainerdSystemd(ctx, t, profile) + case "crio": + validateCrioSystemd(ctx, t, profile) } } @@ -112,13 +120,24 @@ func validateDockerSystemd(ctx context.Context, t *testing.T, profile string) { func validateContainerdSystemd(ctx context.Context, t *testing.T, profile string) { rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", "cat /etc/containerd/config.toml")) if err != nil { - t.Errorf("failed to get docker cgroup driver. args %q: %v", rr.Command(), err) + t.Errorf("failed to get containerd cgroup driver. args %q: %v", rr.Command(), err) } if !strings.Contains(rr.Output(), "SystemdCgroup = true") { t.Fatalf("expected systemd cgroup driver, got: %v", rr.Output()) } } +// validateCrioSystemd makes sure the --force-systemd flag worked with the cri-o container runtime +func validateCrioSystemd(ctx context.Context, t *testing.T, profile string) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", "cat /etc/crio/crio.conf.d/02-crio.conf")) + if err != nil { + t.Errorf("failed to get cri-o cgroup driver. args %q: %v", rr.Command(), err) + } + if !strings.Contains(rr.Output(), "cgroup_manager = \"systemd\"") { + t.Fatalf("expected systemd cgroup driver, got: %v", rr.Output()) + } +} + // TestForceSystemdEnv makes sure the MINIKUBE_FORCE_SYSTEMD environment variable works just as well as the --force-systemd flag func TestForceSystemdEnv(t *testing.T) { if NoneDriver() { @@ -130,7 +149,7 @@ func TestForceSystemdEnv(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), Minutes(30)) defer CleanupWithLogs(t, profile, cancel) - args := append([]string{"start", "-p", profile, "--memory=2048", "--alsologtostderr", "-v=5"}, StartArgs()...) + args := append([]string{"start", "-p", profile, "--memory=3072", "--alsologtostderr", "-v=5"}, StartArgs()...) cmd := exec.CommandContext(ctx, Target(), args...) cmd.Env = append(os.Environ(), "MINIKUBE_FORCE_SYSTEMD=true") rr, err := Run(t, cmd) @@ -145,3 +164,94 @@ func TestForceSystemdEnv(t *testing.T) { validateContainerdSystemd(ctx, t, profile) } } + +// TestDockerEnvContainerd makes sure that minikube docker-env command works when the runtime is containerd +func TestDockerEnvContainerd(t *testing.T) { + t.Log("running with", ContainerRuntime(), DockerDriver(), runtime.GOOS, runtime.GOARCH) + if ContainerRuntime() != constants.Containerd || !DockerDriver() || runtime.GOOS != "linux" { + t.Skip("skipping: TestDockerEnvContainerd can only be run with the containerd runtime on Docker driver") + } + profile := UniqueProfileName("dockerenv") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(30)) + defer CleanupWithLogs(t, profile, cancel) + + // start the minikube with containerd runtime + args := append([]string{"start", "-p", profile}, StartArgs()...) + cmd := exec.CommandContext(ctx, Target(), args...) + startResult, err := Run(t, cmd) + if err != nil { + t.Errorf("failed to start minikube with args: %q : %v", startResult.Command(), err) + } + time.Sleep(time.Second * 10) + + // execute 'minikube docker-env --ssh-host --ssh-add' and extract the 'DOCKER_HOST' environment value + cmd = exec.CommandContext(ctx, "/bin/bash", "-c", fmt.Sprintf("%s docker-env --ssh-host --ssh-add -p %s", Target(), profile)) + result, err := Run(t, cmd) + if err != nil { + t.Errorf("failed to execute minikube docker-env --ssh-host --ssh-add, error: %v, output: %s", err, result.Output()) + } + + output := result.Output() + groups := regexp.MustCompile(`DOCKER_HOST="(\S*)"`).FindStringSubmatch(output) + if len(groups) < 2 { + t.Errorf("DOCKER_HOST doesn't match expected format, output is %s", output) + } + dockerHost := groups[1] + segments := strings.Split(dockerHost, ":") + if len(segments) < 3 { + t.Errorf("DOCKER_HOST doesn't match expected format, output is %s", dockerHost) + } + + // get SSH_AUTH_SOCK + groups = regexp.MustCompile(`SSH_AUTH_SOCK=(\S*)`).FindStringSubmatch(output) + if len(groups) < 2 { + t.Errorf("failed to acquire SSH_AUTH_SOCK, output is %s", output) + } + sshAuthSock := groups[1] + // get SSH_AGENT_PID + groups = regexp.MustCompile(`SSH_AGENT_PID=(\S*)`).FindStringSubmatch(output) + if len(groups) < 2 { + t.Errorf("failed to acquire SSH_AUTH_PID, output is %s", output) + } + sshAgentPid := groups[1] + + cmd = exec.CommandContext(ctx, "/bin/bash", "-c", fmt.Sprintf("SSH_AUTH_SOCK=%s SSH_AGENT_PID=%s DOCKER_HOST=%s docker version", sshAuthSock, sshAgentPid, dockerHost)) + + result, err = Run(t, cmd) + if err != nil { + t.Fatalf("failed to execute 'docker version', error: %v, output: %s", err, result.Output()) + } + // if we are really connecting to nerdctld inside node, docker version output should have word 'nerdctl' + // If everything works properly, in the output of `docker version` you should be able to see something like + /* + Server: + nerdctl: + Version: 1.0.0 + buildctl: + Version: 0.10.3 + GitCommit: c8d25d9a103b70dc300a4fd55e7e576472284e31 + containerd: + Version: 1.6.10 + GitCommit: 770bd0108c32f3fb5c73ae1264f7e503fe7b2661 + */ + if !strings.Contains(result.Output(), "nerdctl") { + t.Fatal("failed to detect keyword 'nerdctl' in output of docker version") + } + + // now try to build an image + cmd = exec.CommandContext(ctx, "/bin/bash", "-c", fmt.Sprintf("SSH_AUTH_SOCK=%s SSH_AGENT_PID=%s DOCKER_HOST=%s DOCKER_BUILDKIT=0 docker build -t local/minikube-dockerenv-containerd-test:latest testdata/docker-env", sshAuthSock, sshAgentPid, dockerHost)) + result, err = Run(t, cmd) + if err != nil { + t.Errorf("failed to build images, error: %v, output:%s", err, result.Output()) + } + + // and check whether that image is really available + cmd = exec.CommandContext(ctx, "/bin/bash", "-c", fmt.Sprintf("SSH_AUTH_SOCK=%s SSH_AGENT_PID=%s DOCKER_HOST=%s docker image ls", sshAuthSock, sshAgentPid, dockerHost)) + result, err = Run(t, cmd) + if err != nil { + t.Fatalf("failed to execute 'docker image ls', error: %v, output: %s", err, result.Output()) + } + if !strings.Contains(result.Output(), "local/minikube-dockerenv-containerd-test") { + t.Fatal("failed to detect image 'local/minikube-dockerenv-containerd-test' in output of docker image ls") + } +} diff --git a/test/integration/driver_install_or_update_test.go b/test/integration/driver_install_or_update_test.go index 24d16623489c..89bdfca9cdd7 100644 --- a/test/integration/driver_install_or_update_test.go +++ b/test/integration/driver_install_or_update_test.go @@ -18,7 +18,6 @@ package integration import ( "fmt" - "io/ioutil" "os" "os/exec" "path/filepath" @@ -32,83 +31,6 @@ import ( "k8s.io/minikube/pkg/version" ) -// TestKVMDriverInstallOrUpdate makes sure our docker-machine-driver-kvm2 binary can be installed properly -func TestKVMDriverInstallOrUpdate(t *testing.T) { - if NoneDriver() { - t.Skip("Skip none driver.") - } - - if runtime.GOOS != "linux" { - t.Skip("Skip if not linux.") - } - - if arm64Platform() { - t.Skip("Skip if arm64. See https://github.com/kubernetes/minikube/issues/10144") - } - - MaybeParallel(t) - - tests := []struct { - name string - path string - }{ - {name: "driver-without-version-support", path: filepath.Join(*testdataDir, "kvm2-driver-without-version")}, - {name: "driver-with-older-version", path: filepath.Join(*testdataDir, "kvm2-driver-older-version")}, - } - - originalPath := os.Getenv("PATH") - defer os.Setenv("PATH", originalPath) - - for _, tc := range tests { - dir, err := ioutil.TempDir("", tc.name) - if err != nil { - t.Fatalf("Expected to create tempdir. test: %s, got: %v", tc.name, err) - } - defer func() { - err := os.RemoveAll(dir) - if err != nil { - t.Errorf("Failed to remove dir %q: %v", dir, err) - } - }() - - pwd, err := os.Getwd() - if err != nil { - t.Fatalf("Error not expected when getting working directory. test: %s, got: %v", tc.name, err) - } - - path := filepath.Join(pwd, tc.path) - - _, err = os.Stat(filepath.Join(path, "docker-machine-driver-kvm2")) - if err != nil { - t.Fatalf("Expected driver to exist. test: %s, got: %v", tc.name, err) - } - - // change permission to allow driver to be executable - err = os.Chmod(filepath.Join(path, "docker-machine-driver-kvm2"), 0700) - if err != nil { - t.Fatalf("Expected not expected when changing driver permission. test: %s, got: %v", tc.name, err) - } - - os.Setenv("PATH", fmt.Sprintf("%s:%s", path, originalPath)) - - // NOTE: This should be a real version, as it impacts the downloaded URL - newerVersion, err := semver.Make("1.3.0") - if err != nil { - t.Fatalf("Expected new semver. test: %v, got: %v", tc.name, err) - } - - err = auxdriver.InstallOrUpdate("kvm2", dir, newerVersion, true, true) - if err != nil { - t.Fatalf("Failed to update driver to %v. test: %s, got: %v", newerVersion, tc.name, err) - } - - _, err = os.Stat(filepath.Join(dir, "docker-machine-driver-kvm2")) - if err != nil { - t.Fatalf("Expected driver to be download. test: %s, got: %v", tc.name, err) - } - } -} - // TestHyperKitDriverInstallOrUpdate makes sure our docker-machine-driver-hyperkit binary can be installed properly func TestHyperKitDriverInstallOrUpdate(t *testing.T) { if runtime.GOOS != "darwin" { @@ -129,16 +51,7 @@ func TestHyperKitDriverInstallOrUpdate(t *testing.T) { defer os.Setenv("PATH", originalPath) for _, tc := range tests { - dir, err := ioutil.TempDir("", tc.name) - if err != nil { - t.Fatalf("Expected to create tempdir. test: %s, got: %v", tc.name, err) - } - defer func() { - err := os.RemoveAll(dir) - if err != nil { - t.Errorf("Failed to remove dir %q: %v", dir, err) - } - }() + dir := t.TempDir() pwd, err := os.Getwd() if err != nil { @@ -170,7 +83,7 @@ func TestHyperKitDriverInstallOrUpdate(t *testing.T) { t.Skipf("password required to execute 'sudo', skipping remaining test") } - err = auxdriver.InstallOrUpdate("hyperkit", dir, newerVersion, false, true) + err = auxdriver.InstallOrUpdate("hyperkit", dir, false, true) if err != nil { t.Fatalf("Failed to update driver to %v. test: %s, got: %v", newerVersion, tc.name, err) } @@ -213,15 +126,10 @@ func TestHyperkitDriverSkipUpgrade(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { - mkDir, drvPath, err := prepareTempMinikubeDirWithHyperkitDriver(tc.name, tc.path) + mkDir, drvPath, err := prepareTempMinikubeDirWithHyperkitDriver(t, tc.path) if err != nil { t.Fatalf("Failed to prepare tempdir. test: %s, got: %v", tc.name, err) } - defer func() { - if err := os.RemoveAll(mkDir); err != nil { - t.Errorf("Failed to remove mkDir %q: %v", mkDir, err) - } - }() cmd := exec.Command(Target(), "start", "--download-only", "--interactive=false", "--driver=hyperkit") cmd.Stdout = os.Stdout @@ -266,15 +174,11 @@ func driverVersion(path string) (string, error) { // prepareTempMinikubeDirWithHyperkitDriver creates a temp .minikube directory // with structure essential to testing of hyperkit driver updates -func prepareTempMinikubeDirWithHyperkitDriver(name, driver string) (string, string, error) { - temp, err := ioutil.TempDir("", name) - if err != nil { - return "", "", fmt.Errorf("failed to create tempdir: %v", err) - } +func prepareTempMinikubeDirWithHyperkitDriver(t *testing.T, driver string) (string, string, error) { + temp := t.TempDir() mkDir := filepath.Join(temp, ".minikube") mkBinDir := filepath.Join(mkDir, "bin") - err = os.MkdirAll(mkBinDir, 0777) - if err != nil { + if err := os.MkdirAll(mkBinDir, 0777); err != nil { return "", "", fmt.Errorf("failed to prepare tempdir: %v", err) } @@ -294,7 +198,7 @@ func prepareTempMinikubeDirWithHyperkitDriver(name, driver string) (string, stri } // try to copy cached files to the temp minikube folder to avoid downloading of iso and preloads - _ = CopyDir(filepath.Join(localpath.MakeMiniPath("cache")), filepath.Join(mkDir, "cache")) + _ = CopyDir(localpath.MakeMiniPath("cache"), filepath.Join(mkDir, "cache")) // change permission to allow driver to be executable if err = os.Chmod(testDriverPath, 0755); err != nil { diff --git a/test/integration/error_spam_test.go b/test/integration/error_spam_test.go index 6333e5eace6c..a4e42fe3a64d 100644 --- a/test/integration/error_spam_test.go +++ b/test/integration/error_spam_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -49,6 +49,9 @@ var stderrAllow = []string{ `Your cgroup does not allow setting memory.`, // progress bar output ` > .*`, + // Warning of issues with specific Kubernetes versions + `Kubernetes .* has a known `, + `For more information, see`, } // stderrAllowRe combines rootCauses into a single regex @@ -73,7 +76,7 @@ func TestErrorSpam(t *testing.T) { t.Run("setup", func(t *testing.T) { // This should likely use multi-node once it's ready // use `--log_dir` flag to run isolated and avoid race condition - ie, failing to clean up (locked) log files created by other concurently-run tests, or counting them in results - args := append([]string{"start", "-p", profile, "-n=1", "--memory=2250", "--wait=false", fmt.Sprintf("--log_dir=%s", logDir)}, StartArgs()...) + args := append([]string{"start", "-p", profile, "-n=1", "--memory=3072", "--wait=false", fmt.Sprintf("--log_dir=%s", logDir)}, StartArgs()...) rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { @@ -108,16 +111,6 @@ func TestErrorSpam(t *testing.T) { t.Logf("minikube stderr:\n%s", stderr) } - steps := []string{ - "Generating certificates and keys ...", - "Booting up control plane ...", - "Configuring RBAC rules ...", - } - for _, step := range steps { - if !strings.Contains(stdout, step) { - t.Errorf("missing kubeadm init sub-step %q", step) - } - } }) logTests := []struct { diff --git a/test/integration/findmnt/findmnt.go b/test/integration/findmnt/findmnt.go new file mode 100644 index 000000000000..edfb0a31b193 --- /dev/null +++ b/test/integration/findmnt/findmnt.go @@ -0,0 +1,88 @@ +//go:build integration + +/* +Copyright 2025 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// package parse findmnt command results. +package findmnt + +import ( + "encoding/json" + "slices" +) + +// Filesystem is a findmnt --json filesystem node. It may include children +// filesystems. +type Filesystem struct { + Target string `json:"target"` + Source string `json:"source"` + FSType string `json:"fstype"` + Options string `json:"options"` + Children []Filesystem `json:"children,omitempty"` +} + +// Result if findmnt --json result. +type Result struct { + Filesystems []Filesystem `json:"filesystems"` +} + +// ParseOutput parse findmnt --json output. +func ParseOutput(output []byte) (*Result, error) { + r := &Result{} + if err := json.Unmarshal(output, r); err != nil { + return nil, err + } + return r, nil +} + +func (r *Result) Equal(other *Result) bool { + if r == other { + return true + } + if other == nil { + return false + } + if !slices.EqualFunc(r.Filesystems, other.Filesystems, func(a, b Filesystem) bool { + return a.Equal(&b) + }) { + return false + } + return true +} + +func (f *Filesystem) Equal(other *Filesystem) bool { + if f == other { + return true + } + if other == nil { + return false + } + if f.Target != other.Target { + return false + } + if f.Source != other.Source { + return false + } + if f.FSType != other.FSType { + return false + } + if !slices.EqualFunc(f.Children, other.Children, func(a, b Filesystem) bool { + return a.Equal(&b) + }) { + return false + } + return true +} diff --git a/test/integration/findmnt/findmnt_test.go b/test/integration/findmnt/findmnt_test.go new file mode 100644 index 000000000000..0ea87e42ac9b --- /dev/null +++ b/test/integration/findmnt/findmnt_test.go @@ -0,0 +1,91 @@ +//go:build integration + +/* +Copyright 2025 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package findmnt_test + +import ( + "os" + "testing" + + "k8s.io/minikube/test/integration/findmnt" +) + +func TestParseAllMounts(t *testing.T) { + // Output from `findmnt --json` command. + output, err := os.ReadFile("testdata/findmnt.json") + if err != nil { + t.Fatal(err) + } + result, err := findmnt.ParseOutput(output) + if err != nil { + t.Fatal(err) + } + + assert(t, len(result.Filesystems), 1) + + root := result.Filesystems[0] + assert(t, root.Target, "/") + assert(t, root.Source, "tmpfs") + assert(t, root.FSType, "tmpfs") + assert(t, root.Options, "rw,relatime,size=5469192k") + assert(t, len(root.Children), 20) + + dev := root.Children[0] + assert(t, dev.Target, "/dev") + assert(t, dev.Source, "devtmpfs") + assert(t, dev.FSType, "devtmpfs") + assert(t, dev.Options, "rw,relatime,size=2838500k,nr_inodes=709625,mode=755") + assert(t, len(dev.Children), 4) + + devShm := dev.Children[0] + assert(t, devShm.Target, "/dev/shm") + assert(t, devShm.Source, "tmpfs") + assert(t, devShm.FSType, "tmpfs") + assert(t, devShm.Options, "rw,nosuid,nodev") +} + +func TestParseSingle(t *testing.T) { + // Output from `findmnt --json /proc` command. + output, err := os.ReadFile("testdata/findmnt-proc.json") + if err != nil { + t.Fatal(err) + } + result, err := findmnt.ParseOutput(output) + if err != nil { + t.Fatal(err) + } + expected := &findmnt.Result{ + Filesystems: []findmnt.Filesystem{ + { + Target: "/proc", + Source: "proc", + FSType: "proc", + Options: "rw,relatime", + }, + }, + } + if !result.Equal(expected) { + t.Fatalf("expected %+v, got %+v", expected, result) + } +} + +func assert[T comparable](t *testing.T, a, b T) { + if a != b { + t.Fatalf("expected \"%v\", got \"%v\"", b, a) + } +} diff --git a/test/integration/findmnt/testdata/findmnt-proc.json b/test/integration/findmnt/testdata/findmnt-proc.json new file mode 100644 index 000000000000..45c6650f6f0a --- /dev/null +++ b/test/integration/findmnt/testdata/findmnt-proc.json @@ -0,0 +1,10 @@ +{ + "filesystems": [ + { + "target": "/proc", + "source": "proc", + "fstype": "proc", + "options": "rw,relatime" + } + ] +} diff --git a/test/integration/findmnt/testdata/findmnt.json b/test/integration/findmnt/testdata/findmnt.json new file mode 100644 index 000000000000..af19abba61b8 --- /dev/null +++ b/test/integration/findmnt/testdata/findmnt.json @@ -0,0 +1,404 @@ +{ + "filesystems": [ + { + "target": "/", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,relatime,size=5469192k", + "children": [ + { + "target": "/dev", + "source": "devtmpfs", + "fstype": "devtmpfs", + "options": "rw,relatime,size=2838500k,nr_inodes=709625,mode=755", + "children": [ + { + "target": "/dev/shm", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev" + },{ + "target": "/dev/pts", + "source": "devpts", + "fstype": "devpts", + "options": "rw,relatime,gid=5,mode=620,ptmxmode=000" + },{ + "target": "/dev/mqueue", + "source": "mqueue", + "fstype": "mqueue", + "options": "rw,nosuid,nodev,noexec,relatime" + },{ + "target": "/dev/hugepages", + "source": "hugetlbfs", + "fstype": "hugetlbfs", + "options": "rw,nosuid,nodev,relatime,pagesize=2M" + } + ] + },{ + "target": "/proc", + "source": "proc", + "fstype": "proc", + "options": "rw,relatime", + "children": [ + { + "target": "/proc/fs/nfsd", + "source": "nfsd", + "fstype": "nfsd", + "options": "rw,relatime" + } + ] + },{ + "target": "/sys", + "source": "sysfs", + "fstype": "sysfs", + "options": "rw,relatime", + "children": [ + { + "target": "/sys/kernel/security", + "source": "securityfs", + "fstype": "securityfs", + "options": "rw,nosuid,nodev,noexec,relatime" + },{ + "target": "/sys/fs/cgroup", + "source": "cgroup2", + "fstype": "cgroup2", + "options": "rw,nosuid,nodev,noexec,relatime" + },{ + "target": "/sys/fs/pstore", + "source": "pstore", + "fstype": "pstore", + "options": "rw,nosuid,nodev,noexec,relatime" + },{ + "target": "/sys/fs/bpf", + "source": "bpf", + "fstype": "bpf", + "options": "rw,nosuid,nodev,noexec,relatime,mode=700" + },{ + "target": "/sys/kernel/debug", + "source": "debugfs", + "fstype": "debugfs", + "options": "rw,nosuid,nodev,noexec,relatime" + },{ + "target": "/sys/fs/fuse/connections", + "source": "fusectl", + "fstype": "fusectl", + "options": "rw,nosuid,nodev,noexec,relatime" + },{ + "target": "/sys/kernel/config", + "source": "configfs", + "fstype": "configfs", + "options": "rw,nosuid,nodev,noexec,relatime" + } + ] + },{ + "target": "/run", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev,size=1215376k,nr_inodes=819200,mode=755", + "children": [ + { + "target": "/run/credentials/systemd-journald.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/systemd-sysctl.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/systemd-network-generator.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/systemd-udev-load-credentials.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/systemd-tmpfiles-setup-dev-early.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/systemd-tmpfiles-setup-dev.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/systemd-tmpfiles-setup.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/systemd-resolved.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/systemd-vconsole-setup.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/systemd-networkd.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/containerd/io.containerd.grpc.v1.cri/sandboxes/e34d86201b50359fb326eed193a61a235a129e1a96da99941dad9df95fe2b59e/shm", + "source": "shm", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev,noexec,relatime,size=65536k" + },{ + "target": "/run/containerd/io.containerd.grpc.v1.cri/sandboxes/284cf9a7218628d934052f4605be7b63714ef412ef3c2856fc221c953f23dc34/shm", + "source": "shm", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev,noexec,relatime,size=65536k" + },{ + "target": "/run/containerd/io.containerd.grpc.v1.cri/sandboxes/c10eed7ce9d2eba7b8fa9cf19579da9e0b4ae7bfcb0980e42eae953937e3b896/shm", + "source": "shm", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev,noexec,relatime,size=65536k" + },{ + "target": "/run/containerd/io.containerd.grpc.v1.cri/sandboxes/6aa921607668d84b4f739ae03cd1ead5fba746c5e8d8e18a01000c658fa584fb/shm", + "source": "shm", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev,noexec,relatime,size=65536k" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/e34d86201b50359fb326eed193a61a235a129e1a96da99941dad9df95fe2b59e/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/18/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/52/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/52/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/6aa921607668d84b4f739ae03cd1ead5fba746c5e8d8e18a01000c658fa584fb/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/18/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/54/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/54/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/284cf9a7218628d934052f4605be7b63714ef412ef3c2856fc221c953f23dc34/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/18/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/51/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/51/work,uuid=on" + },{ + "target": "/run/credentials/serial-getty@hvc0.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/credentials/getty@tty1.service", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "ro,nosuid,nodev,noexec,relatime,nosymfollow,size=1024k,nr_inodes=1024,mode=700,noswap" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/3eb5d813911660b252526a94c7eb1363ccce5f1318fa6e5abba72b39de73a20c/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/13/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/12/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/11/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/10/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/9/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/8/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/7/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/6/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/5/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/4/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/3/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/2/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/1/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/55/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/55/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/9d418ec1eda31185157bb4f852d5f4be99b8a729eca29b70938d6a7f0b27867a/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/14/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/12/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/11/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/10/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/9/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/8/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/7/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/6/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/5/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/4/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/3/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/2/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/1/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/56/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/56/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/2f34cfea501a50923a0782ae9aae2dd5f4bd7906028cdcb704c0ff4e4a9bd321/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/32/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/31/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/30/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/29/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/28/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/27/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/26/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/25/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/24/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/23/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/21/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/20/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/19/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/57/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/57/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/c10eed7ce9d2eba7b8fa9cf19579da9e0b4ae7bfcb0980e42eae953937e3b896/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/18/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/53/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/53/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/f99029c85cc7ad3ef564c21707a9c3662cd5d1872466c0083e82391bd5403614/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/15/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/12/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/11/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/10/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/9/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/8/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/7/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/6/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/5/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/4/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/3/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/2/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/1/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/58/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/58/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.grpc.v1.cri/sandboxes/a7e20dbaa4471a5f676229a545386c326fede950becf532ddfa83c56a8b1487d/shm", + "source": "shm", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev,noexec,relatime,size=65536k" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/a7e20dbaa4471a5f676229a545386c326fede950becf532ddfa83c56a8b1487d/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/18/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/59/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/59/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.grpc.v1.cri/sandboxes/11d110ba7b0e81e3d0c90c2f05d9e763307798026d88ec1ab42dd0b5cc3442bf/shm", + "source": "shm", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev,noexec,relatime,size=65536k" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/e1077355f5e5ca66359243230d6a2adf3dabb8ac21b4902e018142c8521c9e35/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/17/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/16/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/60/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/60/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/aba169f7db1e656cc6416422e579493d9b3298a761b67b7eb3c29977b7b4ecc7/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/46/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/65/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/65/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/11d110ba7b0e81e3d0c90c2f05d9e763307798026d88ec1ab42dd0b5cc3442bf/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/18/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/61/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/61/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.grpc.v1.cri/sandboxes/26fa1dec99afc4b7241453f5b6d0ecff799e23802e84347886de16d8b6c64da1/shm", + "source": "shm", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev,noexec,relatime,size=65536k" + },{ + "target": "/run/netns/cni-be490d49-34fa-1dab-8aee-df4c972de1f9", + "source": "nsfs[net:[4026532231]]", + "fstype": "nsfs", + "options": "rw" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/26fa1dec99afc4b7241453f5b6d0ecff799e23802e84347886de16d8b6c64da1/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/18/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/63/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/63/work,uuid=on" + },{ + "target": "/run/containerd/io.containerd.runtime.v2.task/k8s.io/29341fb4424e020fae1a352baaf567840b919014229ae56505a97a0a2bcb7b6d/rootfs", + "source": "overlay", + "fstype": "overlay", + "options": "rw,relatime,lowerdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/45/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/44/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/41/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/40/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/39/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/38/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/37/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/36/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/35/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/34/fs:/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/33/fs,upperdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/64/fs,workdir=/mnt/vdb1/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/64/work,uuid=on" + } + ] + },{ + "target": "/tmp", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,nosuid,nodev,size=3038440k,nr_inodes=1048576", + "children": [ + { + "target": "/tmp/hostpath_pv", + "source": "/dev/vdb1[/hostpath_pv]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/tmp/hostpath-provisioner", + "source": "/dev/vdb1[/hostpath-provisioner]", + "fstype": "ext4", + "options": "rw,relatime" + } + ] + },{ + "target": "/var/lib/containers/storage/overlay", + "source": "tmpfs[/var/lib/containers/storage/overlay]", + "fstype": "tmpfs", + "options": "rw,relatime,size=5469192k" + },{ + "target": "/mnt/vdb1", + "source": "/dev/vdb1", + "fstype": "ext4", + "options": "rw,relatime", + "children": [ + { + "target": "/mnt/vdb1/var/lib/kubelet/pods/9c2b9245-eb18-4173-a5a2-e7c4828def00/volumes/kubernetes.io~projected/kube-api-access-ncqgj", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,relatime,size=6076876k,noswap" + },{ + "target": "/mnt/vdb1/var/lib/kubelet/pods/2899edb5-37eb-4489-a08a-bd6c751e5f6b/volumes/kubernetes.io~projected/kube-api-access-hfq4d", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,relatime,size=6076876k,noswap" + },{ + "target": "/mnt/vdb1/var/lib/kubelet/pods/85f2d794-a45a-425b-96ce-6887df3693d4/volumes/kubernetes.io~projected/kube-api-access-g2tzq", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,relatime,size=174080k,noswap" + } + ] + },{ + "target": "/var/lib/boot2docker", + "source": "/dev/vdb1[/var/lib/boot2docker]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/lib/docker", + "source": "/dev/vdb1[/var/lib/docker]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/lib/containerd", + "source": "/dev/vdb1[/var/lib/containerd]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/lib/buildkit", + "source": "/dev/vdb1[/var/lib/buildkit]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/lib/containers", + "source": "/dev/vdb1[/var/lib/containers]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/log", + "source": "/dev/vdb1[/var/log]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/tmp", + "source": "/dev/vdb1[/var/tmp]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/lib/kubelet", + "source": "/dev/vdb1[/var/lib/kubelet]", + "fstype": "ext4", + "options": "rw,relatime", + "children": [ + { + "target": "/var/lib/kubelet/pods/9c2b9245-eb18-4173-a5a2-e7c4828def00/volumes/kubernetes.io~projected/kube-api-access-ncqgj", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,relatime,size=6076876k,noswap" + },{ + "target": "/var/lib/kubelet/pods/2899edb5-37eb-4489-a08a-bd6c751e5f6b/volumes/kubernetes.io~projected/kube-api-access-hfq4d", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,relatime,size=6076876k,noswap" + },{ + "target": "/var/lib/kubelet/pods/85f2d794-a45a-425b-96ce-6887df3693d4/volumes/kubernetes.io~projected/kube-api-access-g2tzq", + "source": "tmpfs", + "fstype": "tmpfs", + "options": "rw,relatime,size=174080k,noswap" + } + ] + },{ + "target": "/var/lib/cni", + "source": "/dev/vdb1[/var/lib/cni]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/data", + "source": "/dev/vdb1[/data]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/lib/minikube", + "source": "/dev/vdb1[/var/lib/minikube]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/lib/toolbox", + "source": "/dev/vdb1[/var/lib/toolbox]", + "fstype": "ext4", + "options": "rw,relatime" + },{ + "target": "/var/lib/minishift", + "source": "/dev/vdb1[/var/lib/minishift]", + "fstype": "ext4", + "options": "rw,relatime" + } + ] + } + ] +} diff --git a/test/integration/functional_test.go b/test/integration/functional_test.go index 10bee2cbbfd7..9888cf90babe 100644 --- a/test/integration/functional_test.go +++ b/test/integration/functional_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -24,7 +24,8 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "io" + "net" "net/http" "net/url" "os" @@ -41,17 +42,21 @@ import ( "k8s.io/minikube/pkg/drivers/kic/oci" "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/minikube/constants" + "k8s.io/minikube/pkg/minikube/detect" "k8s.io/minikube/pkg/minikube/localpath" "k8s.io/minikube/pkg/minikube/reason" + "k8s.io/minikube/pkg/minikube/service" "k8s.io/minikube/pkg/util/retry" "github.com/blang/semver/v4" "github.com/elazarl/goproxy" "github.com/hashicorp/go-retryablehttp" - "github.com/otiai10/copy" + cp "github.com/otiai10/copy" "github.com/phayes/freeport" "github.com/pkg/errors" "golang.org/x/build/kubernetes/api" + "k8s.io/minikube/pkg/minikube/cruntime" ) // validateFunc are for subtests that share a single setup @@ -63,13 +68,30 @@ var apiPortTest = 8441 // Store the proxy session so we can clean it up at the end var mitm *StartSession -var runCorpProxy = GithubActionRunner() && runtime.GOOS == "linux" && !arm64Platform() +var runCorpProxy = detect.GithubActionRunner() && runtime.GOOS == "linux" && !arm64Platform() // TestFunctional are functionality tests which can safely share a profile in parallel func TestFunctional(t *testing.T) { + testFunctional(t, "") +} + +// TestFunctionalNewestKubernetes are functionality run functional tests using +// NewestKubernetesVersion +func TestFunctionalNewestKubernetes(t *testing.T) { + if strings.Contains(*startArgs, "--kubernetes-version") || constants.NewestKubernetesVersion == constants.DefaultKubernetesVersion { + t.Skip() + } + k8sVersionString := constants.NewestKubernetesVersion + t.Run("Version"+k8sVersionString, func(t *testing.T) { + testFunctional(t, k8sVersionString) + }) + +} +func testFunctional(t *testing.T, k8sVersion string) { profile := UniqueProfileName("functional") - ctx, cancel := context.WithTimeout(context.Background(), Minutes(40)) + ctx := context.WithValue(context.Background(), ContextKey("k8sVersion"), k8sVersion) + ctx, cancel := context.WithTimeout(ctx, Minutes(40)) defer func() { if !*cleanup { return @@ -81,7 +103,6 @@ func TestFunctional(t *testing.T) { Cleanup(t, profile, cancel) }() - // Serial tests t.Run("serial", func(t *testing.T) { tests := []struct { @@ -91,7 +112,7 @@ func TestFunctional(t *testing.T) { {"CopySyncFile", setupFileSync}, // Set file for the file sync test case {"StartWithProxy", validateStartWithProxy}, // Set everything else up for success {"AuditLog", validateAuditAfterStart}, // check audit feature works - {"SoftStart", validateSoftStart}, // do a soft start. ensure config didnt change. + {"SoftStart", validateSoftStart}, // do a soft start. ensure config didn't change. {"KubeContext", validateKubeContext}, // Racy: must come immediately after "minikube start" {"KubectlGetPods", validateKubectlGetPods}, // Make sure apiserver is up {"CacheCmd", validateCacheCmd}, // Caches images needed for subsequent tests because of proxy @@ -101,6 +122,7 @@ func TestFunctional(t *testing.T) { {"ComponentHealth", validateComponentHealth}, {"LogsCmd", validateLogsCmd}, {"LogsFileCmd", validateLogsFileCmd}, + {"InvalidService", validateInvalidService}, } for _, tc := range tests { tc := tc @@ -138,6 +160,7 @@ func TestFunctional(t *testing.T) { {"MountCmd", validateMountCmd}, {"ProfileCmd", validateProfileCmd}, {"ServiceCmd", validateServiceCmd}, + {"ServiceCmdConnect", validateServiceCmdConnect}, {"AddonsCmd", validateAddonsCmd}, {"PersistentVolumeClaim", validatePersistentVolumeClaim}, {"TunnelCmd", validateTunnelCmd}, @@ -150,13 +173,10 @@ func TestFunctional(t *testing.T) { {"DockerEnv", validateDockerEnv}, {"PodmanEnv", validatePodmanEnv}, {"NodeLabels", validateNodeLabels}, - {"LoadImage", validateLoadImage}, - {"RemoveImage", validateRemoveImage}, - {"LoadImageFromFile", validateLoadImageFromFile}, - {"BuildImage", validateBuildImage}, - {"ListImages", validateListImages}, + {"ImageCommands", validateImageCommands}, {"NonActiveRuntimeDisabled", validateNotActiveRuntimeDisabled}, {"Version", validateVersionCmd}, + {"License", validateLicenseCmd}, } for _, tc := range tests { tc := tc @@ -178,16 +198,14 @@ func cleanupUnwantedImages(ctx context.Context, t *testing.T, profile string) { if err != nil { t.Skipf("docker is not installed, cannot delete docker images") } else { - t.Run("delete busybox image", func(t *testing.T) { - newImage := fmt.Sprintf("docker.io/library/busybox:load-%s", profile) - rr, err := Run(t, exec.CommandContext(ctx, "docker", "rmi", "-f", newImage)) - if err != nil { - t.Logf("failed to remove image busybox from docker images. args %q: %v", rr.Command(), err) - } - newImage = fmt.Sprintf("docker.io/library/busybox:remove-%s", profile) - rr, err = Run(t, exec.CommandContext(ctx, "docker", "rmi", "-f", newImage)) - if err != nil { - t.Logf("failed to remove image busybox from docker images. args %q: %v", rr.Command(), err) + t.Run("delete echo-server images", func(t *testing.T) { + tags := []string{"1.0", profile} + for _, tag := range tags { + image := fmt.Sprintf("%s:%s", echoServerImage, tag) + rr, err := Run(t, exec.CommandContext(ctx, "docker", "rmi", "-f", image)) + if err != nil { + t.Logf("failed to remove image %q from docker images. args %q: %v", image, rr.Command(), err) + } } }) t.Run("delete my-image image", func(t *testing.T) { @@ -206,18 +224,19 @@ func cleanupUnwantedImages(ctx context.Context, t *testing.T, profile string) { } }) } - } // validateNodeLabels checks if minikube cluster is created with correct kubernetes's node label func validateNodeLabels(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) + // docs: Get the node labels from the cluster with `kubectl get nodes` rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "nodes", "--output=go-template", "--template='{{range $k, $v := (index .items 0).metadata.labels}}{{$k}} {{end}}'")) if err != nil { t.Errorf("failed to 'kubectl get nodes' with args %q: %v", rr.Command(), err) } - expectedLabels := []string{"minikube.k8s.io/commit", "minikube.k8s.io/version", "minikube.k8s.io/updated_at", "minikube.k8s.io/name"} + // docs: check if the node labels matches with the expected Minikube labels: `minikube.k8s.io/*` + expectedLabels := []string{"minikube.k8s.io/commit", "minikube.k8s.io/version", "minikube.k8s.io/updated_at", "minikube.k8s.io/name", "minikube.k8s.io/primary"} for _, el := range expectedLabels { if !strings.Contains(rr.Output(), el) { t.Errorf("expected to have label %q in node labels but got : %s", el, rr.Output()) @@ -225,308 +244,328 @@ func validateNodeLabels(ctx context.Context, t *testing.T, profile string) { } } -// validateLoadImage makes sure that `minikube image load` works as expected -func validateLoadImage(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("load image not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) - // pull busybox - busyboxImage := "busybox:1.33" - rr, err := Run(t, exec.CommandContext(ctx, "docker", "pull", busyboxImage)) +// tagAndLoadImage is a helper function to pull, tag, load image (decreases cyclomatic complexity for linter). +func tagAndLoadImage(ctx context.Context, t *testing.T, profile, taggedImage string) { + newPulledImage := fmt.Sprintf("%s:%s", echoServerImage, "latest") + rr, err := Run(t, exec.CommandContext(ctx, "docker", "pull", newPulledImage)) if err != nil { t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) } - // tag busybox - newImage := fmt.Sprintf("docker.io/library/busybox:load-%s", profile) - rr, err = Run(t, exec.CommandContext(ctx, "docker", "tag", busyboxImage, newImage)) + rr, err = Run(t, exec.CommandContext(ctx, "docker", "tag", newPulledImage, taggedImage)) if err != nil { t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) } - // try to load the new image into minikube - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", newImage)) + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", "--daemon", taggedImage, "--alsologtostderr")) if err != nil { - t.Fatalf("loading image into minikube: %v\n%s", err, rr.Output()) - } - - // make sure the image was correctly loaded - rr, err = inspectImage(ctx, t, profile, newImage) - if err != nil { - t.Fatalf("listing images: %v\n%s", err, rr.Output()) - } - if !strings.Contains(rr.Output(), fmt.Sprintf("busybox:load-%s", profile)) { - t.Fatalf("expected %s to be loaded into minikube but the image is not there", newImage) + t.Fatalf("loading image into minikube from daemon: %v\n%s", err, rr.Output()) } + checkImageExists(ctx, t, profile, taggedImage) } -// validateLoadImageFromFile makes sure that `minikube image load` works from a local file -func validateLoadImageFromFile(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("load image not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) - // pull busybox - busyboxImage := "busybox:1.31" - rr, err := Run(t, exec.CommandContext(ctx, "docker", "pull", busyboxImage)) - if err != nil { - t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) - } +// runImageList is a helper function to run 'image ls' command test. +func runImageList(ctx context.Context, t *testing.T, profile, testName, format, expectedFormat string) { + expectedResult := expectedImageFormat(expectedFormat) - tag := fmt.Sprintf("load-from-file-%s", profile) - taggedImage := fmt.Sprintf("docker.io/library/busybox:%s", tag) - rr, err = Run(t, exec.CommandContext(ctx, "docker", "tag", busyboxImage, taggedImage)) - if err != nil { - t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) - } + // docs: Make sure image listing works by `minikube image ls` + t.Run(testName, func(t *testing.T) { + MaybeParallel(t) - // save image to file - imageFile := "busybox.tar" - rr, err = Run(t, exec.CommandContext(ctx, "docker", "save", "-o", imageFile, taggedImage)) - if err != nil { - t.Fatalf("failed to save image to file: %v\n%s", err, rr.Output()) - } - defer os.Remove(imageFile) + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "ls", "--format", format, "--alsologtostderr")) + if err != nil { + t.Fatalf("listing image with minikube: %v\n%s", err, rr.Output()) + } + if rr.Stdout.Len() > 0 { + t.Logf("(dbg) Stdout: %s:\n%s", rr.Command(), rr.Stdout) + } + if rr.Stderr.Len() > 0 { + t.Logf("(dbg) Stderr: %s:\n%s", rr.Command(), rr.Stderr) + } - // try to load the new image into minikube - imagePath, err := filepath.Abs(imageFile) - if err != nil { - t.Fatalf("failed to get absolute path of file %q: %v", imageFile, err) - } - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", imagePath)) - if err != nil { - t.Fatalf("loading image into minikube: %v\n%s", err, rr.Output()) - } + list := rr.Output() + for _, theImage := range expectedResult { + if !strings.Contains(list, theImage) { + t.Fatalf("expected %s to be listed with minikube but the image is not there", theImage) + } + } + }) +} - // make sure the image was correctly loaded - rr, err = listImages(ctx, t, profile) - if err != nil { - t.Fatalf("listing images: %v\n%s", err, rr.Output()) - } - if !strings.Contains(rr.Output(), tag) { - t.Fatalf("expected %s to be loaded into minikube but the image is not there", taggedImage) +func expectedImageFormat(format string) []string { + return []string{ + fmt.Sprintf(format, "registry.k8s.io/pause"), + fmt.Sprintf(format, "registry.k8s.io/kube-apiserver"), } } -// validateRemoveImage makes sures that `minikube image rm` works as expected -func validateRemoveImage(ctx context.Context, t *testing.T, profile string) { +// validateImageCommands runs tests on all the `minikube image` commands, ex. `minikube image load`, `minikube image list`, etc. +func validateImageCommands(ctx context.Context, t *testing.T, profile string) { + // docs(skip): Skips on `none` driver as image loading is not supported if NoneDriver() { - t.Skip("load image not available on none driver") + t.Skip("image commands are not available on the none driver") } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") + // docs(skip): Skips on GitHub Actions and macOS as this test case requires a running docker daemon + if detect.GithubActionRunner() && runtime.GOOS == "darwin" { + t.Skip("skipping on darwin github action runners, as this test requires a running docker daemon") } - defer PostMortemLogs(t, profile) - // pull busybox - busyboxImage := "busybox:1.32" - rr, err := Run(t, exec.CommandContext(ctx, "docker", "pull", busyboxImage)) - if err != nil { - t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) - } + runImageList(ctx, t, profile, "ImageListShort", "short", "%s") + runImageList(ctx, t, profile, "ImageListTable", "table", "│ %s") + runImageList(ctx, t, profile, "ImageListJson", "json", "[\"%s") + runImageList(ctx, t, profile, "ImageListYaml", "yaml", "- %s") - // tag busybox - newImage := fmt.Sprintf("docker.io/library/busybox:remove-%s", profile) - rr, err = Run(t, exec.CommandContext(ctx, "docker", "tag", busyboxImage, newImage)) - if err != nil { - t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) - } + // docs: Make sure image building works by `minikube image build` + t.Run("ImageBuild", func(t *testing.T) { + MaybeParallel(t) - // try to load the image into minikube - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", newImage)) - if err != nil { - t.Fatalf("loading image into minikube: %v\n%s", err, rr.Output()) - } + if _, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", "pgrep", "buildkitd")); err == nil { + t.Errorf("buildkitd process is running, should not be running until `minikube image build` is ran") + } - // try to remove the image from minikube - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "rm", newImage)) - if err != nil { - t.Fatalf("removing image from minikube: %v\n%s", err, rr.Output()) - } + newImage := fmt.Sprintf("localhost/my-image:%s", profile) - // make sure the image was removed - rr, err = listImages(ctx, t, profile) - if err != nil { - t.Fatalf("listing images: %v\n%s", err, rr.Output()) - } - if strings.Contains(rr.Output(), fmt.Sprintf("busybox:remove-%s", profile)) { - t.Fatalf("expected %s to be removed from minikube but the image is there", newImage) - } + // try to build the new image with minikube + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "build", "-t", newImage, filepath.Join(*testdataDir, "build"), "--alsologtostderr")) + if err != nil { + t.Fatalf("building image with minikube: %v\n%s", err, rr.Output()) + } + if rr.Stdout.Len() > 0 { + t.Logf("(dbg) Stdout: %s:\n%s", rr.Command(), rr.Stdout) + } + if rr.Stderr.Len() > 0 { + t.Logf("(dbg) Stderr: %s:\n%s", rr.Command(), rr.Stderr) + } -} + checkImageExists(ctx, t, profile, newImage) + }) -func inspectImage(ctx context.Context, t *testing.T, profile string, image string) (*RunResult, error) { - var cmd *exec.Cmd - if ContainerRuntime() == "docker" { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "docker", "image", "inspect", image) - } else { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "sudo", "crictl", "inspecti", image) - } - rr, err := Run(t, cmd) - if err != nil { - return rr, err - } - return rr, nil -} + taggedImage := fmt.Sprintf("%s:%s", echoServerImage, profile) + imageFile := "echo-server-save.tar" + var imagePath string + defer os.Remove(imageFile) -func listImages(ctx context.Context, t *testing.T, profile string) (*RunResult, error) { - var cmd *exec.Cmd - if ContainerRuntime() == "docker" { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "docker", "images") - } else { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "sudo", "crictl", "images") - } - rr, err := Run(t, cmd) - if err != nil { - return rr, err - } - return rr, nil -} + t.Run("Setup", func(t *testing.T) { + var err error + imagePath, err = filepath.Abs(imageFile) + if err != nil { + t.Fatalf("failed to get absolute path of file %q: %v", imageFile, err) + } -// validateBuildImage makes sures that `minikube image build` works as expected -func validateBuildImage(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("image build not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) + pulledImage := fmt.Sprintf("%s:%s", echoServerImage, "1.0") + rr, err := Run(t, exec.CommandContext(ctx, "docker", "pull", pulledImage)) + if err != nil { + t.Fatalf("failed to setup test (pull image): %v\n%s", err, rr.Output()) + } - newImage := fmt.Sprintf("localhost/my-image:%s", profile) + rr, err = Run(t, exec.CommandContext(ctx, "docker", "tag", pulledImage, taggedImage)) + if err != nil { + t.Fatalf("failed to setup test (tag image) : %v\n%s", err, rr.Output()) + } + }) - // try to build the new image with minikube - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "build", "-t", newImage, filepath.Join(*testdataDir, "build"))) - if err != nil { - t.Fatalf("building image with minikube: %v\n%s", err, rr.Output()) - } - if rr.Stdout.Len() > 0 { - t.Logf("(dbg) Stdout: %s:\n%s", rr.Command(), rr.Stdout) - } - if rr.Stderr.Len() > 0 { - t.Logf("(dbg) Stderr: %s:\n%s", rr.Command(), rr.Stderr) - } + // docs: Make sure image loading from Docker daemon works by `minikube image load --daemon` + t.Run("ImageLoadDaemon", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", "--daemon", taggedImage, "--alsologtostderr")) + if err != nil { + t.Fatalf("loading image into minikube from daemon: %v\n%s", err, rr.Output()) + } - // make sure the image was correctly built - rr, err = inspectImage(ctx, t, profile, newImage) - if err != nil { - ll, _ := listImages(ctx, t, profile) - t.Logf("(dbg) images: %s", ll.Output()) - t.Fatalf("listing images: %v\n%s", err, rr.Output()) - } - if !strings.Contains(rr.Output(), newImage) { - t.Fatalf("expected %s to be built with minikube but the image is not there", newImage) - } -} + checkImageExists(ctx, t, profile, taggedImage) + }) -// validateListImages makes sures that `minikube image ls` works as expected -func validateListImages(ctx context.Context, t *testing.T, profile string) { - if NoneDriver() { - t.Skip("list images not available on none driver") - } - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("skipping on github actions and darwin, as this test requires a running docker daemon") - } - defer PostMortemLogs(t, profile) + // docs: Try to load image already loaded and make sure `minikube image load --daemon` works + t.Run("ImageReloadDaemon", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", "--daemon", taggedImage, "--alsologtostderr")) + if err != nil { + t.Fatalf("loading image into minikube from daemon: %v\n%s", err, rr.Output()) + } + + checkImageExists(ctx, t, profile, taggedImage) + }) + + // docs: Make sure a new updated tag works by `minikube image load --daemon` + t.Run("ImageTagAndLoadDaemon", func(t *testing.T) { + tagAndLoadImage(ctx, t, profile, taggedImage) + }) + + // docs: Make sure image saving works by `minikube image load --daemon` + t.Run("ImageSaveToFile", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "save", taggedImage, imagePath, "--alsologtostderr")) + if err != nil { + t.Fatalf("saving image from minikube to file: %v\n%s", err, rr.Output()) + } + + if _, err := os.Stat(imagePath); err != nil { + t.Fatalf("expected %q to exist after `image save`, but doesn't exist", imagePath) + } + }) + + // docs: Make sure image removal works by `minikube image rm` + t.Run("ImageRemove", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "rm", taggedImage, "--alsologtostderr")) + if err != nil { + t.Fatalf("removing image from minikube: %v\n%s", err, rr.Output()) + } + + // make sure the image was removed + rr, err = listImages(ctx, t, profile) + if err != nil { + t.Fatalf("listing images: %v\n%s", err, rr.Output()) + } + if strings.Contains(rr.Output(), taggedImage) { + t.Fatalf("expected %q to be removed from minikube but still exists", taggedImage) + } + }) + + // docs: Make sure image loading from file works by `minikube image load` + t.Run("ImageLoadFromFile", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "load", imagePath, "--alsologtostderr")) + if err != nil || strings.Contains(rr.Output(), "failed pushing to: functional") { + t.Fatalf("loading image into minikube from file: %v\n%s", err, rr.Output()) + } + + checkImageExists(ctx, t, profile, taggedImage) + }) + + // docs: Make sure image saving to Docker daemon works by `minikube image load` + t.Run("ImageSaveDaemon", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, "docker", "rmi", taggedImage)) + if err != nil { + t.Fatalf("failed to remove image from docker: %v\n%s", err, rr.Output()) + } + + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "save", "--daemon", taggedImage, "--alsologtostderr")) + if err != nil { + t.Fatalf("saving image from minikube to daemon: %v\n%s", err, rr.Output()) + } + imageToDelete := taggedImage + if ContainerRuntime() == "crio" { + imageToDelete = cruntime.AddLocalhostPrefix(imageToDelete) + } + rr, err = Run(t, exec.CommandContext(ctx, "docker", "image", "inspect", imageToDelete)) + if err != nil { + t.Fatalf("expected image to be loaded into Docker, but image was not found: %v\n%s", err, rr.Output()) + } + }) +} - // try to list the images with minikube - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "ls")) +func checkImageExists(ctx context.Context, t *testing.T, profile string, image string) { + // make sure the image was correctly loaded + rr, err := listImages(ctx, t, profile) if err != nil { - t.Fatalf("listing image with minikube: %v\n%s", err, rr.Output()) - } - if rr.Stdout.Len() > 0 { - t.Logf("(dbg) Stdout: %s:\n%s", rr.Command(), rr.Stdout) + t.Fatalf("listing images: %v\n%s", err, rr.Output()) } - if rr.Stderr.Len() > 0 { - t.Logf("(dbg) Stderr: %s:\n%s", rr.Command(), rr.Stderr) + if !strings.Contains(rr.Output(), image) { + t.Fatalf("expected %q to be loaded into minikube but the image is not there", image) } +} - list := rr.Output() - for _, theImage := range []string{"k8s.gcr.io/pause", "docker.io/kubernetesui/dashboard"} { - if !strings.Contains(list, theImage) { - t.Fatalf("expected %s to be listed with minikube but the image is not there", theImage) - } - } +func listImages(ctx context.Context, t *testing.T, profile string) (*RunResult, error) { + return Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "ls")) } // check functionality of minikube after evaluating docker-env func validateDockerEnv(ctx context.Context, t *testing.T, profile string) { + // docs(skip): Skips on `none` drive since `docker-env` is not supported if NoneDriver() { t.Skipf("none driver does not support docker-env") } + // docs(skip): Skips on non-docker container runtime if cr := ContainerRuntime(); cr != "docker" { t.Skipf("only validate docker env with docker container runtime, currently testing %s", cr) } defer PostMortemLogs(t, profile) - mctx, cancel := context.WithTimeout(ctx, Seconds(120)) - defer cancel() - var rr *RunResult - var err error - if runtime.GOOS == "windows" { - c := exec.CommandContext(mctx, "powershell.exe", "-NoProfile", "-NonInteractive", Target()+" -p "+profile+" docker-env | Invoke-Expression ;"+Target()+" status -p "+profile) - rr, err = Run(t, c) - } else { - c := exec.CommandContext(mctx, "/bin/bash", "-c", "eval $("+Target()+" -p "+profile+" docker-env) && "+Target()+" status -p "+profile) - // we should be able to get minikube status with a bash which evaled docker-env - rr, err = Run(t, c) - } - if mctx.Err() == context.DeadlineExceeded { - t.Errorf("failed to run the command by deadline. exceeded timeout. %s", rr.Command()) - } - if err != nil { - t.Fatalf("failed to do status after eval-ing docker-env. error: %v", err) + + type ShellTest struct { + name string + commandPrefix []string + formatArg string } - if !strings.Contains(rr.Output(), "Running") { - t.Fatalf("expected status output to include 'Running' after eval docker-env but got: *%s*", rr.Output()) + + // docs: Run `eval $(minikube docker-env)` to configure current environment to use minikube's Docker daemon + windowsTests := []ShellTest{ + {"powershell", []string{"powershell.exe", "-NoProfile", "-NonInteractive"}, "%[1]s -p %[2]s docker-env | Invoke-Expression ; "}, } - if !strings.Contains(rr.Output(), "in-use") { - t.Fatalf("expected status output to include `in-use` after eval docker-env but got *%s*", rr.Output()) + posixTests := []ShellTest{ + {"bash", []string{"/bin/bash", "-c"}, "eval $(%[1]s -p %[2]s docker-env) && "}, } - mctx, cancel = context.WithTimeout(ctx, Seconds(60)) - defer cancel() - // do a eval $(minikube -p profile docker-env) and check if we are point to docker inside minikube - if runtime.GOOS == "windows" { // testing docker-env eval in powershell - c := exec.CommandContext(mctx, "powershell.exe", "-NoProfile", "-NonInteractive", Target()+" -p "+profile+" docker-env | Invoke-Expression ; docker images") - rr, err = Run(t, c) - } else { - c := exec.CommandContext(mctx, "/bin/bash", "-c", "eval $("+Target()+" -p "+profile+" docker-env) && docker images") - rr, err = Run(t, c) + tests := posixTests + if runtime.GOOS == "windows" { + tests = windowsTests } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mctx, cancel := context.WithTimeout(ctx, Seconds(120)) + defer cancel() - if mctx.Err() == context.DeadlineExceeded { - t.Errorf("failed to run the command in 30 seconds. exceeded 30s timeout. %s", rr.Command()) - } + command := make([]string, len(tc.commandPrefix)+1) + copy(command, tc.commandPrefix) - if err != nil { - t.Fatalf("failed to run minikube docker-env. args %q : %v ", rr.Command(), err) - } + formattedArg := fmt.Sprintf(tc.formatArg, Target(), profile) - expectedImgInside := "gcr.io/k8s-minikube/storage-provisioner" - if !strings.Contains(rr.Output(), expectedImgInside) { - t.Fatalf("expected 'docker images' to have %q inside minikube. but the output is: *%s*", expectedImgInside, rr.Output()) + // docs: Run `minikube status` to get the minikube status + // we should be able to get minikube status with a shell which evaled docker-env + command[len(command)-1] = formattedArg + Target() + " status -p " + profile + c := exec.CommandContext(mctx, command[0], command[1:]...) + rr, err := Run(t, c) + + if mctx.Err() == context.DeadlineExceeded { + t.Errorf("failed to run the command by deadline. exceeded timeout. %s", rr.Command()) + } + if err != nil { + t.Fatalf("failed to do status after eval-ing docker-env. error: %v", err) + } + // docs: Make sure minikube components have status `Running` + if !strings.Contains(rr.Output(), "Running") { + t.Fatalf("expected status output to include 'Running' after eval docker-env but got: *%s*", rr.Output()) + } + // docs: Make sure `docker-env` has status `in-use` + if !strings.Contains(rr.Output(), "in-use") { + t.Fatalf("expected status output to include `in-use` after eval docker-env but got *%s*", rr.Output()) + } + + mctx, cancel = context.WithTimeout(ctx, Seconds(60)) + defer cancel() + + // docs: Run eval `$(minikube -p profile docker-env)` and check if we are point to docker inside minikube + command[len(command)-1] = formattedArg + "docker images" + c = exec.CommandContext(mctx, command[0], command[1:]...) + rr, err = Run(t, c) + + if mctx.Err() == context.DeadlineExceeded { + t.Errorf("failed to run the command in 30 seconds. exceeded 30s timeout. %s", rr.Command()) + } + + if err != nil { + t.Fatalf("failed to run minikube docker-env. args %q : %v ", rr.Command(), err) + } + + // docs: Make sure `docker images` hits the minikube's Docker daemon by check if `gcr.io/k8s-minikube/storage-provisioner` is in the output of `docker images` + expectedImgInside := "gcr.io/k8s-minikube/storage-provisioner" + if !strings.Contains(rr.Output(), expectedImgInside) { + t.Fatalf("expected 'docker images' to have %q inside minikube. but the output is: *%s*", expectedImgInside, rr.Output()) + } + }) } } // check functionality of minikube after evaluating podman-env func validatePodmanEnv(ctx context.Context, t *testing.T, profile string) { + // docs(skip): Skips on `none` drive since `podman-env` is not supported if NoneDriver() { t.Skipf("none driver does not support podman-env") } + // docs(skip): Skips on non-docker container runtime if cr := ContainerRuntime(); cr != "podman" { t.Skipf("only validate podman env with docker container runtime, currently testing %s", cr) } + // docs(skip): Skips on non-Linux platforms if runtime.GOOS != "linux" { t.Skipf("only validate podman env on linux, currently testing %s", runtime.GOOS) } @@ -536,6 +575,7 @@ func validatePodmanEnv(ctx context.Context, t *testing.T, profile string) { mctx, cancel := context.WithTimeout(ctx, Seconds(120)) defer cancel() + // docs: Run `eval $(minikube podman-env)` to configure current environment to use minikube's Podman daemon, and `minikube status` to get the minikube status c := exec.CommandContext(mctx, "/bin/bash", "-c", "eval $("+Target()+" -p "+profile+" podman-env) && "+Target()+" status -p "+profile) // we should be able to get minikube status with a bash which evaluated podman-env rr, err := Run(t, c) @@ -546,16 +586,18 @@ func validatePodmanEnv(ctx context.Context, t *testing.T, profile string) { if err != nil { t.Fatalf("failed to do status after eval-ing podman-env. error: %v", err) } + // docs: Make sure minikube components have status `Running` if !strings.Contains(rr.Output(), "Running") { t.Fatalf("expected status output to include 'Running' after eval podman-env but got: *%s*", rr.Output()) } + // docs: Make sure `podman-env` has status `in-use` if !strings.Contains(rr.Output(), "in-use") { t.Fatalf("expected status output to include `in-use` after eval podman-env but got *%s*", rr.Output()) } mctx, cancel = context.WithTimeout(ctx, Seconds(60)) defer cancel() - // do a eval $(minikube -p profile podman-env) and check if we are point to docker inside minikube + // docs: Run `eval $(minikube docker-env)` again and `docker images` to list the docker images using the minikube's Docker daemon c = exec.CommandContext(mctx, "/bin/bash", "-c", "eval $("+Target()+" -p "+profile+" podman-env) && docker images") rr, err = Run(t, c) @@ -566,6 +608,7 @@ func validatePodmanEnv(ctx context.Context, t *testing.T, profile string) { t.Fatalf("failed to run minikube podman-env. args %q : %v ", rr.Command(), err) } + // docs: Make sure `docker images` hits the minikube's Podman daemon by check if `gcr.io/k8s-minikube/storage-provisioner` is in the output of `docker images` expectedImgInside := "gcr.io/k8s-minikube/storage-provisioner" if !strings.Contains(rr.Output(), expectedImgInside) { t.Fatalf("expected 'docker images' to have %q inside minikube. but the output is: *%s*", expectedImgInside, rr.Output()) @@ -575,18 +618,20 @@ func validatePodmanEnv(ctx context.Context, t *testing.T, profile string) { // validateStartWithProxy makes sure minikube start respects the HTTP_PROXY environment variable func validateStartWithProxy(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) + // docs: Start a local HTTP proxy srv, err := startHTTPProxy(t) if err != nil { t.Fatalf("failed to set up the test proxy: %s", err) } + // docs: Start minikube with the environment variable `HTTP_PROXY` set to the local HTTP proxy startMinikubeWithProxy(ctx, t, profile, "HTTP_PROXY", srv.Addr) } // validateStartWithCustomCerts makes sure minikube start respects the HTTPS_PROXY environment variable and works with custom certs // a proxy is started by calling the mitmdump binary in the background, then installing the certs generated by the binary // mitmproxy/dump creates the proxy at localhost at port 8080 -// only runs on Github Actions for amd64 linux, otherwise validateStartWithProxy runs instead +// only runs on GitHub Actions for amd64 linux, otherwise validateStartWithProxy runs instead func validateStartWithCustomCerts(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) err := startProxyWithCustomCerts(ctx, t) @@ -598,7 +643,8 @@ func validateStartWithCustomCerts(ctx context.Context, t *testing.T, profile str } // validateAuditAfterStart makes sure the audit log contains the correct logging after minikube start -func validateAuditAfterStart(ctx context.Context, t *testing.T, profile string) { +func validateAuditAfterStart(_ context.Context, t *testing.T, profile string) { + // docs: Read the audit log file and make sure it contains the current minikube profile name got, err := auditContains(profile) if err != nil { t.Fatalf("failed to check audit log: %v", err) @@ -608,20 +654,21 @@ func validateAuditAfterStart(ctx context.Context, t *testing.T, profile string) } } -// validateSoftStart validates that after minikube already started, a "minikube start" should not change the configs. +// validateSoftStart validates that after minikube already started, a `minikube start` should not change the configs. func validateSoftStart(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) start := time.Now() - // the test before this had been start with --apiserver-port=8441 + // docs: The test `validateStartWithProxy` should have start minikube, make sure the configured node port is `8441` beforeCfg, err := config.LoadProfile(profile) if err != nil { t.Fatalf("error reading cluster config before soft start: %v", err) } - if beforeCfg.Config.KubernetesConfig.NodePort != apiPortTest { - t.Errorf("expected cluster config node port before soft start to be %d but got %d", apiPortTest, beforeCfg.Config.KubernetesConfig.NodePort) + if beforeCfg.Config.APIServerPort != apiPortTest { + t.Errorf("expected cluster config node port before soft start to be %d but got %d", apiPortTest, beforeCfg.Config.APIServerPort) } + // docs: Run `minikube start` again as a soft start softStartArgs := []string{"start", "-p", profile, "--alsologtostderr", "-v=8"} c := exec.CommandContext(ctx, Target(), softStartArgs...) rr, err := Run(t, c) @@ -630,13 +677,14 @@ func validateSoftStart(ctx context.Context, t *testing.T, profile string) { } t.Logf("soft start took %s for %q cluster.", time.Since(start), profile) + // docs: Make sure the configured node port is not changed afterCfg, err := config.LoadProfile(profile) if err != nil { t.Errorf("error reading cluster config after soft start: %v", err) } - if afterCfg.Config.KubernetesConfig.NodePort != apiPortTest { - t.Errorf("expected node port in the config not change after soft start. exepceted node port to be %d but got %d.", apiPortTest, afterCfg.Config.KubernetesConfig.NodePort) + if afterCfg.Config.APIServerPort != apiPortTest { + t.Errorf("expected node port in the config not to change after soft start. expected node port to be %d but got %d.", apiPortTest, afterCfg.Config.APIServerPort) } } @@ -644,10 +692,12 @@ func validateSoftStart(ctx context.Context, t *testing.T, profile string) { func validateKubeContext(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) + // docs: Run `kubectl config current-context` rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "config", "current-context")) if err != nil { t.Errorf("failed to get current-context. args %q : %v", rr.Command(), err) } + // docs: Make sure the current minikube profile name is in the output of the command if !strings.Contains(rr.Stdout.String(), profile) { t.Errorf("expected current-context = %q, but got *%q*", profile, rr.Stdout.String()) } @@ -657,10 +707,12 @@ func validateKubeContext(ctx context.Context, t *testing.T, profile string) { func validateKubectlGetPods(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) + // docs: Run `kubectl get po -A` to get all pods in the current minikube profile rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "po", "-A")) if err != nil { t.Errorf("failed to get kubectl pods: args %q : %v", rr.Command(), err) } + // docs: Make sure the output is not empty and contains `kube-system` components if rr.Stderr.String() != "" { t.Errorf("expected stderr to be empty but got *%q*: args %q", rr.Stderr, rr.Command()) } @@ -673,9 +725,11 @@ func validateKubectlGetPods(ctx context.Context, t *testing.T, profile string) { func validateMinikubeKubectl(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) + // docs: Run `minikube kubectl -- get pods` to get the pods in the current minikube profile // Must set the profile so that it knows what version of Kubernetes to use kubectlArgs := []string{"-p", profile, "kubectl", "--", "--context", profile, "get", "pods"} rr, err := Run(t, exec.CommandContext(ctx, Target(), kubectlArgs...)) + // docs: Make sure the command doesn't raise any error if err != nil { t.Fatalf("failed to get pods. args %q: %v", rr.Command(), err) } @@ -693,12 +747,14 @@ func validateMinikubeKubectlDirectCall(ctx context.Context, t *testing.T, profil err := os.Link(Target(), dstfn) if err != nil { - t.Fatal(err) + t.Fatalf("failed to link kubectl binary from %s to %s: %v", Target(), dstfn, err) } defer os.Remove(dstfn) // clean up + // docs: Run `kubectl get pods` by calling the minikube's `kubectl` binary file directly kubectlArgs := []string{"--context", profile, "get", "pods"} rr, err := Run(t, exec.CommandContext(ctx, dstfn, kubectlArgs...)) + // docs: Make sure the command doesn't raise any error if err != nil { t.Fatalf("failed to run kubectl directly. args %q: %v", rr.Command(), err) } @@ -709,7 +765,8 @@ func validateExtraConfig(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) start := time.Now() - // The tests before this already created a profile, starting minikube with different --extra-config cmdline option. + // docs: The tests before this already created a profile + // docs: Soft-start minikube with different `--extra-config` command line option startArgs := []string{"start", "-p", profile, "--extra-config=apiserver.enable-admission-plugins=NamespaceAutoProvision", "--wait=all"} c := exec.CommandContext(ctx, Target(), startArgs...) rr, err := Run(t, c) @@ -718,13 +775,14 @@ func validateExtraConfig(ctx context.Context, t *testing.T, profile string) { } t.Logf("restart took %s for %q cluster.", time.Since(start), profile) + // docs: Load the profile's config afterCfg, err := config.LoadProfile(profile) if err != nil { t.Errorf("error reading cluster config after soft start: %v", err) } + // docs: Make sure the specified `--extra-config` is correctly returned expectedExtraOptions := "apiserver.enable-admission-plugins=NamespaceAutoProvision" - if !strings.Contains(afterCfg.Config.KubernetesConfig.ExtraOptions.String(), expectedExtraOptions) { t.Errorf("expected ExtraOptions to contain %s but got %s", expectedExtraOptions, afterCfg.Config.KubernetesConfig.ExtraOptions.String()) } @@ -741,8 +799,8 @@ func imageID(image string) string { }, } - if imgIds, ok := ids[image]; ok { - if id, ok := imgIds[runtime.GOARCH]; ok { + if imgIDs, ok := ids[image]; ok { + if id, ok := imgIDs[runtime.GOARCH]; ok { return id } panic(fmt.Sprintf("unexpected architecture for image %q: %v", image, runtime.GOARCH)) @@ -763,6 +821,7 @@ func validateComponentHealth(ctx context.Context, t *testing.T, profile string) "kube-scheduler": false, } + // docs: Run `kubectl get po po -l tier=control-plane -n kube-system -o=json` to get all the Kubernetes conponents rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "po", "-l", "tier=control-plane", "-n", "kube-system", "-o=json")) if err != nil { t.Fatalf("failed to get components. args %q: %v", rr.Command(), err) @@ -773,6 +832,7 @@ func validateComponentHealth(ctx context.Context, t *testing.T, profile string) t.Fatalf("failed to decode kubectl json output: args %q : %v", rr.Command(), err) } + // docs: For each component, make sure the pod status is `Running` for _, i := range cs.Items { for _, l := range i.Labels { if _, ok := found[l]; ok { // skip irrelevant (eg, repeating/redundant '"tier": "control-plane"') labels @@ -803,7 +863,7 @@ func validateComponentHealth(ctx context.Context, t *testing.T, profile string) } } -// validateStatusCmd makes sure minikube status outputs correctly +// validateStatusCmd makes sure `minikube status` outputs correctly func validateStatusCmd(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status")) @@ -811,22 +871,24 @@ func validateStatusCmd(ctx context.Context, t *testing.T, profile string) { t.Errorf("failed to run minikube status. args %q : %v", rr.Command(), err) } - // Custom format + // docs: Run `minikube status` with custom format `host:{{.Host}},kublet:{{.Kubelet}},apiserver:{{.APIServer}},kubeconfig:{{.Kubeconfig}}` rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "-f", "host:{{.Host}},kublet:{{.Kubelet}},apiserver:{{.APIServer}},kubeconfig:{{.Kubeconfig}}")) if err != nil { t.Errorf("failed to run minikube status with custom format: args %q: %v", rr.Command(), err) } + // docs: Make sure `host`, `kublete`, `apiserver` and `kubeconfig` statuses are shown in the output re := `host:([A-z]+),kublet:([A-z]+),apiserver:([A-z]+),kubeconfig:([A-z]+)` match, _ := regexp.MatchString(re, rr.Stdout.String()) if !match { t.Errorf("failed to match regex %q for minikube status with custom format. args %q. output: %s", re, rr.Command(), rr.Output()) } - // Json output + // docs: Run `minikube status` again as JSON output rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "-o", "json")) if err != nil { t.Errorf("failed to run minikube status with json output. args %q : %v", rr.Command(), err) } + // docs: Make sure `host`, `kublete`, `apiserver` and `kubeconfig` statuses are set in the JSON output var jsonObject map[string]interface{} err = json.Unmarshal(rr.Stdout.Bytes(), &jsonObject) if err != nil { @@ -853,6 +915,7 @@ func validateDashboardCmd(ctx context.Context, t *testing.T, profile string) { mctx, cancel := context.WithTimeout(ctx, Seconds(300)) defer cancel() + // docs: Run `minikube dashboard --url` to start minikube dashboard and return the URL of it args := []string{"dashboard", "--url", "--port", "36195", "-p", profile, "--alsologtostderr", "-v=1"} ss, err := Start(t, exec.CommandContext(mctx, Target(), args...)) if err != nil { @@ -875,13 +938,15 @@ func validateDashboardCmd(ctx context.Context, t *testing.T, profile string) { t.Fatalf("failed to parse %q: %v", s, err) } + // docs: Send a GET request to the dashboard URL resp, err := retryablehttp.Get(u.String()) if err != nil { t.Fatalf("failed to http get %q: %v\nresponse: %+v", u.String(), err, resp) } + // docs: Make sure HTTP status OK is returned if resp.StatusCode != http.StatusOK { - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { t.Errorf("failed to read http response body from dashboard %q: %v", u.String(), err) } @@ -909,15 +974,21 @@ func dashboardURL(b *bufio.Reader) (string, error) { // validateDryRun asserts that the dry-run mode quickly exits with the right code func validateDryRun(ctx context.Context, t *testing.T, profile string) { - // dry-run mode should always be able to finish quickly (<5s) - mctx, cancel := context.WithTimeout(ctx, Seconds(5)) + // dry-run mode should always be able to finish quickly (<5s) expect Docker Windows + timeout := Seconds(5) + if runtime.GOOS == "windows" && DockerDriver() { + timeout = Seconds(10) + } + mctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() + // docs: Run `minikube start --dry-run --memory 250MB` // Too little memory! - startArgs := append([]string{"start", "-p", profile, "--dry-run", "--memory", "250MB", "--alsologtostderr"}, StartArgs()...) + startArgs := append([]string{"start", "-p", profile, "--dry-run", "--memory", "250MB", "--alsologtostderr"}, StartArgsWithContext(ctx)...) c := exec.CommandContext(mctx, Target(), startArgs...) rr, err := Run(t, c) + // docs: Since the 250MB memory is less than the required 2GB, minikube should exit with an exit code `ExInsufficientMemory` wantCode := reason.ExInsufficientMemory if rr.ExitCode != wantCode { if HyperVDriver() { @@ -927,11 +998,13 @@ func validateDryRun(ctx context.Context, t *testing.T, profile string) { } } - dctx, cancel := context.WithTimeout(ctx, Seconds(5)) + dctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() - startArgs = append([]string{"start", "-p", profile, "--dry-run", "--alsologtostderr", "-v=1"}, StartArgs()...) + // docs: Run `minikube start --dry-run` + startArgs = append([]string{"start", "-p", profile, "--dry-run", "--alsologtostderr", "-v=1"}, StartArgsWithContext(ctx)...) c = exec.CommandContext(dctx, Target(), startArgs...) rr, err = Run(t, c) + // docs: Make sure the command doesn't raise any error if rr.ExitCode != 0 || err != nil { if HyperVDriver() { t.Skip("skipping this error on HyperV till this issue is solved https://github.com/kubernetes/minikube/issues/9785") @@ -944,15 +1017,21 @@ func validateDryRun(ctx context.Context, t *testing.T, profile string) { // validateInternationalLanguage asserts that the language used can be changed with environment variables func validateInternationalLanguage(ctx context.Context, t *testing.T, profile string) { - // dry-run mode should always be able to finish quickly (<5s) - mctx, cancel := context.WithTimeout(ctx, Seconds(5)) + // dry-run mode should always be able to finish quickly (<5s) except Docker Windows + timeout := Seconds(5) + if runtime.GOOS == "windows" && DockerDriver() { + timeout = Seconds(10) + } + mctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() // Too little memory! - startArgs := append([]string{"start", "-p", profile, "--dry-run", "--memory", "250MB", "--alsologtostderr"}, StartArgs()...) + startArgs := append([]string{"start", "-p", profile, "--dry-run", "--memory", "250MB", "--alsologtostderr"}, StartArgsWithContext(ctx)...) c := exec.CommandContext(mctx, Target(), startArgs...) + // docs: Set environment variable `LC_ALL=fr` to enable minikube translation to French c.Env = append(os.Environ(), "LC_ALL=fr") + // docs: Start minikube with memory of 250MB which is too little: `minikube start --dry-run --memory 250MB` rr, err := Run(t, c) wantCode := reason.ExInsufficientMemory @@ -963,6 +1042,7 @@ func validateInternationalLanguage(ctx context.Context, t *testing.T, profile st t.Errorf("dry-run(250MB) exit code = %d, wanted = %d: %v", rr.ExitCode, wantCode, err) } } + // docs: Make sure the dry-run output message is in French if !strings.Contains(rr.Stdout.String(), "Utilisation du pilote") { t.Errorf("dry-run output was expected to be in French. Expected \"Utilisation du pilote\", but not present in output:\n%s", rr.Stdout.String()) } @@ -977,8 +1057,10 @@ func validateCacheCmd(ctx context.Context, t *testing.T, profile string) { } t.Run("cache", func(t *testing.T) { + + // docs: Run `minikube cache add` and make sure we can add a remote image to the cache t.Run("add_remote", func(t *testing.T) { - for _, img := range []string{"k8s.gcr.io/pause:3.1", "k8s.gcr.io/pause:3.3", "k8s.gcr.io/pause:latest"} { + for _, img := range []string{"registry.k8s.io/pause:3.1", "registry.k8s.io/pause:3.3", "registry.k8s.io/pause:latest"} { rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "cache", "add", img)) if err != nil { t.Errorf("failed to 'cache add' remote image %q. args %q err %v", img, rr.Command(), err) @@ -986,8 +1068,9 @@ func validateCacheCmd(ctx context.Context, t *testing.T, profile string) { } }) + // docs: Run `minikube cache add` and make sure we can build and add a local image to the cache t.Run("add_local", func(t *testing.T) { - if GithubActionRunner() && runtime.GOOS == "darwin" { + if detect.GithubActionRunner() && runtime.GOOS == "darwin" { t.Skipf("skipping this test because Docker can not run in macos on github action free version. https://github.community/t/is-it-possible-to-install-and-configure-docker-on-macos-runner/16981") } @@ -996,13 +1079,10 @@ func validateCacheCmd(ctx context.Context, t *testing.T, profile string) { t.Skipf("docker is not installed, skipping local image test") } - dname, err := ioutil.TempDir("", profile) - if err != nil { - t.Fatalf("Cannot create temp dir: %v", err) - } + dname := t.TempDir() message := []byte("FROM scratch\nADD Dockerfile /x") - err = ioutil.WriteFile(filepath.Join(dname, "Dockerfile"), message, 0644) + err = os.WriteFile(filepath.Join(dname, "Dockerfile"), message, 0644) if err != nil { t.Fatalf("unable to write Dockerfile: %v", err) } @@ -1032,26 +1112,29 @@ func validateCacheCmd(ctx context.Context, t *testing.T, profile string) { } }) - t.Run("delete_k8s.gcr.io/pause:3.3", func(t *testing.T) { - rr, err := Run(t, exec.CommandContext(ctx, Target(), "cache", "delete", "k8s.gcr.io/pause:3.3")) + // docs: Run `minikube cache delete` and make sure we can delete an image from the cache + t.Run("CacheDelete", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "cache", "delete", "registry.k8s.io/pause:3.3")) if err != nil { - t.Errorf("failed to delete image k8s.gcr.io/pause:3.3 from cache. args %q: %v", rr.Command(), err) + t.Errorf("failed to delete image registry.k8s.io/pause:3.3 from cache. args %q: %v", rr.Command(), err) } }) + // docs: Run `minikube cache list` and make sure we can list the images in the cache t.Run("list", func(t *testing.T) { rr, err := Run(t, exec.CommandContext(ctx, Target(), "cache", "list")) if err != nil { t.Errorf("failed to do cache list. args %q: %v", rr.Command(), err) } - if !strings.Contains(rr.Output(), "k8s.gcr.io/pause") { - t.Errorf("expected 'cache list' output to include 'k8s.gcr.io/pause' but got: ***%s***", rr.Output()) + if !strings.Contains(rr.Output(), "registry.k8s.io/pause") { + t.Errorf("expected 'cache list' output to include 'registry.k8s.io/pause' but got: ***%s***", rr.Output()) } - if strings.Contains(rr.Output(), "k8s.gcr.io/pause:3.3") { - t.Errorf("expected 'cache list' output not to include k8s.gcr.io/pause:3.3 but got: ***%s***", rr.Output()) + if strings.Contains(rr.Output(), "registry.k8s.io/pause:3.3") { + t.Errorf("expected 'cache list' output not to include registry.k8s.io/pause:3.3 but got: ***%s***", rr.Output()) } }) + // docs: Run `minikube ssh sudo crictl images` and make sure we can list the images in the cache with `crictl` t.Run("verify_cache_inside_node", func(t *testing.T) { rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", "sudo", "crictl", "images")) if err != nil { @@ -1063,8 +1146,9 @@ func validateCacheCmd(ctx context.Context, t *testing.T, profile string) { } }) + // docs: Delete an image from minikube node and run `minikube cache reload` to make sure the image is brought back correctly t.Run("cache_reload", func(t *testing.T) { // deleting image inside minikube node manually and expecting reload to bring it back - img := "k8s.gcr.io/pause:latest" + img := "registry.k8s.io/pause:latest" // deleting image inside minikube node manually var binary string @@ -1099,7 +1183,7 @@ func validateCacheCmd(ctx context.Context, t *testing.T, profile string) { // delete will clean up the cached images since they are global and all other tests will load it for no reason t.Run("delete", func(t *testing.T) { - for _, img := range []string{"k8s.gcr.io/pause:3.1", "k8s.gcr.io/pause:latest"} { + for _, img := range []string{"registry.k8s.io/pause:3.1", "registry.k8s.io/pause:latest"} { rr, err := Run(t, exec.CommandContext(ctx, Target(), "cache", "delete", img)) if err != nil { t.Errorf("failed to delete %s from cache. args %q: %v", img, rr.Command(), err) @@ -1111,6 +1195,7 @@ func validateCacheCmd(ctx context.Context, t *testing.T, profile string) { // validateConfigCmd asserts basic "config" command functionality func validateConfigCmd(ctx context.Context, t *testing.T, profile string) { + // docs: Run `minikube config set/get/unset` to make sure configuration is modified correctly tests := []struct { args []string wantOut string @@ -1162,6 +1247,7 @@ func checkSaneLogs(t *testing.T, logs string) { // validateLogsCmd asserts basic "logs" command functionality func validateLogsCmd(ctx context.Context, t *testing.T, profile string) { + // docs: Run `minikube logs` and make sure the logs contains some keywords like `apiserver`, `Audit` and `Last Start` rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "logs")) if err != nil { t.Errorf("%s failed: %v", rr.Command(), err) @@ -1172,25 +1258,21 @@ func validateLogsCmd(ctx context.Context, t *testing.T, profile string) { // validateLogsFileCmd asserts "logs --file" command functionality func validateLogsFileCmd(ctx context.Context, t *testing.T, profile string) { - dname, err := ioutil.TempDir("", profile) - if err != nil { - t.Fatalf("Cannot create temp dir: %v", err) - } + dname := t.TempDir() logFileName := filepath.Join(dname, "logs.txt") + // docs: Run `minikube logs --file logs.txt` to save the logs to a local file rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "logs", "--file", logFileName)) if err != nil { t.Errorf("%s failed: %v", rr.Command(), err) } - if rr.Stdout.String() != "" { - t.Errorf("expected empty minikube logs output, but got: \n***%s***\n", rr.Output()) - } - logs, err := ioutil.ReadFile(logFileName) + logs, err := os.ReadFile(logFileName) if err != nil { t.Errorf("Failed to read logs output '%s': %v", logFileName, err) } + // docs: Make sure the logs are correctly written checkSaneLogs(t, string(logs)) } @@ -1199,10 +1281,12 @@ func validateProfileCmd(ctx context.Context, t *testing.T, profile string) { t.Run("profile_not_create", func(t *testing.T) { // Profile command should not create a nonexistent profile nonexistentProfile := "lis" + // docs: Run `minikube profile lis` and make sure the command doesn't fail for the non-existent profile `lis` rr, err := Run(t, exec.CommandContext(ctx, Target(), "profile", nonexistentProfile)) if err != nil { t.Errorf("%s failed: %v", rr.Command(), err) } + // docs: Run `minikube profile list --output json` to make sure the previous command doesn't create a new profile rr, err = Run(t, exec.CommandContext(ctx, Target(), "profile", "list", "--output", "json")) if err != nil { t.Errorf("%s failed: %v", rr.Command(), err) @@ -1222,6 +1306,7 @@ func validateProfileCmd(ctx context.Context, t *testing.T, profile string) { } }) + // docs: Run `minikube profile list` and make sure the profiles are correctly listed t.Run("profile_list", func(t *testing.T) { // helper function to run command then, return target profile line from table output. extractrofileListFunc := func(rr *RunResult) string { @@ -1268,6 +1353,7 @@ func validateProfileCmd(ctx context.Context, t *testing.T, profile string) { } }) + // docs: Run `minikube profile list -o JSON` and make sure the profiles are correctly listed as JSON output t.Run("profile_json_output", func(t *testing.T) { // helper function to run command then, return target profile object from json output. extractProfileObjFunc := func(rr *RunResult) *config.Profile { @@ -1348,88 +1434,232 @@ func validateServiceCmd(ctx context.Context, t *testing.T, profile string) { } }() + validateServiceCmdDeployApp(ctx, t, profile) + validateServiceCmdList(ctx, t, profile) + validateServiceCmdJSON(ctx, t, profile) + validateServiceCmdHTTPS(ctx, t, profile) + validateServiceCmdFormat(ctx, t, profile) + validateServiceCmdURL(ctx, t, profile) +} + +// validateServiceCmdDeployApp Create a new `kickbase/echo_server` deployment +func validateServiceCmdDeployApp(ctx context.Context, t *testing.T, profile string) { + t.Run("DeployApp", func(t *testing.T) { + var rr *RunResult + var err error + + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "deployment", "hello-node", "--image", echoServerImage)) + if err != nil { + t.Fatalf("failed to create hello-node deployment with this command %q: %v.", rr.Command(), err) + } + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "expose", "deployment", "hello-node", "--type=NodePort", "--port=8080")) + if err != nil { + t.Fatalf("failed to expose hello-node deployment: %q : %v", rr.Command(), err) + } + + if _, err := PodWait(ctx, t, profile, "default", "app=hello-node", Minutes(10)); err != nil { + t.Fatalf("failed waiting for hello-node pod: %v", err) + } + }) +} + +// validateServiceCmdList Run `minikube service list` to make sure the newly created service is correctly listed in the output +func validateServiceCmdList(ctx context.Context, t *testing.T, profile string) { + t.Run("List", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "service", "list")) + if err != nil { + t.Errorf("failed to do service list. args %q : %v", rr.Command(), err) + } + if !strings.Contains(rr.Stdout.String(), "hello-node") { + t.Errorf("expected 'service list' to contain *hello-node* but got -%q-", rr.Stdout.String()) + } + }) +} + +// validateServiceCmdJSON Run `minikube service list -o JSON` and make sure the services are correctly listed as JSON output +func validateServiceCmdJSON(ctx context.Context, t *testing.T, profile string) { + t.Run("JSONOutput", func(t *testing.T) { + targetSvcName := "hello-node" + // helper function to run command then, return target service object from json output. + extractServiceObjFunc := func(rr *RunResult) *service.SvcURL { + var jsonObjects service.URLs + if err := json.Unmarshal(rr.Stdout.Bytes(), &jsonObjects); err != nil { + t.Fatalf("failed to decode json from profile list: args %q: %v", rr.Command(), err) + } + + for _, svc := range jsonObjects { + if svc.Name == targetSvcName { + return &svc + } + } + return nil + } + + start := time.Now() + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "service", "list", "-o", "json")) + if err != nil { + t.Fatalf("failed to list services with json format. args %q: %v", rr.Command(), err) + } + elapsed := time.Since(start) + t.Logf("Took %q to run %q", elapsed, rr.Command()) + + pr := extractServiceObjFunc(rr) + if pr == nil { + t.Errorf("expected the json of 'service list' to include %q but got *%q*. args: %q", targetSvcName, rr.Stdout.String(), rr.Command()) + } + }) +} + +// validateServiceCmdHTTPS Run `minikube service` with `--https --url` to make sure the HTTPS endpoint URL of the service is printed +func validateServiceCmdHTTPS(ctx context.Context, t *testing.T, profile string) { + t.Run("HTTPS", func(t *testing.T) { + cmdCtx, cancel := context.WithTimeout(ctx, 15*time.Second) + defer cancel() + cmd := exec.CommandContext(cmdCtx, Target(), "-p", profile, "service", "--namespace=default", "--https", "--url", "hello-node") + rr, err := Run(t, cmd) + if isUnexpectedServiceError(cmdCtx, err) { + t.Fatalf("failed to get service url. args %q : %v", rr.Command(), err) + } + + splits := strings.Split(rr.Stdout.String(), "|") + var endpoint string + // get the last endpoint in the output to test http to https + for _, v := range splits { + if strings.Contains(v, "http") { + endpoint = strings.TrimSpace(v) + } + } + t.Logf("found endpoint: %s", endpoint) + + u, err := url.Parse(endpoint) + if err != nil { + t.Fatalf("failed to parse service url endpoint %q: %v", endpoint, err) + } + if u.Scheme != "https" { + t.Errorf("expected scheme for %s to be 'https' but got %q", endpoint, u.Scheme) + } + }) +} + +// validateServiceCmdFormat Run `minikube service` with `--url --format={{.IP}}` to make sure the IP address of the service is printed +func validateServiceCmdFormat(ctx context.Context, t *testing.T, profile string) { + t.Run("Format", func(t *testing.T) { + cmdCtx, cancel := context.WithTimeout(ctx, 15*time.Second) + defer cancel() + cmd := exec.CommandContext(cmdCtx, Target(), "-p", profile, "service", "hello-node", "--url", "--format={{.IP}}") + rr, err := Run(t, cmd) + if isUnexpectedServiceError(cmdCtx, err) { + t.Errorf("failed to get service url with custom format. args %q: %v", rr.Command(), err) + } + + stringIP := strings.TrimSpace(rr.Stdout.String()) + + if ip := net.ParseIP(stringIP); ip == nil { + t.Fatalf("%q is not a valid IP", stringIP) + } + }) +} + +// validateServiceCmdURL Run `minikube service` with a regular `--url` to make sure the HTTP endpoint URL of the service is printed +func validateServiceCmdURL(ctx context.Context, t *testing.T, profile string) { + t.Run("URL", func(t *testing.T) { + cmdCtx, cancel := context.WithTimeout(ctx, 15*time.Second) + defer cancel() + cmd := exec.CommandContext(cmdCtx, Target(), "-p", profile, "service", "hello-node", "--url") + rr, err := Run(t, cmd) + if isUnexpectedServiceError(cmdCtx, err) { + t.Errorf("failed to get service url. args: %q: %v", rr.Command(), err) + } + + endpoint := strings.TrimSpace(rr.Stdout.String()) + t.Logf("found endpoint for hello-node: %s", endpoint) + + u, err := url.Parse(endpoint) + if err != nil { + t.Fatalf("failed to parse %q: %v", endpoint, err) + } + + if u.Scheme != "http" { + t.Fatalf("expected scheme to be -%q- got scheme: *%q*", "http", u.Scheme) + } + }) +} + +// isUnexpectedServiceError is used to prevent failing ServiceCmd tests on Docker Desktop due to DeadlineExceeded errors. +// Due to networking constraints Docker Desktop requires creating an SSH tunnel to connect to a service. This command has +// to be left running to keep the SSH tunnel connected, so for the ServiceCmd tests we set a timeout context so we can +// check the output and then the command is terminated, otherwise it would keep running forever. So if using Docker +// Desktop and the DeadlineExceeded, consider it an expected error. +func isUnexpectedServiceError(ctx context.Context, err error) bool { + if err == nil { + return false + } + if !NeedsPortForward() { + return true + } + return ctx.Err() != context.DeadlineExceeded +} + +func validateServiceCmdConnect(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + defer func() { + if t.Failed() { + t.Logf("service test failed - dumping debug information") + t.Logf("-----------------------service failure post-mortem--------------------------------") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(2)) + defer cancel() + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "describe", "po", "hello-node-connect")) + if err != nil { + t.Logf("%q failed: %v", rr.Command(), err) + } + t.Logf("hello-node pod describe:\n%s", rr.Stdout) + + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "logs", "-l", "app=hello-node-connect")) + if err != nil { + t.Logf("%q failed: %v", rr.Command(), err) + } + t.Logf("hello-node logs:\n%s", rr.Stdout) + + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "describe", "svc", "hello-node-connect")) + if err != nil { + t.Logf("%q failed: %v", rr.Command(), err) + } + t.Logf("hello-node svc describe:\n%s", rr.Stdout) + } + }() + var rr *RunResult var err error - // k8s.gcr.io/echoserver is not multi-arch - if arm64Platform() { - rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "deployment", "hello-node", "--image=k8s.gcr.io/echoserver-arm:1.8")) - } else { - rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "deployment", "hello-node", "--image=k8s.gcr.io/echoserver:1.8")) - } + // docs: Create a new `kickbase/echo-server` deployment + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "deployment", "hello-node-connect", "--image", echoServerImage)) if err != nil { t.Fatalf("failed to create hello-node deployment with this command %q: %v.", rr.Command(), err) } - rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "expose", "deployment", "hello-node", "--type=NodePort", "--port=8080")) + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "expose", "deployment", "hello-node-connect", "--type=NodePort", "--port=8080")) if err != nil { t.Fatalf("failed to expose hello-node deployment: %q : %v", rr.Command(), err) } - if _, err := PodWait(ctx, t, profile, "default", "app=hello-node", Minutes(10)); err != nil { + if _, err := PodWait(ctx, t, profile, "default", "app=hello-node-connect", Minutes(10)); err != nil { t.Fatalf("failed waiting for hello-node pod: %v", err) } - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "service", "list")) - if err != nil { - t.Errorf("failed to do service list. args %q : %v", rr.Command(), err) - } - if !strings.Contains(rr.Stdout.String(), "hello-node") { - t.Errorf("expected 'service list' to contain *hello-node* but got -%q-", rr.Stdout.String()) - } - + cmdContext := exec.CommandContext(ctx, Target(), "-p", profile, "service", "hello-node-connect", "--url") if NeedsPortForward() { t.Skipf("test is broken for port-forwarded drivers: https://github.com/kubernetes/minikube/issues/7383") } - - // Test --https --url mode - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "service", "--namespace=default", "--https", "--url", "hello-node")) - if err != nil { - t.Fatalf("failed to get service url. args %q : %v", rr.Command(), err) - } - if rr.Stderr.String() != "" { - t.Errorf("expected stderr to be empty but got *%q* . args %q", rr.Stderr, rr.Command()) - } - - endpoint := strings.TrimSpace(rr.Stdout.String()) - t.Logf("found endpoint: %s", endpoint) - - u, err := url.Parse(endpoint) - if err != nil { - t.Fatalf("failed to parse service url endpoint %q: %v", endpoint, err) - } - if u.Scheme != "https" { - t.Errorf("expected scheme for %s to be 'https' but got %q", endpoint, u.Scheme) - } - - // Test --format=IP - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "service", "hello-node", "--url", "--format={{.IP}}")) - if err != nil { - t.Errorf("failed to get service url with custom format. args %q: %v", rr.Command(), err) - } - if strings.TrimSpace(rr.Stdout.String()) != u.Hostname() { - t.Errorf("expected 'service --format={{.IP}}' output to be -%q- but got *%q* . args %q.", u.Hostname(), rr.Stdout.String(), rr.Command()) - } - - // Test a regular URL - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "service", "hello-node", "--url")) + // docs: Run `minikube service` with a regular `--url` to make sure the HTTP endpoint URL of the service is printed + rr, err = Run(t, cmdContext) if err != nil { t.Errorf("failed to get service url. args: %q: %v", rr.Command(), err) } - endpoint = strings.TrimSpace(rr.Stdout.String()) - t.Logf("found endpoint for hello-node: %s", endpoint) - - u, err = url.Parse(endpoint) - if err != nil { - t.Fatalf("failed to parse %q: %v", endpoint, err) - } - - if u.Scheme != "http" { - t.Fatalf("expected scheme to be -%q- got scheme: *%q*", "http", u.Scheme) - } - - t.Logf("Attempting to fetch %s ...", endpoint) + endpoint := strings.TrimSpace(rr.Stdout.String()) + t.Logf("found endpoint for hello-node-connect: %s", endpoint) + // docs: Make sure we can hit the endpoint URL with an HTTP GET request fetch := func() error { resp, err := http.Get(endpoint) if err != nil { @@ -1439,7 +1669,7 @@ func validateServiceCmd(ctx context.Context, t *testing.T, profile string) { defer resp.Body.Close() - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { t.Logf("error reading body from %s: %v", endpoint, err) return err @@ -1461,18 +1691,19 @@ func validateServiceCmd(ctx context.Context, t *testing.T, profile string) { func validateAddonsCmd(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) - // Table output + // docs: Run `minikube addons list` to list the addons in a tabular format rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "list")) if err != nil { t.Errorf("failed to do addon list: args %q : %v", rr.Command(), err) } + // docs: Make sure `dashboard`, `ingress` and `ingress-dns` is listed as available addons for _, a := range []string{"dashboard", "ingress", "ingress-dns"} { if !strings.Contains(rr.Output(), a) { t.Errorf("expected 'addon list' output to include -%q- but got *%s*", a, rr.Output()) } } - // Json output + // docs: Run `minikube addons list -o JSON` lists the addons in JSON format rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "addons", "list", "-o", "json")) if err != nil { t.Errorf("failed to do addon list with json output. args %q: %v", rr.Command(), err) @@ -1495,6 +1726,7 @@ func validateSSHCmd(ctx context.Context, t *testing.T, profile string) { want := "hello" + // docs: Run `minikube ssh echo hello` to make sure we can SSH into the minikube container and run an command rr, err := Run(t, exec.CommandContext(mctx, Target(), "-p", profile, "ssh", "echo hello")) if mctx.Err() == context.DeadlineExceeded { t.Errorf("failed to run command by deadline. exceeded timeout : %s", rr.Command()) @@ -1507,7 +1739,7 @@ func validateSSHCmd(ctx context.Context, t *testing.T, profile string) { t.Errorf("expected minikube ssh command output to be -%q- but got *%q*. args %q", want, rr.Stdout.String(), rr.Command()) } - // testing hostname as well because testing something like "minikube ssh echo" could be confusing + // docs: Run `minikube ssh cat /etc/hostname` as well to make sure the command is run inside minikube // because it is not clear if echo was run inside minikube on the powershell // so better to test something inside minikube, that is meaningful per profile // in this case /etc/hostname is same as the profile name @@ -1528,32 +1760,54 @@ func validateSSHCmd(ctx context.Context, t *testing.T, profile string) { // validateCpCmd asserts basic "cp" command functionality func validateCpCmd(ctx context.Context, t *testing.T, profile string) { + // docs(skip): Skips `none` driver since `cp` is not supported if NoneDriver() { t.Skipf("skipping: cp is unsupported by none driver") } - testCpCmd(ctx, t, profile, "") + // docs: Run `minikube cp ...` to copy a file to the minikube node + // docs: Run `minikube ssh sudo cat ...` to print out the copied file within minikube + // docs: make sure the file is correctly copied + + srcPath := cpTestLocalPath() + dstPath := cpTestMinikubePath() + + // copy to node + testCpCmd(ctx, t, profile, "", srcPath, "", dstPath) + + // copy from node + tmpDir := t.TempDir() + + tmpPath := filepath.Join(tmpDir, "cp-test.txt") + testCpCmd(ctx, t, profile, profile, dstPath, "", tmpPath) + + // copy to nonexistent directory structure + testCpCmd(ctx, t, profile, "", srcPath, "", "/tmp/does/not/exist/cp-test.txt") } // validateMySQL validates a minimalist MySQL deployment func validateMySQL(ctx context.Context, t *testing.T, profile string) { + // docs(skip): Skips for ARM64 architecture since it's not supported by MySQL if arm64Platform() { t.Skip("arm64 is not supported by mysql. Skip the test. See https://github.com/kubernetes/minikube/issues/10144") } defer PostMortemLogs(t, profile) + // docs: Run `kubectl replace --force -f testdata/mysql/yaml` rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "replace", "--force", "-f", filepath.Join(*testdataDir, "mysql.yaml"))) if err != nil { t.Fatalf("failed to kubectl replace mysql: args %q failed: %v", rr.Command(), err) } + // docs: Wait for the `mysql` pod to be running names, err := PodWait(ctx, t, profile, "default", "app=mysql", Minutes(10)) if err != nil { t.Fatalf("failed waiting for mysql pod: %v", err) } - // Retry, as mysqld first comes up without users configured. Scan for names in case of a reschedule. + // docs: Run `mysql -e show databases;` inside the MySQL pod to verify MySQL is up and running + // docs: Retry with exponential backoff if failed, as `mysqld` first comes up without users configured. Scan for names in case of a reschedule. mysql := func() error { rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "exec", names[0], "--", "mysql", "-ppassword", "-e", "show databases;")) return err @@ -1601,11 +1855,11 @@ func localEmptyCertPath() string { } // Copy extra file into minikube home folder for file sync test -func setupFileSync(ctx context.Context, t *testing.T, profile string) { +func setupFileSync(_ context.Context, t *testing.T, _ string) { p := localSyncTestPath() t.Logf("local sync path: %s", p) syncFile := filepath.Join(*testdataDir, "sync.test") - err := copy.Copy(syncFile, p) + err := cp.Copy(syncFile, p) if err != nil { t.Fatalf("failed to copy testdata/sync.test: %v", err) } @@ -1614,7 +1868,7 @@ func setupFileSync(ctx context.Context, t *testing.T, profile string) { // Write to a temp file for an atomic write tmpPem := localTestCertPath() + ".pem" - if err := copy.Copy(testPem, tmpPem); err != nil { + if err := cp.Copy(testPem, tmpPem); err != nil { t.Fatalf("failed to copy %s: %v", testPem, err) } @@ -1638,7 +1892,7 @@ func setupFileSync(ctx context.Context, t *testing.T, profile string) { testPem2 := filepath.Join(*testdataDir, "minikube_test2.pem") tmpPem2 := localTestCertFilesPath() + ".pem" - if err := copy.Copy(testPem2, tmpPem2); err != nil { + if err := cp.Copy(testPem2, tmpPem2); err != nil { t.Fatalf("failed to copy %s: %v", testPem2, err) } @@ -1670,12 +1924,15 @@ func setupFileSync(ctx context.Context, t *testing.T, profile string) { func validateFileSync(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) + // docs(skip): Skips on `none` driver since SSH is not supported if NoneDriver() { t.Skipf("skipping: ssh unsupported by none") } + // docs: Test files have been synced into minikube in the previous step `setupFileSync` vp := vmSyncTestPath() t.Logf("Checking for existence of %s within VM", vp) + // docs: Check the existence of the test file rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("sudo cat %s", vp))) if err != nil { t.Errorf("%s failed: %v", rr.Command(), err) @@ -1684,11 +1941,12 @@ func validateFileSync(ctx context.Context, t *testing.T, profile string) { t.Logf("file sync test content: %s", got) syncFile := filepath.Join(*testdataDir, "sync.test") - expected, err := ioutil.ReadFile(syncFile) + expected, err := os.ReadFile(syncFile) if err != nil { t.Errorf("failed to read test file 'testdata/sync.test' : %v", err) } + // docs: Make sure the file is correctly synced if diff := cmp.Diff(string(expected), got); diff != "" { t.Errorf("/etc/sync.test content mismatch (-want +got):\n%s", diff) } @@ -1703,12 +1961,12 @@ func validateCertSync(ctx context.Context, t *testing.T, profile string) { } testPem := filepath.Join(*testdataDir, "minikube_test.pem") - want, err := ioutil.ReadFile(testPem) + want, err := os.ReadFile(testPem) if err != nil { t.Errorf("test file not found: %v", err) } - // Check both the installed & reference certs (they should be symlinked) + // docs: Check both the installed & reference certs and make sure they are symlinked paths := []string{ path.Join("/etc/ssl/certs", testCert()), path.Join("/usr/share/ca-certificates", testCert()), @@ -1730,7 +1988,7 @@ func validateCertSync(ctx context.Context, t *testing.T, profile string) { } testPem2 := filepath.Join(*testdataDir, "minikube_test2.pem") - want, err = ioutil.ReadFile(testPem2) + want, err = os.ReadFile(testPem2) if err != nil { t.Errorf("test file not found: %v", err) } @@ -1757,7 +2015,7 @@ func validateCertSync(ctx context.Context, t *testing.T, profile string) { } } -// validateNotActiveRuntimeDisabled asserts that for a given runtime, the other runtimes disabled, for example for containerd runtime, docker and crio needs to be not running +// validateNotActiveRuntimeDisabled asserts that for a given runtime, the other runtimes are disabled, for example for `containerd` runtime, `docker` and `crio` needs to be not running func validateNotActiveRuntimeDisabled(ctx context.Context, t *testing.T, profile string) { if NoneDriver() { t.Skip("skipping on none driver, minikube does not control the runtime of user on the none driver.") @@ -1770,7 +2028,7 @@ func validateNotActiveRuntimeDisabled(ctx context.Context, t *testing.T, profile expectDisable := disableMap[ContainerRuntime()] for _, cr := range expectDisable { - // for example: minikube sudo systemctl is-active docker + // docs: For each container runtime, run `minikube ssh sudo systemctl is-active ...` and make sure the other container runtimes are not running rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("sudo systemctl is-active %s", cr))) got := rr.Stdout.String() if err != nil && !strings.Contains(got, "inactive") { @@ -1847,12 +2105,12 @@ users: t.Parallel() c := exec.CommandContext(ctx, Target(), "-p", profile, "update-context", "--alsologtostderr", "-v=2") if tc.kubeconfig != nil { - tf, err := ioutil.TempFile("", "kubeconfig") + tf, err := os.CreateTemp("", "kubeconfig") if err != nil { t.Fatal(err) } - if err := ioutil.WriteFile(tf.Name(), tc.kubeconfig, 0644); err != nil { + if err := os.WriteFile(tf.Name(), tc.kubeconfig, 0644); err != nil { t.Fatal(err) } t.Cleanup(func() { @@ -1862,11 +2120,13 @@ users: c.Env = append(os.Environ(), fmt.Sprintf("KUBECONFIG=%s", tf.Name())) } + // docs: Run `minikube update-context` rr, err := Run(t, c) if err != nil { t.Errorf("failed to run minikube update-context: args %q: %v", rr.Command(), err) } + // docs: Make sure the context has been correctly updated by checking the command output if !bytes.Contains(rr.Stdout.Bytes(), tc.want) { t.Errorf("update-context: got=%q, want=*%q*", rr.Stdout.Bytes(), tc.want) } @@ -1888,10 +2148,7 @@ func startProxyWithCustomCerts(ctx context.Context, t *testing.T) error { } }() - mitmDir, err := ioutil.TempDir("", "") - if err != nil { - return errors.Wrap(err, "create temp dir") - } + mitmDir := t.TempDir() _, err = Run(t, exec.CommandContext(ctx, "tar", "xzf", "mitmproxy-6.0.2-linux.tar.gz", "-C", mitmDir)) if err != nil { @@ -1967,13 +2224,13 @@ func startHTTPProxy(t *testing.T) (*http.Server, error) { func startMinikubeWithProxy(ctx context.Context, t *testing.T, profile string, proxyEnv string, addr string) { // Use more memory so that we may reliably fit MySQL and nginx - memoryFlag := "--memory=4000" + memoryFlag := "--memory=4096" // to avoid failure for mysq/pv on virtualbox on darwin on free github actions, - if GithubActionRunner() && VirtualboxDriver() { - memoryFlag = "--memory=6000" + if detect.GithubActionRunner() && VirtualboxDriver() { + memoryFlag = "--memory=6144" } // passing --api-server-port so later verify it didn't change in soft start. - startArgs := append([]string{"start", "-p", profile, memoryFlag, fmt.Sprintf("--apiserver-port=%d", apiPortTest), "--wait=all"}, StartArgs()...) + startArgs := append([]string{"start", "-p", profile, memoryFlag, fmt.Sprintf("--apiserver-port=%d", apiPortTest), "--wait=all"}, StartArgsWithContext(ctx)...) c := exec.CommandContext(ctx, Target(), startArgs...) env := os.Environ() env = append(env, fmt.Sprintf("%s=%s", proxyEnv, addr)) @@ -1998,6 +2255,7 @@ func startMinikubeWithProxy(ctx context.Context, t *testing.T, profile string, p // validateVersionCmd asserts `minikube version` command works fine for both --short and --components func validateVersionCmd(ctx context.Context, t *testing.T, profile string) { + // docs: Run `minikube version --short` and make sure the returned version is a valid semver t.Run("short", func(t *testing.T) { MaybeParallel(t) rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "version", "--short")) @@ -2011,6 +2269,7 @@ func validateVersionCmd(ctx context.Context, t *testing.T, profile string) { } }) + // docs: Run `minikube version --components` and make sure the component versions are returned t.Run("components", func(t *testing.T) { MaybeParallel(t) rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "version", "-o=json", "--components")) @@ -2018,7 +2277,7 @@ func validateVersionCmd(ctx context.Context, t *testing.T, profile string) { t.Errorf("error version: %v", err) } got := rr.Stdout.String() - for _, c := range []string{"buildctl", "commit", "containerd", "crictl", "crio", "ctr", "docker", "minikubeVersion", "podman", "run"} { + for _, c := range []string{"buildctl", "commit", "containerd", "crictl", "crio", "ctr", "docker", "minikubeVersion", "podman", "run", "crun"} { if !strings.Contains(got, c) { t.Errorf("expected to see %q in the minikube version --components but got:\n%s", c, got) } @@ -2027,3 +2286,59 @@ func validateVersionCmd(ctx context.Context, t *testing.T, profile string) { }) } + +// validateLicenseCmd asserts that the `minikube license` command downloads and untars the licenses +// Note: This test will fail on release PRs as the licenses file for the new version won't be uploaded at that point +func validateLicenseCmd(ctx context.Context, t *testing.T, _ string) { + if rr, err := Run(t, exec.CommandContext(ctx, Target(), "license")); err != nil { + t.Fatalf("command %q failed: %v", rr.Stdout.String(), err) + } + defer os.Remove("./licenses") + files, err := os.ReadDir("./licenses") + if err != nil { + t.Fatalf("failed to read licenses dir: %v", err) + } + expectedDir := "cloud.google.com" + found := false + for _, file := range files { + if file.Name() == expectedDir { + found = true + break + } + } + if !found { + t.Fatalf("expected licenses dir to contain %s dir, but was not found", expectedDir) + } + data, err := os.ReadFile("./licenses/cloud.google.com/go/compute/metadata/LICENSE") + if err != nil { + t.Fatalf("failed to read license: %v", err) + } + expectedString := "Apache License" + if !strings.Contains(string(data), expectedString) { + t.Errorf("expected license file to contain %q, but was not found", expectedString) + } +} + +// validateInvalidService makes sure minikube will not start a tunnel for an unavailable service that has no running pods +func validateInvalidService(ctx context.Context, t *testing.T, profile string) { + + // try to start an invalid service. This service is linked to a pod whose image name is invalid, so this pod will never become running + rrApply, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "apply", "-f", filepath.Join(*testdataDir, "invalidsvc.yaml"))) + if err != nil { + t.Fatalf("%s failed: %v", rrApply.Command(), err) + } + defer func() { + // Cleanup test configurations in advance of future tests + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "delete", "-f", filepath.Join(*testdataDir, "invalidsvc.yaml"))) + if err != nil { + t.Fatalf("clean up %s failed: %v", rr.Command(), err) + } + }() + time.Sleep(3 * time.Second) + + // try to expose a service, this action is supposed to fail + rrService, err := Run(t, exec.CommandContext(ctx, Target(), "service", "invalid-svc", "-p", profile)) + if err == nil || rrService.ExitCode == 0 { + t.Fatalf("%s should have failed: ", rrService.Command()) + } +} diff --git a/test/integration/functional_test_mount_test.go b/test/integration/functional_test_mount_test.go index 211f9d4d8a31..4bc42fa3f044 100644 --- a/test/integration/functional_test_mount_test.go +++ b/test/integration/functional_test_mount_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -23,7 +23,6 @@ import ( "context" "fmt" "io" - "io/ioutil" "os" "os/exec" "path" @@ -34,6 +33,7 @@ import ( "testing" "time" + "github.com/phayes/freeport" "k8s.io/minikube/pkg/util/retry" ) @@ -46,6 +46,10 @@ const ( ) // validateMountCmd verifies the minikube mount command works properly +// for the platforms that support it, we're testing: +// - a generic 9p mount +// - a 9p mount on a specific port +// - cleaning-mechanism for profile-specific mounts func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // nolint if NoneDriver() { t.Skip("skipping: none driver does not support mount") @@ -53,22 +57,16 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no if HyperVDriver() { t.Skip("skipping: mount broken on hyperv: https://github.com/kubernetes/minikube/issues/5029") } + if RootlessDriver() { + t.Skip("skipping: rootless driver does not support mount (because 9p is not mountable inside UserNS)") + } if runtime.GOOS == "windows" { t.Skip("skipping: mount broken on windows: https://github.com/kubernetes/minikube/issues/8303") } t.Run("any-port", func(t *testing.T) { - tempDir, err := ioutil.TempDir("", "mounttest") - defer func() { // clean up tempdir - err := os.RemoveAll(tempDir) - if err != nil { - t.Errorf("failed to clean up %q temp folder.", tempDir) - } - }() - if err != nil { - t.Fatalf("Unexpected error while creating tempDir: %v", err) - } + tempDir := t.TempDir() ctx, cancel := context.WithTimeout(ctx, Minutes(10)) @@ -106,7 +104,7 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no wantFromTest := []byte(testMarker) for _, name := range []string{createdByTest, createdByTestRemovedByPod, testMarker} { p := filepath.Join(tempDir, name) - err := ioutil.WriteFile(p, wantFromTest, 0644) + err := os.WriteFile(p, wantFromTest, 0644) t.Logf("wrote %q to %s", wantFromTest, p) if err != nil { t.Errorf("WriteFile %s: %v", p, err) @@ -123,7 +121,7 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no if err := retry.Expo(checkMount, time.Millisecond*500, Seconds(15)); err != nil { // For local testing, allow macOS users to click prompt. If they don't, skip the test. if runtime.GOOS == "darwin" { - t.Skip("skipping: mount did not appear, likely because macOS requires prompt to allow non-codesigned binaries to listen on non-localhost port") + t.Skip("skipping: mount did not appear, likely because macOS requires prompt to allow non-code signed binaries to listen on non-localhost port") } t.Fatalf("/mount-9p did not appear within %s: %v", time.Since(start), err) } @@ -159,7 +157,7 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no // Read the file written by pod startup p := filepath.Join(tempDir, createdByPod) - got, err := ioutil.ReadFile(p) + got, err := os.ReadFile(p) if err != nil { t.Errorf("failed to read file created by pod %q: %v", p, err) } @@ -183,7 +181,7 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no // test that file written from host was read in by the pod via cat /mount-9p/fromhost; rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", "stat", gp)) if err != nil { - t.Errorf("failed to stat the file %q iniside minikube : args %q: %v", gp, rr.Command(), err) + t.Errorf("failed to stat the file %q inside minikube : args %q: %v", gp, rr.Command(), err) } if runtime.GOOS == "windows" { @@ -208,20 +206,16 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no } }) t.Run("specific-port", func(t *testing.T) { - tempDir, err := ioutil.TempDir("", "mounttest") - defer func() { // clean up tempdir - err := os.RemoveAll(tempDir) - if err != nil { - t.Errorf("failed to clean up %q temp folder.", tempDir) - } - }() - if err != nil { - t.Fatalf("Unexpected error while creating tempDir: %v", err) - } + tempDir := t.TempDir() ctx, cancel := context.WithTimeout(ctx, Minutes(10)) - args := []string{"mount", "-p", profile, fmt.Sprintf("%s:%s", tempDir, guestMount), "--alsologtostderr", "-v=1", "--port", "46464"} + port, err := freeport.GetFreePort() + if err != nil { + t.Fatalf("failed to get free port: %v", err) + } + portStr := fmt.Sprintf("%d", port) + args := []string{"mount", "-p", profile, fmt.Sprintf("%s:%s", tempDir, guestMount), "--alsologtostderr", "-v=1", "--port", portStr} ss, err := Start(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Fatalf("%v failed: %v", args, err) @@ -260,7 +254,7 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no if err := retry.Expo(checkMount, time.Millisecond*500, Seconds(15)); err != nil { // For local testing, allow macOS users to click prompt. If they don't, skip the test. if runtime.GOOS == "darwin" { - t.Skip("skipping: mount did not appear, likely because macOS requires prompt to allow non-codesigned binaries to listen on non-localhost port") + t.Skip("skipping: mount did not appear, likely because macOS requires prompt to allow non-code signed binaries to listen on non-localhost port") } t.Fatalf("/mount-9p did not appear within %s: %v", time.Since(start), err) } @@ -276,7 +270,7 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no t.Logf("reading mount text") mountText := func() string { str := "" - var err error = nil + var err error for err == nil { var add string add, err = ss.Stdout.ReadString(0) @@ -288,12 +282,103 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) { // no return str }() t.Logf("done reading mount text") - match, err := regexp.Match("Bind Address:\\s*[0-9.]+:46464", []byte(mountText)) + match, err := regexp.Match("Bind Address:\\s*[0-9.]+:"+portStr, []byte(mountText)) if err != nil { t.Fatalf("failed to match regex pattern. err: %v", err) } if !match { - t.Fatalf("failed to find bind address with port 46464. Mount command out: \n%v", mountText) + t.Fatalf("failed to find bind address with port %s. Mount command out: \n%v", portStr, mountText) + } + }) + + t.Run("VerifyCleanup", func(t *testing.T) { + tempDir := t.TempDir() + + ctx, cancel := context.WithTimeout(ctx, Minutes(10)) + + guestMountPaths := []string{"/mount1", "/mount2", "/mount3"} + + var mntProcs []*StartSession + for _, guestMount := range guestMountPaths { + args := []string{"mount", "-p", profile, fmt.Sprintf("%s:%s", tempDir, guestMount), "--alsologtostderr", "-v=1"} + mntProc, err := Start(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("%v failed: %v", args, err) + } + + mntProcs = append(mntProcs, mntProc) + + } + + defer func() { + // Still trying to stop mount processes that could otherwise + // (if something weird happens...) leave the test run hanging + // The worst thing that could happen is that we try to kill + // something that was aleardy killed... + for _, mp := range mntProcs { + mp.Stop(t) + } + + cancel() + if *cleanup { + os.RemoveAll(tempDir) + } + }() + + // are the mounts alive yet..? + checkMount := func() error { + for _, mnt := range guestMountPaths { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", "findmnt -T", mnt)) + if err != nil { + // if something weird has happened from previous tests.. + // this could at least spare us some waiting + if strings.Contains(rr.Stdout.String(), fmt.Sprintf("Profile \"%s\" not found.", profile)) { + t.Fatalf("profile was deleted, cancelling the test") + } + return err + } + } + return nil } + if err := retry.Expo(checkMount, time.Millisecond*500, Seconds(15)); err != nil { + // For local testing, allow macOS users to click prompt. If they don't, skip the test. + if runtime.GOOS == "darwin" { + t.Skip("skipping: mount did not appear, likely because macOS requires prompt to allow non-code signed binaries to listen on non-localhost port") + } + t.Fatalf("mount was not ready in time: %v", err) + } + + checkProcsAlive := func(end chan bool) { + for _, mntp := range mntProcs { + // Trying to wait for process end + // if the wait fail with ExitError we know that the process + // doesn't exist anymore.. + go func(end chan bool) { + err := mntp.cmd.Wait() + if _, ok := err.(*exec.ExitError); ok { + end <- true + } + }(end) + + // Either we know that the mount process has ended + // or we fail after 1 second + // TODO: is there a better way? rather than waiting.. + select { + case <-time.After(1 * time.Second): + t.Fatalf("1s TIMEOUT: Process %d is still running\n", mntp.cmd.Process.Pid) + case <-end: + continue + } + } + } + + // exec the mount killer + _, err := Run(t, exec.Command(Target(), "mount", "-p", profile, "--kill=true")) + if err != nil { + t.Fatalf("failed while trying to kill mounts") + } + + end := make(chan bool, 1) + checkProcsAlive(end) }) } diff --git a/test/integration/functional_test_pvc_test.go b/test/integration/functional_test_pvc_test.go index 744edadbae98..a4ea9ed3d4ae 100644 --- a/test/integration/functional_test_pvc_test.go +++ b/test/integration/functional_test_pvc_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -31,10 +31,16 @@ import ( core "k8s.io/api/core/v1" storage "k8s.io/api/storage/v1" + "k8s.io/minikube/pkg/minikube/detect" "k8s.io/minikube/pkg/util/retry" ) // validatePersistentVolumeClaim makes sure PVCs work properly +// verifies at least one StorageClass exists +// Applies a PVC manifest (pvc.yaml) and verfies PVC named myclaim reaches phase Bound. +// Creates a test pod (sp-pod) that mounts the claim (via createPVTestPod). +// Writes a file foo to the mounted volume at /tmp/mount/foo. +// Deletes the pod, recreates it, and verifies the file foo still exists by listing /tmp/mount, proving data persists across pod restarts. func validatePersistentVolumeClaim(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) @@ -126,8 +132,12 @@ func createPVTestPod(ctx context.Context, t *testing.T, profile string) { if err != nil { t.Fatalf("kubectl apply pvc.yaml failed: args %q: %v", rr.Command(), err) } + maxWait := 4 + if detect.NestedVM() || detect.GithubActionRunner() { + maxWait = 6 + } // wait for pod to be running - if _, err := PodWait(ctx, t, profile, "default", "test=storage-provisioner", Minutes(3)); err != nil { - t.Fatalf("failed waiting for pod: %v", err) + if _, err := PodWait(ctx, t, profile, "default", "test=storage-provisioner", Minutes(maxWait)); err != nil { + t.Fatalf("failed waiting for pvctest pod : %v", err) } } diff --git a/test/integration/functional_test_tunnel_test.go b/test/integration/functional_test_tunnel_test.go index 299d2c1c3270..b41753d216ac 100644 --- a/test/integration/functional_test_tunnel_test.go +++ b/test/integration/functional_test_tunnel_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2018 The Kubernetes Authors All rights reserved. @@ -21,7 +21,7 @@ package integration import ( "context" "fmt" - "io/ioutil" + "io" "net" "net/http" "os/exec" @@ -37,6 +37,8 @@ import ( "k8s.io/minikube/pkg/kapi" "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/minikube/detect" + "k8s.io/minikube/pkg/minikube/reason" "k8s.io/minikube/pkg/util" "k8s.io/minikube/pkg/util/retry" ) @@ -60,6 +62,7 @@ func validateTunnelCmd(ctx context.Context, t *testing.T, profile string) { name string validator validateFunc }{ + {"RunSecondTunnel", validateNoSecondTunnel}, // Ensure no two tunnels run simultaneously {"StartTunnel", validateTunnelStart}, // Start tunnel {"WaitService", validateServiceStable}, // Wait for service is stable {"AccessDirect", validateAccessDirect}, // Access test for loadbalancer IP @@ -92,13 +95,13 @@ func checkRoutePassword(t *testing.T) { // checkDNSForward skips DNS forwarding test if runtime is not supported func checkDNSForward(t *testing.T) { // Not all platforms support DNS forwarding - if runtime.GOOS != "darwin" { - t.Skip("DNS forwarding is supported for darwin only now, skipping test DNS forwarding") + if runtime.GOOS != "darwin" || KicDriver() { + t.Skip("DNS forwarding is only supported for Hyperkit on Darwin, skipping test DNS forwarding") } } -// getKubeDNSIP returns kube-dns ClusterIP -func getKubeDNSIP(t *testing.T, profile string) string { +// kubeDNSIP returns kube-dns ClusterIP +func kubeDNSIP(t *testing.T, profile string) string { // Load ClusterConfig c, err := config.Load(profile) if err != nil { @@ -110,7 +113,7 @@ func getKubeDNSIP(t *testing.T, profile string) string { t.Errorf("failed to parse service CIDR: %v", err) } // Get kube-dns ClusterIP - ip, err := util.GetDNSIP(ipNet.String()) + ip, err := util.DNSIP(ipNet.String()) if err != nil { t.Errorf("failed to get kube-dns IP: %v", err) } @@ -130,29 +133,96 @@ func validateTunnelStart(ctx context.Context, t *testing.T, profile string) { tunnelSession = *ss } -// validateServiceStable starts nginx pod, nginx service and waits nginx having loadbalancer ingress IP -func validateServiceStable(ctx context.Context, t *testing.T, profile string) { - if GithubActionRunner() && runtime.GOOS == "darwin" { - t.Skip("The test WaitService is broken on github actions in macos https://github.com/kubernetes/minikube/issues/8434") - } +// validateNoSecondTunnel ensures only 1 tunnel can run simultaneously +func validateNoSecondTunnel(ctx context.Context, t *testing.T, profile string) { checkRoutePassword(t) - client, err := kapi.Client(profile) - if err != nil { - t.Fatalf("failed to get Kubernetes client for %q: %v", profile, err) + type SessInfo struct { + Stdout string + Stderr string + ExitCode int } - // Start the "nginx" pod. - rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "apply", "-f", filepath.Join(*testdataDir, "testsvc.yaml"))) - if err != nil { - t.Fatalf("%s failed: %v", rr.Command(), err) + sessCh := make(chan SessInfo) + sessions := make([]*StartSession, 2) + + var runTunnel = func(idx int) { + args := []string{"-p", profile, "tunnel", "--alsologtostderr"} + + ctx2, cancel := context.WithTimeout(ctx, Seconds(15)) + defer cancel() + session, err := Start(t, exec.CommandContext(ctx2, Target(), args...)) + if err != nil { + t.Errorf("failed to start tunnel: %v", err) + } + sessions[idx] = session + + stderr, err := io.ReadAll(session.Stderr) + if err != nil { + t.Logf("Failed to read stderr: %v", err) + } + stdout, err := io.ReadAll(session.Stdout) + if err != nil { + t.Logf("Failed to read stdout: %v", err) + } + + exitCode := 0 + err = session.cmd.Wait() + if err != nil { + if exErr, ok := err.(*exec.ExitError); !ok { + t.Logf("failed to coerce exit error: %v", err) + exitCode = -1 + } else { + exitCode = exErr.ExitCode() + } + } + + sessCh <- SessInfo{Stdout: string(stdout), Stderr: string(stderr), ExitCode: exitCode} } - if _, err := PodWait(ctx, t, profile, "default", "run=nginx-svc", Minutes(4)); err != nil { - t.Fatalf("wait: %v", err) + + // One of the two processes must fail to acquire lock and die. This should be the first process to die. + go runTunnel(0) + go runTunnel(1) + + sessInfo := <-sessCh + + if sessInfo.ExitCode != reason.SvcTunnelAlreadyRunning.ExitCode { + t.Errorf("tunnel command failed with unexpected error: exit code %d. stderr: %s\n stdout: %s", sessInfo.ExitCode, sessInfo.Stderr, sessInfo.Stdout) + } + + for _, sess := range sessions { + sess.Stop(t) + } + <-sessCh +} + +// validateServiceStable starts nginx pod, nginx service and waits nginx having loadbalancer ingress IP +func validateServiceStable(ctx context.Context, t *testing.T, profile string) { + if detect.GithubActionRunner() && runtime.GOOS == "darwin" { + t.Skip("The test WaitService is broken on github actions in macos https://github.com/kubernetes/minikube/issues/8434") } + checkRoutePassword(t) + setupSucceeded := t.Run("Setup", func(t *testing.T) { + client, err := kapi.Client(profile) + if err != nil { + t.Fatalf("failed to get Kubernetes client for %q: %v", profile, err) + } + + // Start the "nginx" pod. + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "apply", "-f", filepath.Join(*testdataDir, "testsvc.yaml"))) + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) + } + if _, err := PodWait(ctx, t, profile, "default", "run=nginx-svc", Minutes(4)); err != nil { + t.Fatalf("wait: %v", err) + } - if err := kapi.WaitForService(client, "default", "nginx-svc", true, 1*time.Second, Minutes(2)); err != nil { - t.Fatal(errors.Wrap(err, "Error waiting for nginx service to be up")) + if err := kapi.WaitForService(client, "default", "nginx-svc", true, 1*time.Second, Minutes(2)); err != nil { + t.Fatal(errors.Wrap(err, "Error waiting for nginx service to be up")) + } + }) + if !setupSucceeded { + t.Fatal("Failed setup") } t.Run("IngressIP", func(t *testing.T) { @@ -160,7 +230,7 @@ func validateServiceStable(ctx context.Context, t *testing.T, profile string) { t.Skip("The test WaitService/IngressIP is broken on hyperv https://github.com/kubernetes/minikube/issues/8381") } // Wait until the nginx-svc has a loadbalancer ingress IP - err = wait.PollImmediate(5*time.Second, Minutes(3), func() (bool, error) { + err := wait.PollUntilContextTimeout(ctx, 5*time.Second, Minutes(3), true, func(ctx context.Context) (bool, error) { rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "svc", "nginx-svc", "-o", "jsonpath={.status.loadBalancer.ingress[0].ip}")) if err != nil { return false, err @@ -187,7 +257,7 @@ func validateAccessDirect(ctx context.Context, t *testing.T, profile string) { if runtime.GOOS == "windows" { t.Skip("skipping: access direct test is broken on windows: https://github.com/kubernetes/minikube/issues/8304") } - if GithubActionRunner() && runtime.GOOS == "darwin" { + if detect.GithubActionRunner() && runtime.GOOS == "darwin" { t.Skip("skipping: access direct test is broken on github actions on macos https://github.com/kubernetes/minikube/issues/8434") } @@ -206,7 +276,7 @@ func validateAccessDirect(ctx context.Context, t *testing.T, profile string) { return &retry.RetriableError{Err: fmt.Errorf("no body")} } defer resp.Body.Close() - got, err = ioutil.ReadAll(resp.Body) + got, err = io.ReadAll(resp.Body) if err != nil { return &retry.RetriableError{Err: err} } @@ -235,14 +305,14 @@ func validateAccessDirect(ctx context.Context, t *testing.T, profile string) { // validateDNSDig validates if the DNS forwarding works by dig command DNS lookup // NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental func validateDNSDig(ctx context.Context, t *testing.T, profile string) { - if GithubActionRunner() && runtime.GOOS == "darwin" { + if detect.GithubActionRunner() && runtime.GOOS == "darwin" { t.Skip("skipping: access direct test is broken on github actions on macos https://github.com/kubernetes/minikube/issues/8434") } checkRoutePassword(t) checkDNSForward(t) - ip := getKubeDNSIP(t, profile) + ip := kubeDNSIP(t, profile) dnsIP := fmt.Sprintf("@%s", ip) // Check if the dig DNS lookup works toward kube-dns IP @@ -269,8 +339,8 @@ func validateDNSDig(ctx context.Context, t *testing.T, profile string) { // validateDNSDscacheutil validates if the DNS forwarding works by dscacheutil command DNS lookup // NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental -func validateDNSDscacheutil(ctx context.Context, t *testing.T, profile string) { - if GithubActionRunner() && runtime.GOOS == "darwin" { +func validateDNSDscacheutil(ctx context.Context, t *testing.T, _ string) { + if detect.GithubActionRunner() && runtime.GOOS == "darwin" { t.Skip("skipping: access direct test is broken on github actions on macos https://github.com/kubernetes/minikube/issues/8434") } @@ -294,8 +364,8 @@ func validateDNSDscacheutil(ctx context.Context, t *testing.T, profile string) { // validateAccessDNS validates if the test service can be accessed with DNS forwarding from host // NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental -func validateAccessDNS(ctx context.Context, t *testing.T, profile string) { - if GithubActionRunner() && runtime.GOOS == "darwin" { +func validateAccessDNS(_ context.Context, t *testing.T, profile string) { + if detect.GithubActionRunner() && runtime.GOOS == "darwin" { t.Skip("skipping: access direct test is broken on github actions on macos https://github.com/kubernetes/minikube/issues/8434") } @@ -305,11 +375,11 @@ func validateAccessDNS(ctx context.Context, t *testing.T, profile string) { got := []byte{} url := fmt.Sprintf("http://%s", domain) - ip := getKubeDNSIP(t, profile) + ip := kubeDNSIP(t, profile) dnsIP := fmt.Sprintf("%s:53", ip) // Set kube-dns dial - kubeDNSDial := func(ctx context.Context, network, address string) (net.Conn, error) { + kubeDNSDial := func(ctx context.Context, _, _ string) (net.Conn, error) { d := net.Dialer{} return d.DialContext(ctx, "udp", dnsIP) } @@ -337,7 +407,7 @@ func validateAccessDNS(ctx context.Context, t *testing.T, profile string) { return &retry.RetriableError{Err: fmt.Errorf("no body")} } defer resp.Body.Close() - got, err = ioutil.ReadAll(resp.Body) + got, err = io.ReadAll(resp.Body) if err != nil { return &retry.RetriableError{Err: err} } @@ -358,8 +428,13 @@ func validateAccessDNS(ctx context.Context, t *testing.T, profile string) { } // validateTunnelDelete stops `minikube tunnel` -func validateTunnelDelete(ctx context.Context, t *testing.T, profile string) { +func validateTunnelDelete(_ context.Context, t *testing.T, _ string) { checkRoutePassword(t) // Stop tunnel tunnelSession.Stop(t) + // prevent the child process from becoming a defunct zombie process + if err := tunnelSession.cmd.Wait(); err != nil { + t.Logf("failed to stop process: %v", err) + return + } } diff --git a/test/integration/guest_env_test.go b/test/integration/guest_env_test.go deleted file mode 100644 index a55f95cccba6..000000000000 --- a/test/integration/guest_env_test.go +++ /dev/null @@ -1,78 +0,0 @@ -// +build iso - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package integration - -import ( - "context" - "fmt" - "os/exec" - "testing" - - "k8s.io/minikube/pkg/minikube/vmpath" -) - -// TestGuestEnvironment verifies files and packges installed inside minikube ISO/Base image -func TestGuestEnvironment(t *testing.T) { - MaybeParallel(t) - - profile := UniqueProfileName("guest") - ctx, cancel := context.WithTimeout(context.Background(), Minutes(15)) - defer CleanupWithLogs(t, profile, cancel) - - args := append([]string{"start", "-p", profile, "--install-addons=false", "--memory=2048", "--wait=false"}, StartArgs()...) - rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) - if err != nil { - t.Errorf("failed to start minikube: args %q: %v", rr.Command(), err) - } - - // Run as a group so that our defer doesn't happen as tests are runnings - t.Run("Binaries", func(t *testing.T) { - for _, pkg := range []string{"git", "rsync", "curl", "wget", "socat", "iptables", "VBoxControl", "VBoxService", "crictl", "podman", "docker"} { - pkg := pkg - t.Run(pkg, func(t *testing.T) { - t.Parallel() - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("which %s", pkg))) - if err != nil { - t.Errorf("failed to verify existence of %q binary : args %q: %v", pkg, rr.Command(), err) - } - }) - } - }) - - t.Run("PersistentMounts", func(t *testing.T) { - for _, mount := range []string{ - "/data", - "/var/lib/docker", - "/var/lib/cni", - "/var/lib/kubelet", - vmpath.GuestPersistentDir, - "/var/lib/toolbox", - "/var/lib/boot2docker", - } { - mount := mount - t.Run(mount, func(t *testing.T) { - t.Parallel() - rr, err := Run(t, exec.CommandContext(ctx, Targt(), "-p", profile, "ssh", fmt.Sprintf("df -t ext4 %s | grep %s", mount, mount))) - if err != nil { - t.Errorf("failed to verify existence of %q mount. args %q: %v", mount, rr.Command(), err) - } - }) - } - }) -} diff --git a/test/integration/gvisor_addon_test.go b/test/integration/gvisor_addon_test.go index 82609843c3e1..e594a6cc5c0f 100644 --- a/test/integration/gvisor_addon_test.go +++ b/test/integration/gvisor_addon_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -48,7 +48,7 @@ func TestGvisorAddon(t *testing.T) { CleanupWithLogs(t, profile, cancel) }() - startArgs := append([]string{"start", "-p", profile, "--memory=2200", "--container-runtime=containerd", "--docker-opt", "containerd=/var/run/containerd/containerd.sock"}, StartArgs()...) + startArgs := append([]string{"start", "-p", profile, "--memory=3072", "--container-runtime=containerd", "--docker-opt", "containerd=/var/run/containerd/containerd.sock"}, StartArgs()...) rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) if err != nil { t.Fatalf("failed to start minikube: args %q: %v", rr.Command(), err) @@ -69,20 +69,12 @@ func TestGvisorAddon(t *testing.T) { t.Fatalf("failed waiting for 'gvisor controller' pod: %v", err) } - // Create an untrusted workload - rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "replace", "--force", "-f", filepath.Join(*testdataDir, "nginx-untrusted.yaml"))) - if err != nil { - t.Fatalf("%s failed: %v", rr.Command(), err) - } // Create gvisor workload rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "replace", "--force", "-f", filepath.Join(*testdataDir, "nginx-gvisor.yaml"))) if err != nil { t.Fatalf("%s failed: %v", rr.Command(), err) } - if _, err := PodWait(ctx, t, profile, "default", "run=nginx,untrusted=true", Minutes(4)); err != nil { - t.Errorf("failed waiting for nginx pod: %v", err) - } if _, err := PodWait(ctx, t, profile, "default", "run=nginx,runtime=gvisor", Minutes(4)); err != nil { t.Errorf("failed waitinf for gvisor pod: %v", err) } @@ -90,7 +82,7 @@ func TestGvisorAddon(t *testing.T) { // Ensure that workloads survive a restart rr, err = Run(t, exec.CommandContext(ctx, Target(), "stop", "-p", profile)) if err != nil { - t.Fatalf("faild stopping minikube. args %q : %v", rr.Command(), err) + t.Fatalf("failed stopping minikube. args %q : %v", rr.Command(), err) } rr, err = Run(t, exec.CommandContext(ctx, Target(), startArgs...)) @@ -100,9 +92,6 @@ func TestGvisorAddon(t *testing.T) { if _, err := PodWait(ctx, t, profile, "kube-system", "kubernetes.io/minikube-addons=gvisor", Minutes(4)); err != nil { t.Errorf("failed waiting for 'gvisor controller' pod : %v", err) } - if _, err := PodWait(ctx, t, profile, "default", "run=nginx,untrusted=true", Minutes(4)); err != nil { - t.Errorf("failed waiting for 'nginx' pod : %v", err) - } if _, err := PodWait(ctx, t, profile, "default", "run=nginx,runtime=gvisor", Minutes(4)); err != nil { t.Errorf("failed waiting for 'gvisor' pod : %v", err) } diff --git a/test/integration/ha_test.go b/test/integration/ha_test.go new file mode 100644 index 000000000000..b1b145048cf0 --- /dev/null +++ b/test/integration/ha_test.go @@ -0,0 +1,629 @@ +//go:build integration + +/* +Copyright 2024 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "encoding/json" + "fmt" + "net" + "os/exec" + "path" + "path/filepath" + "strings" + "testing" + "time" + + "k8s.io/minikube/pkg/minikube/cluster" + "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/util/retry" +) + +// TestMultiControlPlane tests all ha (multi-control plane) cluster functionality +func TestMultiControlPlane(t *testing.T) { + if NoneDriver() { + t.Skip("none driver does not support multinode/ha(multi-control plane) cluster") + } + + if DockerDriver() { + rr, err := Run(t, exec.Command("docker", "version", "-f", "{{.Server.Version}}")) + if err != nil { + t.Fatalf("docker is broken: %v", err) + } + if strings.Contains(rr.Stdout.String(), "azure") { + t.Skip("kic containers are not supported on docker's azure") + } + } + + type validatorFunc func(context.Context, *testing.T, string) + profile := UniqueProfileName("ha") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(30)) + defer CleanupWithLogs(t, profile, cancel) + + t.Run("serial", func(t *testing.T) { + tests := []struct { + name string + validator validatorFunc + }{ + {"StartCluster", validateHAStartCluster}, + {"DeployApp", validateHADeployApp}, + {"PingHostFromPods", validateHAPingHostFromPods}, + {"AddWorkerNode", validateHAAddWorkerNode}, + {"NodeLabels", validateHANodeLabels}, + {"HAppyAfterClusterStart", validateHAStatusHAppy}, + {"CopyFile", validateHACopyFile}, + {"StopSecondaryNode", validateHAStopSecondaryNode}, + {"DegradedAfterControlPlaneNodeStop", validateHAStatusDegraded}, + {"RestartSecondaryNode", validateHARestartSecondaryNode}, + {"HAppyAfterSecondaryNodeRestart", validateHAStatusHAppy}, + {"RestartClusterKeepsNodes", validateHARestartClusterKeepsNodes}, + {"DeleteSecondaryNode", validateHADeleteSecondaryNode}, + {"DegradedAfterSecondaryNodeDelete", validateHAStatusDegraded}, + {"StopCluster", validateHAStopCluster}, + {"RestartCluster", validateHARestartCluster}, + {"DegradedAfterClusterRestart", validateHAStatusDegraded}, + {"AddSecondaryNode", validateHAAddSecondaryNode}, + {"HAppyAfterSecondaryNodeAdd", validateHAStatusHAppy}, + } + for _, tc := range tests { + tc := tc + if ctx.Err() == context.DeadlineExceeded { + t.Fatalf("Unable to run more tests (deadline exceeded)") + } + t.Run(tc.name, func(t *testing.T) { + defer PostMortemLogs(t, profile) + tc.validator(ctx, t, profile) + }) + } + }) +} + +// validateHAStartCluster ensures ha (multi-control plane) cluster can start. +func validateHAStartCluster(ctx context.Context, t *testing.T, profile string) { + // start ha (multi-control plane) cluster + startArgs := append([]string{"-p", profile, "start", "--ha", "--memory", "3072", "--wait", "true", "--alsologtostderr", "-v", "5"}, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) + if err != nil { + t.Fatalf("failed to fresh-start ha (multi-control plane) cluster. args %q : %v", rr.Command(), err) + } + + // ensure minikube status shows 3 operational control-plane nodes + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "type: Control Plane") != 3 { + t.Errorf("status says not all three control-plane nodes are present: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "host: Running") != 3 { + t.Errorf("status says not all three hosts are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "kubelet: Running") != 3 { + t.Errorf("status says not all three kubelets are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "apiserver: Running") != 3 { + t.Errorf("status says not all three apiservers are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } +} + +// validateHADeployApp deploys an app to ha (multi-control plane) cluster and ensures all nodes can serve traffic. +func validateHADeployApp(ctx context.Context, t *testing.T, profile string) { + // Create a deployment for app + _, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "apply", "-f", "./testdata/ha/ha-pod-dns-test.yaml")) + if err != nil { + t.Errorf("failed to create busybox deployment to ha (multi-control plane) cluster") + } + + _, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "rollout", "status", "deployment/busybox")) + if err != nil { + t.Errorf("failed to deploy busybox to ha (multi-control plane) cluster") + } + + // resolve Pod IPs + resolvePodIPs := func() error { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "get", "pods", "-o", "jsonpath='{.items[*].status.podIP}'")) + if err != nil { + err := fmt.Errorf("failed to retrieve Pod IPs (may be temporary): %v", err) + t.Log(err.Error()) + return err + } + podIPs := strings.Split(strings.Trim(rr.Stdout.String(), "'"), " ") + if len(podIPs) != 3 { + err := fmt.Errorf("expected 3 Pod IPs but got %d (may be temporary), output: %q", len(podIPs), rr.Output()) + t.Log(err.Error()) + return err + } else if podIPs[0] == podIPs[1] || podIPs[0] == podIPs[2] || podIPs[1] == podIPs[2] { + err := fmt.Errorf("expected 3 different pod IPs but got %s and %s (may be temporary), output: %q", podIPs[0], podIPs[1], rr.Output()) + t.Log(err.Error()) + return err + } + return nil + } + if err := retry.Expo(resolvePodIPs, 1*time.Second, Seconds(120)); err != nil { + t.Errorf("failed to resolve pod IPs: %v", err) + } + + // get Pod names + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "get", "pods", "-o", "jsonpath='{.items[*].metadata.name}'")) + if err != nil { + t.Errorf("failed get Pod names") + } + podNames := strings.Split(strings.Trim(rr.Stdout.String(), "'"), " ") + + // verify all Pods could resolve a public DNS + for _, name := range podNames { + _, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "exec", name, "--", "nslookup", "kubernetes.io")) + if err != nil { + t.Errorf("Pod %s could not resolve 'kubernetes.io': %v", name, err) + } + } + + // verify all Pods could resolve "kubernetes.default" + // this one is also checked by k8s e2e node conformance tests: + // https://github.com/kubernetes/kubernetes/blob/f137c4777095b3972e2dd71a01365d47be459389/test/e2e_node/environment/conformance.go#L125-L179 + for _, name := range podNames { + _, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "exec", name, "--", "nslookup", "kubernetes.default")) + if err != nil { + t.Errorf("Pod %s could not resolve 'kubernetes.default': %v", name, err) + } + } + + // verify all pods could resolve to a local service. + for _, name := range podNames { + _, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "exec", name, "--", "nslookup", "kubernetes.default.svc.cluster.local")) + if err != nil { + t.Errorf("Pod %s could not resolve local service (kubernetes.default.svc.cluster.local): %v", name, err) + } + } +} + +// validateHAPingHostFromPods uses app previously deployed by validateDeployAppToHACluster to verify its pods, located on different nodes, can resolve "host.minikube.internal". +func validateHAPingHostFromPods(ctx context.Context, t *testing.T, profile string) { + // get Pod names + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "get", "pods", "-o", "jsonpath='{.items[*].metadata.name}'")) + if err != nil { + t.Fatalf("failed to get Pod names: %v", err) + } + podNames := strings.Split(strings.Trim(rr.Stdout.String(), "'"), " ") + + for _, name := range podNames { + // get host.minikube.internal ip as resolved by nslookup + out, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "exec", name, "--", "sh", "-c", "nslookup host.minikube.internal | awk 'NR==5' | cut -d' ' -f3")) + if err != nil { + t.Errorf("Pod %s could not resolve 'host.minikube.internal': %v", name, err) + continue + } + hostIP := net.ParseIP(strings.TrimSpace(out.Stdout.String())) + if hostIP == nil { + t.Fatalf("minikube host ip is nil: %s", out.Output()) + } + // try pinging host from pod + ping := fmt.Sprintf("ping -c 1 %s", hostIP) + if _, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "kubectl", "--", "exec", name, "--", "sh", "-c", ping)); err != nil { + t.Errorf("Failed to ping host (%s) from pod (%s): %v", hostIP, name, err) + } + } +} + +// validateHAAddWorkerNode uses the minikube node add command to add a worker node to an existing ha (multi-control plane) cluster. +func validateHAAddWorkerNode(ctx context.Context, t *testing.T, profile string) { + // add a node to the current ha (multi-control plane) cluster + addArgs := []string{"-p", profile, "node", "add", "--alsologtostderr", "-v", "5"} + rr, err := Run(t, exec.CommandContext(ctx, Target(), addArgs...)) + if err != nil { + t.Fatalf("failed to add worker node to current ha (multi-control plane) cluster. args %q : %v", rr.Command(), err) + } + + // ensure minikube status shows 3 operational control-plane nodes and 1 worker node + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "type: Control Plane") != 3 { + t.Errorf("status says not all three control-plane nodes are present: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "host: Running") != 4 { + t.Errorf("status says not all four hosts are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "kubelet: Running") != 4 { + t.Errorf("status says not all four kubelets are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "apiserver: Running") != 3 { + t.Errorf("status says not all three apiservers are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } +} + +// validateHANodeLabels check if all node labels were configured correctly. +func validateHANodeLabels(ctx context.Context, t *testing.T, profile string) { + // docs: Get the node labels from the cluster with `kubectl get nodes` + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "nodes", "-o", "jsonpath=[{range .items[*]}{.metadata.labels},{end}]")) + if err != nil { + t.Errorf("failed to 'kubectl get nodes' with args %q: %v", rr.Command(), err) + } + + nodeLabelsList := []map[string]string{} + fixedString := strings.Replace(rr.Stdout.String(), ",]", "]", 1) + err = json.Unmarshal([]byte(fixedString), &nodeLabelsList) + if err != nil { + t.Errorf("failed to decode json from label list: args %q: %v", rr.Command(), err) + } + + // docs: check if all node labels matches with the expected Minikube labels: `minikube.k8s.io/*` + expectedLabels := []string{"minikube.k8s.io/commit", "minikube.k8s.io/version", "minikube.k8s.io/updated_at", "minikube.k8s.io/name", "minikube.k8s.io/primary"} + + for _, nodeLabels := range nodeLabelsList { + for _, el := range expectedLabels { + if _, ok := nodeLabels[el]; !ok { + t.Errorf("expected to have label %q in node labels but got : %s", el, rr.Output()) + } + } + } +} + +// validateHAStatusHAppy ensures minikube profile list outputs correct with ha (multi-control plane) clusters. +func validateHAStatusHAppy(ctx context.Context, t *testing.T, profile string) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "profile", "list", "--output", "json")) + if err != nil { + t.Errorf("failed to list profiles with json format. args %q: %v", rr.Command(), err) + } + + var jsonObject map[string][]config.Profile + err = json.Unmarshal(rr.Stdout.Bytes(), &jsonObject) + if err != nil { + t.Errorf("failed to decode json from profile list: args %q: %v", rr.Command(), err) + } + + validProfiles := jsonObject["valid"] + var profileObject *config.Profile + for _, obj := range validProfiles { + if obj.Name == profile { + profileObject = &obj + break + } + } + + if profileObject == nil { + t.Errorf("expected the json of 'profile list' to include %q but got *%q*. args: %q", profile, rr.Stdout.String(), rr.Command()) + } else { + if expected, numNodes := 4, len(profileObject.Config.Nodes); numNodes != expected { + t.Errorf("expected profile %q in json of 'profile list' to include %d nodes but have %d nodes. got *%q*. args: %q", profile, expected, numNodes, rr.Stdout.String(), rr.Command()) + } + + if expected, status := "HAppy", profileObject.Status; status != expected { + t.Errorf("expected profile %q in json of 'profile list' to have %q status but have %q status. got *%q*. args: %q", profile, expected, status, rr.Stdout.String(), rr.Command()) + } + } + + if invalidPs, ok := jsonObject["invalid"]; ok { + for _, ps := range invalidPs { + if strings.Contains(ps.Name, profile) { + t.Errorf("expected the json of 'profile list' to not include profile or node in invalid profile but got *%q*. args: %q", rr.Stdout.String(), rr.Command()) + } + } + } +} + +// validateHACopyFile ensures minikube cp works with ha (multi-control plane) clusters. +func validateHACopyFile(ctx context.Context, t *testing.T, profile string) { + if NoneDriver() { + t.Skipf("skipping: cp is unsupported by none driver") + } + + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "--output", "json", "--alsologtostderr", "-v", "5")) + if err != nil && rr.ExitCode != 7 { + t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) + } + + var statuses []cluster.Status + if err = json.Unmarshal(rr.Stdout.Bytes(), &statuses); err != nil { + t.Errorf("failed to decode json from status: args %q: %v", rr.Command(), err) + } + + tmpDir := t.TempDir() + + srcPath := cpTestLocalPath() + dstPath := cpTestMinikubePath() + + for _, n := range statuses { + // copy local to node + testCpCmd(ctx, t, profile, "", srcPath, n.Name, dstPath) + + // copy back from node to local + tmpPath := filepath.Join(tmpDir, fmt.Sprintf("cp-test_%s.txt", n.Name)) + testCpCmd(ctx, t, profile, n.Name, dstPath, "", tmpPath) + + // copy node to node + for _, n2 := range statuses { + if n.Name == n2.Name { + continue + } + fp := path.Join("/home/docker", fmt.Sprintf("cp-test_%s_%s.txt", n.Name, n2.Name)) + testCpCmd(ctx, t, profile, n.Name, dstPath, n2.Name, fp) + } + } +} + +// validateHAStopSecondaryNode tests ha (multi-control plane) cluster by stopping a secondary control-plane node using minikube node stop command. +func validateHAStopSecondaryNode(ctx context.Context, t *testing.T, profile string) { + // run minikube node stop on secondary control-plane node + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "node", "stop", SecondNodeName, "--alsologtostderr", "-v", "5")) + if err != nil { + t.Errorf("secondary control-plane node stop returned an error. args %q: %v", rr.Command(), err) + } + + // ensure minikube status shows 3 running nodes and 1 stopped node + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "--alsologtostderr", "-v", "5")) + // exit code 7 means a host is stopped, which we are expecting + if err != nil && rr.ExitCode != 7 { + t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "type: Control Plane") != 3 { + t.Errorf("status says not all three control-plane nodes are present: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "host: Running") != 3 { + t.Errorf("status says not three hosts are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "kubelet: Running") != 3 { + t.Errorf("status says not three kubelets are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "apiserver: Running") != 2 { + t.Errorf("status says not two apiservers are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } +} + +// validateHAStatusDegraded ensures minikube profile list outputs correct with ha (multi-control plane) clusters. +func validateHAStatusDegraded(ctx context.Context, t *testing.T, profile string) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "profile", "list", "--output", "json")) + if err != nil { + t.Errorf("failed to list profiles with json format. args %q: %v", rr.Command(), err) + } + + var jsonObject map[string][]config.Profile + err = json.Unmarshal(rr.Stdout.Bytes(), &jsonObject) + if err != nil { + t.Errorf("failed to decode json from profile list: args %q: %v", rr.Command(), err) + } + + validProfiles := jsonObject["valid"] + var profileObject *config.Profile + for _, obj := range validProfiles { + if obj.Name == profile { + profileObject = &obj + break + } + } + + if profileObject == nil { + t.Errorf("expected the json of 'profile list' to include %q but got *%q*. args: %q", profile, rr.Stdout.String(), rr.Command()) + } else if expected, status := "Degraded", profileObject.Status; status != expected { + t.Errorf("expected profile %q in json of 'profile list' to have %q status but have %q status. got *%q*. args: %q", profile, expected, status, rr.Stdout.String(), rr.Command()) + } +} + +// validateHARestartSecondaryNode tests the minikube node start command on existing stopped secondary node. +func validateHARestartSecondaryNode(ctx context.Context, t *testing.T, profile string) { + // start stopped node(s) back up + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "node", "start", SecondNodeName, "--alsologtostderr", "-v", "5")) + if err != nil { + t.Log(rr.Stderr.String()) + t.Errorf("secondary control-plane node start returned an error. args %q: %v", rr.Command(), err) + } + + // ensure minikube status shows all 4 nodes running, waiting for ha (multi-control plane) cluster/apiservers to stabilise + minikubeStatus := func() error { + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "--alsologtostderr", "-v", "5")) + return err + } + if err := retry.Expo(minikubeStatus, 1*time.Second, 60*time.Second); err != nil { + t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "type: Control Plane") != 3 { + t.Errorf("status says not all three control-plane nodes are present: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "host: Running") != 4 { + t.Errorf("status says not all four hosts are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "kubelet: Running") != 4 { + t.Errorf("status says not all four kubelets are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "apiserver: Running") != 3 { + t.Errorf("status says not all three apiservers are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + + // ensure kubectl can connect correctly + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "get", "nodes")) + if err != nil { + t.Fatalf("failed to kubectl get nodes. args %q : %v", rr.Command(), err) + } +} + +// validateHARestartClusterKeepsNodes restarts minikube cluster and checks if the reported node list is unchanged. +func validateHARestartClusterKeepsNodes(ctx context.Context, t *testing.T, profile string) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "node", "list", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Errorf("failed to run node list. args %q : %v", rr.Command(), err) + } + nodeList := rr.Stdout.String() + + _, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "stop", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Errorf("failed to run minikube stop. args %q : %v", rr.Command(), err) + } + + _, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "start", "--wait", "true", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Errorf("failed to run minikube start. args %q : %v", rr.Command(), err) + } + + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "node", "list", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Errorf("failed to run node list. args %q : %v", rr.Command(), err) + } + + restartedNodeList := rr.Stdout.String() + if nodeList != restartedNodeList { + t.Fatalf("reported node list is not the same after restart. Before restart: %s\nAfter restart: %s", nodeList, restartedNodeList) + } +} + +// validateHADeleteSecondaryNode tests the minikube node delete command on secondary control-plane. +// note: currently, 'minikube status' subcommand relies on primary control-plane node and storage-provisioner only runs on a primary control-plane node. +func validateHADeleteSecondaryNode(ctx context.Context, t *testing.T, profile string) { + // delete the other secondary control-plane node + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "node", "delete", ThirdNodeName, "--alsologtostderr", "-v", "5")) + if err != nil { + t.Errorf("node delete returned an error. args %q: %v", rr.Command(), err) + } + + // ensure status is back down to 3 hosts + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "type: Control Plane") != 2 { + t.Errorf("status says not two control-plane nodes are present: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "host: Running") != 3 { + t.Errorf("status says not three hosts are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "kubelet: Running") != 3 { + t.Errorf("status says not three kubelets are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "apiserver: Running") != 2 { + t.Errorf("status says not two apiservers are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + + // ensure kubectl knows the node is gone + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "get", "nodes")) + if err != nil { + t.Fatalf("failed to run kubectl get nodes. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "NotReady") > 0 { + t.Errorf("expected 3 nodes to be Ready, got %v", rr.Output()) + } + + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "get", "nodes", "-o", `go-template='{{range .items}}{{range .status.conditions}}{{if eq .type "Ready"}} {{.status}}{{"\n"}}{{end}}{{end}}{{end}}'`)) + if err != nil { + t.Fatalf("failed to run kubectl get nodes. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "True") != 3 { + t.Errorf("expected 3 nodes Ready status to be True, got %v", rr.Output()) + } +} + +// validateHAStopCluster runs minikube stop on a ha (multi-control plane) cluster. +func validateHAStopCluster(ctx context.Context, t *testing.T, profile string) { + // Run minikube stop on the cluster + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "stop", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Errorf("failed to stop cluster. args %q: %v", rr.Command(), err) + } + + // ensure minikube status shows all 3 nodes stopped + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "--alsologtostderr", "-v", "5")) + // exit code 7 means a host is stopped, which we are expecting + if err != nil && rr.ExitCode != 7 { + t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "type: Control Plane") != 2 { + t.Errorf("status says not two control-plane nodes are present: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "host: Running") != 0 { + t.Errorf("status says there are running hosts: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "kubelet: Stopped") != 3 { + t.Errorf("status says not three kubelets are stopped: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "apiserver: Stopped") != 2 { + t.Errorf("status says not two apiservers are stopped: args %q: %v", rr.Command(), rr.Stdout.String()) + } +} + +// validateHARestartCluster verifies a soft restart on a ha (multi-control plane) cluster works. +func validateHARestartCluster(ctx context.Context, t *testing.T, profile string) { + // restart cluster with minikube start + startArgs := append([]string{"-p", profile, "start", "--wait", "true", "--alsologtostderr", "-v", "5"}, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) + if err != nil { + t.Fatalf("failed to start cluster. args %q : %v", rr.Command(), err) + } + + // ensure minikube status shows all 3 nodes running + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "type: Control Plane") != 2 { + t.Errorf("status says not two control-plane nodes are present: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "host: Running") != 3 { + t.Errorf("status says not three hosts are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "kubelet: Running") != 3 { + t.Errorf("status says not three kubelets are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "apiserver: Running") != 2 { + t.Errorf("status says not two apiservers are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + + // ensure kubectl reports that all nodes are ready + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "get", "nodes")) + if err != nil { + t.Fatalf("failed to run kubectl get nodes. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "NotReady") > 0 { + t.Errorf("expected 3 nodes to be Ready, got %v", rr.Output()) + } + + rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "get", "nodes", "-o", `go-template='{{range .items}}{{range .status.conditions}}{{if eq .type "Ready"}} {{.status}}{{"\n"}}{{end}}{{end}}{{end}}'`)) + if err != nil { + t.Fatalf("failed to run kubectl get nodes. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "True") != 3 { + t.Errorf("expected 3 nodes Ready status to be True, got %v", rr.Output()) + } +} + +// validateHAAddSecondaryNode uses the minikube node add command to add a secondary control-plane node to an existing ha (multi-control plane) cluster. +func validateHAAddSecondaryNode(ctx context.Context, t *testing.T, profile string) { + // add a node to the current ha (multi-control plane) cluster + addArgs := []string{"-p", profile, "node", "add", "--control-plane", "--alsologtostderr", "-v", "5"} + rr, err := Run(t, exec.CommandContext(ctx, Target(), addArgs...)) + if err != nil { + t.Fatalf("failed to add control-plane node to current ha (multi-control plane) cluster. args %q : %v", rr.Command(), err) + } + + // ensure minikube status shows 3 operational control-plane nodes and 1 worker node + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "--alsologtostderr", "-v", "5")) + if err != nil { + t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) + } + if strings.Count(rr.Stdout.String(), "type: Control Plane") != 3 { + t.Errorf("status says not all three control-plane nodes are present: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "host: Running") != 4 { + t.Errorf("status says not all four hosts are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "kubelet: Running") != 4 { + t.Errorf("status says not all four kubelets are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } + if strings.Count(rr.Stdout.String(), "apiserver: Running") != 3 { + t.Errorf("status says not all three apiservers are running: args %q: %v", rr.Command(), rr.Stdout.String()) + } +} diff --git a/test/integration/helpers_test.go b/test/integration/helpers_test.go index 5e1fa1fc9e0b..b25986e62225 100644 --- a/test/integration/helpers_test.go +++ b/test/integration/helpers_test.go @@ -29,7 +29,6 @@ import ( "errors" "fmt" "io" - "io/ioutil" "os" "os/exec" "path/filepath" @@ -40,11 +39,12 @@ import ( "github.com/docker/machine/libmachine/state" "github.com/google/go-cmp/cmp" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" core "k8s.io/api/core/v1" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/minikube/pkg/kapi" + "k8s.io/minikube/pkg/minikube/detect" ) // RunResult stores the result of an cmd.Run call @@ -153,14 +153,14 @@ func (ss *StartSession) Stop(t *testing.T) { killProcessFamily(t, ss.cmd.Process.Pid) if t.Failed() { if ss.Stdout.Size() > 0 { - stdout, err := ioutil.ReadAll(ss.Stdout) + stdout, err := io.ReadAll(ss.Stdout) if err != nil { t.Logf("read stdout failed: %v", err) } t.Logf("(dbg) %s stdout:\n%s", ss.cmd.Args, stdout) } if ss.Stderr.Size() > 0 { - stderr, err := ioutil.ReadAll(ss.Stderr) + stderr, err := io.ReadAll(ss.Stderr) if err != nil { t.Logf("read stderr failed: %v", err) } @@ -221,7 +221,15 @@ func PostMortemLogs(t *testing.T, profile string, multinode ...bool) { } t.Logf("-----------------------post-mortem--------------------------------") - + t.Logf("======> post-mortem[%s]: network settings <======", t.Name()) + hostEnv := func(k string) string { + if v := os.Getenv(k); v != "" { + return v + } + return "" + } + t.Logf("HOST ENV snapshots: PROXY env: HTTP_PROXY=%q HTTPS_PROXY=%q NO_PROXY=%q", + hostEnv("HTTP_PROXY"), hostEnv("HTTPS_PROXY"), hostEnv("NO_PROXY")) for _, n := range nodes { machine := profile if n != profile { @@ -264,7 +272,12 @@ func PostMortemLogs(t *testing.T, profile string, multinode ...bool) { t.Logf("%s: %v", rr.Command(), rerr) return } - notRunning := strings.Split(rr.Stdout.String(), " ") + // strings.Split("", " ") results in [""] slice of len 1 ! + out := strings.TrimSpace(rr.Stdout.String()) + if len(out) == 0 { + continue + } + notRunning := strings.Split(out, " ") t.Logf("non-running pods: %s", strings.Join(notRunning, " ")) t.Logf("======> post-mortem[%s]: describe non-running pods <======", t.Name()) @@ -285,7 +298,7 @@ func PostMortemLogs(t *testing.T, profile string, multinode ...bool) { // podStatusMsg returns a human-readable pod status, for generating debug status func podStatusMsg(pod core.Pod) string { var sb strings.Builder - sb.WriteString(fmt.Sprintf("%q [%s] %s", pod.ObjectMeta.GetName(), pod.ObjectMeta.GetUID(), pod.Status.Phase)) + sb.WriteString(fmt.Sprintf("%q [%s] %s", pod.GetName(), pod.GetUID(), pod.Status.Phase)) for i, c := range pod.Status.Conditions { if c.Reason != "" { if i == 0 { @@ -319,7 +332,7 @@ func PodWait(ctx context.Context, t *testing.T, profile string, ns string, selec start := time.Now() t.Logf("(dbg) %s: waiting %s for pods matching %q in namespace %q ...", t.Name(), timeout, selector, ns) - f := func() (bool, error) { + f := func(ctx context.Context) (bool, error) { pods, err := client.CoreV1().Pods(ns).List(ctx, listOpts) if err != nil { t.Logf("%s: WARNING: pod list for %q %q returned: %v", t.Name(), ns, selector, err) @@ -333,7 +346,7 @@ func PodWait(ctx context.Context, t *testing.T, profile string, ns string, selec } for _, pod := range pods.Items { - foundNames[pod.ObjectMeta.Name] = true + foundNames[pod.Name] = true msg := podStatusMsg(pod) // Prevent spamming logs with identical messages if msg != lastMsg { @@ -364,7 +377,7 @@ func PodWait(ctx context.Context, t *testing.T, profile string, ns string, selec return false, nil } - err = wait.PollImmediate(1*time.Second, timeout, f) + err = wait.PollUntilContextTimeout(ctx, 1*time.Second, timeout, true, f) names := []string{} for n := range foundNames { names = append(names, n) @@ -386,7 +399,7 @@ func PVCWait(ctx context.Context, t *testing.T, profile string, ns string, name t.Logf("(dbg) %s: waiting %s for pvc %q in namespace %q ...", t.Name(), timeout, name, ns) - f := func() (bool, error) { + f := func(ctx context.Context) (bool, error) { ret, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "pvc", name, "-o", "jsonpath={.status.phase}", "-n", ns)) if err != nil { t.Logf("%s: WARNING: PVC get for %q %q returned: %v", t.Name(), ns, name, err) @@ -402,7 +415,7 @@ func PVCWait(ctx context.Context, t *testing.T, profile string, ns string, name return false, nil } - return wait.PollImmediate(1*time.Second, timeout, f) + return wait.PollUntilContextTimeout(ctx, 1*time.Second, timeout, true, f) } // VolumeSnapshotWait waits for volume snapshot to be ready to use @@ -411,7 +424,7 @@ func VolumeSnapshotWait(ctx context.Context, t *testing.T, profile string, ns st t.Logf("(dbg) %s: waiting %s for volume snapshot %q in namespace %q ...", t.Name(), timeout, name, ns) - f := func() (bool, error) { + f := func(ctx context.Context) (bool, error) { res, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "volumesnapshot", name, "-o", "jsonpath={.status.readyToUse}", "-n", ns)) if err != nil { t.Logf("%s: WARNING: volume snapshot get for %q %q returned: %v", t.Name(), ns, name, err) @@ -427,10 +440,11 @@ func VolumeSnapshotWait(ctx context.Context, t *testing.T, profile string, ns st return isReady, nil } - return wait.PollImmediate(1*time.Second, timeout, f) + return wait.PollUntilContextTimeout(ctx, 1*time.Second, timeout, true, f) } // Status returns a minikube component status as a string +// If the command outputs multiple lines, only the first line is returned to avoid https://github.com/kubernetes/minikube/issues/21326 func Status(ctx context.Context, t *testing.T, path string, profile string, key string, node string) string { t.Helper() // Reminder of useful keys: "Host", "Kubelet", "APIServer" @@ -438,7 +452,15 @@ func Status(ctx context.Context, t *testing.T, path string, profile string, key if err != nil { t.Logf("status error: %v (may be ok)", err) } - return strings.TrimSpace(rr.Stdout.String()) + out := strings.TrimSpace(rr.Stdout.String()) + if out == "" { + return out + } + // Take only the first line if multi-line (ignore warnings or extra notes) + if idx := strings.IndexByte(out, '\n'); idx >= 0 { + out = out[:idx] + } + return strings.TrimSpace(out) } // showPodLogs logs debug info for pods @@ -472,7 +494,7 @@ func showPodLogs(ctx context.Context, t *testing.T, profile string, ns string, n // MaybeParallel sets that the test should run in parallel func MaybeParallel(t *testing.T) { t.Helper() - // TODO: Allow paralellized tests on "none" that do not require independent clusters + // TODO: Allow parallelized tests on "none" that do not require independent clusters if NoneDriver() { return } @@ -517,19 +539,17 @@ func cpTestLocalPath() string { return filepath.Join(*testdataDir, "cp-test.txt") } -// testCpCmd ensures copy functionality into minikube instance. -func testCpCmd(ctx context.Context, t *testing.T, profile string, node string) { - srcPath := cpTestLocalPath() - dstPath := cpTestMinikubePath() - - cpArgv := []string{"-p", profile, "cp", srcPath} +func cpTestReadText(ctx context.Context, t *testing.T, profile, node, path string) string { if node == "" { - cpArgv = append(cpArgv, dstPath) - } else { - cpArgv = append(cpArgv, fmt.Sprintf("%s:%s", node, dstPath)) + expected, err := os.ReadFile(path) + if err != nil { + t.Errorf("failed to read test file 'testdata/cp-test.txt' : %v", err) + } + return string(expected) } - rr, err := Run(t, exec.CommandContext(ctx, Target(), cpArgv...)) + sshArgv := []string{"-p", profile, "ssh", "-n", node, fmt.Sprintf("sudo cat %s", path)} + rr, err := Run(t, exec.CommandContext(ctx, Target(), sshArgv...)) if ctx.Err() == context.DeadlineExceeded { t.Errorf("failed to run command by deadline. exceeded timeout : %s", rr.Command()) } @@ -537,13 +557,21 @@ func testCpCmd(ctx context.Context, t *testing.T, profile string, node string) { t.Errorf("failed to run an cp command. args %q : %v", rr.Command(), err) } - sshArgv := []string{"-p", profile, "ssh"} - if node != "" { - sshArgv = append(sshArgv, "-n", node) + return rr.Stdout.String() +} + +func cpTestMergePath(node, path string) string { + if node == "" { + return path } - sshArgv = append(sshArgv, fmt.Sprintf("sudo cat %s", dstPath)) - rr, err = Run(t, exec.CommandContext(ctx, Target(), sshArgv...)) + return fmt.Sprintf("%s:%s", node, path) +} + +// testCpCmd ensures copy functionality into minikube instance. +func testCpCmd(ctx context.Context, t *testing.T, profile string, srcNode, srcPath, dstNode, dstPath string) { + cpArgv := []string{"-p", profile, "cp", cpTestMergePath(srcNode, srcPath), cpTestMergePath(dstNode, dstPath)} + rr, err := Run(t, exec.CommandContext(ctx, Target(), cpArgv...)) if ctx.Err() == context.DeadlineExceeded { t.Errorf("failed to run command by deadline. exceeded timeout : %s", rr.Command()) } @@ -551,12 +579,15 @@ func testCpCmd(ctx context.Context, t *testing.T, profile string, node string) { t.Errorf("failed to run an cp command. args %q : %v", rr.Command(), err) } - expected, err := ioutil.ReadFile(srcPath) - if err != nil { - t.Errorf("failed to read test file 'testdata/cp-test.txt' : %v", err) + expected := cpTestReadText(ctx, t, profile, srcNode, srcPath) + var copiedText string + if srcNode == "" && dstNode == "" { + copiedText = cpTestReadText(ctx, t, profile, profile, dstPath) + } else { + copiedText = cpTestReadText(ctx, t, profile, dstNode, dstPath) } - if diff := cmp.Diff(string(expected), rr.Stdout.String()); diff != "" { + if diff := cmp.Diff(expected, copiedText); diff != "" { t.Errorf("/testdata/cp-test.txt content mismatch (-want +got):\n%s", diff) } } @@ -641,14 +672,18 @@ func CopyDir(src, dst string) error { // get the collection of directory entries under src. // for each entry build its corresponding path under dst. - entries, err := ioutil.ReadDir(src) + entries, err := os.ReadDir(src) if err != nil { return err } for _, entry := range entries { // skip symlinks - if entry.Mode()&os.ModeSymlink != 0 { + entryInfo, err := entry.Info() + if err != nil { + return err + } + if entryInfo.Mode()&os.ModeSymlink != 0 { continue } @@ -670,3 +705,17 @@ func CopyDir(src, dst string) error { return nil } + +// FailFast proactively stops the addon suite when Docker Hub is rate limited. +func FailFastDockerHubRateLimited(t *testing.T) { + t.Helper() + remaining, err := detect.DockerHubRateLimitRemaining(t.Context()) + if err != nil { + t.Logf("unable to check Docker Hub rate limit (continuing): %v", err) + return + } + + if remaining <= 0 { + t.Fatalf("failing fast: Docker Hub rate limit reached (remaining=%d)", remaining) + } +} diff --git a/test/integration/image_test.go b/test/integration/image_test.go new file mode 100644 index 000000000000..a8bc3fe3c54d --- /dev/null +++ b/test/integration/image_test.go @@ -0,0 +1,137 @@ +//go:build integration + +/* +Copyright 2022 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "os/exec" + "strings" + "testing" + + "k8s.io/minikube/pkg/minikube/constants" +) + +// TestImageBuild makes sure the 'minikube image build' command works fine +func TestImageBuild(t *testing.T) { + if ContainerRuntime() != constants.Docker { + t.Skip() + } + type validateFunc func(context.Context, *testing.T, string) + profile := UniqueProfileName("image") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(15)) + defer Cleanup(t, profile, cancel) + + // Serial tests + t.Run("serial", func(t *testing.T) { + tests := []struct { + name string + validator validateFunc + }{ + {"Setup", validateSetupImageBuild}, + {"NormalBuild", validateNormalImageBuild}, + {"BuildWithBuildArg", validateImageBuildWithBuildArg}, + {"BuildWithDockerIgnore", validateImageBuildWithDockerIgnore}, + {"BuildWithSpecifiedDockerfile", validateNormalImageBuildWithSpecifiedDockerfile}, + {"validateImageBuildWithBuildEnv", validateImageBuildWithBuildEnv}, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + tc.validator(ctx, t, profile) + }) + // if setup fails bail + if tc.name == "Setup" && t.Failed() { + return + } + } + }) +} + +// validateSetupImageBuild starts a cluster for the image builds +func validateSetupImageBuild(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + startArgs := append([]string{"start", "-p", profile}, StartArgs()...) + if rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)); err != nil { + t.Fatalf("failed to start minikube with args: %q : %v", rr.Command(), err) + } +} + +// validateNormalImageBuild is normal test case for minikube image build, with -t parameter +func validateNormalImageBuild(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + args := []string{"image", "build", "-t", "aaa:latest", "./testdata/image-build/test-normal", "-p", profile} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err) + } +} + +// validateNormalImageBuildWithSpecifiedDockerfile is normal test case for minikube image build, with -t and -f parameter +func validateNormalImageBuildWithSpecifiedDockerfile(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + args := []string{"image", "build", "-t", "aaa:latest", "-f", "inner/Dockerfile", "./testdata/image-build/test-f", "-p", profile} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err) + } +} + +// validateImageBuildWithBuildArg is a test case building with --build-opt +func validateImageBuildWithBuildArg(ctx context.Context, t *testing.T, profile string) { + // test case for bug in https://github.com/kubernetes/minikube/issues/12384 + defer PostMortemLogs(t, profile) + args := []string{"image", "build", "-t", "aaa:latest", "--build-opt=build-arg=ENV_A=test_env_str", "--build-opt=no-cache", "./testdata/image-build/test-arg", "-p", profile} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err) + } + output := rr.Output() + if !strings.Contains(output, "test_env_str") { + t.Fatalf("failed to pass build-args with args: %q : %s", rr.Command(), output) + } +} + +// validateImageBuildWithBuildEnv is a test case building with --build-env +func validateImageBuildWithBuildEnv(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + // current this test cannot be passed because issue https://github.com/kubernetes/minikube/issues/12431 hasn't been fixed, so this test case is not enabled + t.Skip("skipping due to https://github.com/kubernetes/minikube/issues/12431") + + args := []string{"image", "build", "--build-opt=help", "--build-env=DOCKER_BUILDKIT=1", ".", profile} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err) + } + output := rr.Stdout.String() + if strings.Contains(output, "--cgroup-parent") { + // when DOCKER_BUILDKIT=0, "docker build" has the --cgroup-parent parameter, and when DOCKER_BUILDKIT=1, DOCKER_BUILDKIT doesn't provide this option at all. + // we have set --build-env=DOCKER_BUILDKIT=1 so --cgroup-parent should not appear in help page + t.Fatalf("failed to pass envs for command %q : %v", rr.Command(), err) + } +} + +// validateImageBuildWithDockerIgnore is a test case building with .dockerignore +func validateImageBuildWithDockerIgnore(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + args := []string{"image", "build", "-t", "aaa:latest", "./testdata/image-build/test-normal", "--build-opt=no-cache", "-p", profile} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to build image with args: %q : %v", rr.Command(), err) + } +} diff --git a/test/integration/iso_test.go b/test/integration/iso_test.go new file mode 100644 index 000000000000..1fb1ee7c970e --- /dev/null +++ b/test/integration/iso_test.go @@ -0,0 +1,134 @@ +//go:build integration + +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "encoding/json" + "fmt" + "os/exec" + "runtime" + "strings" + "testing" + + "k8s.io/minikube/pkg/minikube/vmpath" +) + +// TestISOImage verifies files and packages installed inside minikube ISO/Base image +func TestISOImage(t *testing.T) { + if !VMDriver() { + t.Skip("This test requires a VM driver") + } + + MaybeParallel(t) + + profile := UniqueProfileName("guest") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(15)) + defer CleanupWithLogs(t, profile, cancel) + + t.Run("Setup", func(t *testing.T) { + args := append([]string{"start", "-p", profile, "--no-kubernetes"}, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Errorf("failed to start minikube: args %q: %v", rr.Command(), err) + } + }) + + // Run as a group so that our defer doesn't happen as tests are runnings + t.Run("Binaries", func(t *testing.T) { + binaries := []string{ + "crictl", + "curl", + "docker", + "git", + "iptables", + "podman", + "rsync", + "socat", + "wget", + } + + // virtualbox is not available in the arm64 iso. + if runtime.GOARCH == "amd64" { + binaries = append(binaries, "VBoxControl", "VBoxService") + } + + for _, pkg := range binaries { + pkg := pkg + t.Run(pkg, func(t *testing.T) { + t.Parallel() + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("which %s", pkg))) + if err != nil { + t.Errorf("failed to verify existence of %q binary : args %q: %v", pkg, rr.Command(), err) + } + }) + } + }) + + t.Run("PersistentMounts", func(t *testing.T) { + for _, mount := range []string{ + "/data", + "/var/lib/docker", + "/var/lib/cni", + "/var/lib/kubelet", + vmpath.GuestPersistentDir, + "/var/lib/toolbox", + "/var/lib/boot2docker", + } { + mount := mount + t.Run(mount, func(t *testing.T) { + t.Parallel() + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("df -t ext4 %s | grep %s", mount, mount))) + if err != nil { + t.Errorf("failed to verify existence of %q mount. args %q: %v", mount, rr.Command(), err) + } + }) + } + }) + + t.Run("VersionJSON", func(t *testing.T) { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", "cat /version.json")) + if err != nil { + t.Fatalf("failed to read /version.json. args %q: %v", rr.Command(), err) + } + + var data map[string]string + if err := json.Unmarshal(rr.Stdout.Bytes(), &data); err != nil { + t.Fatalf("failed to parse /version.json as JSON: %v. \nContent: %s", err, rr.Stdout) + } + + t.Logf("Successfully parsed /version.json:") + for k, v := range data { + t.Logf(" %s: %s", k, v) + } + }) + + t.Run("eBPFSupport", func(t *testing.T) { + // Ensure that BTF type information is available (https://github.com/kubernetes/minikube/issues/21788) + btfFile := "/sys/kernel/btf/vmlinux" + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "ssh", fmt.Sprintf("test -f %s && echo 'OK' || echo 'NOT FOUND'", btfFile))) + if err != nil { + t.Errorf("failed to verify existence of %q file: args %q: %v", btfFile, rr.Command(), err) + } + + if !strings.Contains(rr.Stdout.String(), "OK") { + t.Errorf("expected file %q to exist, but it does not. BTF types are required for CO-RE eBPF programs; set CONFIG_DEBUG_INFO_BTF in kernel configuration.", btfFile) + } + }) +} diff --git a/test/integration/json_output_test.go b/test/integration/json_output_test.go index 1505f95dd893..5e0924eb468b 100644 --- a/test/integration/json_output_test.go +++ b/test/integration/json_output_test.go @@ -43,7 +43,7 @@ func TestJSONOutput(t *testing.T) { }{ { command: "start", - args: append([]string{"--memory=2200", "--wait=true"}, StartArgs()...), + args: append([]string{"--memory=3072", "--wait=true"}, StartArgs()...), }, { command: "pause", }, { @@ -55,18 +55,21 @@ func TestJSONOutput(t *testing.T) { for _, test := range tests { t.Run(test.command, func(t *testing.T) { - args := []string{test.command, "-p", profile, "--output=json", "--user=testUser"} - args = append(args, test.args...) + var ces []*cloudEvent + t.Run("Command", func(t *testing.T) { + args := []string{test.command, "-p", profile, "--output=json", "--user=testUser"} + args = append(args, test.args...) - rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) - if err != nil { - t.Errorf("failed to clean up: args %q: %v", rr.Command(), err) - } + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Errorf("failed to clean up: args %q: %v", rr.Command(), err) + } - ces, err := cloudEvents(t, rr) - if err != nil { - t.Fatalf("converting to cloud events: %v\n", err) - } + ces, err = cloudEvents(t, rr) + if err != nil { + t.Fatalf("converting to cloud events: %v\n", err) + } + }) t.Run("Audit", func(t *testing.T) { got, err := auditContains("testUser") @@ -99,8 +102,8 @@ func TestJSONOutput(t *testing.T) { } } -// validateDistinctCurrentSteps makes sure each step has a distinct step number -func validateDistinctCurrentSteps(ctx context.Context, t *testing.T, ces []*cloudEvent) { +// validateDistinctCurrentSteps makes sure each step has a distinct step number +func validateDistinctCurrentSteps(_ context.Context, t *testing.T, ces []*cloudEvent) { steps := map[string]string{} for _, ce := range ces { currentStep, exists := ce.data["currentstep"] @@ -115,9 +118,9 @@ func validateDistinctCurrentSteps(ctx context.Context, t *testing.T, ces []*clou } // validateIncreasingCurrentSteps verifies that for a successful minikube start, 'current step' should be increasing -func validateIncreasingCurrentSteps(ctx context.Context, t *testing.T, ces []*cloudEvent) { +func validateIncreasingCurrentSteps(_ context.Context, t *testing.T, ces []*cloudEvent) { step := -1 - for _, ce := range ces { + for i, ce := range ces { currentStep, exists := ce.data["currentstep"] if !exists || ce.Type() != "io.k8s.sigs.minikube.step" { continue @@ -127,6 +130,17 @@ func validateIncreasingCurrentSteps(ctx context.Context, t *testing.T, ces []*cl t.Fatalf("current step is not an integer: %v\n%v", currentStep, ce) } if cs <= step { + // check if steps are mixed because of goroutines complete in unusual order, but still ok + // eg, "Enabling Addons" (goroutine) might complete before or after "Verifying Kubernetes" finishes + if i > 0 { + prev := ces[i-1].data["name"] + cur := ce.data["name"] + if cur == "Verifying Kubernetes" && prev == "Enabling Addons" { + t.Logf("unusual order of steps, might be ok: %q event came before %q", prev, cur) + step = cs + continue + } + } t.Fatalf("current step is not in increasing order: %v", ces) } step = cs @@ -141,7 +155,7 @@ func TestErrorJSONOutput(t *testing.T) { // force a failure via --driver=fail so that we can make sure errors // are printed as expected - startArgs := []string{"start", "-p", profile, "--memory=2200", "--output=json", "--wait=true", "--driver=fail"} + startArgs := []string{"start", "-p", profile, "--memory=3072", "--output=json", "--wait=true", "--driver=fail"} rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) if err == nil { diff --git a/test/integration/kic_custom_network_test.go b/test/integration/kic_custom_network_test.go index b9e571ff0d0b..322916290f8c 100644 --- a/test/integration/kic_custom_network_test.go +++ b/test/integration/kic_custom_network_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2020 The Kubernetes Authors All rights reserved. @@ -74,11 +74,11 @@ func TestKicExistingNetwork(t *testing.T) { } // create custom network networkName := "existing-network" - if _, err := oci.CreateNetwork(oci.Docker, networkName); err != nil { + if _, err := oci.CreateNetwork(oci.Docker, networkName, "", ""); err != nil { t.Fatalf("error creating network: %v", err) } defer func() { - if err := oci.DeleteKICNetworks(oci.Docker); err != nil { + if err := oci.DeleteKICNetworksByLabel(oci.Docker, networkName); err != nil { t.Logf("error deleting kic network, may need to delete manually: %v", err) } }() @@ -96,6 +96,55 @@ func TestKicExistingNetwork(t *testing.T) { } } +// TestKicCustomSubnet verifies the docker/podman driver works with a custom subnet +func TestKicCustomSubnet(t *testing.T) { + if !KicDriver() { + t.Skip("only runs with docker/podman driver") + } + + profile := UniqueProfileName("custom-subnet") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(5)) + defer Cleanup(t, profile, cancel) + + subnet := "192.168.60.0/24" + startArgs := []string{"start", "-p", profile, fmt.Sprintf("--subnet=%s", subnet)} + c := exec.CommandContext(ctx, Target(), startArgs...) + rr, err := Run(t, c) + if err != nil { + t.Fatalf("%v failed: %v\n%v", rr.Command(), err, rr.Output()) + } + + verifySubnet(ctx, t, profile, subnet) +} + +// TestKicStaticIP starts minikube with the static IP flag +func TestKicStaticIP(t *testing.T) { + if !KicDriver() { + t.Skip("only run with docker/podman driver") + } + profile := UniqueProfileName("static-ip") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(5)) + defer Cleanup(t, profile, cancel) + + staticIP := "192.168.200.200" + startArgs := []string{"start", "-p", profile, fmt.Sprintf("--static-ip=%s", staticIP)} + c := exec.CommandContext(ctx, Target(), startArgs...) + rr, err := Run(t, c) + if err != nil { + t.Fatalf("%v failed: %v\n%v", rr.Command(), err, rr.Output()) + } + + c = exec.CommandContext(ctx, Target(), "-p", profile, "ip") + rr, err = Run(t, c) + if err != nil { + t.Fatalf("%s failed: %v\n%s", rr.Command(), err, rr.Output()) + } + + if !strings.Contains(rr.Output(), staticIP) { + t.Errorf("static IP (%s) not found in output %s", staticIP, rr.Output()) + } +} + func verifyNetworkExists(ctx context.Context, t *testing.T, networkName string) { c := exec.CommandContext(ctx, "docker", "network", "ls", "--format", "{{.Name}}") rr, err := Run(t, c) @@ -106,3 +155,15 @@ func verifyNetworkExists(ctx context.Context, t *testing.T, networkName string) t.Fatalf("%s network is not listed by [%v]: %v", networkName, c.Args, output) } } + +func verifySubnet(ctx context.Context, t *testing.T, network, subnet string) { + c := exec.CommandContext(ctx, "docker", "network", "inspect", network, "--format", "{{(index .IPAM.Config 0).Subnet}}") + rr, err := Run(t, c) + if err != nil { + t.Fatalf("%v failed: %v\n%v", rr.Command(), err, rr.Output()) + } + + if output := strings.TrimSpace(rr.Output()); !strings.Contains(output, subnet) { + t.Fatalf("%s subnet not match to %v", subnet, output) + } +} diff --git a/test/integration/main_test.go b/test/integration/main_test.go index c259933befa2..2d4af073dc67 100644 --- a/test/integration/main_test.go +++ b/test/integration/main_test.go @@ -57,7 +57,9 @@ const ( func TestMain(m *testing.M) { flag.Parse() setMaxParallelism() - + if NeedsAuxDriver() { + *startArgs += " --auto-update-drivers=false" + } start := time.Now() code := m.Run() fmt.Printf("Tests completed in %s (result code %d)\n", time.Since(start), code) @@ -97,16 +99,11 @@ func setMaxParallelism() { // Each "minikube start" consumes up to 2 cores, though the average usage is somewhat lower limit := int(math.Floor(float64(maxp) / 1.75)) - // Windows and MacOS tests were failing from timeouts due to too much parallelism + // Windows tests were failing from timeouts due to too much parallelism if runtime.GOOS == "windows" { limit /= 2 } - // Hardcode limit to 2 for macOS - if runtime.GOOS == "darwin" { - limit = 2 - } - fmt.Fprintf(os.Stderr, "Found %d cores, limiting parallelism with --test.parallel=%d\n", maxp, limit) if err := flag.Set("test.parallel", strconv.Itoa(limit)); err != nil { fmt.Fprintf(os.Stderr, "Unable to set test.parallel: %v\n", err) @@ -119,6 +116,17 @@ func StartArgs() []string { return strings.Split(*startArgs, " ") } +type ContextKey string + +func StartArgsWithContext(ctx context.Context) []string { + res := strings.Split(*startArgs, " ") + value := ctx.Value(ContextKey("k8sVersion")) + if value != nil && value != "" { + res = append(res, fmt.Sprintf("--kubernetes-version=%s", value)) + } + return res +} + // Target returns where the minikube binary can be found func Target() string { return *binaryPath @@ -126,27 +134,37 @@ func Target() string { // NoneDriver returns whether or not this test is using the none driver func NoneDriver() bool { - return strings.Contains(*startArgs, "--driver=none") || strings.Contains(*startArgs, "--vm-driver=none") + return matchDriverFlag("none") } // HyperVDriver returns whether or not this test is using the Hyper-V driver func HyperVDriver() bool { - return strings.Contains(*startArgs, "--driver=hyperv") || strings.Contains(*startArgs, "--vm-driver=hyperv") + return matchDriverFlag("hyperv") +} + +// KVM returns true is is KVM driver +func KVMDriver() bool { + return matchDriverFlag("kvm", "kvm2") } // VirtualboxDriver returns whether or not this test is using the VirtualBox driver func VirtualboxDriver() bool { - return strings.Contains(*startArgs, "--driver=virtualbox") || strings.Contains(*startArgs, "--vm-driver=virtualbox") + return matchDriverFlag("virtualbox") } // DockerDriver returns whether or not this test is using the docker or podman driver func DockerDriver() bool { - return strings.Contains(*startArgs, "--driver=docker") || strings.Contains(*startArgs, "--vm-driver=docker") + return matchDriverFlag("docker") } // PodmanDriver returns whether or not this test is using the docker or podman driver func PodmanDriver() bool { - return strings.Contains(*startArgs, "--vm-driver=podman") || strings.Contains(*startArgs, "driver=podman") + return matchDriverFlag("podman") +} + +// RootlessDriver returns whether or not this test is using the rootless KIC driver +func RootlessDriver() bool { + return strings.Contains(*startArgs, "--rootless") } // KicDriver returns whether or not this test is using the docker or podman driver @@ -154,6 +172,20 @@ func KicDriver() bool { return DockerDriver() || PodmanDriver() } +func HyperkitDriver() bool { + return matchDriverFlag("hyperkit") +} + +// NeedsAuxDriver Returns true if the driver needs an auxiliary driver (kvm, hyperkit,..) +func NeedsAuxDriver() bool { + return HyperkitDriver() +} + +// VMDriver checks if the driver is a VM +func VMDriver() bool { + return !KicDriver() && !NoneDriver() +} + // ContainerRuntime returns the name of a specific container runtime if it was specified func ContainerRuntime() string { flag := "--container-runtime=" @@ -162,13 +194,7 @@ func ContainerRuntime() string { return strings.TrimPrefix(s, flag) } } - return constants.DefaultContainerRuntime -} - -// GithubActionRunner returns true if running inside a github action runner -func GithubActionRunner() bool { - // based on https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables - return os.Getenv("GITHUB_ACTIONS") == "true" + return constants.Docker } // arm64Platform returns true if running on arm64/* platform @@ -176,10 +202,15 @@ func arm64Platform() bool { return runtime.GOARCH == "arm64" } +// amd64Platform returns true if running on amd64/* platform +func amd64Platform() bool { + return runtime.GOARCH == "amd64" +} + // NeedsPortForward returns access to endpoints with this driver needs port forwarding -// (Docker on non-Linux platforms requires ports to be forwarded to 127.0.0.1) +// (Docker on non-Linux platforms and rootless KIC requires ports to be forwarded to 127.0.0.1) func NeedsPortForward() bool { - return KicDriver() && (runtime.GOOS == "windows" || runtime.GOOS == "darwin") || detect.IsMicrosoftWSL() + return KicDriver() && (runtime.GOOS == "windows" || runtime.GOOS == "darwin") || detect.IsMicrosoftWSL() || RootlessDriver() } // CanCleanup returns if cleanup is allowed @@ -192,7 +223,7 @@ func Minutes(n int) time.Duration { return time.Duration(*timeOutMultiplier) * time.Duration(n) * time.Minute } -// Seconds will return timeout in minutes based on how slow the machine is +// Seconds will return timeout in seconds based on how slow the machine is func Seconds(n int) time.Duration { return time.Duration(*timeOutMultiplier) * time.Duration(n) * time.Second } @@ -201,3 +232,15 @@ func Seconds(n int) time.Duration { func TestingKicBaseImage() bool { return strings.Contains(*startArgs, "base-image") } + +func matchDriverFlag(names ...string) bool { + args := *startArgs + for _, name := range names { + for _, prefix := range []string{"--driver=", "--vm-driver="} { + if strings.Contains(args, prefix+name) { + return true + } + } + } + return false +} diff --git a/test/integration/minikube_profile_test.go b/test/integration/minikube_profile_test.go new file mode 100644 index 000000000000..921b761f1572 --- /dev/null +++ b/test/integration/minikube_profile_test.go @@ -0,0 +1,73 @@ +/* +Copyright 2022 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "encoding/json" + "os/exec" + "testing" + + "k8s.io/minikube/pkg/minikube/config" +) + +// profileJSON is the output of `minikube profile list -ojson` +type profileJSON struct { + Valid []config.Profile `json:"valid"` + Invalid []config.Profile `json:"invalid"` +} + +func TestMinikubeProfile(t *testing.T) { + // 1. Setup two minikube cluster profiles + profiles := [2]string{UniqueProfileName("first"), UniqueProfileName("second")} + ctx, cancel := context.WithTimeout(context.Background(), Minutes(10)) + // TODO(@vharsh): Figure out why go vet complains when this is moved into a loop + defer CleanupWithLogs(t, profiles[0], cancel) + defer CleanupWithLogs(t, profiles[1], cancel) + for _, p := range profiles { + c := []string{"start", "-p", p} + c = append(c, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), c...)) + if err != nil { + t.Fatalf("test pre-condition failed. args %q: %v", rr.Command(), err) + } + } + // 2. Change minikube profile + for _, p := range profiles { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "profile", p)) + if err != nil { + t.Fatalf("cmd: %s failed with error: %v\n", rr.Command(), err) + } + r, err := Run(t, exec.CommandContext(ctx, Target(), "profile", "list", "-ojson")) + if err != nil { + t.Fatalf("cmd: %s failed with error: %v\n", r.Command(), err) + } + var profile profileJSON + err = json.NewDecoder(r.Stdout).Decode(&profile) + if err != nil { + t.Fatalf("unmarshalling %s cmd output failed with error: %v\n", r.Command(), err) + } + // 3. Assert minikube profile is set to the correct profile in JSON + for _, s := range profile.Valid { + if s.Name == p && !s.Active { + t.Errorf("minikube profile %s is not active\n", p) + } else if s.Name != p && s.Active { + t.Errorf("minikube profile %s should not have been active but is active\n", p) + } + } + } +} diff --git a/test/integration/mount_start_test.go b/test/integration/mount_start_test.go new file mode 100644 index 000000000000..30037f88e1c8 --- /dev/null +++ b/test/integration/mount_start_test.go @@ -0,0 +1,213 @@ +//go:build integration + +/* +Copyright 2021 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "fmt" + "os/exec" + "slices" + "strconv" + "strings" + "testing" + "time" + + "k8s.io/minikube/pkg/minikube/constants" + "k8s.io/minikube/test/integration/findmnt" +) + +const ( + mountGID = "0" + mountMSize = "6543" + mountUID = "0" + guestPath = "/minikube-host" +) + +var mountStartPort = 46463 + +func mountPort() string { + return strconv.Itoa(mountStartPort) +} + +// TestMountStart tests using the mount command on start +func TestMountStart(t *testing.T) { + if NoneDriver() { + t.Skip("skipping: none driver does not support mount") + } + + type validateFunc func(context.Context, *testing.T, string) + profile1 := UniqueProfileName("mount-start-1") + profile2 := UniqueProfileName("mount-start-2") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(15)) + defer Cleanup(t, profile1, cancel) + defer Cleanup(t, profile2, cancel) + + // Serial tests + t.Run("serial", func(t *testing.T) { + hostPath := t.TempDir() + startProfileWithMount := func(ctx context.Context, t *testing.T, profile string) { + validateStartWithMount(ctx, t, profile, hostPath) + } + + tests := []struct { + name string + validator validateFunc + profile string + }{ + {"StartWithMountFirst", startProfileWithMount, profile1}, + {"VerifyMountFirst", validateMount, profile1}, + {"StartWithMountSecond", startProfileWithMount, profile2}, + {"VerifyMountSecond", validateMount, profile2}, + {"DeleteFirst", validateDelete, profile1}, + {"VerifyMountPostDelete", validateMount, profile2}, + {"Stop", validateMountStop, profile2}, + {"RestartStopped", validateRestart, profile2}, + {"VerifyMountPostStop", validateMount, profile2}, + } + + for _, test := range tests { + if ctx.Err() == context.DeadlineExceeded { + t.Fatalf("Unable to run more tests (deadline exceeded)") + } + if t.Failed() { + t.Fatalf("Previous test failed, not running dependent tests") + } + + t.Run(test.name, func(t *testing.T) { + test.validator(ctx, t, test.profile) + }) + } + }) +} + +// validateStartWithMount starts a cluster with mount enabled +func validateStartWithMount(ctx context.Context, t *testing.T, profile string, hostPath string) { + defer PostMortemLogs(t, profile) + + // We have to increment this because if you have two mounts with the same port, when you kill one cluster the mount will break for the other + mountStartPort++ + + args := []string{ + "start", + "-p", profile, + "--memory=3072", + "--mount-string", fmt.Sprintf("%s:%s", hostPath, guestPath), + "--mount-gid", mountGID, + "--mount-msize", mountMSize, + "--mount-port", mountPort(), + "--mount-uid", mountUID, + "--no-kubernetes", + } + args = append(args, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to start minikube with args: %q : %v", rr.Command(), err) + } + // The mount takes a split second to come up, without this the validateMount test will fail + time.Sleep(1 * time.Second) +} + +// validateMount checks if the cluster has a folder mounted +func validateMount(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + sshArgs := []string{"-p", profile, "ssh", "--"} + + args := sshArgs + args = append(args, "ls", guestPath) + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("mount failed: %q : %v", rr.Command(), err) + } + + // Docker has it's own mounting method, it doesn't respect the mounting flags + // We can't get the mount details with Hyper-V + if DockerDriver() || HyperVDriver() { + return + } + + args = sshArgs + args = append(args, "findmnt", "--json", guestPath) + rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("command failed %q: %v", rr.Command(), err) + } + + result, err := findmnt.ParseOutput(rr.Stdout.Bytes()) + if err != nil { + t.Fatalf("failed to parse output %s: %v", rr.Stdout.String(), err) + } + + if len(result.Filesystems) == 0 { + t.Fatalf("no filesystems found") + } + + fs := result.Filesystems[0] + if fs.FSType == constants.FSTypeVirtiofs { + t.Logf("Options not supported yet for %q filesystem", fs.FSType) + return + } + + if fs.FSType != constants.FSType9p { + t.Fatalf("unexpected filesystem %q", fs.FSType) + } + + options := strings.Split(fs.Options, ",") + + flags := []struct { + key string + expected string + }{ + {"dfltgid", mountGID}, + {"dfltuid", mountUID}, + {"msize", mountMSize}, + {"port", mountPort()}, + } + + for _, flag := range flags { + want := fmt.Sprintf("%s=%s", flag.key, flag.expected) + if !slices.Contains(options, want) { + t.Errorf("wanted %s to be: %q; got: %q", flag.key, want, options) + } + } +} + +// validateMountStop stops a cluster +func validateMountStop(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + args := []string{"stop", "-p", profile} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("stop failed: %q : %v", rr.Command(), err) + } +} + +// validateRestart restarts a cluster +func validateRestart(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + args := []string{"start", "-p", profile} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("restart failed: %q : %v", rr.Command(), err) + } + // The mount takes a split second to come up, without this the validateMount test will fail + time.Sleep(1 * time.Second) +} diff --git a/test/integration/multinode_test.go b/test/integration/multinode_test.go index b1e74c9bb3d4..fcfcc360b3b4 100644 --- a/test/integration/multinode_test.go +++ b/test/integration/multinode_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2020 The Kubernetes Authors All rights reserved. @@ -24,11 +24,15 @@ import ( "fmt" "net" "os/exec" + "path" + "path/filepath" "strings" "testing" + "time" - "k8s.io/minikube/cmd/minikube/cmd" + "k8s.io/minikube/pkg/minikube/cluster" "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/util/retry" ) // TestMultiNode tests all multi node cluster functionality @@ -37,6 +41,16 @@ func TestMultiNode(t *testing.T) { t.Skip("none driver does not support multinode") } + if DockerDriver() { + rr, err := Run(t, exec.Command("docker", "version", "-f", "{{.Server.Version}}")) + if err != nil { + t.Fatalf("docker is broken: %v", err) + } + if strings.Contains(rr.Stdout.String(), "azure") { + t.Skip("kic containers are not supported on docker's azure") + } + } + type validatorFunc func(context.Context, *testing.T, string) profile := UniqueProfileName("multinode") ctx, cancel := context.WithTimeout(context.Background(), Minutes(30)) @@ -51,6 +65,7 @@ func TestMultiNode(t *testing.T) { {"DeployApp2Nodes", validateDeployAppToMultiNode}, {"PingHostFrom2Pods", validatePodsPingHost}, {"AddNode", validateAddNodeToMultiNode}, + {"MultiNodeLabels", validateMultiNodeLabels}, {"ProfileList", validateProfileListWithMultiNode}, {"CopyFile", validateCopyFileWithMultiNode}, {"StopNode", validateStopRunningNode}, @@ -77,7 +92,7 @@ func TestMultiNode(t *testing.T) { // validateMultiNodeStart makes sure a 2 node cluster can start func validateMultiNodeStart(ctx context.Context, t *testing.T, profile string) { // Start a 2 node cluster with the --nodes param - startArgs := append([]string{"start", "-p", profile, "--wait=true", "--memory=2200", "--nodes=2", "-v=8", "--alsologtostderr"}, StartArgs()...) + startArgs := append([]string{"start", "-p", profile, "--wait=true", "--memory=3072", "--nodes=2", "-v=5", "--alsologtostderr"}, StartArgs()...) rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) if err != nil { t.Fatalf("failed to start cluster. args %q : %v", rr.Command(), err) @@ -102,7 +117,7 @@ func validateMultiNodeStart(ctx context.Context, t *testing.T, profile string) { // validateAddNodeToMultiNode uses the minikube node add command to add a node to an existing cluster func validateAddNodeToMultiNode(ctx context.Context, t *testing.T, profile string) { // Add a node to the current cluster - addArgs := []string{"node", "add", "-p", profile, "-v", "3", "--alsologtostderr"} + addArgs := []string{"node", "add", "-p", profile, "-v=5", "--alsologtostderr"} rr, err := Run(t, exec.CommandContext(ctx, Target(), addArgs...)) if err != nil { t.Fatalf("failed to add node to current cluster. args %q : %v", rr.Command(), err) @@ -160,7 +175,7 @@ func validateProfileListWithMultiNode(ctx context.Context, t *testing.T, profile } } -// validateProfileListWithMultiNode make sure minikube profile list outputs correct with multinode clusters +// validateCopyFileWithMultiNode make sure minikube cp works with multinode clusters. func validateCopyFileWithMultiNode(ctx context.Context, t *testing.T, profile string) { if NoneDriver() { t.Skipf("skipping: cp is unsupported by none driver") @@ -171,16 +186,58 @@ func validateCopyFileWithMultiNode(ctx context.Context, t *testing.T, profile st t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) } - var statuses []cmd.Status + var statuses []cluster.Status if err = json.Unmarshal(rr.Stdout.Bytes(), &statuses); err != nil { t.Errorf("failed to decode json from status: args %q: %v", rr.Command(), err) } - for _, s := range statuses { - if s.Worker { - testCpCmd(ctx, t, profile, s.Name) - } else { - testCpCmd(ctx, t, profile, "") + tmpDir := t.TempDir() + + srcPath := cpTestLocalPath() + dstPath := cpTestMinikubePath() + + for _, n := range statuses { + // copy local to node + testCpCmd(ctx, t, profile, "", srcPath, n.Name, dstPath) + + // copy back from node to local + tmpPath := filepath.Join(tmpDir, fmt.Sprintf("cp-test_%s.txt", n.Name)) + testCpCmd(ctx, t, profile, n.Name, dstPath, "", tmpPath) + + // copy node to node + for _, n2 := range statuses { + if n.Name == n2.Name { + continue + } + fp := path.Join("/home/docker", fmt.Sprintf("cp-test_%s_%s.txt", n.Name, n2.Name)) + testCpCmd(ctx, t, profile, n.Name, dstPath, n2.Name, fp) + } + } +} + +// validateMultiNodeLabels check if all node labels were configured correctly +func validateMultiNodeLabels(ctx context.Context, t *testing.T, profile string) { + // docs: Get the node labels from the cluster with `kubectl get nodes` + rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "get", "nodes", "-o", "jsonpath=[{range .items[*]}{.metadata.labels},{end}]")) + if err != nil { + t.Errorf("failed to 'kubectl get nodes' with args %q: %v", rr.Command(), err) + } + + nodeLabelsList := []map[string]string{} + fixedString := strings.Replace(rr.Stdout.String(), ",]", "]", 1) + err = json.Unmarshal([]byte(fixedString), &nodeLabelsList) + if err != nil { + t.Errorf("failed to decode json from label list: args %q: %v", rr.Command(), err) + } + + // docs: check if all node labels matches with the expected Minikube labels: `minikube.k8s.io/*` + expectedLabels := []string{"minikube.k8s.io/commit", "minikube.k8s.io/version", "minikube.k8s.io/updated_at", "minikube.k8s.io/name", "minikube.k8s.io/primary"} + + for _, nodeLabels := range nodeLabelsList { + for _, el := range expectedLabels { + if _, ok := nodeLabels[el]; !ok { + t.Errorf("expected to have label %q in node labels but got : %s", el, rr.Output()) + } } } } @@ -221,26 +278,19 @@ func validateStopRunningNode(ctx context.Context, t *testing.T, profile string) // validateStartNodeAfterStop tests the minikube node start command on an existing stopped node func validateStartNodeAfterStop(ctx context.Context, t *testing.T, profile string) { - if DockerDriver() { - rr, err := Run(t, exec.Command("docker", "version", "-f", "{{.Server.Version}}")) - if err != nil { - t.Fatalf("docker is broken: %v", err) - } - if strings.Contains(rr.Stdout.String(), "azure") { - t.Skip("kic containers are not supported on docker's azure") - } - } - // Start the node back up - rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "node", "start", ThirdNodeName, "--alsologtostderr")) + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "node", "start", ThirdNodeName, "-v=5", "--alsologtostderr")) if err != nil { - t.Logf(rr.Stderr.String()) + t.Log(rr.Stderr.String()) t.Errorf("node start returned an error. args %q: %v", rr.Command(), err) } // Make sure minikube status shows 3 running hosts - rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status")) - if err != nil { + minikubeStatus := func() error { + rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "-v=5", "--alsologtostderr")) + return err + } + if err := retry.Expo(minikubeStatus, 1*time.Second, 60*time.Second); err != nil { t.Fatalf("failed to run minikube status. args %q : %v", rr.Command(), err) } @@ -273,7 +323,7 @@ func validateRestartKeepsNodes(ctx context.Context, t *testing.T, profile string t.Errorf("failed to run minikube stop. args %q : %v", rr.Command(), err) } - _, err = Run(t, exec.CommandContext(ctx, Target(), "start", "-p", profile, "--wait=true", "-v=8", "--alsologtostderr")) + _, err = Run(t, exec.CommandContext(ctx, Target(), "start", "-p", profile, "--wait=true", "-v=5", "--alsologtostderr")) if err != nil { t.Errorf("failed to run minikube start. args %q : %v", rr.Command(), err) } @@ -294,7 +344,7 @@ func validateStopMultiNodeCluster(ctx context.Context, t *testing.T, profile str // Run minikube stop on the cluster rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "stop")) if err != nil { - t.Errorf("node stop returned an error. args %q: %v", rr.Command(), err) + t.Errorf("failed to stop cluster. args %q: %v", rr.Command(), err) } // Run status to see the stopped hosts @@ -321,17 +371,8 @@ func validateStopMultiNodeCluster(ctx context.Context, t *testing.T, profile str // validateRestartMultiNodeCluster verifies a soft restart on a multinode cluster works func validateRestartMultiNodeCluster(ctx context.Context, t *testing.T, profile string) { - if DockerDriver() { - rr, err := Run(t, exec.Command("docker", "version", "-f", "{{.Server.Version}}")) - if err != nil { - t.Fatalf("docker is broken: %v", err) - } - if strings.Contains(rr.Stdout.String(), "azure") { - t.Skip("kic containers are not supported on docker's azure") - } - } // Restart a full cluster with minikube start - startArgs := append([]string{"start", "-p", profile, "--wait=true", "-v=8", "--alsologtostderr"}, StartArgs()...) + startArgs := append([]string{"start", "-p", profile, "--wait=true", "-v=5", "--alsologtostderr"}, StartArgs()...) rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) if err != nil { t.Fatalf("failed to start cluster. args %q : %v", rr.Command(), err) @@ -371,10 +412,10 @@ func validateRestartMultiNodeCluster(ctx context.Context, t *testing.T, profile // validateDeleteNodeFromMultiNode tests the minikube node delete command func validateDeleteNodeFromMultiNode(ctx context.Context, t *testing.T, profile string) { - // Start the node back up + // Delete a node from the current cluster rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "node", "delete", ThirdNodeName)) if err != nil { - t.Errorf("node stop returned an error. args %q: %v", rr.Command(), err) + t.Errorf("node delete returned an error. args %q: %v", rr.Command(), err) } // Make sure status is back down to 2 hosts @@ -391,16 +432,6 @@ func validateDeleteNodeFromMultiNode(ctx context.Context, t *testing.T, profile t.Errorf("status says both kubelets are not running: args %q: %v", rr.Command(), rr.Stdout.String()) } - if DockerDriver() { - rr, err := Run(t, exec.Command("docker", "volume", "ls")) - if err != nil { - t.Errorf("failed to run %q : %v", rr.Command(), err) - } - if strings.Contains(rr.Stdout.String(), fmt.Sprintf("%s-%s", profile, ThirdNodeName)) { - t.Errorf("docker volume was not properly deleted: %s", rr.Stdout.String()) - } - } - // Make sure kubectl knows the node is gone rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "get", "nodes")) if err != nil { @@ -427,7 +458,7 @@ func validateNameConflict(ctx context.Context, t *testing.T, profile string) { } curNodeNum := strings.Count(rr.Stdout.String(), profile) - // Start new profile. It's expected failture + // Start new profile. It's expected failure profileName := fmt.Sprintf("%s-m0%d", profile, curNodeNum) startArgs := append([]string{"start", "-p", profileName}, StartArgs()...) rr, err = Run(t, exec.CommandContext(ctx, Target(), startArgs...)) @@ -443,7 +474,7 @@ func validateNameConflict(ctx context.Context, t *testing.T, profile string) { t.Errorf("failed to start profile. args %q : %v", rr.Command(), err) } - // Add a node to the current cluster. It's expected failture + // Add a node to the current cluster. It's expected failure addArgs := []string{"node", "add", "-p", profile} rr, err = Run(t, exec.CommandContext(ctx, Target(), addArgs...)) if err == nil { @@ -470,19 +501,31 @@ func validateDeployAppToMultiNode(ctx context.Context, t *testing.T, profile str } // resolve Pod IPs - rr, err := Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "get", "pods", "-o", "jsonpath='{.items[*].status.podIP}'")) - if err != nil { - t.Errorf("failed to retrieve Pod IPs") + resolvePodIPs := func() error { + rr, err := Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "get", "pods", "-o", "jsonpath='{.items[*].status.podIP}'")) + if err != nil { + err := fmt.Errorf("failed to retrieve Pod IPs (may be temporary): %v", err) + t.Log(err.Error()) + return err + } + podIPs := strings.Split(strings.Trim(rr.Stdout.String(), "'"), " ") + if len(podIPs) != 2 { + err := fmt.Errorf("expected 2 Pod IPs but got %d (may be temporary), output: %q", len(podIPs), rr.Output()) + t.Log(err.Error()) + return err + } else if podIPs[0] == podIPs[1] { + err := fmt.Errorf("expected 2 different pod IPs but got %s and %s (may be temporary), output: %q", podIPs[0], podIPs[1], rr.Output()) + t.Log(err.Error()) + return err + } + return nil } - podIPs := strings.Split(strings.Trim(rr.Stdout.String(), "'"), " ") - if len(podIPs) != 2 { - t.Errorf("expected 2 Pod IPs but got %d", len(podIPs)) - } else if podIPs[0] == podIPs[1] { - t.Errorf("expected 2 different pod IPs but got %s and %s", podIPs[0], podIPs[0]) + if err := retry.Expo(resolvePodIPs, 1*time.Second, Seconds(120)); err != nil { + t.Errorf("failed to resolve pod IPs: %v", err) } // get Pod names - rr, err = Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "get", "pods", "-o", "jsonpath='{.items[*].metadata.name}'")) + rr, err := Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "get", "pods", "-o", "jsonpath='{.items[*].metadata.name}'")) if err != nil { t.Errorf("failed get Pod names") } @@ -515,7 +558,7 @@ func validateDeployAppToMultiNode(ctx context.Context, t *testing.T, profile str } } -// validatePodsPingHost uses app previously deplyed by validateDeployAppToMultiNode to verify its pods, located on different nodes, can resolve "host.minikube.internal". +// validatePodsPingHost uses app previously deployed by validateDeployAppToMultiNode to verify its pods, located on different nodes, can resolve "host.minikube.internal". func validatePodsPingHost(ctx context.Context, t *testing.T, profile string) { // get Pod names rr, err := Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "get", "pods", "-o", "jsonpath='{.items[*].metadata.name}'")) @@ -532,6 +575,9 @@ func validatePodsPingHost(ctx context.Context, t *testing.T, profile string) { continue } hostIP := net.ParseIP(strings.TrimSpace(out.Stdout.String())) + if hostIP == nil { + t.Fatalf("minikube host ip is nil: %s", out.Output()) + } // try pinging host from pod ping := fmt.Sprintf("ping -c 1 %s", hostIP) if _, err := Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "exec", name, "--", "sh", "-c", ping)); err != nil { diff --git a/test/integration/net_test.go b/test/integration/net_test.go index e3eb1a49d0e4..0084404321cc 100644 --- a/test/integration/net_test.go +++ b/test/integration/net_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -28,8 +28,12 @@ import ( "testing" "time" + "github.com/blang/semver/v4" "k8s.io/minikube/pkg/kapi" + "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/reason" + "k8s.io/minikube/pkg/util" "k8s.io/minikube/pkg/util/retry" ) @@ -37,6 +41,9 @@ import ( // Options tested: kubenet, bridge, flannel, kindnet, calico, cilium // Flags tested: enable-default-cni (legacy), false (CNI off), auto-detection func TestNetworkPlugins(t *testing.T) { + // generate reasonably unique profile name suffix to be used for all tests + suffix := UniqueProfileName("") + MaybeParallel(t) if NoneDriver() { t.Skip("skipping since test for none driver") @@ -48,33 +55,32 @@ func TestNetworkPlugins(t *testing.T) { args []string kubeletPlugin string podLabel string + namespace string hairpin bool }{ - // for containerd and crio runtimes kindnet CNI is used by default and hairpin is enabled - {"auto", []string{}, "", "", ContainerRuntime() != "docker"}, - {"kubenet", []string{"--network-plugin=kubenet"}, "kubenet", "", true}, - {"bridge", []string{"--cni=bridge"}, "cni", "", true}, - {"enable-default-cni", []string{"--enable-default-cni=true"}, "cni", "", true}, - {"flannel", []string{"--cni=flannel"}, "cni", "app=flannel", true}, - {"kindnet", []string{"--cni=kindnet"}, "cni", "app=kindnet", true}, - {"false", []string{"--cni=false"}, "", "", false}, - {"custom-weave", []string{fmt.Sprintf("--cni=%s", filepath.Join(*testdataDir, "weavenet.yaml"))}, "cni", "", true}, - {"calico", []string{"--cni=calico"}, "cni", "k8s-app=calico-node", true}, - {"cilium", []string{"--cni=cilium"}, "cni", "k8s-app=cilium", true}, + // kindnet CNI is used by default and hairpin is enabled + {"auto", []string{}, "", "", "", usingCNI()}, + {"kubenet", []string{"--network-plugin=kubenet"}, "kubenet", "", "", true}, + {"bridge", []string{"--cni=bridge"}, "cni", "", "", true}, + {"enable-default-cni", []string{"--enable-default-cni=true"}, "cni", "", "", true}, + {"flannel", []string{"--cni=flannel"}, "cni", "app=flannel", "kube-flannel", true}, + {"kindnet", []string{"--cni=kindnet"}, "cni", "app=kindnet", "kube-system", true}, + {"false", []string{"--cni=false"}, "", "", "", true}, + {"custom-flannel", []string{fmt.Sprintf("--cni=%s", filepath.Join(*testdataDir, "kube-flannel.yaml"))}, "cni", "", "kube-flannel", true}, + {"calico", []string{"--cni=calico"}, "cni", "k8s-app=calico-node", "kube-system", true}, + {"cilium", []string{"--cni=cilium"}, "cni", "k8s-app=cilium", "kube-system", true}, } for _, tc := range tests { tc := tc t.Run(tc.name, func(t *testing.T) { - profile := UniqueProfileName(tc.name) + profile := tc.name + suffix - ctx, cancel := context.WithTimeout(context.Background(), Minutes(40)) + ctx, cancel := context.WithTimeout(context.Background(), Minutes(90)) defer CleanupWithLogs(t, profile, cancel) - - if DockerDriver() && strings.Contains(tc.name, "flannel") { - t.Skipf("flannel is not yet compatible with Docker driver: iptables v1.8.3 (legacy): Couldn't load target `CNI-x': No such file or directory") - } + // collect debug logs + defer debugLogs(t, profile) if ContainerRuntime() != "docker" && tc.name == "false" { // CNI is required for current container runtime @@ -84,14 +90,22 @@ func TestNetworkPlugins(t *testing.T) { if ContainerRuntime() != "docker" && tc.name == "kubenet" { // CNI is disabled when --network-plugin=kubenet option is passed. See cni.New(..) function - // But for containerd/crio CNI has to be configured t.Skipf("Skipping the test as %s container runtimes requires CNI", ContainerRuntime()) } + // (current) cilium is known to mess up the system when interfering with other network tests, so we disable it for now - probably needs updating? + // hint: most probably the problem is in combination of: containerd + (outdated) cgroup_v1(cgroupfs) + (outdated) cilium, on systemd it should work + // unfortunately, cilium changed how cni is deployed and does not provide manifests anymore (since v1.9) so that we can "just update" ours + // ref: https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/ + // ref: https://docs.cilium.io/en/stable/gettingstarted/k8s-install-kubeadm/ + if tc.name == "cilium" { + t.Skip("Skipping the test as it's interfering with other tests and is outdated") + } + start := time.Now() MaybeParallel(t) - startArgs := append([]string{"start", "-p", profile, "--memory=2048", "--alsologtostderr", "--wait=true", "--wait-timeout=5m"}, tc.args...) + startArgs := append([]string{"start", "-p", profile, "--memory=3072", "--alsologtostderr", "--wait=true", "--wait-timeout=15m"}, tc.args...) startArgs = append(startArgs, StartArgs()...) t.Run("Start", func(t *testing.T) { @@ -103,7 +117,7 @@ func TestNetworkPlugins(t *testing.T) { if !t.Failed() && tc.podLabel != "" { t.Run("ControllerPod", func(t *testing.T) { - if _, err := PodWait(ctx, t, profile, "kube-system", tc.podLabel, Minutes(10)); err != nil { + if _, err := PodWait(ctx, t, profile, tc.namespace, tc.podLabel, Minutes(10)); err != nil { t.Fatalf("failed waiting for %s labeled pod: %v", tc.podLabel, err) } }) @@ -122,7 +136,11 @@ func TestNetworkPlugins(t *testing.T) { t.Fatalf("ssh failed: %v", err) } out := rr.Stdout.String() - verifyKubeletFlagsOutput(t, tc.kubeletPlugin, out) + c, err := config.Load(profile) + if err != nil { + t.Errorf("failed to load cluster config: %v", err) + } + verifyKubeletFlagsOutput(t, c.KubernetesConfig.KubernetesVersion, tc.kubeletPlugin, out) }) } @@ -145,14 +163,9 @@ func TestNetworkPlugins(t *testing.T) { if _, err := PodWait(ctx, t, profile, "default", "app=netcat", Minutes(15)); err != nil { t.Fatalf("failed waiting for netcat pod: %v", err) } - }) } - if strings.Contains(tc.name, "weave") { - t.Skipf("skipping remaining tests for weave, as results can be unpredictable") - } - if !t.Failed() { t.Run("DNS", func(t *testing.T) { var rr *RunResult @@ -200,13 +213,33 @@ func TestNetworkPlugins(t *testing.T) { }) } +// usingCNI checks if not using dockershim +func usingCNI() bool { + if ContainerRuntime() != "docker" { + return true + } + version, err := util.ParseKubernetesVersion(constants.DefaultKubernetesVersion) + if err != nil { + return false + } + if version.GTE(semver.MustParse("1.24.0-alpha.2")) { + return true + } + return false +} + // validateFalseCNI checks that minikube returns and error // if container runtime is "containerd" or "crio" // and --cni=false func validateFalseCNI(ctx context.Context, t *testing.T, profile string) { cr := ContainerRuntime() - startArgs := []string{"start", "-p", profile, "--memory=2048", "--alsologtostderr", "--cni=false"} + // override cri-o name + if cr == "cri-o" { + cr = "crio" + } + + startArgs := []string{"start", "-p", profile, "--memory=3072", "--alsologtostderr", "--cni=false"} startArgs = append(startArgs, StartArgs()...) mkCmd := exec.CommandContext(ctx, Target(), startArgs...) @@ -237,12 +270,19 @@ func validateHairpinMode(ctx context.Context, t *testing.T, profile string, hair } } else { if tryHairPin() == nil { - t.Fatalf("hairpin connection unexpectedly succeeded - misconfigured test?") + t.Errorf("hairpin connection unexpectedly succeeded - misconfigured test?") } } } -func verifyKubeletFlagsOutput(t *testing.T, kubeletPlugin, out string) { +func verifyKubeletFlagsOutput(t *testing.T, k8sVersion, kubeletPlugin, out string) { + version, err := util.ParseKubernetesVersion(k8sVersion) + if err != nil { + t.Errorf("failed to parse kubernetes version %s: %v", k8sVersion, err) + } + if version.GTE(semver.MustParse("1.24.0-alpha.2")) { + return + } if kubeletPlugin == "" { if strings.Contains(out, "--network-plugin") && ContainerRuntime() == "docker" { t.Errorf("expected no network plug-in, got %s", out) @@ -254,3 +294,362 @@ func verifyKubeletFlagsOutput(t *testing.T, kubeletPlugin, out string) { t.Errorf("expected --network-plugin=%s, got %s", kubeletPlugin, out) } } + +// debug logs for dns and other network issues +func debugLogs(t *testing.T, profile string) { + t.Helper() + + start := time.Now() + + var output strings.Builder + output.WriteString(fmt.Sprintf("----------------------- debugLogs start: %s [pass: %v] --------------------------------", profile, !t.Failed())) + + // basic nslookup + cmd := exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "nslookup", "-timeout=5", "kubernetes.default") + out, err := cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: nslookup kubernetes.default:\n%s\n", out)) + // skip some checks if no issues or lower-level connectivity issues + if err == nil && !strings.Contains(string(out), "10.96.0.1") || err != nil && !strings.Contains(string(out), ";; connection timed out; no servers could be reached") { // for both nslookup and dig + // nslookup trace search + cmd = exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "nslookup", "-timeout=5", "-debug", "-type=a", "kubernetes.default") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: nslookup debug kubernetes.default a-records:\n%s\n", out)) + + // dig trace search udp + cmd = exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "dig", "+timeout=5", "+search", "+showsearch", "kubernetes.default") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: dig search kubernetes.default:\n%s\n", out)) + // dig trace direct udp + cmd = exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "dig", "+timeout=5", "@10.96.0.10", "kubernetes.default.svc.cluster.local") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: dig @10.96.0.10 kubernetes.default.svc.cluster.local udp/53:\n%s\n", out)) + // dig trace direct tcp + cmd = exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "dig", "+timeout=5", "@10.96.0.10", "+tcp", "kubernetes.default.svc.cluster.local") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: dig @10.96.0.10 kubernetes.default.svc.cluster.local tcp/53:\n%s\n", out)) + } + + // check udp connectivity + cmd = exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "nc", "-w", "5", "-z", "-n", "-v", "-u", "10.96.0.10", "53") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: nc 10.96.0.10 udp/53:\n%s\n", out)) + // check tcp connectivity + cmd = exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "nc", "-w", "5", "-z", "-n", "-v", "10.96.0.10", "53") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: nc 10.96.0.10 tcp/53:\n%s\n", out)) + + // pod's dns env + cmd = exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "cat", "/etc/nsswitch.conf") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: /etc/nsswitch.conf:\n%s\n", out)) + cmd = exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "cat", "/etc/hosts") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: /etc/hosts:\n%s\n", out)) + cmd = exec.Command("kubectl", "--context", profile, "exec", "deployment/netcat", "--", "cat", "/etc/resolv.conf") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> netcat: /etc/resolv.conf:\n%s\n", out)) + + // "host's" dns env + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /etc/nsswitch.conf") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/nsswitch.conf:\n%s\n", out)) + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /etc/hosts") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/hosts:\n%s\n", out)) + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /etc/resolv.conf") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/resolv.conf:\n%s\n", out)) + + // k8s resources overview + cmd = exec.Command("kubectl", "--context", profile, "get", "node,svc,ep,ds,deploy,pods", "-A", "-owide") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: nodes, services, endpoints, daemon sets, deployments and pods, :\n%s\n", out)) + + // crictl pods overview + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo crictl pods") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: crictl pods:\n%s\n", out)) + // crictl containers overview + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo crictl ps --all") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: crictl containers:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "deployment", "-n", "default", "--selector=app=netcat") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe netcat deployment:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-n", "default", "--selector=app=netcat") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe netcat pod(s):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "-n", "default", "--selector=app=netcat", "--tail=-1") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: netcat logs:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "deployment", "-n", "kube-system", "--selector=k8s-app=kube-dns") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe coredns deployment:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-n", "kube-system", "--selector=k8s-app=kube-dns") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe coredns pods:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "-n", "kube-system", "--selector=k8s-app=kube-dns", "--tail=-1") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: coredns logs:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-n", "kube-system", "--selector=component=kube-apiserver") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe api server pod(s):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "-n", "kube-system", "--selector=component=kube-apiserver", "--tail=-1") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: api server logs:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo find /etc/cni -type f -exec sh -c 'echo {}; cat {}' \\;") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/cni:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo ip a s") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: ip a s:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo ip r s") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: ip r s:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo iptables-save") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: iptables-save:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo iptables -t nat -L -n -v") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: iptables table nat:\n%s\n", out)) + + if strings.Contains(profile, "flannel") { + cmd = exec.Command("kubectl", "--context", profile, "describe", "ds", "-A", "--selector=app=flannel") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe flannel daemon set:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-A", "--selector=app=flannel") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe flannel pod(s):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-flannel", "--selector=app=flannel", "--all-containers", "--prefix", "--ignore-errors") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: flannel container(s) logs (current):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-flannel", "--selector=app=flannel", "--all-containers", "--prefix", "--ignore-errors", "--previous") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: flannel container(s) logs (previous):\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /run/flannel/subnet.env") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /run/flannel/subnet.env:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /etc/kube-flannel/cni-conf.json") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/kube-flannel/cni-conf.json:\n%s\n", out)) + } + + if strings.Contains(profile, "calico") { + cmd = exec.Command("kubectl", "--context", profile, "describe", "ds", "-A", "--selector=k8s-app=calico-node") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe calico daemon set:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-A", "--selector=k8s-app=calico-node") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe calico daemon set pod(s):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=k8s-app=calico-node", "--all-containers", "--prefix", "--ignore-errors") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: calico daemon set container(s) logs (current):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=k8s-app=calico-node", "--all-containers", "--prefix", "--ignore-errors", "--previous") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: calico daemon set container(s) logs (previous):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "deploy", "-A", "--selector=k8s-app=calico-kube-controllers") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe calico deployment:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-A", "--selector=k8s-app=calico-kube-controllers") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe calico deployment pod(s):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=k8s-app=calico-kube-controllers", "--all-containers", "--prefix", "--ignore-errors") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: calico deployment container(s) logs (current):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=k8s-app=calico-kube-controllers", "--all-containers", "--prefix", "--ignore-errors", "--previous") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: calico deployment container(s) logs (previous):\n%s\n", out)) + } + + if strings.Contains(profile, "cilium") { + cmd = exec.Command("kubectl", "--context", profile, "describe", "ds", "-A", "--selector=k8s-app=cilium") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe cilium daemon set:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-A", "--selector=k8s-app=cilium") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe cilium daemon set pod(s):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=k8s-app=cilium", "--all-containers", "--prefix", "--ignore-errors") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: cilium daemon set container(s) logs (current):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=k8s-app=cilium", "--all-containers", "--prefix", "--ignore-errors", "--previous") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: cilium daemon set container(s) logs (previous):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "deploy", "-A", "--selector=name=cilium-operator") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe cilium deployment:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-A", "--selector=name=cilium-operator") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe cilium deployment pod(s):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=name=cilium-operator", "--all-containers", "--prefix", "--ignore-errors") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: cilium deployment container(s) logs (current):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=name=cilium-operator", "--all-containers", "--prefix", "--ignore-errors", "--previous") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: cilium deployment container(s) logs (previous):\n%s\n", out)) + } + + if strings.Contains(profile, "kindnet") { + cmd = exec.Command("kubectl", "--context", profile, "describe", "ds", "-A", "--selector=app=kindnet") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe kindnet daemon set:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-A", "--selector=app=kindnet") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe kindnet pod(s):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=app=kindnet", "--all-containers", "--prefix", "--ignore-errors") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: kindnet container(s) logs (current):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "--namespace=kube-system", "--selector=app=kindnet", "--all-containers", "--prefix", "--ignore-errors", "--previous") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: kindnet container(s) logs (previous):\n%s\n", out)) + } + + cmd = exec.Command("kubectl", "--context", profile, "describe", "ds", "-n", "kube-system", "--selector=k8s-app=kube-proxy") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe kube-proxy daemon set:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "describe", "pods", "-n", "kube-system", "--selector=k8s-app=kube-proxy") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: describe kube-proxy pod(s):\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "logs", "-n", "kube-system", "--selector=k8s-app=kube-proxy", "--tail=-1") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: kube-proxy logs:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl status kubelet --all --full --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: kubelet daemon status:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl cat kubelet --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: kubelet daemon config:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo journalctl -xeu kubelet --all --full --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: kubelet logs:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /etc/kubernetes/kubelet.conf") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/kubernetes/kubelet.conf:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /var/lib/kubelet/config.yaml") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /var/lib/kubelet/config.yaml:\n%s\n", out)) + + cmd = exec.Command("kubectl", "config", "view") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: kubectl config:\n%s\n", out)) + + cmd = exec.Command("kubectl", "--context", profile, "get", "cm", "-A", "-oyaml") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> k8s: cms:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl status docker --all --full --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: docker daemon status:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl cat docker --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: docker daemon config:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /etc/docker/daemon.json") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/docker/daemon.json:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo docker system info") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: docker system info:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl status cri-docker --all --full --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: cri-docker daemon status:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl cat cri-docker --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: cri-docker daemon config:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /etc/systemd/system/cri-docker.service.d/10-cni.conf") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/systemd/system/cri-docker.service.d/10-cni.conf:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /usr/lib/systemd/system/cri-docker.service") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /usr/lib/systemd/system/cri-docker.service:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cri-dockerd --version") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: cri-dockerd version:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl status containerd --all --full --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: containerd daemon status:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl cat containerd --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: containerd daemon config:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /lib/systemd/system/containerd.service") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /lib/systemd/system/containerd.service:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo cat /etc/containerd/config.toml") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/containerd/config.toml:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo containerd config dump") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: containerd config dump:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl status crio --all --full --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: crio daemon status:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo systemctl cat crio --no-pager") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: crio daemon config:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo find /etc/crio -type f -exec sh -c 'echo {}; cat {}' \\;") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: /etc/crio:\n%s\n", out)) + + cmd = exec.Command(Target(), "ssh", "-p", profile, "sudo crio config") + out, _ = cmd.CombinedOutput() + output.WriteString(fmt.Sprintf("\n>>> host: crio config:\n%s\n", out)) + + output.WriteString(fmt.Sprintf("----------------------- debugLogs end: %s [took: %v] --------------------------------", profile, time.Since(start))) + t.Logf("\n%s\n", output.String()) +} diff --git a/test/integration/no_kubernetes_test.go b/test/integration/no_kubernetes_test.go new file mode 100644 index 000000000000..096879cd5a1d --- /dev/null +++ b/test/integration/no_kubernetes_test.go @@ -0,0 +1,238 @@ +//go:build integration + +/* +Copyright 2021 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "encoding/json" + "fmt" + "os/exec" + "path/filepath" + "runtime" + "strings" + "testing" + + "k8s.io/minikube/pkg/minikube/constants" + "k8s.io/minikube/pkg/minikube/localpath" +) + +// TestNoKubernetes tests starting minikube without Kubernetes, +// for use cases where user only needs to use the container runtime (docker, containerd, crio) inside minikube +func TestNoKubernetes(t *testing.T) { + MaybeParallel(t) + + if NoneDriver() { + t.Skip("None driver does not need --no-kubernetes test") + } + type validateFunc func(context.Context, *testing.T, string) + profile := UniqueProfileName("NoKubernetes") + ctx, cancel := context.WithTimeout(context.Background(), Minutes(5)) + defer Cleanup(t, profile, cancel) + + // Serial tests + t.Run("serial", func(t *testing.T) { + tests := []struct { + name string + validator validateFunc + }{ + {"StartNoK8sWithVersion", validateStartNoK8sWithVersion}, + {"StartWithK8s", validateStartWithK8S}, + {"StartWithStopK8s", validateStartWithStopK8s}, + {"Start", validateStartNoK8S}, + {"VerifyNok8sNoK8sDownloads", VerifyNoK8sDownloadCache}, + {"VerifyK8sNotRunning", validateK8SNotRunning}, + {"ProfileList", validateProfileListNoK8S}, + {"Stop", validateStopNoK8S}, + {"StartNoArgs", validateStartNoArgs}, + {"VerifyK8sNotRunningSecond", validateK8SNotRunning}, + } + + for _, tc := range tests { + tc := tc + + if ctx.Err() == context.DeadlineExceeded { + t.Fatalf("Unable to run more tests (deadline exceeded)") + } + + t.Run(tc.name, func(t *testing.T) { + tc.validator(ctx, t, profile) + if t.Failed() && *postMortemLogs { + PostMortemLogs(t, profile) + } + }) + } + }) +} + +// VerifyNoK8sDownloadCache verifies that starting minikube with --no-kubernetes does not create a download cache. +func VerifyNoK8sDownloadCache(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + cachePath := filepath.Join(localpath.MiniPath(), "cache", runtime.GOOS, runtime.GOARCH, constants.NoKubernetesVersion) + + t.Logf("Checking cache directory: %s", cachePath) + files, err := filepath.Glob(filepath.Join(cachePath, "*")) + if err != nil { + t.Errorf("Error reading cache directory: %v", err) + return + } + + if len(files) > 0 { + t.Logf("Files found in cache directory: %v", files) + t.Errorf("Cache directory should not contain files when using --no-kubernetes") + } +} + +// validateStartNoK8sWithVersion expect an error when starting a minikube cluster without kubernetes and with a kubernetes version. +func validateStartNoK8sWithVersion(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + // docs: start minikube with no kubernetes. + args := append([]string{"start", "-p", profile, "--no-kubernetes", "--kubernetes-version=" + constants.OldestKubernetesVersion}, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err == nil { + t.Fatalf("expected an error but none was thrown with args: %q", rr.Command()) + } +} + +// validateStartWithK8S starts a minikube cluster with Kubernetes started/configured. +func validateStartWithK8S(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + // docs: start minikube with Kubernetes. + args := append([]string{"start", "-p", profile, "--memory=3072", "--alsologtostderr", "-v=5"}, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to start minikube with args: %q : %v", rr.Command(), err) + } + + // docs: return an error if Kubernetes is not running. + if k8sStatus := getK8sStatus(ctx, t, profile); k8sStatus != "Running" { + t.Errorf("Kubernetes status, got: %s, want: Running", k8sStatus) + } +} + +// validateStartWithStopK8s starts a minikube cluster while stopping Kubernetes. +func validateStartWithStopK8s(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + // docs: start minikube with no Kubernetes. + args := append([]string{"start", "-p", profile, "--no-kubernetes", "--memory=3072", "--alsologtostderr", "-v=5"}, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to start minikube with args: %q : %v", rr.Command(), err) + } + + // docs: return an error if Kubernetes is not stopped. + if k8sStatus := getK8sStatus(ctx, t, profile); k8sStatus != "Stopped" { + t.Errorf("Kubernetes status, got: %s, want: Stopped", k8sStatus) + } + + // docs: delete minikube profile. + args = []string{"delete", "-p", profile} + rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to delete minikube profile with args: %q : %v", rr.Command(), err) + } +} + +// validateStartNoK8S starts a minikube cluster without kubernetes started/configured +func validateStartNoK8S(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + // docs: start minikube with no Kubernetes. + args := append([]string{"start", "-p", profile, "--no-kubernetes", "--memory=3072", "--alsologtostderr", "-v=5"}, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to start minikube with args: %q : %v", rr.Command(), err) + } +} + +// validateK8SNotRunning validates that there is no kubernetes running inside minikube +func validateK8SNotRunning(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + args := []string{"ssh", "-p", profile, "sudo systemctl is-active --quiet service kubelet"} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err == nil { + t.Fatalf("Expected Kubelet not to be running and but it is running : %q : %v", rr.Command(), err) + } +} + +// validateStopNoK8S validates that minikube is stopped after a --no-kubernetes start +func validateStopNoK8S(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + args := []string{"stop", "-p", profile} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("Failed to stop minikube %q : %v", rr.Command(), err) + } +} + +// validateProfileListNoK8S validates that profile list works with --no-kubernetes +func validateProfileListNoK8S(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + args := []string{"profile", "list"} + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("Profile list failed : %q : %v", rr.Command(), err) + } + + if !strings.Contains(rr.Output(), "N/A") { + t.Fatalf("expected N/A in the profile list for kubernetes version but got : %q : %v", rr.Command(), rr.Output()) + } + + args = []string{"profile", "list", "--output=json"} + rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("Profile list --output=json failed : %q : %v", rr.Command(), err) + } + +} + +// validateStartNoArgs validates that minikube start with no args works. +func validateStartNoArgs(ctx context.Context, t *testing.T, profile string) { + defer PostMortemLogs(t, profile) + + args := append([]string{"start", "-p", profile}, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("failed to start minikube with args: %q : %v", rr.Command(), err) + } +} + +// getK8sStatus returns whether Kubernetes is running. +func getK8sStatus(ctx context.Context, t *testing.T, profile string) string { + // Run `minikube status` as JSON output. + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "status", "-o", "json")) + // We expect Kubernetes config to come back as configured, since we started Kubernetes in a previous test. + if err != nil && rr.ExitCode != 2 { + t.Errorf("failed to run minikube status with json output. args %q : %v", rr.Command(), err) + } + + // Unmarshal JSON output. + var jsonObject map[string]interface{} + err = json.Unmarshal(rr.Stdout.Bytes(), &jsonObject) + if err != nil { + t.Errorf("failed to decode json from minikube status. args %q. %v", rr.Command(), err) + } + return fmt.Sprintf("%s", jsonObject["Kubelet"]) +} diff --git a/test/integration/none_test.go b/test/integration/none_test.go index b1219de8cd69..e1fa72cc3d06 100644 --- a/test/integration/none_test.go +++ b/test/integration/none_test.go @@ -1,5 +1,4 @@ -// +build integration -// +build linux +//go:build integration && linux /* Copyright 2019 The Kubernetes Authors All rights reserved. @@ -32,11 +31,11 @@ import ( "k8s.io/minikube/pkg/minikube/localpath" ) -// TestChangeNoneUser tests to make sure the CHANGE_MINIKUBE_NONE_USER environemt variable is respected +// TestChangeNoneUser tests to make sure the CHANGE_MINIKUBE_NONE_USER environment variable is respected // and changes the minikube file permissions from root to the correct user. func TestChangeNoneUser(t *testing.T) { - if !NoneDriver() { - t.Skip("Only test none driver.") + if !NoneDriver() || os.Getenv("SUDO_USER") == "" { + t.Skip("Test requires none driver and SUDO_USER env to not be empty") } MaybeParallel(t) @@ -65,11 +64,7 @@ func TestChangeNoneUser(t *testing.T) { t.Errorf("%s failed: %v", rr.Command(), err) } - username := os.Getenv("SUDO_USER") - if username == "" { - t.Fatal("Expected $SUDO_USER env to not be empty") - } - u, err := user.Lookup(username) + u, err := user.Lookup(os.Getenv("SUDO_USER")) if err != nil { t.Fatalf("Getting user failed: %v", err) } diff --git a/test/integration/pause_test.go b/test/integration/pause_test.go index e4706aaa6fde..2d3d54e85f67 100644 --- a/test/integration/pause_test.go +++ b/test/integration/pause_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2020 The Kubernetes Authors All rights reserved. @@ -25,7 +25,7 @@ import ( "strings" "testing" - "k8s.io/minikube/cmd/minikube/cmd" + "k8s.io/minikube/pkg/minikube/cluster" ) // TestPause tests minikube pause functionality @@ -58,6 +58,9 @@ func TestPause(t *testing.T) { if ctx.Err() == context.DeadlineExceeded { t.Fatalf("Unable to run more tests (deadline exceeded)") } + if t.Failed() { + t.Fatalf("Previous test failed, not running dependent tests") + } t.Run(tc.name, func(t *testing.T) { tc.validator(ctx, t, profile) @@ -73,7 +76,7 @@ func TestPause(t *testing.T) { func validateFreshStart(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) - args := append([]string{"start", "-p", profile, "--memory=2048", "--install-addons=false", "--wait=all"}, StartArgs()...) + args := append([]string{"start", "-p", profile, "--memory=3072", "--install-addons=false", "--wait=all"}, StartArgs()...) rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Fatalf("failed to start minikube with args: %q : %v", rr.Command(), err) @@ -172,6 +175,13 @@ func validateVerifyDeleted(ctx context.Context, t *testing.T, profile string) { t.Errorf("expected to see error and volume %q to not exist after deletion but got no error and this output: %s", rr.Command(), rr.Output()) } + rr, err = Run(t, exec.CommandContext(ctx, bin, "network", "ls")) + if err != nil { + t.Errorf("failed to get list of networks: %v", err) + } + if strings.Contains(rr.Output(), profile) { + t.Errorf("expected network %q to not exist after deletion but contained: %s", profile, rr.Output()) + } } } @@ -181,12 +191,12 @@ func validateStatus(ctx context.Context, t *testing.T, profile string) { defer PostMortemLogs(t, profile) statusOutput := runStatusCmd(ctx, t, profile, false) - var cs cmd.ClusterState + var cs cluster.State if err := json.Unmarshal(statusOutput, &cs); err != nil { t.Fatalf("unmarshalling: %v", err) } // verify the status looks as we expect - if cs.StatusCode != cmd.Paused { + if cs.StatusCode != cluster.Paused { t.Fatalf("incorrect status code: %v", cs.StatusCode) } if cs.StatusName != "Paused" { diff --git a/test/integration/pkg_install_test.go b/test/integration/pkg_install_test.go deleted file mode 100644 index ca500e41a4ab..000000000000 --- a/test/integration/pkg_install_test.go +++ /dev/null @@ -1,108 +0,0 @@ -// +build integration - -/* -Copyright 2021 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package integration - -import ( - "context" - "fmt" - "os/exec" - "path/filepath" - "runtime" - "testing" -) - -var distros = []string{ - "debian:sid", - "debian:latest", - "debian:10", - "debian:9", - "ubuntu:latest", - "ubuntu:20.10", - "ubuntu:20.04", - "ubuntu:18.04", -} - -var timeout = Minutes(10) - -// TestPackageInstall tests installation of .deb packages with minikube itself and with kvm2 driver -// on various debian/ubuntu docker images -func TestDebPackageInstall(t *testing.T) { - - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - - rr, err := Run(t, exec.CommandContext(ctx, "docker", "version")) - if err != nil || rr.ExitCode != 0 { - t.Skip("docker is not installed") - } - - pkgDir, err := filepath.Abs(filepath.Dir(Target())) - if err != nil { - t.Errorf("failed to get minikube path: %v", err) - } - mkDebs, err := filepath.Glob(fmt.Sprintf("%s/minikube_*_%s.deb", pkgDir, runtime.GOARCH)) - if err != nil { - t.Errorf("failed to find minikube deb in %q: %v", pkgDir, err) - } - kvmDebs, err := filepath.Glob(fmt.Sprintf("%s/docker-machine-driver-kvm2_*_%s.deb", pkgDir, runtime.GOARCH)) - if err != nil { - t.Errorf("failed to find minikube deb in %q: %v", pkgDir, err) - } - - for _, distro := range distros { - distroImg := distro - testName := fmt.Sprintf("install_%s_%s", runtime.GOARCH, distroImg) - t.Run(testName, func(t *testing.T) { - // apt-get update; dpkg -i minikube_${ver}_${arch}.deb - t.Run("minikube", func(t *testing.T) { - for _, mkDeb := range mkDebs { - rr, err := dpkgInstall(ctx, t, distro, mkDeb) - if err != nil || rr.ExitCode != 0 { - t.Errorf("failed to install %q on %q: err=%v, exit=%d", - mkDeb, distroImg, err, rr.ExitCode) - } - } - }) - // apt-get update; apt-get install -y libvirt0; dpkg -i docker-machine-driver-kvm2_${ver}_${arch}.deb - t.Run("kvm2-driver", func(t *testing.T) { - for _, kvmDeb := range kvmDebs { - rr, err := dpkgInstallDriver(ctx, t, distro, kvmDeb) - if err != nil || rr.ExitCode != 0 { - t.Errorf("failed to install %q on %q: err=%v, exit=%d", - kvmDeb, distroImg, err, rr.ExitCode) - } - } - }) - }) - } -} - -func dpkgInstall(ctx context.Context, t *testing.T, image, deb string) (*RunResult, error) { - return Run(t, exec.CommandContext(ctx, - "docker", "run", "--rm", fmt.Sprintf("-v%s:/var/tmp", filepath.Dir(deb)), - image, - "sh", "-c", fmt.Sprintf("apt-get update; dpkg -i /var/tmp/%s", filepath.Base(deb)))) -} - -func dpkgInstallDriver(ctx context.Context, t *testing.T, image, deb string) (*RunResult, error) { - return Run(t, exec.CommandContext(ctx, - "docker", "run", "--rm", fmt.Sprintf("-v%s:/var/tmp", filepath.Dir(deb)), - image, - "sh", "-c", fmt.Sprintf("apt-get update; apt-get install -y libvirt0; dpkg -i /var/tmp/%s", filepath.Base(deb)))) -} diff --git a/test/integration/preload_test.go b/test/integration/preload_test.go index 1a6d0c8836b2..a0dae79b5f09 100644 --- a/test/integration/preload_test.go +++ b/test/integration/preload_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2020 The Kubernetes Authors All rights reserved. @@ -26,62 +26,94 @@ import ( "testing" ) -// TestPreload verifies the preload tarballs get pulled in properly by minikube +// TestPreload verifies that disabling the initial preload, pulling a specific image, +// and restarting the cluster preserves the image across restarts. +// also tests --preload-source should work for both github and gcs func TestPreload(t *testing.T) { + MaybeParallel(t) if NoneDriver() { t.Skipf("skipping %s - incompatible with none driver", t.Name()) } - if arm64Platform() { - t.Skipf("skipping %s - not yet supported on arm64. See https://github.com/kubernetes/minikube/issues/10144", t.Name()) - } - profile := UniqueProfileName("test-preload") ctx, cancel := context.WithTimeout(context.Background(), Minutes(40)) defer CleanupWithLogs(t, profile, cancel) - startArgs := []string{"start", "-p", profile, "--memory=2200", "--alsologtostderr", "--wait=true", "--preload=false"} - startArgs = append(startArgs, StartArgs()...) - k8sVersion := "v1.17.0" - startArgs = append(startArgs, fmt.Sprintf("--kubernetes-version=%s", k8sVersion)) + userImage := "public.ecr.aws/docker/library/busybox:latest" - rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) - if err != nil { - t.Fatalf("%s failed: %v", rr.Command(), err) - } + // These subtests run sequentially (t.Run blocks until completion) to share the same profile/cluster state. + t.Run("Start-NoPreload-PullImage", func(t *testing.T) { + startArgs := []string{"start", "-p", profile, "--memory=3072", "--alsologtostderr", "--wait=true", "--preload=false"} + startArgs = append(startArgs, StartArgs()...) - // Now, pull the busybox image into minikube - image := "busybox" - var cmd *exec.Cmd - if ContainerRuntime() == "docker" { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "docker", "pull", image) - } else { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "sudo", "crictl", "pull", image) - } - rr, err = Run(t, cmd) - if err != nil { - t.Fatalf("%s failed: %v", rr.Command(), err) - } + rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) + } - // Restart minikube with v1.17.3, which has a preloaded tarball - startArgs = []string{"start", "-p", profile, "--memory=2200", "--alsologtostderr", "-v=1", "--wait=true"} - startArgs = append(startArgs, StartArgs()...) - k8sVersion = "v1.17.3" - startArgs = append(startArgs, fmt.Sprintf("--kubernetes-version=%s", k8sVersion)) - rr, err = Run(t, exec.CommandContext(ctx, Target(), startArgs...)) - if err != nil { - t.Fatalf("%s failed: %v", rr.Command(), err) - } - if ContainerRuntime() == "docker" { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "docker", "images") - } else { - cmd = exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "--", "sudo", "crictl", "image", "ls") - } - rr, err = Run(t, cmd) - if err != nil { - t.Fatalf("%s failed: %v", rr.Command(), err) - } - if !strings.Contains(rr.Output(), image) { - t.Fatalf("Expected to find %s in output of `docker images`, instead got %s", image, rr.Output()) - } + // Now, pull the busybox image into minikube + cmd := exec.CommandContext(ctx, Target(), "-p", profile, "image", "pull", userImage) + rr, err = Run(t, cmd) + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) + } + + // stop the cluster + rr, err = Run(t, exec.CommandContext(ctx, Target(), "stop", "-p", profile)) + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) + } + }) + + t.Run("Restart-With-Preload-Check-User-Image", func(t *testing.T) { + // re-start the cluster and check if image is preserved with enabled preload + startArgs := []string{"start", "-p", profile, "--preload=true", "--alsologtostderr", "-v=1", "--wait=true"} + startArgs = append(startArgs, StartArgs()...) + rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) + } + cmd := exec.CommandContext(ctx, Target(), "-p", profile, "image", "list") + rr, err = Run(t, cmd) + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) + } + if !strings.Contains(rr.Output(), userImage) { + t.Fatalf("Expected to find %s in image list output, instead got %s", userImage, rr.Output()) + } + }) + // PreloadSrc verifies that downloading preload from github and gcs works using --preload-src and --download-only + // "auto" is the default preload source (tries both gcs and github); here we explicitly verify each source + t.Run("PreloadSrc", func(t *testing.T) { + MaybeParallel(t) + tests := []struct { + name string + source string + kubernetesVersion string // using versions that are not used in the test to make sure they dont pre-exist + wantLog string + }{ + {"gcs", "gcs", "v1.34.0-rc.1", "Downloading preload from https://storage.googleapis.com"}, + {"github", "github", "v1.34.0-rc.2", "Downloading preload from https://github.com"}, + {"gcs-cached", "gcs", "v1.34.0-rc.2", "in cache, skipping download"}, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + profile := UniqueProfileName("test-preload-dl-" + tc.name) + ctx, cancel := context.WithTimeout(context.Background(), Minutes(10)) + defer CleanupWithLogs(t, profile, cancel) + + startArgs := []string{"start", "-p", profile, "--download-only", "--kubernetes-version", tc.kubernetesVersion, fmt.Sprintf("--preload-source=%s", tc.source), "--alsologtostderr", "--v=1"} + startArgs = append(startArgs, StartArgs()...) + + rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) + if err != nil { + t.Fatalf("%s failed: %v", rr.Command(), err) + } + if !strings.Contains(rr.Output(), tc.wantLog) { + t.Fatalf("Expected to find %q in output, but got:\n%s", tc.wantLog, rr.Output()) + } + }) + } + }) } diff --git a/test/integration/scheduled_stop_test.go b/test/integration/scheduled_stop_test.go index 4a52be4ae39c..cf1ae435776a 100644 --- a/test/integration/scheduled_stop_test.go +++ b/test/integration/scheduled_stop_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2020 The Kubernetes Authors All rights reserved. @@ -21,7 +21,6 @@ package integration import ( "context" "fmt" - "io/ioutil" "os" "os/exec" "runtime" @@ -43,7 +42,7 @@ func TestScheduledStopWindows(t *testing.T) { t.Skip("test only runs on windows") } profile := UniqueProfileName("scheduled-stop") - ctx, cancel := context.WithTimeout(context.Background(), Minutes(5)) + ctx, cancel := context.WithTimeout(context.Background(), Minutes(6)) defer CleanupWithLogs(t, profile, cancel) startMinikube(ctx, t, profile) @@ -64,7 +63,7 @@ func TestScheduledStopWindows(t *testing.T) { stopMinikube(ctx, t, profile, []string{"--schedule", "5s"}) // wait for stop to complete - time.Sleep(15 * time.Second) + time.Sleep(time.Minute) // make sure minikube timetoStop is not present ensureTimeToStopNotPresent(ctx, t, profile) // make sure minikube status is "Stopped" @@ -85,7 +84,7 @@ func TestScheduledStopUnix(t *testing.T) { startMinikube(ctx, t, profile) // schedule a stop for 5 min from now and make sure PID is created - stopMinikube(ctx, t, profile, []string{"--schedule", "5m"}) + stopMinikube(ctx, t, profile, []string{"--schedule", "5m", "-v=5", "--alsologtostderr"}) // make sure timeToStop is present in status ensureMinikubeScheduledTime(ctx, t, profile, 5*time.Minute) pid := checkPID(t, profile) @@ -94,29 +93,30 @@ func TestScheduledStopUnix(t *testing.T) { } // schedule a second stop which should cancel the first scheduled stop - stopMinikube(ctx, t, profile, []string{"--schedule", "8s"}) + stopMinikube(ctx, t, profile, []string{"--schedule", "15s", "-v=5", "--alsologtostderr"}) if processRunning(t, pid) { t.Fatalf("process %v running but should have been killed on reschedule of stop", pid) } - checkPID(t, profile) + pid = checkPID(t, profile) // cancel the shutdown and make sure minikube is still running after 8 seconds // sleep 12 just to be safe stopMinikube(ctx, t, profile, []string{"--cancel-scheduled"}) - time.Sleep(12 * time.Second) + time.Sleep(25 * time.Second) // make sure minikube status is "Running" ensureMinikubeStatus(ctx, t, profile, "Host", state.Running.String()) // make sure minikube timetoStop is not present ensureTimeToStopNotPresent(ctx, t, profile) // schedule another stop, make sure minikube status is "Stopped" - stopMinikube(ctx, t, profile, []string{"--schedule", "5s"}) + stopMinikube(ctx, t, profile, []string{"--schedule", "15s", "-v=5", "--alsologtostderr"}) + time.Sleep(15 * time.Second) if processRunning(t, pid) { t.Fatalf("process %v running but should have been killed on reschedule of stop", pid) } // wait for stop to complete - time.Sleep(15 * time.Second) + time.Sleep(30 * time.Second) // make sure minikube timetoStop is not present ensureTimeToStopNotPresent(ctx, t, profile) // make sure minikube status is "Stopped" @@ -124,7 +124,7 @@ func TestScheduledStopUnix(t *testing.T) { } func startMinikube(ctx context.Context, t *testing.T, profile string) { - args := append([]string{"start", "-p", profile, "--memory=2048"}, StartArgs()...) + args := append([]string{"start", "-p", profile, "--memory=3072"}, StartArgs()...) rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Fatalf("starting minikube: %v\n%s", err, rr.Output()) @@ -138,6 +138,9 @@ func stopMinikube(ctx context.Context, t *testing.T, profile string, additionalA if err != nil { t.Fatalf("stopping minikube: %v\n%s", err, rr.Output()) } + fmt.Println("minikube stop output:") + fmt.Println(rr.Output()) + } func checkPID(t *testing.T, profile string) string { @@ -145,7 +148,7 @@ func checkPID(t *testing.T, profile string) string { var contents []byte getContents := func() error { var err error - contents, err = ioutil.ReadFile(file) + contents, err = os.ReadFile(file) return err } // first, make sure the PID file exists @@ -167,7 +170,17 @@ func processRunning(t *testing.T, pid string) bool { } err = process.Signal(syscall.Signal(0)) t.Log("signal error was: ", err) - return err == nil + if err != nil { + return false + } + // then check if this process has become a zombie process + // which is also not running + data, _ := os.ReadFile(fmt.Sprintf("/proc/%s/status", pid)) + if strings.Contains(string(data), "State:\tZ") { + t.Logf("process %s is a zombie", pid) + return false + } + return true } func ensureMinikubeStatus(ctx context.Context, t *testing.T, profile, key string, wantStatus string) { checkStatus := func() error { diff --git a/test/integration/skaffold_test.go b/test/integration/skaffold_test.go index f801b6117c92..159a4129998a 100644 --- a/test/integration/skaffold_test.go +++ b/test/integration/skaffold_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2020 The Kubernetes Authors All rights reserved. @@ -21,7 +21,6 @@ package integration import ( "context" "fmt" - "io/ioutil" "os" "os/exec" "path/filepath" @@ -36,6 +35,9 @@ import ( // TestSkaffold makes sure skaffold run can be run with minikube func TestSkaffold(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("skipping due to https://github.com/kubernetes/minikube/issues/14232") + } if NoneDriver() { t.Skip("none driver doesn't support `minikube docker-env`; skaffold depends on this command") } @@ -60,7 +62,7 @@ func TestSkaffold(t *testing.T) { } t.Logf("skaffold version: %s", rr.Stdout.Bytes()) - args := append([]string{"start", "-p", profile, "--memory=2600"}, StartArgs()...) + args := append([]string{"start", "-p", profile, "--memory=3072"}, StartArgs()...) rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Fatalf("starting minikube: %v\n%s", err, rr.Output()) @@ -80,15 +82,14 @@ func TestSkaffold(t *testing.T) { } if filepath.Base(Target()) != binaryName { - new := filepath.Join(filepath.Dir(abs), binaryName) - t.Logf("copying %s to %s", Target(), new) - if err := copy.Copy(Target(), new); err != nil { + dst := filepath.Join(filepath.Dir(abs), binaryName) + t.Logf("copying %s to %s", Target(), dst) + if err := copy.Copy(Target(), dst); err != nil { t.Fatalf("error copying to minikube") } } - oldPath := os.Getenv("PATH") - os.Setenv("PATH", fmt.Sprintf("%s%s%s", filepath.Dir(abs), pathSeparator, os.Getenv("PATH"))) + t.Setenv("PATH", fmt.Sprintf("%s%s%s", filepath.Dir(abs), pathSeparator, os.Getenv("PATH"))) // make sure 'docker' and 'minikube' are now in PATH for _, binary := range []string{"minikube", "docker"} { @@ -98,10 +99,6 @@ func TestSkaffold(t *testing.T) { } } - defer func() { - os.Setenv("PATH", oldPath) - }() - // make sure "skaffold run" exits without failure cmd := exec.CommandContext(ctx, tf.Name(), "run", "--minikube-profile", profile, "--kube-context", profile, "--status-check=true", "--port-forward=false", "--interactive=false") cmd.Dir = "testdata/skaffold" @@ -121,7 +118,7 @@ func TestSkaffold(t *testing.T) { // installSkaffold installs the latest release of skaffold func installSkaffold() (f *os.File, err error) { - tf, err := ioutil.TempFile("", "skaffold.exe") + tf, err := os.CreateTemp("", "skaffold.exe") if err != nil { return tf, err } diff --git a/test/integration/start_stop_delete_test.go b/test/integration/start_stop_delete_test.go index 85e0f0f924cc..716bb1e42b0a 100644 --- a/test/integration/start_stop_delete_test.go +++ b/test/integration/start_stop_delete_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -29,10 +29,13 @@ import ( "strings" "testing" + "github.com/blang/semver/v4" "github.com/docker/machine/libmachine/state" "github.com/google/go-cmp/cmp" "k8s.io/minikube/pkg/minikube/bootstrapper/images" "k8s.io/minikube/pkg/minikube/constants" + "k8s.io/minikube/pkg/minikube/detect" + "k8s.io/minikube/pkg/util" ) // TestStartStop tests starting, stopping and restarting a minikube clusters with various Kubernetes versions and configurations @@ -55,13 +58,10 @@ func TestStartStop(t *testing.T) { "--keep-context=false", }}, {"newest-cni", constants.NewestKubernetesVersion, []string{ - "--feature-gates", - "ServerSideApply=true", "--network-plugin=cni", - "--extra-config=kubelet.network-plugin=cni", - "--extra-config=kubeadm.pod-network-cidr=192.168.111.111/16", + "--extra-config=kubeadm.pod-network-cidr=10.42.0.0/16", }}, - {"default-k8s-different-port", constants.DefaultKubernetesVersion, []string{ + {"default-k8s-diff-port", constants.DefaultKubernetesVersion, []string{ "--apiserver-port=8444", }}, {"no-preload", constants.NewestKubernetesVersion, []string{ @@ -76,6 +76,16 @@ func TestStartStop(t *testing.T) { }}, } + if detect.IsCloudShell() { + tests = []struct { + name string + version string + args []string + }{ + {"cloud-shell", constants.DefaultKubernetesVersion, []string{}}, + } + } + for _, tc := range tests { tc := tc t.Run(tc.name, func(t *testing.T) { @@ -96,10 +106,25 @@ func TestStartStop(t *testing.T) { waitFlag = "--wait=apiserver,system_pods,default_sa" } - startArgs := append([]string{"start", "-p", profile, "--memory=2200", "--alsologtostderr", waitFlag}, tc.args...) + startArgs := append([]string{"start", "-p", profile, "--memory=3072", "--alsologtostderr", waitFlag}, tc.args...) startArgs = append(startArgs, StartArgs()...) startArgs = append(startArgs, fmt.Sprintf("--kubernetes-version=%s", tc.version)) + version, err := util.ParseKubernetesVersion(tc.version) + if err != nil { + t.Errorf("failed to parse %s: %v", tc.version, err) + } + if version.GTE(semver.MustParse("1.24.0-alpha.2")) { + args := []string{} + for _, arg := range startArgs { + if arg == "--extra-config=kubelet.network-plugin=cni" { + continue + } + args = append(args, arg) + } + startArgs = args + } + t.Run("serial", func(t *testing.T) { serialTests := []struct { name string @@ -154,7 +179,7 @@ func TestStartStop(t *testing.T) { } // validateFirstStart runs the initial minikube start -func validateFirstStart(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validateFirstStart(ctx context.Context, t *testing.T, profile, _, _ string, startArgs []string) { defer PostMortemLogs(t, profile) rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) if err != nil { @@ -163,7 +188,7 @@ func validateFirstStart(ctx context.Context, t *testing.T, profile string, tcNam } // validateDeploying deploys an app the minikube cluster -func validateDeploying(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validateDeploying(ctx context.Context, t *testing.T, profile, tcName, _ string, _ []string) { defer PostMortemLogs(t, profile) if !strings.Contains(tcName, "cni") { testPodScheduling(ctx, t, profile) @@ -171,11 +196,11 @@ func validateDeploying(ctx context.Context, t *testing.T, profile string, tcName } // validateEnableAddonWhileActive makes sure addons can be enabled while cluster is active. -func validateEnableAddonWhileActive(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validateEnableAddonWhileActive(ctx context.Context, t *testing.T, profile, tcName, _ string, _ []string) { defer PostMortemLogs(t, profile) // Enable an addon to assert it requests the correct image. - rr, err := Run(t, exec.CommandContext(ctx, Target(), "addons", "enable", "metrics-server", "-p", profile, "--images=MetricsServer=k8s.gcr.io/echoserver:1.4", "--registries=MetricsServer=fake.domain")) + rr, err := Run(t, exec.CommandContext(ctx, Target(), "addons", "enable", "metrics-server", "-p", profile, "--images=MetricsServer=registry.k8s.io/echoserver:1.4", "--registries=MetricsServer=fake.domain")) if err != nil { t.Errorf("failed to enable an addon post-stop. args %q: %v", rr.Command(), err) } @@ -190,13 +215,13 @@ func validateEnableAddonWhileActive(ctx context.Context, t *testing.T, profile s t.Errorf("failed to get info on auto-pause deployments. args %q: %v", rr.Command(), err) } deploymentInfo := rr.Stdout.String() - if !strings.Contains(deploymentInfo, " fake.domain/k8s.gcr.io/echoserver:1.4") { - t.Errorf("addon did not load correct image. Expected to contain \" fake.domain/k8s.gcr.io/echoserver:1.4\". Addon deployment info: %s", deploymentInfo) + if !strings.Contains(deploymentInfo, " fake.domain/registry.k8s.io/echoserver:1.4") { + t.Errorf("addon did not load correct image. Expected to contain \" fake.domain/registry.k8s.io/echoserver:1.4\". Addon deployment info: %s", deploymentInfo) } } // validateStop tests minikube stop -func validateStop(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validateStop(ctx context.Context, t *testing.T, profile, _, _ string, _ []string) { defer PostMortemLogs(t, profile) rr, err := Run(t, exec.CommandContext(ctx, Target(), "stop", "-p", profile, "--alsologtostderr", "-v=3")) if err != nil { @@ -205,7 +230,7 @@ func validateStop(ctx context.Context, t *testing.T, profile string, tcName stri } // validateEnableAddonAfterStop makes sure addons can be enabled on a stopped cluster -func validateEnableAddonAfterStop(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validateEnableAddonAfterStop(ctx context.Context, t *testing.T, profile, _, _ string, _ []string) { defer PostMortemLogs(t, profile) // The none driver never really stops if !NoneDriver() { @@ -216,7 +241,7 @@ func validateEnableAddonAfterStop(ctx context.Context, t *testing.T, profile str } // Enable an addon to assert it comes up afterwards - rr, err := Run(t, exec.CommandContext(ctx, Target(), "addons", "enable", "dashboard", "-p", profile, "--images=MetricsScraper=k8s.gcr.io/echoserver:1.4")) + rr, err := Run(t, exec.CommandContext(ctx, Target(), "addons", "enable", "dashboard", "-p", profile, "--images=MetricsScraper=registry.k8s.io/echoserver:1.4")) if err != nil { t.Errorf("failed to enable an addon post-stop. args %q: %v", rr.Command(), err) } @@ -224,7 +249,7 @@ func validateEnableAddonAfterStop(ctx context.Context, t *testing.T, profile str } // validateSecondStart verifies that starting a stopped cluster works -func validateSecondStart(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validateSecondStart(ctx context.Context, t *testing.T, profile, _, _ string, startArgs []string) { defer PostMortemLogs(t, profile) rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...)) if err != nil { @@ -240,7 +265,7 @@ func validateSecondStart(ctx context.Context, t *testing.T, profile string, tcNa } // validateAppExistsAfterStop verifies that a user's app will not vanish after a minikube stop -func validateAppExistsAfterStop(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validateAppExistsAfterStop(ctx context.Context, t *testing.T, profile, tcName, _ string, _ []string) { defer PostMortemLogs(t, profile) if strings.Contains(tcName, "cni") { t.Logf("WARNING: cni mode requires additional setup before pods can schedule :(") @@ -251,7 +276,7 @@ func validateAppExistsAfterStop(ctx context.Context, t *testing.T, profile strin } // validateAddonAfterStop validates that an addon which was enabled when minikube is stopped will be enabled and working.. -func validateAddonAfterStop(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validateAddonAfterStop(ctx context.Context, t *testing.T, profile, tcName, _ string, _ []string) { defer PostMortemLogs(t, profile) if strings.Contains(tcName, "cni") { t.Logf("WARNING: cni mode requires additional setup before pods can schedule :(") @@ -266,20 +291,20 @@ func validateAddonAfterStop(ctx context.Context, t *testing.T, profile string, t t.Errorf("failed to get info on kubernetes-dashboard deployments. args %q: %v", rr.Command(), err) } deploymentInfo := rr.Stdout.String() - if !strings.Contains(deploymentInfo, " k8s.gcr.io/echoserver:1.4") { - t.Errorf("addon did not load correct image. Expected to contain \" k8s.gcr.io/echoserver:1.4\". Addon deployment info: %s", deploymentInfo) + if !strings.Contains(deploymentInfo, " registry.k8s.io/echoserver:1.4") { + t.Errorf("addon did not load correct image. Expected to contain \" registry.k8s.io/echoserver:1.4\". Addon deployment info: %s", deploymentInfo) } } // validateKubernetesImages verifies that a restarted cluster contains all the necessary images -func validateKubernetesImages(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validateKubernetesImages(ctx context.Context, t *testing.T, profile, _, tcVersion string, _ []string) { if !NoneDriver() { testPulledImages(ctx, t, profile, tcVersion) } } // validatePauseAfterStart verifies that minikube pause works -func validatePauseAfterStart(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) { +func validatePauseAfterStart(ctx context.Context, t *testing.T, profile, _, _ string, _ []string) { defer PostMortemLogs(t, profile) testPause(ctx, t, profile) } @@ -321,36 +346,46 @@ func testPodScheduling(ctx context.Context, t *testing.T, profile string) { } // testPulledImages asserts that this configuration pulls only expected images -func testPulledImages(ctx context.Context, t *testing.T, profile string, version string) { +func testPulledImages(ctx context.Context, t *testing.T, profile, version string) { t.Helper() defer PostMortemLogs(t, profile) - rr, err := Run(t, exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "sudo crictl images -o json")) + // TODO(prezha): once we bump the minimum supported k8s version to v1.24+ + // (where dockershim is deprecated, while cri-tools we use support cri v1 api), + // we can revert back to the "crictl" to check images here - eg: + // rr, err := Run(t, exec.CommandContext(ctx, Target(), "ssh", "-p", profile, "sudo crictl images -o json")) + rr, err := Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "image", "list", "--format=json")) if err != nil { - t.Errorf("failed tp get images inside minikube. args %q: %v", rr.Command(), err) + t.Errorf("failed to get images inside minikube. args %q: %v", rr.Command(), err) } - jv := map[string][]struct { + jv := []struct { Tags []string `json:"repoTags"` }{} stdout := rr.Stdout.String() - err = json.Unmarshal([]byte(stdout), &jv) - if err != nil { + if err := json.Unmarshal([]byte(stdout), &jv); err != nil { t.Errorf("failed to decode images json %v. output:\n%s", err, stdout) } + found := map[string]bool{} - for _, img := range jv["images"] { + for _, img := range jv { for _, i := range img.Tags { i = trimImageName(i) if defaultImage(i) { found[i] = true - } else { - t.Logf("Found non-minikube image: %s", i) + continue } + t.Logf("Found non-minikube image: %s", i) } } - wantRaw, err := images.Kubeadm("", version) + + mirror := "" + // Kubernetes versions prior to v1.25 will contain the old registry due to the preload + if v, _ := util.ParseKubernetesVersion(version); v.LT(semver.MustParse("1.25.0-alpha.1")) { + mirror = "k8s.gcr.io" + } + wantRaw, err := images.Kubeadm(mirror, version) if err != nil { t.Errorf("failed to get kubeadm images for %s : %v", version, err) } @@ -418,11 +453,14 @@ func testPause(ctx context.Context, t *testing.T, profile string) { // Remove container-specific prefixes for naming consistency // for example in `docker` runtime we get this: -// $ docker@minikube:~$ sudo crictl images -o json | grep dash -// "kubernetesui/dashboard:v2.1.0" +// +// $ docker@minikube:~$ sudo crictl images -o json | grep dash +// "kubernetesui/dashboard:vX.X.X" +// // but for 'containerd' we get full name -// $ docker@minikube:~$ sudo crictl images -o json | grep dash -// "docker.io/kubernetesui/dashboard:v2.1.0" +// +// $ docker@minikube:~$ sudo crictl images -o json | grep dash +// "docker.io/kubernetesui/dashboard:vX.X.X" func trimImageName(name string) string { name = strings.TrimPrefix(name, "docker.io/") name = strings.TrimPrefix(name, "localhost/") @@ -434,7 +472,7 @@ func defaultImage(name string) bool { if strings.Contains(name, ":latest") { return false } - if strings.Contains(name, "k8s.gcr.io") || strings.Contains(name, "kubernetesui") || strings.Contains(name, "storage-provisioner") { + if strings.Contains(name, "k8s.gcr.io") || strings.Contains(name, "registry.k8s.io") || strings.Contains(name, "kubernetesui") || strings.Contains(name, "storage-provisioner") { return true } return false diff --git a/test/integration/status_test.go b/test/integration/status_test.go index 3b78642a96c8..95108edb3ac8 100644 --- a/test/integration/status_test.go +++ b/test/integration/status_test.go @@ -1,4 +1,4 @@ -// +build integration +//go:build integration /* Copyright 2016 The Kubernetes Authors All rights reserved. @@ -27,7 +27,7 @@ import ( "path" "testing" - "k8s.io/minikube/cmd/minikube/cmd" + "k8s.io/minikube/pkg/minikube/cluster" "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/localpath" ) @@ -41,11 +41,11 @@ func TestInsufficientStorage(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), Minutes(5)) defer Cleanup(t, profile, cancel) - startArgs := []string{"start", "-p", profile, "--memory=2048", "--output=json", "--wait=true"} + startArgs := []string{"start", "-p", profile, "--memory=3072", "--output=json", "--wait=true"} startArgs = append(startArgs, StartArgs()...) c := exec.CommandContext(ctx, Target(), startArgs...) // artificially set /var to 100% capacity - c.Env = append(os.Environ(), fmt.Sprintf("%s=100", constants.TestDiskUsedEnv)) + c.Env = append(os.Environ(), fmt.Sprintf("%s=100", constants.TestDiskUsedEnv), fmt.Sprintf("%s=19", constants.TestDiskAvailableEnv)) rr, err := Run(t, c) if err == nil { @@ -82,19 +82,19 @@ func runStatusCmd(ctx context.Context, t *testing.T, profile string, increaseEnv } func verifyClusterState(t *testing.T, contents []byte) { - var cs cmd.ClusterState + var cs cluster.State if err := json.Unmarshal(contents, &cs); err != nil { t.Fatalf("unmarshalling: %v", err) } // verify the status looks as we expect - if cs.StatusCode != cmd.InsufficientStorage { + if cs.StatusCode != cluster.InsufficientStorage { t.Fatalf("incorrect status code: %v", cs.StatusCode) } if cs.StatusName != "InsufficientStorage" { t.Fatalf("incorrect status name: %v", cs.StatusName) } for _, n := range cs.Nodes { - if n.StatusCode != cmd.InsufficientStorage { + if n.StatusCode != cluster.InsufficientStorage { t.Fatalf("incorrect node status code: %v", cs.StatusCode) } } diff --git a/test/integration/testdata/addons_testconfig.json b/test/integration/testdata/addons_testconfig.json new file mode 100644 index 000000000000..3805b5737b2b --- /dev/null +++ b/test/integration/testdata/addons_testconfig.json @@ -0,0 +1,32 @@ + { + "addons": { + "registry-creds": { + "enableAWSEcr": "enable", + "awsEcrConfigs": { + "awsAccessID": "test_aws_accessid", + "awsAccessKey": "test_aws_accesskey", + "awsSessionToken": "test_aws_session_token", + "awsRegion": "test_aws_region", + "awsAccount": "test_aws_account", + "awsRole": "test_aws_role" + }, + "enableGCR": "enable", + "gcrConfigs": { + "gcrPath": "./testdata/gcp-creds.json", + "gcrURL": "https://gcr.io" + }, + "enableDockerRegistry": "disable", + "dockerConfigs": { + "dockerServer": "test_docker_server", + "dockerUser": "test_docker_user", + "dockerPass": "test_docker_password" + }, + "enableACR": "disable", + "acrConfigs": { + "acrURL": "test_acr_url", + "acrClientID": "test_acr_clientid", + "acrPassword": "test_acr_password" + } + } + } + } diff --git a/test/integration/testdata/build/Dockerfile b/test/integration/testdata/build/Dockerfile index dfe60cebfaa8..f37a113ccc6b 100644 --- a/test/integration/testdata/build/Dockerfile +++ b/test/integration/testdata/build/Dockerfile @@ -1,3 +1,3 @@ -FROM busybox +FROM gcr.io/k8s-minikube/busybox RUN true ADD content.txt / diff --git a/test/integration/testdata/busybox-mount-test.yaml b/test/integration/testdata/busybox-mount-test.yaml index 787c0797bd21..ac14f4b71c92 100644 --- a/test/integration/testdata/busybox-mount-test.yaml +++ b/test/integration/testdata/busybox-mount-test.yaml @@ -9,7 +9,7 @@ spec: restartPolicy: Never containers: - name: mount-munger - image: busybox:1.28.4-glibc + image: gcr.io/k8s-minikube/busybox:1.28.4-glibc command: ["/bin/sh", "-c", "--"] args: - cat /mount-9p/created-by-test; diff --git a/test/integration/testdata/busybox.yaml b/test/integration/testdata/busybox.yaml index b057afe0b765..ed163828b769 100644 --- a/test/integration/testdata/busybox.yaml +++ b/test/integration/testdata/busybox.yaml @@ -6,7 +6,7 @@ metadata: integration-test: busybox spec: containers: - - image: busybox:1.28.4-glibc + - image: gcr.io/k8s-minikube/busybox:1.28.4-glibc command: - sleep - "3600" diff --git a/test/integration/testdata/csi-hostpath-driver/pv-pod-restore.yaml b/test/integration/testdata/csi-hostpath-driver/pv-pod-restore.yaml index 6a544d18d3df..f8f6815c4304 100644 --- a/test/integration/testdata/csi-hostpath-driver/pv-pod-restore.yaml +++ b/test/integration/testdata/csi-hostpath-driver/pv-pod-restore.yaml @@ -11,7 +11,7 @@ spec: claimName: hpvc-restore containers: - name: task-pv-container - image: nginx + image: public.ecr.aws/nginx/nginx:alpine ports: - containerPort: 80 name: "http-server" diff --git a/test/integration/testdata/csi-hostpath-driver/pv-pod.yaml b/test/integration/testdata/csi-hostpath-driver/pv-pod.yaml index 62df9996477c..de87a66739de 100644 --- a/test/integration/testdata/csi-hostpath-driver/pv-pod.yaml +++ b/test/integration/testdata/csi-hostpath-driver/pv-pod.yaml @@ -11,7 +11,7 @@ spec: claimName: hpvc containers: - name: task-pv-container - image: nginx + image: public.ecr.aws/nginx/nginx:alpine ports: - containerPort: 80 name: "http-server" diff --git a/test/integration/testdata/docker-env/Dockerfile b/test/integration/testdata/docker-env/Dockerfile new file mode 100644 index 000000000000..b5e77a7d5190 --- /dev/null +++ b/test/integration/testdata/docker-env/Dockerfile @@ -0,0 +1,3 @@ +FROM alpine:latest + +CMD [ "/bin/bash" ] \ No newline at end of file diff --git a/test/integration/testdata/etcd.yaml b/test/integration/testdata/etcd.yaml index b89177a24d77..8204e87ba2a5 100644 --- a/test/integration/testdata/etcd.yaml +++ b/test/integration/testdata/etcd.yaml @@ -1,3 +1,5 @@ +# ref: https://operatorhub.io/install/etcd.yaml + apiVersion: v1 kind: Namespace metadata: @@ -12,13 +14,28 @@ spec: targetNamespaces: - my-etcd --- +# # etcd v0.9.4 uses 'apiVersion: apiextensions.k8s.io/v1beta1' deprecated in k8s v1.22+ +# # ref: https://github.com/k8s-operatorhub/community-operators/blob/834fa9b5a58f75fbf1ae2ed5e37db2efe1cab483/operators/etcd/0.9.4/etcdclusters.etcd.database.coreos.com.crd.yaml#L1 +# # keep it disabled until updated and temporary use the 'cluster-manager' below instead +# apiVersion: operators.coreos.com/v1alpha1 +# kind: Subscription +# metadata: +# name: my-etcd +# namespace: my-etcd +# spec: +# channel: singlenamespace-alpha +# name: etcd +# source: operatorhubio-catalog +# sourceNamespace: olm +# --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: - name: my-etcd + name: cluster-manager namespace: my-etcd spec: - channel: singlenamespace-alpha - name: etcd + channel: stable + name: cluster-manager source: operatorhubio-catalog sourceNamespace: olm + installPlanApproval: Automatic diff --git a/test/integration/testdata/gvisor-addon-Dockerfile b/test/integration/testdata/gvisor-addon-Dockerfile index 3a0a7853f80d..5d79a30fdae8 100644 --- a/test/integration/testdata/gvisor-addon-Dockerfile +++ b/test/integration/testdata/gvisor-addon-Dockerfile @@ -12,9 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM ubuntu:18.04 -RUN apt-get update && \ - apt-get install -y kmod gcc wget xz-utils libc6-dev bc libelf-dev bison flex openssl libssl-dev libidn2-0 sudo libcap2 && \ - rm -rf /var/lib/apt/lists/* +# Need an image with chroot +FROM alpine:3 +RUN apk -U add ca-certificates COPY gvisor-addon /gvisor-addon CMD ["/gvisor-addon"] diff --git a/test/integration/testdata/ha/ha-pod-dns-test.yaml b/test/integration/testdata/ha/ha-pod-dns-test.yaml new file mode 100644 index 000000000000..12eaf9c410be --- /dev/null +++ b/test/integration/testdata/ha/ha-pod-dns-test.yaml @@ -0,0 +1,38 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: busybox + labels: + app: busybox +spec: + replicas: 3 + selector: + matchLabels: + app: busybox + template: + metadata: + labels: + app: busybox + spec: + containers: + - name: busybox + # flaky nslookup in busybox versions newer than 1.28: + # https://github.com/docker-library/busybox/issues/48 + # note: registry.k8s.io/e2e-test-images/agnhost:2.32 + # has similar issues (ie, resolves but returns exit code 1) + image: gcr.io/k8s-minikube/busybox:1.28 + command: + - sleep + - "3600" + imagePullPolicy: IfNotPresent + securityContext: + capabilities: + add: ["NET_RAW"] + restartPolicy: Always + affinity: + # ⬇⬇⬇ This ensures pods will land on separate hosts + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: [{ key: app, operator: In, values: [busybox] }] + topologyKey: "kubernetes.io/hostname" diff --git a/test/integration/testdata/image-build/test-arg/Dockerfile b/test/integration/testdata/image-build/test-arg/Dockerfile new file mode 100644 index 000000000000..53167441fa3f --- /dev/null +++ b/test/integration/testdata/image-build/test-arg/Dockerfile @@ -0,0 +1,5 @@ +FROM registry.k8s.io/alpine-with-bash:1.0 +ARG ENV_A +ARG ENV_B +RUN echo "test-build-arg" $ENV_A $ENV_B +CMD ["/bin/sh", "-c"] diff --git a/test/integration/testdata/image-build/test-env/Dockerfile b/test/integration/testdata/image-build/test-env/Dockerfile new file mode 100644 index 000000000000..31b3f76c188f --- /dev/null +++ b/test/integration/testdata/image-build/test-env/Dockerfile @@ -0,0 +1,4 @@ +FROM registry.k8s.io/alpine-with-bash:1.0 +ARG AAA +RUN echo "test-build-arg" $AAA +CMD ["/bin/sh", "-c"] diff --git a/test/integration/testdata/image-build/test-f/inner/Dockerfile b/test/integration/testdata/image-build/test-f/inner/Dockerfile new file mode 100644 index 000000000000..0a09fbd8e157 --- /dev/null +++ b/test/integration/testdata/image-build/test-f/inner/Dockerfile @@ -0,0 +1,3 @@ +FROM registry.k8s.io/alpine-with-bash:1.0 + +CMD ["/bin/sh", "-c"] diff --git a/test/integration/testdata/image-build/test-ignore/.dockerignore b/test/integration/testdata/image-build/test-ignore/.dockerignore new file mode 100644 index 000000000000..1d1fe94df492 --- /dev/null +++ b/test/integration/testdata/image-build/test-ignore/.dockerignore @@ -0,0 +1 @@ +Dockerfile \ No newline at end of file diff --git a/test/integration/testdata/image-build/test-ignore/Dockerfile b/test/integration/testdata/image-build/test-ignore/Dockerfile new file mode 100644 index 000000000000..0a09fbd8e157 --- /dev/null +++ b/test/integration/testdata/image-build/test-ignore/Dockerfile @@ -0,0 +1,3 @@ +FROM registry.k8s.io/alpine-with-bash:1.0 + +CMD ["/bin/sh", "-c"] diff --git a/test/integration/testdata/image-build/test-normal/Dockerfile b/test/integration/testdata/image-build/test-normal/Dockerfile new file mode 100644 index 000000000000..0a09fbd8e157 --- /dev/null +++ b/test/integration/testdata/image-build/test-normal/Dockerfile @@ -0,0 +1,3 @@ +FROM registry.k8s.io/alpine-with-bash:1.0 + +CMD ["/bin/sh", "-c"] diff --git a/test/integration/testdata/inaccel.yaml b/test/integration/testdata/inaccel.yaml new file mode 100644 index 000000000000..c50a26a26545 --- /dev/null +++ b/test/integration/testdata/inaccel.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Pod +metadata: + annotations: + inaccel/cli: | + bitstream install https://store.inaccel.com/artifactory/bitstreams/xilinx/aws-vu9p-f1/dynamic-shell/aws/vector/1/1addition + labels: + inaccel/fpga: enabled + name: inaccel-vadd +spec: + containers: + - image: docker.io/inaccel/vadd + name: inaccel-vadd + resources: + limits: + xilinx/aws-vu9p-f1: 1 + nodeSelector: + xilinx/aws-vu9p-f1: dynamic-shell + restartPolicy: Never diff --git a/test/integration/testdata/ingress-dns-example-v1.yaml b/test/integration/testdata/ingress-dns-example-v1.yaml new file mode 100644 index 000000000000..10b3d44d224c --- /dev/null +++ b/test/integration/testdata/ingress-dns-example-v1.yaml @@ -0,0 +1,87 @@ +# Copyright 2021 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hello-world-app + namespace: default +spec: + selector: + matchLabels: + app: hello-world-app + template: + metadata: + labels: + app: hello-world-app + spec: + containers: + - name: hello-world-app + image: docker.io/kicbase/echo-server:1.0 + ports: + - containerPort: 8080 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: example-ingress + namespace: kube-system +spec: + ingressClassName: nginx + rules: + - host: hello-john.test + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: hello-world-app + port: + number: 80 + - host: hello-jane.test + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: hello-world-app + port: + number: 80 +--- +apiVersion: v1 +kind: Service +metadata: + name: hello-world-app + namespace: kube-system +spec: + type: ExternalName + externalName: hello-world-app.default.svc.cluster.local +--- +apiVersion: v1 +kind: Service +metadata: + name: hello-world-app + namespace: default +spec: + ports: + - name: http + port: 80 + targetPort: 8080 + protocol: TCP + type: NodePort + selector: + app: hello-world-app diff --git a/test/integration/testdata/ingress-dns-example-v1beta1.yaml b/test/integration/testdata/ingress-dns-example-v1beta1.yaml new file mode 100644 index 000000000000..8409a8442061 --- /dev/null +++ b/test/integration/testdata/ingress-dns-example-v1beta1.yaml @@ -0,0 +1,85 @@ +# Copyright 2021 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hello-world-app + namespace: default +spec: + selector: + matchLabels: + app: hello-world-app + template: + metadata: + labels: + app: hello-world-app + spec: + containers: + - name: hello-world-app + image: docker.io/kicbase/echo-server:1.0 + ports: + - containerPort: 8080 +--- +apiVersion: networking.k8s.io/v1beta1 +kind: Ingress +metadata: + name: example-ingress + namespace: kube-system + annotations: + # needed for k8s < v1.18: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#deprecating-the-ingress-class-annotation + kubernetes.io/ingress.class: nginx +spec: + rules: + - host: hello-john.test + http: + paths: + - path: / + pathType: Prefix + backend: + serviceName: hello-world-app + servicePort: 80 + - host: hello-jane.test + http: + paths: + - path: / + pathType: Prefix + backend: + serviceName: hello-world-app + servicePort: 80 +--- +apiVersion: v1 +kind: Service +metadata: + name: hello-world-app + namespace: kube-system +spec: + type: ExternalName + externalName: hello-world-app.default.svc.cluster.local +--- +apiVersion: v1 +kind: Service +metadata: + name: hello-world-app + namespace: default +spec: + ports: + - name: http + port: 80 + targetPort: 8080 + protocol: TCP + type: NodePort + selector: + app: hello-world-app diff --git a/test/integration/testdata/invalidsvc.yaml b/test/integration/testdata/invalidsvc.yaml new file mode 100644 index 000000000000..c54de8b62eca --- /dev/null +++ b/test/integration/testdata/invalidsvc.yaml @@ -0,0 +1,31 @@ +apiVersion: v1 +kind: Pod +metadata: + labels: + run: invalid-svc + name: invalid-svc + namespace: default +spec: + containers: + - name: nginx + image: nonexistingimage:latest + ports: + - containerPort: 80 + protocol: TCP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + run: invalid-svc + name: invalid-svc + namespace: default +spec: + ports: + - port: 80 + protocol: TCP + targetPort: 80 + selector: + run: invalid-svc + sessionAffinity: None + type: NodePort diff --git a/test/integration/testdata/kube-flannel.yaml b/test/integration/testdata/kube-flannel.yaml new file mode 100644 index 000000000000..8be58b54580d --- /dev/null +++ b/test/integration/testdata/kube-flannel.yaml @@ -0,0 +1,216 @@ +# From Flannel Repo +# https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml +apiVersion: v1 +kind: Namespace +metadata: + labels: + k8s-app: flannel + pod-security.kubernetes.io/enforce: privileged + name: kube-flannel +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + k8s-app: flannel + name: flannel + namespace: kube-flannel +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + k8s-app: flannel + name: flannel +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get +- apiGroups: + - "" + resources: + - nodes + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - nodes/status + verbs: + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + k8s-app: flannel + name: flannel +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: flannel +subjects: +- kind: ServiceAccount + name: flannel + namespace: kube-flannel +--- +apiVersion: v1 +data: + cni-conf.json: | + { + "name": "cbr0", + "cniVersion": "0.3.1", + "plugins": [ + { + "type": "flannel", + "delegate": { + "hairpinMode": true, + "isDefaultGateway": true + } + }, + { + "type": "portmap", + "capabilities": { + "portMappings": true + } + } + ] + } + net-conf.json: | + { + "Network": "10.244.0.0/16", + "EnableNFTables": false, + "Backend": { + "Type": "vxlan" + } + } +kind: ConfigMap +metadata: + labels: + app: flannel + k8s-app: flannel + tier: node + name: kube-flannel-cfg + namespace: kube-flannel +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + labels: + app: flannel + k8s-app: flannel + tier: node + name: kube-flannel-ds + namespace: kube-flannel +spec: + selector: + matchLabels: + app: flannel + k8s-app: flannel + template: + metadata: + labels: + app: flannel + k8s-app: flannel + tier: node + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + containers: + - args: + - --ip-masq + - --kube-subnet-mgr + command: + - /opt/bin/flanneld + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EVENT_QUEUE_DEPTH + value: "5000" + - name: CONT_WHEN_CACHE_NOT_READY + value: "false" + image: ghcr.io/flannel-io/flannel:v0.27.4 + name: kube-flannel + resources: + requests: + cpu: 100m + memory: 50Mi + securityContext: + capabilities: + add: + - NET_ADMIN + - NET_RAW + privileged: false + volumeMounts: + - mountPath: /run/flannel + name: run + - mountPath: /etc/kube-flannel/ + name: flannel-cfg + - mountPath: /run/xtables.lock + name: xtables-lock + hostNetwork: true + initContainers: + - args: + - -f + - /flannel + - /opt/cni/bin/flannel + command: + - cp + image: ghcr.io/flannel-io/flannel-cni-plugin:v1.8.0-flannel1 + name: install-cni-plugin + volumeMounts: + - mountPath: /opt/cni/bin + name: cni-plugin + - args: + - -f + - /etc/kube-flannel/cni-conf.json + - /etc/cni/net.d/10-flannel.conflist + command: + - cp + image: ghcr.io/flannel-io/flannel:v0.27.4 + name: install-cni + volumeMounts: + - mountPath: /etc/cni/net.d + name: cni + - mountPath: /etc/kube-flannel/ + name: flannel-cfg + priorityClassName: system-node-critical + serviceAccountName: flannel + tolerations: + - effect: NoSchedule + operator: Exists + volumes: + - hostPath: + path: /run/flannel + name: run + - hostPath: + path: /opt/cni/bin + name: cni-plugin + - hostPath: + path: /etc/cni/net.d + name: cni + - configMap: + name: kube-flannel-cfg + name: flannel-cfg + - hostPath: + path: /run/xtables.lock + type: FileOrCreate + name: xtables-lock diff --git a/test/integration/testdata/kvm2-driver-without-version/docker-machine-driver-kvm2 b/test/integration/testdata/kvm2-driver-without-version/docker-machine-driver-kvm2 deleted file mode 100755 index 0ce3916bd7aa..000000000000 Binary files a/test/integration/testdata/kvm2-driver-without-version/docker-machine-driver-kvm2 and /dev/null differ diff --git a/test/integration/testdata/multinodes/multinode-pod-dns-test.yaml b/test/integration/testdata/multinodes/multinode-pod-dns-test.yaml index f23beb07395e..305ab63a3ba7 100644 --- a/test/integration/testdata/multinodes/multinode-pod-dns-test.yaml +++ b/test/integration/testdata/multinodes/multinode-pod-dns-test.yaml @@ -18,13 +18,16 @@ spec: - name: busybox # flaky nslookup in busybox versions newer than 1.28: # https://github.com/docker-library/busybox/issues/48 - # note: gcr.io/kubernetes-e2e-test-images/dnsutils:1.3 + # note: registry.k8s.io/e2e-test-images/agnhost:2.32 # has similar issues (ie, resolves but returns exit code 1) - image: busybox:1.28 + image: gcr.io/k8s-minikube/busybox:1.28 command: - sleep - "3600" imagePullPolicy: IfNotPresent + securityContext: + capabilities: + add: ["NET_RAW"] restartPolicy: Always affinity: # ⬇⬇⬇ This ensures pods will land on separate hosts diff --git a/test/integration/testdata/mysql.yaml b/test/integration/testdata/mysql.yaml index 986430cc768f..1f936e4885e3 100644 --- a/test/integration/testdata/mysql.yaml +++ b/test/integration/testdata/mysql.yaml @@ -24,7 +24,7 @@ spec: app: mysql spec: containers: - - image: mysql:5.7 + - image: public.ecr.aws/docker/library/mysql:8.4 name: mysql resources: requests: diff --git a/test/integration/testdata/netcat-deployment-nomaster.yaml b/test/integration/testdata/netcat-deployment-nomaster.yaml index 7c16d83c4380..607c65af12c7 100644 --- a/test/integration/testdata/netcat-deployment-nomaster.yaml +++ b/test/integration/testdata/netcat-deployment-nomaster.yaml @@ -17,7 +17,8 @@ spec: containers: # dnsutils is easier to debug DNS issues with than the standard busybox image - name: dnsutils - image: gcr.io/kubernetes-e2e-test-images/dnsutils + # https://github.com/kubernetes/kubernetes/blob/master/test/images/agnhost/README.md + image: registry.k8s.io/e2e-test-images/agnhost:2.40 command: ["/bin/sh", "-c", "while true; do echo hello | nc -l -p 8080; done"] affinity: diff --git a/test/integration/testdata/netcat-deployment.yaml b/test/integration/testdata/netcat-deployment.yaml index 6b0d85a6c462..dd1e1a0c439b 100644 --- a/test/integration/testdata/netcat-deployment.yaml +++ b/test/integration/testdata/netcat-deployment.yaml @@ -17,7 +17,9 @@ spec: containers: # dnsutils is easier to debug DNS issues with than the standard busybox image - name: dnsutils - image: gcr.io/kubernetes-e2e-test-images/dnsutils:1.3 + # https://github.com/kubernetes/kubernetes/blob/master/test/images/agnhost/README.md + image: registry.k8s.io/e2e-test-images/agnhost:2.40 + imagePullPolicy: IfNotPresent command: ["/bin/sh", "-c", "while true; do echo hello | nc -l -p 8080; done"] --- diff --git a/test/integration/testdata/nginx-gvisor.yaml b/test/integration/testdata/nginx-gvisor.yaml index bc7550703d52..afb46278cc08 100644 --- a/test/integration/testdata/nginx-gvisor.yaml +++ b/test/integration/testdata/nginx-gvisor.yaml @@ -9,4 +9,4 @@ spec: runtimeClassName: gvisor containers: - name: nginx - image: nginx + image: public.ecr.aws/nginx/nginx:alpine diff --git a/deploy/addons/helm-tiller/helm-tiller-svc.tmpl b/test/integration/testdata/nginx-ingress-v1.yaml similarity index 60% rename from deploy/addons/helm-tiller/helm-tiller-svc.tmpl rename to test/integration/testdata/nginx-ingress-v1.yaml index b115b284fa07..0db2ad22861b 100644 --- a/deploy/addons/helm-tiller/helm-tiller-svc.tmpl +++ b/test/integration/testdata/nginx-ingress-v1.yaml @@ -1,4 +1,4 @@ -# Copyright 2019 The Kubernetes Authors. +# Copyright 2022 The Kubernetes Authors All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,23 +12,21 @@ # See the License for the specific language governing permissions and # limitations under the License. -apiVersion: v1 -kind: Service +apiVersion: networking.k8s.io/v1 +kind: Ingress metadata: + name: nginx-ingress labels: - app: helm - name: tiller - addonmanager.kubernetes.io/mode: Reconcile - kubernetes.io/minikube-addons: helm - name: tiller-deploy - namespace: kube-system + integration-test: ingress spec: - type: ClusterIP - ports: - - name: tiller - port: 44134 - protocol: TCP - targetPort: tiller - selector: - app: helm - name: tiller \ No newline at end of file + rules: + - host: nginx.example.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: nginx + port: + number: 80 diff --git a/test/integration/testdata/nginx-ingress-v1beta1.yaml b/test/integration/testdata/nginx-ingress-v1beta1.yaml new file mode 100644 index 000000000000..12ebaa764d97 --- /dev/null +++ b/test/integration/testdata/nginx-ingress-v1beta1.yaml @@ -0,0 +1,33 @@ +# Copyright 2022 The Kubernetes Authors All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: networking.k8s.io/v1beta1 +kind: Ingress +metadata: + name: nginx-ingress + annotations: + # needed for k8s < v1.18: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#deprecating-the-ingress-class-annotation + kubernetes.io/ingress.class: nginx + labels: + integration-test: ingress +spec: + rules: + - host: nginx.example.com + http: + paths: + - path: / + pathType: Prefix + backend: + serviceName: nginx + servicePort: 80 diff --git a/test/integration/testdata/nginx-ingv1.yaml b/test/integration/testdata/nginx-ingv1.yaml deleted file mode 100644 index 03663248ea7b..000000000000 --- a/test/integration/testdata/nginx-ingv1.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: nginx-ingress - annotations: - kubernetes.io/ingress.class: "nginx" - labels: - integration-test: ingress -spec: - rules: - - host: nginx.example.com - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: nginx - port: - number: 80 \ No newline at end of file diff --git a/test/integration/testdata/nginx-ingv1beta.yaml b/test/integration/testdata/nginx-ingv1beta.yaml deleted file mode 100644 index a714737080fb..000000000000 --- a/test/integration/testdata/nginx-ingv1beta.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: networking.k8s.io/v1beta1 -kind: Ingress -metadata: - name: nginx-ingress - annotations: - kubernetes.io/ingress.class: "nginx" - labels: - integration-test: ingress -spec: - rules: - - host: nginx.example.com - http: - paths: - - path: "/" - backend: - serviceName: nginx - servicePort: 80 \ No newline at end of file diff --git a/test/integration/testdata/nginx-pod-svc.yaml b/test/integration/testdata/nginx-pod-svc.yaml index 67782f275c3c..f0cc2f41a6f2 100644 --- a/test/integration/testdata/nginx-pod-svc.yaml +++ b/test/integration/testdata/nginx-pod-svc.yaml @@ -8,7 +8,7 @@ metadata: spec: containers: - name: nginx - image: nginx:alpine + image: public.ecr.aws/nginx/nginx:alpine ports: - containerPort: 80 protocol: TCP diff --git a/test/integration/testdata/nginx-untrusted.yaml b/test/integration/testdata/nginx-untrusted.yaml deleted file mode 100644 index 5559bf476048..000000000000 --- a/test/integration/testdata/nginx-untrusted.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: nginx-untrusted - labels: - run: nginx - untrusted: "true" - annotations: - io.kubernetes.cri.untrusted-workload: "true" -spec: - containers: - - name: nginx - image: nginx diff --git a/test/integration/testdata/skaffold/base/Dockerfile b/test/integration/testdata/skaffold/base/Dockerfile new file mode 100644 index 000000000000..535ce0ece76b --- /dev/null +++ b/test/integration/testdata/skaffold/base/Dockerfile @@ -0,0 +1,5 @@ +FROM gcr.io/distroless/base +# Define GOTRACEBACK to mark this container as using the Go language runtime +# for `skaffold debug` (https://skaffold.dev/docs/workflows/debug/). +ENV GOTRACEBACK=single +CMD ["./app"] diff --git a/test/integration/testdata/skaffold/leeroy-app/Dockerfile b/test/integration/testdata/skaffold/leeroy-app/Dockerfile index 940c5e989b55..6d57aae2561f 100644 --- a/test/integration/testdata/skaffold/leeroy-app/Dockerfile +++ b/test/integration/testdata/skaffold/leeroy-app/Dockerfile @@ -1,10 +1,11 @@ -FROM golang:1.12.9-alpine3.10 as builder +ARG BASE +FROM golang:1.18 as builder +WORKDIR /code COPY app.go . -RUN go build -o /app . +COPY go.mod . +# `skaffold debug` sets SKAFFOLD_GO_GCFLAGS to disable compiler optimizations +ARG SKAFFOLD_GO_GCFLAGS +RUN go build -gcflags="${SKAFFOLD_GO_GCFLAGS}" -trimpath -o /app . -FROM alpine:3.10 -# Define GOTRACEBACK to mark this container as using the Go language runtime -# for `skaffold debug` (https://skaffold.dev/docs/workflows/debug/). -ENV GOTRACEBACK=single -CMD ["./app"] +FROM $BASE COPY --from=builder /app . diff --git a/test/integration/testdata/skaffold/leeroy-app/go.mod b/test/integration/testdata/skaffold/leeroy-app/go.mod new file mode 100644 index 000000000000..0805e1627846 --- /dev/null +++ b/test/integration/testdata/skaffold/leeroy-app/go.mod @@ -0,0 +1,3 @@ +module github.com/GoogleContainerTools/skaffold/examples/microservices/leeroy-app + +go 1.18 diff --git a/test/integration/testdata/skaffold/leeroy-app/kubernetes/deployment.yaml b/test/integration/testdata/skaffold/leeroy-app/kubernetes/deployment.yaml index f416632e9ac9..2496d531fb2d 100644 --- a/test/integration/testdata/skaffold/leeroy-app/kubernetes/deployment.yaml +++ b/test/integration/testdata/skaffold/leeroy-app/kubernetes/deployment.yaml @@ -33,3 +33,4 @@ spec: image: leeroy-app ports: - containerPort: 50051 + name: http diff --git a/test/integration/testdata/skaffold/leeroy-web/Dockerfile b/test/integration/testdata/skaffold/leeroy-web/Dockerfile index ce5773cc31c4..83e4a2e28506 100644 --- a/test/integration/testdata/skaffold/leeroy-web/Dockerfile +++ b/test/integration/testdata/skaffold/leeroy-web/Dockerfile @@ -1,10 +1,11 @@ -FROM golang:1.12.9-alpine3.10 as builder +ARG BASE +FROM golang:1.18 as builder +WORKDIR /code COPY web.go . -RUN go build -o /web . +COPY go.mod . +# `skaffold debug` sets SKAFFOLD_GO_GCFLAGS to disable compiler optimizations +ARG SKAFFOLD_GO_GCFLAGS +RUN go build -gcflags="${SKAFFOLD_GO_GCFLAGS}" -trimpath -o /app . -FROM alpine:3.10 -# Define GOTRACEBACK to mark this container as using the Go language runtime -# for `skaffold debug` (https://skaffold.dev/docs/workflows/debug/). -ENV GOTRACEBACK=single -CMD ["./web"] -COPY --from=builder /web . +FROM $BASE +COPY --from=builder /app . diff --git a/test/integration/testdata/skaffold/leeroy-web/go.mod b/test/integration/testdata/skaffold/leeroy-web/go.mod new file mode 100644 index 000000000000..cd5771064a91 --- /dev/null +++ b/test/integration/testdata/skaffold/leeroy-web/go.mod @@ -0,0 +1,3 @@ +module github.com/GoogleContainerTools/skaffold/examples/microservices/leeroy-web + +go 1.18 diff --git a/test/integration/testdata/skaffold/skaffold.yaml b/test/integration/testdata/skaffold/skaffold.yaml index 7370643afc0d..b410628af263 100644 --- a/test/integration/testdata/skaffold/skaffold.yaml +++ b/test/integration/testdata/skaffold/skaffold.yaml @@ -1,18 +1,33 @@ -apiVersion: skaffold/v2beta5 +apiVersion: skaffold/v4beta5 kind: Config build: artifacts: - image: leeroy-web context: leeroy-web + requires: + - image: base + alias: BASE - image: leeroy-app context: leeroy-app -deploy: - kubectl: - manifests: - - leeroy-web/kubernetes/* - - leeroy-app/kubernetes/* + requires: + - image: base + alias: BASE + - image: base + context: base +manifests: + rawYaml: + - leeroy-web/kubernetes/* + - leeroy-app/kubernetes/* portForward: - resourceType: deployment resourceName: leeroy-web port: 8080 localPort: 9000 + - resourceType: deployment + resourceName: leeroy-app + port: http + localPort: 9001 +profiles: + - name: gcb + build: + googleCloudBuild: {} diff --git a/test/integration/testdata/storage-provisioner-rancher/pod.yaml b/test/integration/testdata/storage-provisioner-rancher/pod.yaml new file mode 100644 index 000000000000..0930c37be549 --- /dev/null +++ b/test/integration/testdata/storage-provisioner-rancher/pod.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Pod +metadata: + name: test-local-path + labels: + run: test-local-path +spec: + restartPolicy: OnFailure + containers: + - name: busybox + image: busybox:stable + command: ["sh", "-c", "echo 'local-path-provisioner' > /test/file1"] + volumeMounts: + - name: data + mountPath: /test + volumes: + - name: data + persistentVolumeClaim: + claimName: test-pvc diff --git a/test/integration/testdata/storage-provisioner-rancher/pvc.yaml b/test/integration/testdata/storage-provisioner-rancher/pvc.yaml new file mode 100644 index 000000000000..d99a27189d71 --- /dev/null +++ b/test/integration/testdata/storage-provisioner-rancher/pvc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: test-pvc +spec: + storageClassName: local-path + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 64Mi diff --git a/test/integration/testdata/storage-provisioner/pod.yaml b/test/integration/testdata/storage-provisioner/pod.yaml index f2376b5f4973..14344fe9add3 100644 --- a/test/integration/testdata/storage-provisioner/pod.yaml +++ b/test/integration/testdata/storage-provisioner/pod.yaml @@ -7,7 +7,7 @@ metadata: spec: containers: - name: myfrontend - image: nginx + image: public.ecr.aws/nginx/nginx:alpine volumeMounts: - mountPath: "/tmp/mount" name: mypd diff --git a/test/integration/testdata/testsvc.yaml b/test/integration/testdata/testsvc.yaml index 6bfb64d611f8..3c6439cf9ff9 100644 --- a/test/integration/testdata/testsvc.yaml +++ b/test/integration/testdata/testsvc.yaml @@ -8,7 +8,7 @@ metadata: spec: containers: - name: nginx - image: nginx:alpine + image: public.ecr.aws/nginx/nginx:alpine ports: - containerPort: 80 protocol: TCP diff --git a/test/integration/testdata/vcjob.yaml b/test/integration/testdata/vcjob.yaml new file mode 100644 index 000000000000..796e7d05fe4d --- /dev/null +++ b/test/integration/testdata/vcjob.yaml @@ -0,0 +1,43 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: my-volcano + +--- + +apiVersion: scheduling.volcano.sh/v1beta1 +kind: Queue +metadata: + name: test + namespace: my-volcano +spec: + weight: 1 + reclaimable: false + capability: + cpu: 2 +--- + +apiVersion: batch.volcano.sh/v1alpha1 +kind: Job +metadata: + name: test-job + namespace: my-volcano +spec: + minAvailable: 1 + schedulerName: volcano + queue: test + tasks: + - replicas: 1 + name: nginx + policies: + - event: TaskCompleted + action: CompleteJob + template: + spec: + containers: + - command: + - sleep + - 10m + image: nginx:latest + name: nginx + restartPolicy: Never diff --git a/test/integration/testdata/weavenet.yaml b/test/integration/testdata/weavenet.yaml deleted file mode 100644 index 8918cf2a956f..000000000000 --- a/test/integration/testdata/weavenet.yaml +++ /dev/null @@ -1,255 +0,0 @@ -apiVersion: v1 -kind: List -items: - - apiVersion: v1 - kind: ServiceAccount - metadata: - name: weave-net - annotations: - cloud.weave.works/launcher-info: |- - { - "original-request": { - "url": "/k8s/v1.16/net.yaml?k8s-version=Q2xpZW50IFZlcnNpb246IHZlcnNpb24uSW5mb3tNYWpvcjoiMSIsIE1pbm9yOiIxOCIsIEdpdFZlcnNpb246InYxLjE4LjAiLCBHaXRDb21taXQ6IjllOTkxNDE1Mzg2ZTRjZjE1NWEyNGIxZGExNWJlY2FhMzkwNDM4ZDgiLCBHaXRUcmVlU3RhdGU6ImNsZWFuIiwgQnVpbGREYXRlOiIyMDIwLTAzLTI2VDA2OjE2OjE1WiIsIEdvVmVyc2lvbjoiZ28xLjE0IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImRhcndpbi9hbWQ2NCJ9ClNlcnZlciBWZXJzaW9uOiB2ZXJzaW9uLkluZm97TWFqb3I6IjEiLCBNaW5vcjoiMTgiLCBHaXRWZXJzaW9uOiJ2MS4xOC4zIiwgR2l0Q29tbWl0OiIyZTc5OTZlM2UyNzEyNjg0YmM3M2YwZGVjMDIwMGQ2NGVlYzdmZTQwIiwgR2l0VHJlZVN0YXRlOiJjbGVhbiIsIEJ1aWxkRGF0ZToiMjAyMC0wNS0yMFQxMjo0MzozNFoiLCBHb1ZlcnNpb246ImdvMS4xMy45IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImxpbnV4L2FtZDY0In0K", - "date": "Tue Jun 23 2020 02:18:50 GMT+0000 (UTC)" - }, - "email-address": "support@weave.works" - } - labels: - name: weave-net - namespace: kube-system - - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRole - metadata: - name: weave-net - annotations: - cloud.weave.works/launcher-info: |- - { - "original-request": { - "url": "/k8s/v1.16/net.yaml?k8s-version=Q2xpZW50IFZlcnNpb246IHZlcnNpb24uSW5mb3tNYWpvcjoiMSIsIE1pbm9yOiIxOCIsIEdpdFZlcnNpb246InYxLjE4LjAiLCBHaXRDb21taXQ6IjllOTkxNDE1Mzg2ZTRjZjE1NWEyNGIxZGExNWJlY2FhMzkwNDM4ZDgiLCBHaXRUcmVlU3RhdGU6ImNsZWFuIiwgQnVpbGREYXRlOiIyMDIwLTAzLTI2VDA2OjE2OjE1WiIsIEdvVmVyc2lvbjoiZ28xLjE0IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImRhcndpbi9hbWQ2NCJ9ClNlcnZlciBWZXJzaW9uOiB2ZXJzaW9uLkluZm97TWFqb3I6IjEiLCBNaW5vcjoiMTgiLCBHaXRWZXJzaW9uOiJ2MS4xOC4zIiwgR2l0Q29tbWl0OiIyZTc5OTZlM2UyNzEyNjg0YmM3M2YwZGVjMDIwMGQ2NGVlYzdmZTQwIiwgR2l0VHJlZVN0YXRlOiJjbGVhbiIsIEJ1aWxkRGF0ZToiMjAyMC0wNS0yMFQxMjo0MzozNFoiLCBHb1ZlcnNpb246ImdvMS4xMy45IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImxpbnV4L2FtZDY0In0K", - "date": "Tue Jun 23 2020 02:18:50 GMT+0000 (UTC)" - }, - "email-address": "support@weave.works" - } - labels: - name: weave-net - rules: - - apiGroups: - - '' - resources: - - pods - - namespaces - - nodes - verbs: - - get - - list - - watch - - apiGroups: - - networking.k8s.io - resources: - - networkpolicies - verbs: - - get - - list - - watch - - apiGroups: - - '' - resources: - - nodes/status - verbs: - - patch - - update - - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRoleBinding - metadata: - name: weave-net - annotations: - cloud.weave.works/launcher-info: |- - { - "original-request": { - "url": "/k8s/v1.16/net.yaml?k8s-version=Q2xpZW50IFZlcnNpb246IHZlcnNpb24uSW5mb3tNYWpvcjoiMSIsIE1pbm9yOiIxOCIsIEdpdFZlcnNpb246InYxLjE4LjAiLCBHaXRDb21taXQ6IjllOTkxNDE1Mzg2ZTRjZjE1NWEyNGIxZGExNWJlY2FhMzkwNDM4ZDgiLCBHaXRUcmVlU3RhdGU6ImNsZWFuIiwgQnVpbGREYXRlOiIyMDIwLTAzLTI2VDA2OjE2OjE1WiIsIEdvVmVyc2lvbjoiZ28xLjE0IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImRhcndpbi9hbWQ2NCJ9ClNlcnZlciBWZXJzaW9uOiB2ZXJzaW9uLkluZm97TWFqb3I6IjEiLCBNaW5vcjoiMTgiLCBHaXRWZXJzaW9uOiJ2MS4xOC4zIiwgR2l0Q29tbWl0OiIyZTc5OTZlM2UyNzEyNjg0YmM3M2YwZGVjMDIwMGQ2NGVlYzdmZTQwIiwgR2l0VHJlZVN0YXRlOiJjbGVhbiIsIEJ1aWxkRGF0ZToiMjAyMC0wNS0yMFQxMjo0MzozNFoiLCBHb1ZlcnNpb246ImdvMS4xMy45IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImxpbnV4L2FtZDY0In0K", - "date": "Tue Jun 23 2020 02:18:50 GMT+0000 (UTC)" - }, - "email-address": "support@weave.works" - } - labels: - name: weave-net - roleRef: - kind: ClusterRole - name: weave-net - apiGroup: rbac.authorization.k8s.io - subjects: - - kind: ServiceAccount - name: weave-net - namespace: kube-system - - apiVersion: rbac.authorization.k8s.io/v1 - kind: Role - metadata: - name: weave-net - annotations: - cloud.weave.works/launcher-info: |- - { - "original-request": { - "url": "/k8s/v1.16/net.yaml?k8s-version=Q2xpZW50IFZlcnNpb246IHZlcnNpb24uSW5mb3tNYWpvcjoiMSIsIE1pbm9yOiIxOCIsIEdpdFZlcnNpb246InYxLjE4LjAiLCBHaXRDb21taXQ6IjllOTkxNDE1Mzg2ZTRjZjE1NWEyNGIxZGExNWJlY2FhMzkwNDM4ZDgiLCBHaXRUcmVlU3RhdGU6ImNsZWFuIiwgQnVpbGREYXRlOiIyMDIwLTAzLTI2VDA2OjE2OjE1WiIsIEdvVmVyc2lvbjoiZ28xLjE0IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImRhcndpbi9hbWQ2NCJ9ClNlcnZlciBWZXJzaW9uOiB2ZXJzaW9uLkluZm97TWFqb3I6IjEiLCBNaW5vcjoiMTgiLCBHaXRWZXJzaW9uOiJ2MS4xOC4zIiwgR2l0Q29tbWl0OiIyZTc5OTZlM2UyNzEyNjg0YmM3M2YwZGVjMDIwMGQ2NGVlYzdmZTQwIiwgR2l0VHJlZVN0YXRlOiJjbGVhbiIsIEJ1aWxkRGF0ZToiMjAyMC0wNS0yMFQxMjo0MzozNFoiLCBHb1ZlcnNpb246ImdvMS4xMy45IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImxpbnV4L2FtZDY0In0K", - "date": "Tue Jun 23 2020 02:18:50 GMT+0000 (UTC)" - }, - "email-address": "support@weave.works" - } - labels: - name: weave-net - namespace: kube-system - rules: - - apiGroups: - - '' - resourceNames: - - weave-net - resources: - - configmaps - verbs: - - get - - update - - apiGroups: - - '' - resources: - - configmaps - verbs: - - create - - apiVersion: rbac.authorization.k8s.io/v1 - kind: RoleBinding - metadata: - name: weave-net - annotations: - cloud.weave.works/launcher-info: |- - { - "original-request": { - "url": "/k8s/v1.16/net.yaml?k8s-version=Q2xpZW50IFZlcnNpb246IHZlcnNpb24uSW5mb3tNYWpvcjoiMSIsIE1pbm9yOiIxOCIsIEdpdFZlcnNpb246InYxLjE4LjAiLCBHaXRDb21taXQ6IjllOTkxNDE1Mzg2ZTRjZjE1NWEyNGIxZGExNWJlY2FhMzkwNDM4ZDgiLCBHaXRUcmVlU3RhdGU6ImNsZWFuIiwgQnVpbGREYXRlOiIyMDIwLTAzLTI2VDA2OjE2OjE1WiIsIEdvVmVyc2lvbjoiZ28xLjE0IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImRhcndpbi9hbWQ2NCJ9ClNlcnZlciBWZXJzaW9uOiB2ZXJzaW9uLkluZm97TWFqb3I6IjEiLCBNaW5vcjoiMTgiLCBHaXRWZXJzaW9uOiJ2MS4xOC4zIiwgR2l0Q29tbWl0OiIyZTc5OTZlM2UyNzEyNjg0YmM3M2YwZGVjMDIwMGQ2NGVlYzdmZTQwIiwgR2l0VHJlZVN0YXRlOiJjbGVhbiIsIEJ1aWxkRGF0ZToiMjAyMC0wNS0yMFQxMjo0MzozNFoiLCBHb1ZlcnNpb246ImdvMS4xMy45IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImxpbnV4L2FtZDY0In0K", - "date": "Tue Jun 23 2020 02:18:50 GMT+0000 (UTC)" - }, - "email-address": "support@weave.works" - } - labels: - name: weave-net - namespace: kube-system - roleRef: - kind: Role - name: weave-net - apiGroup: rbac.authorization.k8s.io - subjects: - - kind: ServiceAccount - name: weave-net - namespace: kube-system - - apiVersion: apps/v1 - kind: DaemonSet - metadata: - name: weave-net - annotations: - cloud.weave.works/launcher-info: |- - { - "original-request": { - "url": "/k8s/v1.16/net.yaml?k8s-version=Q2xpZW50IFZlcnNpb246IHZlcnNpb24uSW5mb3tNYWpvcjoiMSIsIE1pbm9yOiIxOCIsIEdpdFZlcnNpb246InYxLjE4LjAiLCBHaXRDb21taXQ6IjllOTkxNDE1Mzg2ZTRjZjE1NWEyNGIxZGExNWJlY2FhMzkwNDM4ZDgiLCBHaXRUcmVlU3RhdGU6ImNsZWFuIiwgQnVpbGREYXRlOiIyMDIwLTAzLTI2VDA2OjE2OjE1WiIsIEdvVmVyc2lvbjoiZ28xLjE0IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImRhcndpbi9hbWQ2NCJ9ClNlcnZlciBWZXJzaW9uOiB2ZXJzaW9uLkluZm97TWFqb3I6IjEiLCBNaW5vcjoiMTgiLCBHaXRWZXJzaW9uOiJ2MS4xOC4zIiwgR2l0Q29tbWl0OiIyZTc5OTZlM2UyNzEyNjg0YmM3M2YwZGVjMDIwMGQ2NGVlYzdmZTQwIiwgR2l0VHJlZVN0YXRlOiJjbGVhbiIsIEJ1aWxkRGF0ZToiMjAyMC0wNS0yMFQxMjo0MzozNFoiLCBHb1ZlcnNpb246ImdvMS4xMy45IiwgQ29tcGlsZXI6ImdjIiwgUGxhdGZvcm06ImxpbnV4L2FtZDY0In0K", - "date": "Tue Jun 23 2020 02:18:50 GMT+0000 (UTC)" - }, - "email-address": "support@weave.works" - } - labels: - name: weave-net - namespace: kube-system - spec: - minReadySeconds: 5 - selector: - matchLabels: - name: weave-net - template: - metadata: - labels: - name: weave-net - spec: - containers: - - name: weave - command: - - /home/weave/launch.sh - env: - - name: HOSTNAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - image: 'docker.io/weaveworks/weave-kube:2.6.5' - readinessProbe: - httpGet: - host: 127.0.0.1 - path: /status - port: 6784 - resources: - requests: - cpu: 10m - securityContext: - privileged: true - volumeMounts: - - name: weavedb - mountPath: /weavedb - - name: cni-bin - mountPath: /host/opt - - name: cni-bin2 - mountPath: /host/home - - name: cni-conf - mountPath: /host/etc - - name: dbus - mountPath: /host/var/lib/dbus - - name: lib-modules - mountPath: /lib/modules - - name: xtables-lock - mountPath: /run/xtables.lock - - name: weave-npc - env: - - name: HOSTNAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - image: 'docker.io/weaveworks/weave-npc:2.6.5' - resources: - requests: - cpu: 10m - securityContext: - privileged: true - volumeMounts: - - name: xtables-lock - mountPath: /run/xtables.lock - dnsPolicy: ClusterFirstWithHostNet - hostNetwork: true - hostPID: true - priorityClassName: system-node-critical - restartPolicy: Always - securityContext: - seLinuxOptions: {} - serviceAccountName: weave-net - tolerations: - - effect: NoSchedule - operator: Exists - - effect: NoExecute - operator: Exists - volumes: - - name: weavedb - hostPath: - path: /var/lib/weave - - name: cni-bin - hostPath: - path: /opt - - name: cni-bin2 - hostPath: - path: /home - - name: cni-conf - hostPath: - path: /etc - - name: dbus - hostPath: - path: /var/lib/dbus - - name: lib-modules - hostPath: - path: /lib/modules - - name: xtables-lock - hostPath: - path: /run/xtables.lock - type: FileOrCreate - updateStrategy: - type: RollingUpdate diff --git a/test/integration/util_test.go b/test/integration/util_test.go index c5d3094a3681..6b872ef50c74 100644 --- a/test/integration/util_test.go +++ b/test/integration/util_test.go @@ -34,8 +34,8 @@ func UniqueProfileName(prefix string) string { if NoneDriver() { return "minikube" } - // example: prefix-20200413162239-3215 - return fmt.Sprintf("%s-%s-%d", prefix, time.Now().Format("20060102150405"), os.Getpid()) + // example: prefix-162239 + return fmt.Sprintf("%s-%s", prefix, fmt.Sprintf("%06d", time.Now().UnixNano()%1000000)) } // auditContains checks if the provided string is contained within the logs. @@ -52,5 +52,5 @@ func auditContains(substr string) (bool, error) { return true, nil } } - return false, nil + return false, s.Err() } diff --git a/test/integration/version_upgrade_test.go b/test/integration/version_upgrade_test.go index 27311475fb9c..20fead075845 100644 --- a/test/integration/version_upgrade_test.go +++ b/test/integration/version_upgrade_test.go @@ -20,7 +20,6 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" "os" "os/exec" "runtime" @@ -37,7 +36,12 @@ import ( ) func installRelease(version string) (f *os.File, err error) { - tf, err := ioutil.TempFile("", fmt.Sprintf("minikube-%s.*.exe", version)) + ext := "" + if runtime.GOOS == "windows" { + ext = ".exe" + } + + tf, err := os.CreateTemp("", fmt.Sprintf("minikube-%s.*%s", version, ext)) if err != nil { return tf, err } @@ -58,23 +62,11 @@ func installRelease(version string) (f *os.File, err error) { return tf, nil } -func legacyVersion() string { +func legacyMinikubeVersion() string { // Should be a version from the last 6 months - version := "v1.6.2" - if KicDriver() { - if arm64Platform() { - // arm64 KIC driver is supported starting from v1.17.0 - version = "v1.17.0" - } else { - // v1.8.0 would be selected, but: https://github.com/kubernetes/minikube/issues/8740 - version = "v1.9.0" - } - } - // the version containerd in ISO was upgraded to 1.4.2 - // we need it to use runc.v2 plugin - if ContainerRuntime() == "containerd" { - version = "v1.16.0" - } + // note: Test*BinaryUpgrade require minikube v1.22+ to satisfy newer containerd config structure + // note: TestMissingContainerUpgrade requires minikube v1.26.0+ where we copy over initial containerd config in kicbase via deploy/kicbase/Dockerfile + version := "v1.35.0" // Jan 15, 2025 return version } @@ -85,7 +77,7 @@ func legacyStartArgs() []string { // TestRunningBinaryUpgrade upgrades a running legacy cluster to minikube at HEAD func TestRunningBinaryUpgrade(t *testing.T) { - // not supported till v1.10, and passing new images to old releases isn't supported anyways + // passing new images to old releases isn't supported anyways if TestingKicBaseImage() { t.Skipf("Skipping, test does not make sense with --base-image") } @@ -96,20 +88,20 @@ func TestRunningBinaryUpgrade(t *testing.T) { defer CleanupWithLogs(t, profile, cancel) - desiredLegacyVersion := legacyVersion() + desiredLegacyVersion := legacyMinikubeVersion() tf, err := installRelease(desiredLegacyVersion) if err != nil { t.Fatalf("%s release installation failed: %v", desiredLegacyVersion, err) } defer os.Remove(tf.Name()) - args := append([]string{"start", "-p", profile, "--memory=2200"}, legacyStartArgs()...) + args := append([]string{"start", "-p", profile, "--memory=3072"}, legacyStartArgs()...) rr := &RunResult{} r := func() error { c := exec.CommandContext(ctx, tf.Name(), args...) var legacyEnv []string // replace the global KUBECONFIG with a fresh kubeconfig - // because for minikube<1.17.0 it can not read the new kubeconfigs that have extra "Extenions" block + // because for minikube<1.17.0 it can not read the new kubeconfigs that have extra "Extensions" block // see: https://github.com/kubernetes/minikube/issues/10210 for _, e := range os.Environ() { if !strings.Contains(e, "KUBECONFIG") { // get all global envs except the Kubeconfig which is used by new versions of minikubes @@ -117,12 +109,12 @@ func TestRunningBinaryUpgrade(t *testing.T) { } } // using a fresh kubeconfig for this test - legacyKubeConfig, err := ioutil.TempFile("", "legacy_kubeconfig") + legacyKubeConfig, err := os.CreateTemp("", "legacy_kubeconfig") if err != nil { t.Fatalf("failed to create temp file for legacy kubeconfig %v", err) } - defer os.Remove(legacyKubeConfig.Name()) // clean up + legacyEnv = append(legacyEnv, fmt.Sprintf("KUBECONFIG=%s", legacyKubeConfig.Name())) c.Env = legacyEnv rr, err = Run(t, c) @@ -134,7 +126,7 @@ func TestRunningBinaryUpgrade(t *testing.T) { t.Fatalf("legacy %s start failed: %v", desiredLegacyVersion, err) } - args = append([]string{"start", "-p", profile, "--memory=2200", "--alsologtostderr", "-v=1"}, StartArgs()...) + args = append([]string{"start", "-p", profile, "--memory=3072", "--alsologtostderr", "-v=1"}, StartArgs()...) rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Fatalf("upgrade from %s to HEAD failed: %s: %v", desiredLegacyVersion, rr.Command(), err) @@ -154,58 +146,64 @@ func TestStoppedBinaryUpgrade(t *testing.T) { defer CleanupWithLogs(t, profile, cancel) - desiredLegacyVersion := legacyVersion() - tf, err := installRelease(desiredLegacyVersion) - if err != nil { - t.Fatalf("%s release installation failed: %v", desiredLegacyVersion, err) - } + desiredLegacyVersion := legacyMinikubeVersion() + var tf *os.File + t.Run("Setup", func(t *testing.T) { + var err error + tf, err = installRelease(desiredLegacyVersion) + if err != nil { + t.Fatalf("%s release installation failed: %v", desiredLegacyVersion, err) + } + }) defer os.Remove(tf.Name()) - args := append([]string{"start", "-p", profile, "--memory=2200"}, legacyStartArgs()...) - rr := &RunResult{} - r := func() error { - c := exec.CommandContext(ctx, tf.Name(), args...) - var legacyEnv []string - // replace the global KUBECONFIG with a fresh kubeconfig - // because for minikube<1.17.0 it can not read the new kubeconfigs that have extra "Extenions" block - // see: https://github.com/kubernetes/minikube/issues/10210 - for _, e := range os.Environ() { - if !strings.Contains(e, "KUBECONFIG") { // get all global envs except the Kubeconfig which is used by new versions of minikubes - legacyEnv = append(legacyEnv, e) + t.Run("Upgrade", func(t *testing.T) { + args := append([]string{"start", "-p", profile, "--memory=3072"}, legacyStartArgs()...) + rr := &RunResult{} + r := func() error { + c := exec.CommandContext(ctx, tf.Name(), args...) + var legacyEnv []string + // replace the global KUBECONFIG with a fresh kubeconfig + // because for minikube<1.17.0 it can not read the new kubeconfigs that have extra "Extensions" block + // see: https://github.com/kubernetes/minikube/issues/10210 + for _, e := range os.Environ() { + if !strings.Contains(e, "KUBECONFIG") { // get all global envs except the Kubeconfig which is used by new versions of minikubes + legacyEnv = append(legacyEnv, e) + } + } + // using a fresh kubeconfig for this test + legacyKubeConfig, err := os.CreateTemp("", "legacy_kubeconfig") + if err != nil { + t.Fatalf("failed to create temp file for legacy kubeconfig %v", err) } - } - // using a fresh kubeconfig for this test - legacyKubeConfig, err := ioutil.TempFile("", "legacy_kubeconfig") - if err != nil { - t.Fatalf("failed to create temp file for legacy kubeconfig %v", err) - } - defer os.Remove(legacyKubeConfig.Name()) // clean up - legacyEnv = append(legacyEnv, fmt.Sprintf("KUBECONFIG=%s", legacyKubeConfig.Name())) - c.Env = legacyEnv - rr, err = Run(t, c) - return err - } + defer os.Remove(legacyKubeConfig.Name()) // clean up + legacyEnv = append(legacyEnv, fmt.Sprintf("KUBECONFIG=%s", legacyKubeConfig.Name())) + c.Env = legacyEnv + rr, err = Run(t, c) + return err + } - // Retry up to two times, to allow flakiness for the legacy release - if err := retry.Expo(r, 1*time.Second, Minutes(30), 2); err != nil { - t.Fatalf("legacy %s start failed: %v", desiredLegacyVersion, err) - } + // Retry up to two times, to allow flakiness for the legacy release + if err := retry.Expo(r, 1*time.Second, Minutes(30), 2); err != nil { + t.Fatalf("legacy %s start failed: %v", desiredLegacyVersion, err) + } - rr, err = Run(t, exec.CommandContext(ctx, tf.Name(), "-p", profile, "stop")) - if err != nil { - t.Errorf("failed to stop cluster: %s: %v", rr.Command(), err) - } + rr, err := Run(t, exec.CommandContext(ctx, tf.Name(), "-p", profile, "stop")) + if err != nil { + t.Errorf("failed to stop cluster: %s: %v", rr.Command(), err) + } - args = append([]string{"start", "-p", profile, "--memory=2200", "--alsologtostderr", "-v=1"}, StartArgs()...) - rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) - if err != nil { - t.Fatalf("upgrade from %s to HEAD failed: %s: %v", desiredLegacyVersion, rr.Command(), err) - } + args = append([]string{"start", "-p", profile, "--memory=3072", "--alsologtostderr", "-v=1"}, StartArgs()...) + rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) + if err != nil { + t.Fatalf("upgrade from %s to HEAD failed: %s: %v", desiredLegacyVersion, rr.Command(), err) + } + }) t.Run("MinikubeLogs", func(t *testing.T) { args := []string{"logs", "-p", profile} - rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) + _, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Fatalf("`minikube logs` after upgrade to HEAD from %s failed: %v", desiredLegacyVersion, err) } @@ -220,7 +218,7 @@ func TestKubernetesUpgrade(t *testing.T) { defer CleanupWithLogs(t, profile, cancel) - args := append([]string{"start", "-p", profile, "--memory=2200", fmt.Sprintf("--kubernetes-version=%s", constants.OldestKubernetesVersion), "--alsologtostderr", "-v=1"}, StartArgs()...) + args := append([]string{"start", "-p", profile, "--memory=3072", fmt.Sprintf("--kubernetes-version=%s", constants.OldestKubernetesVersion), "--alsologtostderr", "-v=1"}, StartArgs()...) rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Errorf("failed to start minikube HEAD with oldest k8s version: %s: %v", rr.Command(), err) @@ -241,7 +239,7 @@ func TestKubernetesUpgrade(t *testing.T) { t.Errorf("FAILED: status = %q; want = %q", got, state.Stopped.String()) } - args = append([]string{"start", "-p", profile, "--memory=2200", fmt.Sprintf("--kubernetes-version=%s", constants.NewestKubernetesVersion), "--alsologtostderr", "-v=1"}, StartArgs()...) + args = append([]string{"start", "-p", profile, "--memory=3072", fmt.Sprintf("--kubernetes-version=%s", constants.NewestKubernetesVersion), "--alsologtostderr", "-v=1"}, StartArgs()...) rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Errorf("failed to upgrade with newest k8s version. args: %s : %v", rr.Command(), err) @@ -267,13 +265,13 @@ func TestKubernetesUpgrade(t *testing.T) { } t.Logf("Attempting to downgrade Kubernetes (should fail)") - args = append([]string{"start", "-p", profile, "--memory=2200", fmt.Sprintf("--kubernetes-version=%s", constants.OldestKubernetesVersion)}, StartArgs()...) + args = append([]string{"start", "-p", profile, "--memory=3072", fmt.Sprintf("--kubernetes-version=%s", constants.OldestKubernetesVersion)}, StartArgs()...) if rr, err := Run(t, exec.CommandContext(ctx, Target(), args...)); err == nil { t.Fatalf("downgrading Kubernetes should not be allowed. expected to see error but got %v for %q", err, rr.Command()) } t.Logf("Attempting restart after unsuccessful downgrade") - args = append([]string{"start", "-p", profile, "--memory=2200", fmt.Sprintf("--kubernetes-version=%s", constants.NewestKubernetesVersion), "--alsologtostderr", "-v=1"}, StartArgs()...) + args = append([]string{"start", "-p", profile, "--memory=3072", fmt.Sprintf("--kubernetes-version=%s", constants.NewestKubernetesVersion), "--alsologtostderr", "-v=1"}, StartArgs()...) rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Errorf("start after failed upgrade: %s: %v", rr.Command(), err) @@ -297,7 +295,7 @@ func TestMissingContainerUpgrade(t *testing.T) { defer CleanupWithLogs(t, profile, cancel) - legacyVersion := "v1.9.1" + legacyVersion := legacyMinikubeVersion() tf, err := installRelease(legacyVersion) if err != nil { @@ -305,7 +303,7 @@ func TestMissingContainerUpgrade(t *testing.T) { } defer os.Remove(tf.Name()) - args := append([]string{"start", "-p", profile, "--memory=2200"}, StartArgs()...) + args := append([]string{"start", "-p", profile, "--memory=3072"}, StartArgs()...) rr := &RunResult{} r := func() error { rr, err = Run(t, exec.CommandContext(ctx, tf.Name(), args...)) @@ -327,7 +325,7 @@ func TestMissingContainerUpgrade(t *testing.T) { t.Fatalf("%s failed: %v", rr.Command(), err) } - args = append([]string{"start", "-p", profile, "--memory=2200", "--alsologtostderr", "-v=1"}, StartArgs()...) + args = append([]string{"start", "-p", profile, "--memory=3072", "--alsologtostderr", "-v=1"}, StartArgs()...) rr, err = Run(t, exec.CommandContext(ctx, Target(), args...)) if err != nil { t.Errorf("failed missing container upgrade from %s. args: %s : %v", legacyVersion, rr.Command(), err) diff --git a/test/stress/stress_test.go b/test/stress/stress_test.go index 629119172711..17d9308953e9 100644 --- a/test/stress/stress_test.go +++ b/test/stress/stress_test.go @@ -66,15 +66,15 @@ func TestStress(t *testing.T) { for i := 1; i <= *loops; i++ { t.Logf("Loop %d of %d: %s to HEAD", i, *loops, *upgradeFrom) - runStress(t, oldPath, profile, i) + runStress(t, oldPath, profile) t.Logf("Loop %d of %d done.", i, *loops) } } -type stressFunc func(*testing.T, string, string, int) +type stressFunc func(*testing.T, string, string) // This run the guts of the actual test -func runStress(t *testing.T, oldPath string, profile string, loop int) { +func runStress(t *testing.T, oldPath string, profile string) { // Cleanup old runs runCommand(t, false, newPath, "delete", "-p", profile) @@ -91,32 +91,32 @@ func runStress(t *testing.T, oldPath string, profile string, loop int) { for _, tc := range tests { tc := tc t.Run(tc.name, func(t *testing.T) { - tc.validator(t, oldPath, profile, loop) + tc.validator(t, oldPath, profile) }) } }) } -func validateHotOldToNewUpgrade(t *testing.T, oldPath string, profile string, i int) { +func validateHotOldToNewUpgrade(t *testing.T, oldPath string, profile string) { t.Logf("Hot upgrade from %s to HEAD", *upgradeFrom) runCommand(t, true, oldPath, "start", "-p", profile, *startArgs, "--alsologtostderr") runCommand(t, true, newPath, "start", "-p", profile, *startArgs, "--alsologtostderr") runCommand(t, false, newPath, "delete", "-p", profile) } -func validateColdOldToNewUpgrade(t *testing.T, oldPath string, profile string, i int) { +func validateColdOldToNewUpgrade(t *testing.T, oldPath string, profile string) { t.Logf("Cold upgrade from %s to HEAD", *upgradeFrom) runCommand(t, false, oldPath, "start", "-p", profile, *startArgs, "--alsologtostderr") runCommand(t, false, oldPath, "stop", "-p", profile) runCommand(t, true, newPath, "start", "-p", profile, *startArgs, "--alsologtostderr") } -func validateHotHeadRestart(t *testing.T, oldPath string, profile string, i int) { +func validateHotHeadRestart(t *testing.T, _ string, profile string) { t.Logf("Restart HEAD test") runCommand(t, true, newPath, "start", "-p", profile, *startArgs, "--alsologtostderr") } -func validateColdHeadRestart(t *testing.T, oldPath string, profile string, i int) { +func validateColdHeadRestart(t *testing.T, _ string, profile string) { t.Logf("Cold HEAD restart") runCommand(t, false, newPath, "stop", "-p", profile) runCommand(t, true, newPath, "start", "-p", profile, *startArgs, "--alsologtostderr") diff --git a/third_party/go-dockerclient/tar.go b/third_party/go-dockerclient/tar.go index bb6eee087f8e..d8def294cede 100644 --- a/third_party/go-dockerclient/tar.go +++ b/third_party/go-dockerclient/tar.go @@ -7,14 +7,13 @@ package docker import ( "fmt" "io" - "io/ioutil" "os" "path" "path/filepath" "strings" "github.com/docker/docker/pkg/archive" - "github.com/docker/docker/pkg/fileutils" + "github.com/moby/patternmatcher" ) func CreateTarStream(srcPath, dockerfilePath string) (io.ReadCloser, error) { @@ -34,7 +33,7 @@ func CreateTarStream(srcPath, dockerfilePath string) (io.ReadCloser, error) { // then make sure we send both files over to the daemon // because Dockerfile is, obviously, needed no matter what, and // .dockerignore is needed to know if either one needs to be - // removed. The deamon will remove them for us, if needed, after it + // removed. The daemon will remove them for us, if needed, after it // parses the Dockerfile. // // https://github.com/docker/docker/issues/8330 @@ -45,7 +44,7 @@ func CreateTarStream(srcPath, dockerfilePath string) (io.ReadCloser, error) { if includeFile == "" { continue } - keepThem, err := fileutils.Matches(includeFile, excludes) + keepThem, err := patternmatcher.Matches(includeFile, excludes) if err != nil { return nil, fmt.Errorf("cannot match .dockerfileignore: '%s', error: %w", includeFile, err) } @@ -74,7 +73,7 @@ func validateContextDirectory(srcPath string, excludes []string) error { // skip this directory/file if it's not in the path, it won't get added to the context if relFilePath, relErr := filepath.Rel(srcPath, filePath); relErr != nil { return relErr - } else if skip, matchErr := fileutils.Matches(relFilePath, excludes); matchErr != nil { + } else if skip, matchErr := patternmatcher.Matches(relFilePath, excludes); matchErr != nil { return matchErr } else if skip { if f.IsDir() { @@ -112,7 +111,7 @@ func validateContextDirectory(srcPath string, excludes []string) error { func parseDockerignore(root string) ([]string, error) { var excludes []string - ignore, err := ioutil.ReadFile(path.Join(root, ".dockerignore")) + ignore, err := os.ReadFile(path.Join(root, ".dockerignore")) if err != nil && !os.IsNotExist(err) { return excludes, fmt.Errorf("error reading .dockerignore: %w", err) } diff --git a/third_party/go9p/clnt_clnt.go b/third_party/go9p/clnt_clnt.go index 23af7022f355..e29ce3a183c0 100644 --- a/third_party/go9p/clnt_clnt.go +++ b/third_party/go9p/clnt_clnt.go @@ -219,8 +219,8 @@ func (clnt *Clnt) recv() { if r.Tc.Type != r.Rc.Type-1 { if r.Rc.Type != Rerror { r.Err = &Error{"invalid response", EINVAL} - log.Println(fmt.Sprintf("TTT %v", r.Tc)) - log.Println(fmt.Sprintf("RRR %v", r.Rc)) + log.Printf("TTT %v\n", r.Tc) + log.Printf("RRR %v\n", r.Rc) } else { if r.Err == nil { r.Err = &Error{r.Rc.Error, r.Rc.Errornum} diff --git a/third_party/go9p/clnt_stats_http.go b/third_party/go9p/clnt_stats_http.go index 10059b172a31..44709be19706 100644 --- a/third_party/go9p/clnt_stats_http.go +++ b/third_party/go9p/clnt_stats_http.go @@ -1,4 +1,4 @@ -// +build httpstats +//go:build httpstats package go9p diff --git a/third_party/go9p/srv_conn.go b/third_party/go9p/srv_conn.go index d043d279807d..b2b77b26535c 100644 --- a/third_party/go9p/srv_conn.go +++ b/third_party/go9p/srv_conn.go @@ -105,7 +105,7 @@ func (conn *Conn) recv() { } fc, err, fcsize := Unpack(buf, conn.Dotu) if err != nil { - log.Println(fmt.Sprintf("invalid packet : %v %v", err, buf)) + log.Printf("invalid packet : %v %v\n", err, buf) conn.conn.Close() conn.close() return diff --git a/third_party/go9p/srv_fcall.go b/third_party/go9p/srv_fcall.go index c25d9dc14ffa..3f72c8eace61 100644 --- a/third_party/go9p/srv_fcall.go +++ b/third_party/go9p/srv_fcall.go @@ -193,12 +193,6 @@ func (srv *Srv) walk(req *SrvReq) { return } - /* we can't walk open files */ - if fid.opened { - req.RespondError(Ebaduse) - return - } - if tc.Fid != tc.Newfid { req.Newfid = conn.FidNew(tc.Newfid) if req.Newfid == nil { diff --git a/third_party/go9p/srv_srv.go b/third_party/go9p/srv_srv.go index db51c129933d..13d0559dee09 100644 --- a/third_party/go9p/srv_srv.go +++ b/third_party/go9p/srv_srv.go @@ -193,7 +193,7 @@ type SrvReq struct { prev, next *SrvReq } -// The Start method should be called once the file server implementor +// The Start method should be called once the file server implementer // initializes the Srv struct with the preferred values. It sets default // values to the fields that are not initialized and creates the goroutines // required for the server's operation. The method receives an empty diff --git a/third_party/go9p/srv_stats_http.go b/third_party/go9p/srv_stats_http.go index 5eca6e269cd1..1d6859b68d24 100644 --- a/third_party/go9p/srv_stats_http.go +++ b/third_party/go9p/srv_stats_http.go @@ -1,4 +1,4 @@ -// +build httpstats +//go:build httpstats package go9p diff --git a/third_party/go9p/ufs_darwin.go b/third_party/go9p/ufs_darwin.go index da9a10fae2a3..42b1c2c25208 100644 --- a/third_party/go9p/ufs_darwin.go +++ b/third_party/go9p/ufs_darwin.go @@ -44,11 +44,11 @@ func dir2Qid(d os.FileInfo) *Qid { func dir2Dir(path string, d os.FileInfo, dotu bool, upool Users) (*Dir, error) { if r := recover(); r != nil { fmt.Print("stat failed: ", r) - return nil, &os.PathError{"dir2Dir", path, nil} + return nil, &os.PathError{Op: "dir2Dir", Path: path, Err: nil} } sysif := d.Sys() if sysif == nil { - return nil, &os.PathError{"dir2Dir: sysif is nil", path, nil} + return nil, &os.PathError{Op: "dir2Dir: sysif is nil", Path: path, Err: nil} } sysMode := sysif.(*syscall.Stat_t) diff --git a/third_party/kubeadm/README.md b/third_party/kubeadm/README.md new file mode 100644 index 000000000000..b47e033e0686 --- /dev/null +++ b/third_party/kubeadm/README.md @@ -0,0 +1,15 @@ +maintaining a fork of kubernetes constants to avoid depending on k8s.io/kubernetes/ as a lib +how to update this fork + + +# clone latest stable version + +``` +git clone --depth 1 --branch v1.22.4 git@github.com:kubernetes/kubernetes.git ./out/kubernetes +rm -rf ./third_party/kubeadm || true +mkdir -p ./third_party/kubeadm/app/ +cp -r ./out/kubernetes/cmd/kubeadm/app/features ./third_party/kubeadm/app/ +cp -r ./out/kubernetes/cmd/kubeadm/app/constants ./third_party/kubeadm/app/ +rm ./third_party/kubeadm/app/features/*_test.go || true +rm ./third_party/kubeadm/app/constants/*_test.go || true +``` \ No newline at end of file diff --git a/third_party/kubeadm/app/constants/constants.go b/third_party/kubeadm/app/constants/constants.go new file mode 100644 index 000000000000..fe76720c7450 --- /dev/null +++ b/third_party/kubeadm/app/constants/constants.go @@ -0,0 +1,650 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package constants + +import ( + "fmt" + "net" + "os" + "path" + "path/filepath" + "strings" + "time" + + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/version" + "k8s.io/apimachinery/pkg/util/wait" + bootstrapapi "k8s.io/cluster-bootstrap/token/api" + utilnet "k8s.io/utils/net" + + "github.com/pkg/errors" +) + +const ( + // KubernetesDir is the directory Kubernetes owns for storing various configuration files + KubernetesDir = "/etc/kubernetes" + // ManifestsSubDirName defines directory name to store manifests + ManifestsSubDirName = "manifests" + // TempDirForKubeadm defines temporary directory for kubeadm + // should be joined with KubernetesDir. + TempDirForKubeadm = "tmp" + + // CertificateValidity defines the validity for all the signed certificates generated by kubeadm + CertificateValidity = time.Hour * 24 * 365 + + // CACertAndKeyBaseName defines certificate authority base name + CACertAndKeyBaseName = "ca" + // CACertName defines certificate name + CACertName = "ca.crt" + // CAKeyName defines certificate name + CAKeyName = "ca.key" + + // APIServerCertAndKeyBaseName defines API's server certificate and key base name + APIServerCertAndKeyBaseName = "apiserver" + // APIServerCertName defines API's server certificate name + APIServerCertName = "apiserver.crt" + // APIServerKeyName defines API's server key name + APIServerKeyName = "apiserver.key" + // APIServerCertCommonName defines API's server certificate common name (CN) + APIServerCertCommonName = "kube-apiserver" + + // APIServerKubeletClientCertAndKeyBaseName defines kubelet client certificate and key base name + APIServerKubeletClientCertAndKeyBaseName = "apiserver-kubelet-client" + // APIServerKubeletClientCertName defines kubelet client certificate name + APIServerKubeletClientCertName = "apiserver-kubelet-client.crt" + // APIServerKubeletClientKeyName defines kubelet client key name + APIServerKubeletClientKeyName = "apiserver-kubelet-client.key" + // APIServerKubeletClientCertCommonName defines kubelet client certificate common name (CN) + APIServerKubeletClientCertCommonName = "kube-apiserver-kubelet-client" + + // EtcdCACertAndKeyBaseName defines etcd's CA certificate and key base name + EtcdCACertAndKeyBaseName = "etcd/ca" + // EtcdCACertName defines etcd's CA certificate name + EtcdCACertName = "etcd/ca.crt" + // EtcdCAKeyName defines etcd's CA key name + EtcdCAKeyName = "etcd/ca.key" + + // EtcdServerCertAndKeyBaseName defines etcd's server certificate and key base name + EtcdServerCertAndKeyBaseName = "etcd/server" + // EtcdServerCertName defines etcd's server certificate name + EtcdServerCertName = "etcd/server.crt" + // EtcdServerKeyName defines etcd's server key name + EtcdServerKeyName = "etcd/server.key" + + // EtcdListenClientPort defines the port etcd listen on for client traffic + EtcdListenClientPort = 2379 + // EtcdMetricsPort is the port at which to obtain etcd metrics and health status + EtcdMetricsPort = 2381 + + // EtcdPeerCertAndKeyBaseName defines etcd's peer certificate and key base name + EtcdPeerCertAndKeyBaseName = "etcd/peer" + // EtcdPeerCertName defines etcd's peer certificate name + EtcdPeerCertName = "etcd/peer.crt" + // EtcdPeerKeyName defines etcd's peer key name + EtcdPeerKeyName = "etcd/peer.key" + + // EtcdListenPeerPort defines the port etcd listen on for peer traffic + EtcdListenPeerPort = 2380 + + // EtcdHealthcheckClientCertAndKeyBaseName defines etcd's healthcheck client certificate and key base name + EtcdHealthcheckClientCertAndKeyBaseName = "etcd/healthcheck-client" + // EtcdHealthcheckClientCertName defines etcd's healthcheck client certificate name + EtcdHealthcheckClientCertName = "etcd/healthcheck-client.crt" + // EtcdHealthcheckClientKeyName defines etcd's healthcheck client key name + EtcdHealthcheckClientKeyName = "etcd/healthcheck-client.key" + // EtcdHealthcheckClientCertCommonName defines etcd's healthcheck client certificate common name (CN) + EtcdHealthcheckClientCertCommonName = "kube-etcd-healthcheck-client" + + // APIServerEtcdClientCertAndKeyBaseName defines apiserver's etcd client certificate and key base name + APIServerEtcdClientCertAndKeyBaseName = "apiserver-etcd-client" + // APIServerEtcdClientCertName defines apiserver's etcd client certificate name + APIServerEtcdClientCertName = "apiserver-etcd-client.crt" + // APIServerEtcdClientKeyName defines apiserver's etcd client key name + APIServerEtcdClientKeyName = "apiserver-etcd-client.key" + // APIServerEtcdClientCertCommonName defines apiserver's etcd client certificate common name (CN) + APIServerEtcdClientCertCommonName = "kube-apiserver-etcd-client" + + // ServiceAccountKeyBaseName defines SA key base name + ServiceAccountKeyBaseName = "sa" + // ServiceAccountPublicKeyName defines SA public key base name + ServiceAccountPublicKeyName = "sa.pub" + // ServiceAccountPrivateKeyName defines SA private key base name + ServiceAccountPrivateKeyName = "sa.key" + + // FrontProxyCACertAndKeyBaseName defines front proxy CA certificate and key base name + FrontProxyCACertAndKeyBaseName = "front-proxy-ca" + // FrontProxyCACertName defines front proxy CA certificate name + FrontProxyCACertName = "front-proxy-ca.crt" + // FrontProxyCAKeyName defines front proxy CA key name + FrontProxyCAKeyName = "front-proxy-ca.key" + + // FrontProxyClientCertAndKeyBaseName defines front proxy certificate and key base name + FrontProxyClientCertAndKeyBaseName = "front-proxy-client" + // FrontProxyClientCertName defines front proxy certificate name + FrontProxyClientCertName = "front-proxy-client.crt" + // FrontProxyClientKeyName defines front proxy key name + FrontProxyClientKeyName = "front-proxy-client.key" + // FrontProxyClientCertCommonName defines front proxy certificate common name + FrontProxyClientCertCommonName = "front-proxy-client" //used as subject.commonname attribute (CN) + + // AdminKubeConfigFileName defines name for the kubeconfig aimed to be used by the superuser/admin of the cluster + AdminKubeConfigFileName = "admin.conf" + // KubeletBootstrapKubeConfigFileName defines the file name for the kubeconfig that the kubelet will use to do + // the TLS bootstrap to get itself an unique credential + KubeletBootstrapKubeConfigFileName = "bootstrap-kubelet.conf" + + // KubeletKubeConfigFileName defines the file name for the kubeconfig that the control-plane kubelet will use for talking + // to the API server + KubeletKubeConfigFileName = "kubelet.conf" + // ControllerManagerKubeConfigFileName defines the file name for the controller manager's kubeconfig file + ControllerManagerKubeConfigFileName = "controller-manager.conf" + // SchedulerKubeConfigFileName defines the file name for the scheduler's kubeconfig file + SchedulerKubeConfigFileName = "scheduler.conf" + + // Some well-known users and groups in the core Kubernetes authorization system + + // ControllerManagerUser defines the well-known user the controller-manager should be authenticated as + ControllerManagerUser = "system:kube-controller-manager" + // SchedulerUser defines the well-known user the scheduler should be authenticated as + SchedulerUser = "system:kube-scheduler" + // SystemPrivilegedGroup defines the well-known group for the apiservers. This group is also superuser by default + // (i.e. bound to the cluster-admin ClusterRole) + SystemPrivilegedGroup = "system:masters" + // NodesGroup defines the well-known group for all nodes. + NodesGroup = "system:nodes" + // NodesUserPrefix defines the user name prefix as requested by the Node authorizer. + NodesUserPrefix = "system:node:" + // NodesClusterRoleBinding defines the well-known ClusterRoleBinding which binds the too permissive system:node + // ClusterRole to the system:nodes group. Since kubeadm is using the Node Authorizer, this ClusterRoleBinding's + // system:nodes group subject is removed if present. + NodesClusterRoleBinding = "system:node" + + // APICallRetryInterval defines how long kubeadm should wait before retrying a failed API operation + APICallRetryInterval = 500 * time.Millisecond + // DiscoveryRetryInterval specifies how long kubeadm should wait before retrying to connect to the control-plane when doing discovery + DiscoveryRetryInterval = 5 * time.Second + // PatchNodeTimeout specifies how long kubeadm should wait for applying the label and taint on the control-plane before timing out + PatchNodeTimeout = 2 * time.Minute + // TLSBootstrapTimeout specifies how long kubeadm should wait for the kubelet to perform the TLS Bootstrap + TLSBootstrapTimeout = 5 * time.Minute + // TLSBootstrapRetryInterval specifies how long kubeadm should wait before retrying the TLS Bootstrap check + TLSBootstrapRetryInterval = 5 * time.Second + // APICallWithWriteTimeout specifies how long kubeadm should wait for api calls with at least one write + APICallWithWriteTimeout = 40 * time.Second + // APICallWithReadTimeout specifies how long kubeadm should wait for api calls with only reads + APICallWithReadTimeout = 15 * time.Second + // PullImageRetry specifies how many times ContainerRuntime retries when pulling image failed + PullImageRetry = 5 + + // DefaultControlPlaneTimeout specifies the default control plane (actually API Server) timeout for use by kubeadm + DefaultControlPlaneTimeout = 4 * time.Minute + + // MinimumAddressesInServiceSubnet defines minimum amount of nodes the Service subnet should allow. + // We need at least ten, because the DNS service is always at the tenth cluster clusterIP + MinimumAddressesInServiceSubnet = 10 + + // MaximumBitsForServiceSubnet defines maximum possible size of the service subnet in terms of bits. + // For example, if the value is 20, then the largest supported service subnet is /12 for IPv4 and /108 for IPv6. + // Note however that anything in between /108 and /112 will be clamped to /112 due to the limitations of the underlying allocation logic. + // TODO: https://github.com/kubernetes/enhancements/pull/1881 + MaximumBitsForServiceSubnet = 20 + + // MinimumAddressesInPodSubnet defines minimum amount of pods in the cluster. + // We need at least more than services, an IPv4 /28 or IPv6 /128 subnet means 14 util addresses + MinimumAddressesInPodSubnet = 14 + + // PodSubnetNodeMaskMaxDiff is limited to 16 due to an issue with uncompressed IP bitmap in core: + // xref: #44918 + // The node subnet mask size must be no more than the pod subnet mask size + 16 + PodSubnetNodeMaskMaxDiff = 16 + + // DefaultTokenDuration specifies the default amount of time that a bootstrap token will be valid + // Default behaviour is 24 hours + DefaultTokenDuration = 24 * time.Hour + + // DefaultCertTokenDuration specifies the default amount of time that the token used by upload certs will be valid + // Default behaviour is 2 hours + DefaultCertTokenDuration = 2 * time.Hour + + // CertificateKeySize specifies the size of the key used to encrypt certificates on uploadcerts phase + CertificateKeySize = 32 + + // LabelNodeRoleOldControlPlane specifies that a node hosts control-plane components + // DEPRECATED: https://github.com/kubernetes/kubeadm/issues/2200 + LabelNodeRoleOldControlPlane = "node-role.kubernetes.io/master" + + // LabelNodeRoleControlPlane specifies that a node hosts control-plane components + LabelNodeRoleControlPlane = "node-role.kubernetes.io/control-plane" + + // LabelExcludeFromExternalLB can be set on a node to exclude it from external load balancers. + // This is added to control plane nodes to preserve backwards compatibility with a legacy behavior. + LabelExcludeFromExternalLB = "node.kubernetes.io/exclude-from-external-load-balancers" + + // AnnotationKubeadmCRISocket specifies the annotation kubeadm uses to preserve the crisocket information given to kubeadm at + // init/join time for use later. kubeadm annotates the node object with this information + AnnotationKubeadmCRISocket = "kubeadm.alpha.kubernetes.io/cri-socket" + + // UnknownCRISocket defines the undetected or unknown CRI socket + UnknownCRISocket = "/var/run/unknown.sock" + + // KubeadmConfigConfigMap specifies in what ConfigMap in the kube-system namespace the `kubeadm init` configuration should be stored + KubeadmConfigConfigMap = "kubeadm-config" + + // ClusterConfigurationConfigMapKey specifies in what ConfigMap key the cluster configuration should be stored + ClusterConfigurationConfigMapKey = "ClusterConfiguration" + + // KubeProxyConfigMap specifies in what ConfigMap in the kube-system namespace the kube-proxy configuration should be stored + KubeProxyConfigMap = "kube-proxy" + + // KubeProxyConfigMapKey specifies in what ConfigMap key the component config of kube-proxy should be stored + KubeProxyConfigMapKey = "config.conf" + + // KubeletBaseConfigurationConfigMapPrefix specifies in what ConfigMap in the kube-system namespace the initial remote configuration of kubelet should be stored + KubeletBaseConfigurationConfigMapPrefix = "kubelet-config-" + + // KubeletBaseConfigurationConfigMapKey specifies in what ConfigMap key the initial remote configuration of kubelet should be stored + KubeletBaseConfigurationConfigMapKey = "kubelet" + + // KubeletBaseConfigMapRolePrefix defines the base kubelet configuration ConfigMap. + KubeletBaseConfigMapRolePrefix = "kubeadm:kubelet-config-" + + // KubeletRunDirectory specifies the directory where the kubelet runtime information is stored. + KubeletRunDirectory = "/var/lib/kubelet" + + // KubeletConfigurationFileName specifies the file name on the node which stores initial remote configuration of kubelet + // This file should exist under KubeletRunDirectory + KubeletConfigurationFileName = "config.yaml" + + // KubeletEnvFileName is a file "kubeadm init" writes at runtime. Using that interface, kubeadm can customize certain + // kubelet flags conditionally based on the environment at runtime. Also, parameters given to the configuration file + // might be passed through this file. "kubeadm init" writes one variable, with the name ${KubeletEnvFileVariableName}. + // This file should exist under KubeletRunDirectory + KubeletEnvFileName = "kubeadm-flags.env" + + // KubeletEnvFileVariableName specifies the shell script variable name "kubeadm init" should write a value to in KubeletEnvFile + KubeletEnvFileVariableName = "KUBELET_KUBEADM_ARGS" + + // KubeletHealthzPort is the port of the kubelet healthz endpoint + KubeletHealthzPort = 10248 + + // MinExternalEtcdVersion indicates minimum external etcd version which kubeadm supports + MinExternalEtcdVersion = "3.2.18" + + // DefaultEtcdVersion indicates the default etcd version that kubeadm uses + DefaultEtcdVersion = "3.5.0-0" + + // Etcd defines variable used internally when referring to etcd component + Etcd = "etcd" + // KubeAPIServer defines variable used internally when referring to kube-apiserver component + KubeAPIServer = "kube-apiserver" + // KubeControllerManager defines variable used internally when referring to kube-controller-manager component + KubeControllerManager = "kube-controller-manager" + // KubeScheduler defines variable used internally when referring to kube-scheduler component + KubeScheduler = "kube-scheduler" + // KubeProxy defines variable used internally when referring to kube-proxy component + KubeProxy = "kube-proxy" + // CoreDNS defines variable used internally when referring to the CoreDNS component + CoreDNS = "CoreDNS" + // Kubelet defines variable used internally when referring to the Kubelet + Kubelet = "kubelet" + + // KubeCertificatesVolumeName specifies the name for the Volume that is used for injecting certificates to control plane components (can be both a hostPath volume or a projected, all-in-one volume) + KubeCertificatesVolumeName = "k8s-certs" + + // KubeConfigVolumeName specifies the name for the Volume that is used for injecting the kubeconfig to talk securely to the api server for a control plane component if applicable + KubeConfigVolumeName = "kubeconfig" + + // NodeBootstrapTokenAuthGroup specifies which group a Node Bootstrap Token should be authenticated in + NodeBootstrapTokenAuthGroup = "system:bootstrappers:kubeadm:default-node-token" + + // DefaultCIImageRepository points to image registry where CI uploads images from ci-cross build job + DefaultCIImageRepository = "gcr.io/k8s-staging-ci-images" + + // CoreDNSConfigMap specifies in what ConfigMap in the kube-system namespace the CoreDNS config should be stored + CoreDNSConfigMap = "coredns" + + // CoreDNSDeploymentName specifies the name of the Deployment for CoreDNS add-on + CoreDNSDeploymentName = "coredns" + + // CoreDNSImageName specifies the name of the image for CoreDNS add-on + CoreDNSImageName = "coredns" + + // CoreDNSVersion is the version of CoreDNS to be deployed if it is used + CoreDNSVersion = "v1.8.4" + + // ClusterConfigurationKind is the string kind value for the ClusterConfiguration struct + ClusterConfigurationKind = "ClusterConfiguration" + + // InitConfigurationKind is the string kind value for the InitConfiguration struct + InitConfigurationKind = "InitConfiguration" + + // JoinConfigurationKind is the string kind value for the JoinConfiguration struct + JoinConfigurationKind = "JoinConfiguration" + + // YAMLDocumentSeparator is the separator for YAML documents + // TODO: Find a better place for this constant + YAMLDocumentSeparator = "---\n" + + // DefaultAPIServerBindAddress is the default bind address for the API Server + DefaultAPIServerBindAddress = "0.0.0.0" + + // ControlPlaneNumCPU is the number of CPUs required on control-plane + ControlPlaneNumCPU = 2 + + // ControlPlaneMem is the number of megabytes of memory required on the control-plane + // Below that amount of RAM running a stable control plane would be difficult. + ControlPlaneMem = 1700 + + // KubeadmCertsSecret specifies in what Secret in the kube-system namespace the certificates should be stored + KubeadmCertsSecret = "kubeadm-certs" + + // KubeletPort is the default port for the kubelet server on each host machine. + // May be overridden by a flag at startup. + KubeletPort = 10250 + // KubeSchedulerPort is the default port for the scheduler status server. + // May be overridden by a flag at startup. + KubeSchedulerPort = 10259 + // KubeControllerManagerPort is the default port for the controller manager status server. + // May be overridden by a flag at startup. + KubeControllerManagerPort = 10257 + + // EtcdAdvertiseClientUrlsAnnotationKey is the annotation key on every etcd pod, describing the + // advertise client URLs + EtcdAdvertiseClientUrlsAnnotationKey = "kubeadm.kubernetes.io/etcd.advertise-client-urls" + // KubeAPIServerAdvertiseAddressEndpointAnnotationKey is the annotation key on every apiserver pod, + // describing the API endpoint (advertise address and bind port of the api server) + KubeAPIServerAdvertiseAddressEndpointAnnotationKey = "kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint" + // ComponentConfigHashAnnotationKey holds the config map annotation key that kubeadm uses to store + // a SHA256 sum to check for user changes + ComponentConfigHashAnnotationKey = "kubeadm.kubernetes.io/component-config.hash" + + // ControlPlaneTier is the value used in the tier label to identify control plane components + ControlPlaneTier = "control-plane" + + // Mode* constants were copied from pkg/kubeapiserver/authorizer/modes + // to avoid kubeadm dependency on the internal module + // TODO: share Mode* constants in component config + + // ModeAlwaysAllow is the mode to set all requests as authorized + ModeAlwaysAllow string = "AlwaysAllow" + // ModeAlwaysDeny is the mode to set no requests as authorized + ModeAlwaysDeny string = "AlwaysDeny" + // ModeABAC is the mode to use Attribute Based Access Control to authorize + ModeABAC string = "ABAC" + // ModeWebhook is the mode to make an external webhook call to authorize + ModeWebhook string = "Webhook" + // ModeRBAC is the mode to use Role Based Access Control to authorize + ModeRBAC string = "RBAC" + // ModeNode is an authorization mode that authorizes API requests made by kubelets. + ModeNode string = "Node" + + // PauseVersion indicates the default pause image version for kubeadm + PauseVersion = "3.5" + + // CgroupDriverSystemd holds the systemd driver type + CgroupDriverSystemd = "systemd" + + // The username of the user that kube-controller-manager runs as. + KubeControllerManagerUserName string = "kubeadm-kcm" + // The username of the user that kube-apiserver runs as. + KubeAPIServerUserName string = "kubeadm-kas" + // The username of the user that kube-scheduler runs as. + KubeSchedulerUserName string = "kubeadm-ks" + // The username of the user that etcd runs as. + EtcdUserName string = "kubeadm-etcd" + // The group of users that are allowed to read the service account private key. + ServiceAccountKeyReadersGroupName string = "kubeadm-sa-key-readers" +) + +var ( + // OldControlPlaneTaint is the taint to apply on the PodSpec for being able to run that Pod on the control-plane + // DEPRECATED: https://github.com/kubernetes/kubeadm/issues/2200 + OldControlPlaneTaint = v1.Taint{ + Key: LabelNodeRoleOldControlPlane, + Effect: v1.TaintEffectNoSchedule, + } + + // OldControlPlaneToleration is the toleration to apply on the PodSpec for being able to run that Pod on the control-plane + // DEPRECATED: https://github.com/kubernetes/kubeadm/issues/2200 + OldControlPlaneToleration = v1.Toleration{ + Key: LabelNodeRoleOldControlPlane, + Effect: v1.TaintEffectNoSchedule, + } + + // ControlPlaneTaint is the taint to apply on the PodSpec for being able to run that Pod on the control-plane + ControlPlaneTaint = v1.Taint{ + Key: LabelNodeRoleControlPlane, + Effect: v1.TaintEffectNoSchedule, + } + + // ControlPlaneToleration is the toleration to apply on the PodSpec for being able to run that Pod on the control-plane + ControlPlaneToleration = v1.Toleration{ + Key: LabelNodeRoleControlPlane, + Effect: v1.TaintEffectNoSchedule, + } + + // DefaultTokenUsages specifies the default functions a token will get + DefaultTokenUsages = bootstrapapi.KnownTokenUsages + + // DefaultTokenGroups specifies the default groups that this token will authenticate as when used for authentication + DefaultTokenGroups = []string{NodeBootstrapTokenAuthGroup} + + // ControlPlaneComponents defines the control-plane component names + ControlPlaneComponents = []string{KubeAPIServer, KubeControllerManager, KubeScheduler} + + // MinimumControlPlaneVersion specifies the minimum control plane version kubeadm can deploy + MinimumControlPlaneVersion = version.MustParseSemantic("v1.21.0") + + // MinimumKubeletVersion specifies the minimum version of kubelet which kubeadm supports + MinimumKubeletVersion = version.MustParseSemantic("v1.21.0") + + // CurrentKubernetesVersion specifies current Kubernetes version supported by kubeadm + CurrentKubernetesVersion = version.MustParseSemantic("v1.22.0") + + // SupportedEtcdVersion lists officially supported etcd versions with corresponding Kubernetes releases + SupportedEtcdVersion = map[uint8]string{ + 13: "3.2.24", + 14: "3.3.10", + 15: "3.3.10", + 16: "3.3.17-0", + 17: "3.4.3-0", + 18: "3.4.3-0", + 19: "3.4.13-0", + 20: "3.4.13-0", + 21: "3.4.13-0", + 22: "3.5.0-0", + 23: "3.5.0-0", + } + + // KubeadmCertsClusterRoleName sets the name for the ClusterRole that allows + // the bootstrap tokens to access the kubeadm-certs Secret during the join of a new control-plane + KubeadmCertsClusterRoleName = fmt.Sprintf("kubeadm:%s", KubeadmCertsSecret) + + // StaticPodMirroringDefaultRetry is used a backoff strategy for + // waiting for static pods to be mirrored to the apiserver. + StaticPodMirroringDefaultRetry = wait.Backoff{ + Steps: 30, + Duration: 1 * time.Second, + Factor: 1.0, + Jitter: 0.1, + } +) + +// EtcdSupportedVersion returns officially supported version of etcd for a specific Kubernetes release +// If passed version is not in the given list, the function returns the nearest version with a warning +func EtcdSupportedVersion(supportedEtcdVersion map[uint8]string, versionString string) (etcdVersion *version.Version, warning, err error) { + kubernetesVersion, err := version.ParseSemantic(versionString) + if err != nil { + return nil, nil, err + } + desiredVersion, etcdStringVersion := uint8(kubernetesVersion.Minor()), "" + + min, max := ^uint8(0), uint8(0) + for k, v := range supportedEtcdVersion { + if desiredVersion == k { + etcdStringVersion = v + break + } + if k < min { + min = k + } + if k > max { + max = k + } + } + + if len(etcdStringVersion) == 0 { + if desiredVersion < min { + etcdStringVersion = supportedEtcdVersion[min] + } + if desiredVersion > max { + etcdStringVersion = supportedEtcdVersion[max] + } + warning = fmt.Errorf("could not find officially supported version of etcd for Kubernetes %s, falling back to the nearest etcd version (%s)", + versionString, etcdStringVersion) + } + + etcdVersion, err = version.ParseSemantic(etcdStringVersion) + if err != nil { + return nil, nil, err + } + + return etcdVersion, warning, nil +} + +// GetStaticPodDirectory returns the location on the disk where the Static Pod should be present +func GetStaticPodDirectory() string { + return filepath.Join(KubernetesDir, ManifestsSubDirName) +} + +// GetStaticPodFilepath returns the location on the disk where the Static Pod should be present +func GetStaticPodFilepath(componentName, manifestsDir string) string { + return filepath.Join(manifestsDir, componentName+".yaml") +} + +// GetAdminKubeConfigPath returns the location on the disk where admin kubeconfig is located by default +func GetAdminKubeConfigPath() string { + return filepath.Join(KubernetesDir, AdminKubeConfigFileName) +} + +// GetBootstrapKubeletKubeConfigPath returns the location on the disk where bootstrap kubelet kubeconfig is located by default +func GetBootstrapKubeletKubeConfigPath() string { + return filepath.Join(KubernetesDir, KubeletBootstrapKubeConfigFileName) +} + +// GetKubeletKubeConfigPath returns the location on the disk where kubelet kubeconfig is located by default +func GetKubeletKubeConfigPath() string { + return filepath.Join(KubernetesDir, KubeletKubeConfigFileName) +} + +// CreateTempDirForKubeadm is a function that creates a temporary directory under /etc/kubernetes/tmp (not using /tmp as that would potentially be dangerous) +func CreateTempDirForKubeadm(kubernetesDir, dirName string) (string, error) { + tempDir := path.Join(KubernetesDir, TempDirForKubeadm) + if len(kubernetesDir) != 0 { + tempDir = path.Join(kubernetesDir, TempDirForKubeadm) + } + + // creates target folder if not already exists + if err := os.MkdirAll(tempDir, 0700); err != nil { + return "", errors.Wrapf(err, "failed to create directory %q", tempDir) + } + + tempDir, err := os.MkdirTemp(tempDir, dirName) + if err != nil { + return "", errors.Wrap(err, "couldn't create a temporary directory") + } + return tempDir, nil +} + +// CreateTimestampDirForKubeadm is a function that creates a temporary directory under /etc/kubernetes/tmp formatted with the current date +func CreateTimestampDirForKubeadm(kubernetesDir, dirName string) (string, error) { + tempDir := path.Join(KubernetesDir, TempDirForKubeadm) + if len(kubernetesDir) != 0 { + tempDir = path.Join(kubernetesDir, TempDirForKubeadm) + } + + // creates target folder if not already exists + if err := os.MkdirAll(tempDir, 0700); err != nil { + return "", errors.Wrapf(err, "failed to create directory %q", tempDir) + } + + timestampDirName := fmt.Sprintf("%s-%s", dirName, time.Now().Format("2006-01-02-15-04-05")) + timestampDir := path.Join(tempDir, timestampDirName) + if err := os.Mkdir(timestampDir, 0700); err != nil { + return "", errors.Wrap(err, "could not create timestamp directory") + } + + return timestampDir, nil +} + +// GetDNSIP returns a dnsIP, which is 10th IP in svcSubnet CIDR range +func GetDNSIP(svcSubnetList string, isDualStack bool) (net.IP, error) { + // Get the service subnet CIDR + svcSubnetCIDR, err := GetKubernetesServiceCIDR(svcSubnetList, isDualStack) + if err != nil { + return nil, errors.Wrapf(err, "unable to get internal Kubernetes Service IP from the given service CIDR (%s)", svcSubnetList) + } + + // Selects the 10th IP in service subnet CIDR range as dnsIP + dnsIP, err := utilnet.GetIndexedIP(svcSubnetCIDR, 10) + if err != nil { + return nil, errors.Wrap(err, "unable to get internal Kubernetes Service IP from the given service CIDR") + } + + return dnsIP, nil +} + +// GetKubernetesServiceCIDR returns the default Service CIDR for the Kubernetes internal service +func GetKubernetesServiceCIDR(svcSubnetList string, isDualStack bool) (*net.IPNet, error) { + if isDualStack { + // The default service address family for the cluster is the address family of the first + // service cluster IP range configured via the `--service-cluster-ip-range` flag + // of the kube-controller-manager and kube-apiserver. + svcSubnets, err := utilnet.ParseCIDRs(strings.Split(svcSubnetList, ",")) + if err != nil { + return nil, errors.Wrapf(err, "unable to parse ServiceSubnet %v", svcSubnetList) + } + if len(svcSubnets) == 0 { + return nil, errors.New("received empty ServiceSubnet for dual-stack") + } + return svcSubnets[0], nil + } + // internal IP address for the API server + _, svcSubnet, err := net.ParseCIDR(svcSubnetList) + if err != nil { + return nil, errors.Wrapf(err, "unable to parse ServiceSubnet %v", svcSubnetList) + } + return svcSubnet, nil +} + +// GetAPIServerVirtualIP returns the IP of the internal Kubernetes API service +func GetAPIServerVirtualIP(svcSubnetList string, isDualStack bool) (net.IP, error) { + svcSubnet, err := GetKubernetesServiceCIDR(svcSubnetList, isDualStack) + if err != nil { + return nil, errors.Wrap(err, "unable to get internal Kubernetes Service IP from the given service CIDR") + } + internalAPIServerVirtualIP, err := utilnet.GetIndexedIP(svcSubnet, 1) + if err != nil { + return nil, errors.Wrapf(err, "unable to get the first IP address from the given CIDR: %s", svcSubnet.String()) + } + return internalAPIServerVirtualIP, nil +} + +// GetKubeletConfigMapName returns the right ConfigMap name for the right branch of k8s +func GetKubeletConfigMapName(k8sVersion *version.Version) string { + return fmt.Sprintf("%s%d.%d", KubeletBaseConfigurationConfigMapPrefix, k8sVersion.Major(), k8sVersion.Minor()) +} diff --git a/pkg/minikube/constants/constants_windows.go b/third_party/kubeadm/app/constants/constants_unix.go similarity index 75% rename from pkg/minikube/constants/constants_windows.go rename to third_party/kubeadm/app/constants/constants_unix.go index da58387eb91f..bf33e74ecc0d 100644 --- a/pkg/minikube/constants/constants_windows.go +++ b/third_party/kubeadm/app/constants/constants_unix.go @@ -1,7 +1,7 @@ -// +build windows, !gendocs +//go:build !windows /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2019 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,8 +18,7 @@ limitations under the License. package constants -import ( - "k8s.io/client-go/util/homedir" +const ( + // DefaultDockerCRISocket defines the default Docker CRI socket + DefaultDockerCRISocket = "/var/run/dockershim.sock" ) - -var DefaultMountDir = homedir.HomeDir() diff --git a/pkg/minikube/constants/constants_darwin.go b/third_party/kubeadm/app/constants/constants_windows.go similarity index 74% rename from pkg/minikube/constants/constants_darwin.go rename to third_party/kubeadm/app/constants/constants_windows.go index a10fe2be02bc..3b2cd6bb2578 100644 --- a/pkg/minikube/constants/constants_darwin.go +++ b/third_party/kubeadm/app/constants/constants_windows.go @@ -1,7 +1,7 @@ -// +build darwin, !gendocs +//go:build windows /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2019 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,5 +18,7 @@ limitations under the License. package constants -// DefaultMountDir is the default mounting directory for Darwin -var DefaultMountDir = "/Users" +const ( + // DefaultDockerCRISocket defines the default Docker CRI socket + DefaultDockerCRISocket = "npipe:////./pipe/docker_engine" +) diff --git a/third_party/kubeadm/app/features/features.go b/third_party/kubeadm/app/features/features.go new file mode 100644 index 000000000000..a392f40faaef --- /dev/null +++ b/third_party/kubeadm/app/features/features.go @@ -0,0 +1,182 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package features + +import ( + "fmt" + "sort" + "strconv" + "strings" + + "k8s.io/apimachinery/pkg/util/version" + "k8s.io/component-base/featuregate" + + "github.com/pkg/errors" +) + +const ( + // IPv6DualStack is expected to be beta in v1.21 + IPv6DualStack = "IPv6DualStack" + // PublicKeysECDSA is expected to be alpha in v1.19 + PublicKeysECDSA = "PublicKeysECDSA" + // RootlessControlPlane is expected to be in alpha in v1.22 + RootlessControlPlane = "RootlessControlPlane" +) + +// InitFeatureGates are the default feature gates for the init command +var InitFeatureGates = FeatureList{ + IPv6DualStack: {FeatureSpec: featuregate.FeatureSpec{Default: true, PreRelease: featuregate.Beta}}, + PublicKeysECDSA: {FeatureSpec: featuregate.FeatureSpec{Default: false, PreRelease: featuregate.Alpha}}, + RootlessControlPlane: {FeatureSpec: featuregate.FeatureSpec{Default: false, PreRelease: featuregate.Alpha}}, +} + +// Feature represents a feature being gated +type Feature struct { + featuregate.FeatureSpec + MinimumVersion *version.Version + HiddenInHelpText bool + DeprecationMessage string +} + +// FeatureList represents a list of feature gates +type FeatureList map[string]Feature + +// ValidateVersion ensures that a feature gate list is compatible with the chosen Kubernetes version +func ValidateVersion(allFeatures FeatureList, requestedFeatures map[string]bool, requestedVersion string) error { + if requestedVersion == "" { + return nil + } + parsedExpVersion, err := version.ParseSemantic(requestedVersion) + if err != nil { + return errors.Wrapf(err, "error parsing version %s", requestedVersion) + } + for k := range requestedFeatures { + if minVersion := allFeatures[k].MinimumVersion; minVersion != nil { + if !parsedExpVersion.AtLeast(minVersion) { + return errors.Errorf( + "the requested Kubernetes version (%s) is incompatible with the %s feature gate, which needs %s as a minimum", + requestedVersion, k, minVersion) + } + } + } + return nil +} + +// Enabled indicates whether a feature name has been enabled +func Enabled(featureList map[string]bool, featureName string) bool { + if enabled, ok := featureList[string(featureName)]; ok { + return enabled + } + return InitFeatureGates[string(featureName)].Default +} + +// Supports indicates whether a feature name is supported on the given +// feature set +func Supports(featureList FeatureList, featureName string) bool { + for k, v := range featureList { + if featureName == string(k) { + return v.PreRelease != featuregate.Deprecated + } + } + return false +} + +// Keys returns a slice of feature names for a given feature set +func Keys(featureList FeatureList) []string { + var list []string + for k := range featureList { + list = append(list, string(k)) + } + return list +} + +// KnownFeatures returns a slice of strings describing the FeatureList features. +func KnownFeatures(f *FeatureList) []string { + var known []string + for k, v := range *f { + if v.HiddenInHelpText { + continue + } + + pre := "" + if v.PreRelease != featuregate.GA { + pre = fmt.Sprintf("%s - ", v.PreRelease) + } + known = append(known, fmt.Sprintf("%s=true|false (%sdefault=%t)", k, pre, v.Default)) + } + sort.Strings(known) + return known +} + +// NewFeatureGate parses a string of the form "key1=value1,key2=value2,..." into a +// map[string]bool of known keys or returns an error. +func NewFeatureGate(f *FeatureList, value string) (map[string]bool, error) { + featureGate := map[string]bool{} + for _, s := range strings.Split(value, ",") { + if len(s) == 0 { + continue + } + + arr := strings.SplitN(s, "=", 2) + if len(arr) != 2 { + return nil, errors.Errorf("missing bool value for feature-gate key:%s", s) + } + + k := strings.TrimSpace(arr[0]) + v := strings.TrimSpace(arr[1]) + + featureSpec, ok := (*f)[k] + if !ok { + return nil, errors.Errorf("unrecognized feature-gate key: %s", k) + } + + if featureSpec.PreRelease == featuregate.Deprecated { + return nil, errors.Errorf("feature-gate key is deprecated: %s", k) + } + + boolValue, err := strconv.ParseBool(v) + if err != nil { + return nil, errors.Errorf("invalid value %v for feature-gate key: %s, use true|false instead", v, k) + } + featureGate[k] = boolValue + } + + return featureGate, nil +} + +// CheckDeprecatedFlags takes a list of existing feature gate flags and validates against the current feature flag set. +// It used during upgrades for ensuring consistency of feature gates used in an existing cluster, that might +// be created with a previous version of kubeadm, with the set of features currently supported by kubeadm +func CheckDeprecatedFlags(f *FeatureList, features map[string]bool) map[string]string { + deprecatedMsg := map[string]string{} + for k := range features { + featureSpec, ok := (*f)[k] + if !ok { + // This case should never happen, it is implemented only as a sentinel + // for removal of flags executed when flags are still in use (always before deprecate, then after one cycle remove) + deprecatedMsg[k] = fmt.Sprintf("Unknown feature gate flag: %s", k) + } + + if featureSpec.PreRelease == featuregate.Deprecated { + if _, ok := deprecatedMsg[k]; !ok { + deprecatedMsg[k] = featureSpec.DeprecationMessage + } + } + } + + return deprecatedMsg +} diff --git a/translations/de.json b/translations/de.json index 4e495e4688d3..919033be6316 100644 --- a/translations/de.json +++ b/translations/de.json @@ -1,953 +1,1219 @@ { - "\"The '{{.minikube_addon}}' addon is disabled": "", - "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "", - "\"{{.machineName}}\" does not exist, nothing to stop": "", - "\"{{.name}}\" profile does not exist, trying anyways.": "", - "'none' driver does not support 'minikube docker-env' command": "", - "'none' driver does not support 'minikube mount' command": "", - "'none' driver does not support 'minikube podman-env' command": "", - "'none' driver does not support 'minikube ssh' command": "", - "'none' driver does not support 'minikube ssh-host' command": "", - "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "", + "\n\n": "", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "'{{.minikube_addon}}' ist kein valides Minikube Addon", + "\"The '{{.minikube_addon}}' addon is disabled": "Das {{.minikube_addon}} Addon ist deaktiviert", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\" wird in der nächsten Version veraltet (deprecated) sein, bitte wechsle zu \"minikube image load\"", + "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "Der Kontext \"{{.context}}\" wurde aktualisiert, um auf {{.hostname}}:{{.port}} zu zeigen", + "\"{{.machineName}}\" does not exist, nothing to stop": "\"{{.machineName}}\" existiert nicht, nichts zum Stoppen", + "\"{{.name}}\" profile does not exist, trying anyways.": "Das Profil \"{{.name}}\" existiert nicht, versuche dennoch.", + "'none' driver does not support 'minikube docker-env' command": "Der 'none' Treiber unterstützt den Befehl 'minikube docker-env' nicht", + "'none' driver does not support 'minikube mount' command": "Der 'none' Treiber unterstützt den Befehl 'minikube mount' nicht", + "'none' driver does not support 'minikube podman-env' command": "Der 'none' Treiber unterstützt den Befehl 'minikube podman-env' nicht", + "'none' driver does not support 'minikube ssh' command": "Der 'none' Treiber unterstützt den Befehl 'minikube ssh' nicht", + "'none' driver does not support 'minikube ssh-host' command": "Der 'none' Treiber unterstützt den Befehl 'minikube ssh-host' nicht", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" um sich mit SSH in den Minikube Node zu verbinden.\n- \"minikube docker-env\" um die docker-cli auf Docker in Minikube umzuleiten.\n- \"minikube image\" um Images ohne Docker zu bauen.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" um auf den Minikube Node mit ssh zuzugreifen.\n \"minikube image\" um ein Image ohne Docker zu bauen.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" um auf den Minikube Node mit ssh zuzugreifen.\n- \"minikube podman-env\" um die podman cli auf die podman cli im Minikube umzuleiten\n- \"minikube image\" um Images ohne Docker zu bauen.", + "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "- Löschen und Neu-Erstellen des Minikube Cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}", "- Docs https://docs.docker.com/docker-for-mac/#resources": "", "- Docs https://docs.docker.com/docker-for-windows/#resources": "", - "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "", - "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "", - "- Restart your {{.driver_name}} service": "", - "- {{.logPath}}": "", - "--kvm-numa-count range is 1-8": "", - "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", - "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", + "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "Stellen Sie sicher, dass der {{.driver_name}} Daemon genug CPU/RAM Resourcen zur Verfügung hat.", + "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "- Unnötige {{.driver_name}} Images, Volumes, Netzwerke und nicht mehr verwendete Container aufräumen.\n\n\t\t\t\t{{.driver_name}} system prune --volumes", + "- Restart your {{.driver_name}} service": "Starten Sie den {{.driver_name}} Service neu", + "--container-runtime must be set to \"containerd\" or \"cri-o\" for rootless": "--container-runtime muss für rootless auf \"containerd\" oder \"cri-o\" gesetzt sein", + "--kvm-numa-count range is 1-8": "Der Wertebereich für --kvm-numa-count ist 1-8", + "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "Der Parameter --network kann nur mit dem docker/podman und den KVM Treibern verwendet werden, er wird ignoriert werden", + "--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored": "--network flag kann nur mit docker/podman, KVM und Qemu Treibern verwendet werden", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "--network muss entweder 'builtin' oder 'socket_vmnet' enthalten, wenn der QEMU Treiber verwendet wird", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "--static-ip ist nur für Docker und Podman Treiber implementiert, der Parameter wird ignoriert", + "--static-ip overrides --subnet, --subnet will be ignored": "--static-ip überschreibt --subnet, --subnet wird ignoriert werden", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Erstellen Sie den Cluster mit Kubernetes {{.new}} neu, indem Sie folgende Befehle ausführen:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Erstellen Sie einen zweiten Cluster mit Kubernetes {{.new}}, indem Sie folgende Befehle ausführen:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Verwenden Sie den existierenden Cluster mit Version {{.old}} von Kubernetes, indem Sie folgende Befehle ausführen:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Klicken Sie auf das \"Docker für Desktop\" Menu Icon\n\t\t\t2. Klicken Sie auf \"Einstellungen\"\n\t\t\t3. Klicken Sie auf \"Resourcen\"\n\t\t\t4. Erhöhen Sie den Wert von \"CPUs\" auf 2 oder mehr\n\t\t\t5. Klicken Sie auf \"Anwenden \u0026 Neustarten\"", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Klicken Sie auf das \"Docker für Desktop\" Menu Icon\n\t\t\t2. Klicken Sie auf \"Einstellungen\"\n\t\t\t3. Klicken Sie auf \"Resourcen\"\n\t\t\t4. Erhöhen Sie den Wert von \"Speicher\" auf {{.recommend}} oder mehr\n\t\t\t5. Klicken Sie auf \"Anwenden \u0026 Neustarten\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. Öffnen Sie \"Docker Desktop\" indem Sie das Docker Icon im System Tray anklicken\n\t\t2. Klicken Sie auf \"Einstellungen\"\n\t\t3. Klicken Sie auf \"Resourcen\"\n\t\t4. Erhöhen Sie den Wert von \"CPUs\" auf 2 oder mehr\n\t\t\t5. Klicken Sie auf \"Anwenden \u0026 Neustarten\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "\"1. Öffnen Sie \\\"Docker Desktop\\\" indem Sie das Docker Icon im System Tray anklicken\\n\\t\\t2. Klicken Sie auf \"Einstellungen\"\n\t\t\t3. Klicken Sie auf \"Resourcen\"\n\t\t\t4. Erhöhen Sie den Wert von \"Speicher\" auf {{.recommend}} oder mehr\n\t\t\t5. Klicken Sie auf \"Anwenden \u0026 Neustarten\"", "==\u003e Audit \u003c==": "", - "==\u003e Last Start \u003c==": "", - "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "", - "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "", - "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", - "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "", - "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "==\u003e Last Start \u003c==": "==\u003e Letzter Start \u003c==", + "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "Ein VPN oder eine Firewall beeinflussen den HTTP Zugriff zur Minikube VM. Versuchen Sie alternativ einen anderen VM Treiber zu verwenden: https://minikube.sigs.k8s.io/docs/start/", + "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "Eine Firewall blockiet den Zugriff von Docker aus der Minikube VM auf das Image Repository. Eventuell müssen Sie --image-repository angeben oder einen Proxy verwenden.", + "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "Eine Firewall greift in Minikubes Fähigkeit ausgehende HTTPS Anfragen zu machen ein. Eventuell müssen Sie den Wert der HTTPS_PROXY Umgebungsvariable anpassen.", + "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "Eine Firewall verhindert sehr wahrscheinlich den Zugriff von Minikube auf das Internet. Wahrscheinlich müssen Sie den Zugriff von Minikube über einen Proxy konfigurieren.", + "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Eine Menge von API-Server IP Adressen, die in den für Kubernetes generierten Zertifikaten verwendet werden. Dies kann verwendet werden, falls Sie den API-Server außerhalb der Maschine zugänglich machen möchten", "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Eine Reihe von IP-Adressen des API-Servers, die im generierten Zertifikat für Kubernetes verwendet werden. Damit kann der API-Server von außerhalb des Computers verfügbar gemacht werden.", - "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Eine Menge von API-Server Namen, die in den für Kubernetes generierten Zertifikaten verwendet werden. Dies kann verwendet werden, falls Sie den API-Server außerhalb der Maschine zugänglich machen möchten", "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Eine Reihe von Namen des API-Servers, die im generierten Zertifikat für Kubernetes verwendet werden. Damit kann der API-Server von außerhalb des Computers verfügbar gemacht werden.", "A set of key=value pairs that describe configuration that may be passed to different components.\nThe key should be '.' separated, and the first part before the dot is the component to apply the configuration to.\nValid components are: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler\nValid kubeadm parameters:": "Eine Reihe von Schlüssel/Wert-Paaren, die eine Konfiguration beschreiben, die an verschiedene Komponenten weitergegeben wird.\nDer Schlüssel sollte durch \".\" getrennt werden. Der erste Teil vor dem Punkt bezeichnet die Komponente, auf die die Konfiguration angewendet wird.\nGültige Komponenten sind: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler\nGültige Parameter für kubeadm:", "A set of key=value pairs that describe feature gates for alpha/experimental features.": "Eine Reihe von Schlüssel/Wert-Paaren, die Funktions-Gates für Alpha- oder experimentelle Funktionen beschreiben.", - "Access the Kubernetes dashboard running within the minikube cluster": "", - "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", - "Add SSH identity key to SSH authentication agent": "", - "Add an image to local cache.": "", - "Add host key to SSH known_hosts file": "", - "Add image to cache for all running minikube clusters": "", - "Add machine IP to NO_PROXY environment variable": "", - "Add, delete, or push a local image into minikube": "", - "Add, remove, or list additional nodes": "", - "Adding node {{.name}} to cluster {{.cluster}}": "", - "Additional help topics": "", - "Additional mount options, such as cache=fscache": "", - "Adds a node to the given cluster config, and starts it.": "", - "Adds a node to the given cluster.": "", - "Advanced Commands:": "", - "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "", - "Aliases": "", - "All existing scheduled stops cancelled": "", - "Allow user prompts for more information": "", - "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Alternatives Bild-Repository zum Abrufen von Docker-Images. Dies ist hilfreich, wenn Sie nur eingeschränkten Zugriff auf gcr.io haben. Stellen Sie \\\"auto\\\" ein, dann wählt minikube eins für sie aus. Nutzer vom chinesischen Festland können einen lokalen gcr.io-Mirror wie registry.cn-hangzhou.aliyuncs.com/google_containers verwenden.", + "Access the Kubernetes dashboard running within the minikube cluster": "Zugriff auf das Kubernetes Dashboard, welches im Minikube Cluster läuft", + "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "Der Zugriff auf Ports unter 1024 kann unter Windows mit OpenSSH Clients älter als v8.1 fehlschlagen. Für weitere Informationen siehe: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission", + "Add SSH identity key to SSH authentication agent": "SSH Identitäts-Schlüssel zu SSH Authentifizierungs-Agenten hinzufügen", + "Add an image into minikube as a local cache, or delete, reload the cached images": "Ein Image zu Minikube als lokalen Cache hinzufügen oder löschen oder die gecachten Images erneut laden", + "Add an image to local cache.": "Ein Image dem lokalen Cache hinzufügen.", + "Add host key to SSH known_hosts file": "Einen Host-Schlüssel zur SSH known_hosts Datei hinzufügen", + "Add image to cache for all running minikube clusters": "Ein Image zum Cache aller laufender Minikube Cluster hinzufügen", + "Add machine IP to NO_PROXY environment variable": "Die IP der Maschine zur NO_PROXY Umgebungsvariable hinzufügen", + "Add, delete, or push a local image into minikube": "Lokales Image zu Minikube hinzufügen, löschen oder pushen", + "Add, remove, or list additional nodes": "Hinzufügen, Löschen oder auflisten von zusätzlichen Nodes", + "Adding a control-plane node is not yet supported, setting control-plane flag to false": "Das Hinzufügen eines Control-Plane Nodes wird derzeit noch nicht unterstützt, setze control-plane Parameter auf 'false'", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "Das Hinzufügen eines Control-Plane Nodes zu einem nicht-HA (nicht mit mehreren Control-Plane-Nodes) Clusters wird derzeit nicht unterstützt. Bitte löschen Sie zuerst den Cluster und verwenden Sie 'minikube start --ha' um einen neuen zu erstellen.", + "Adding node {{.name}} to cluster {{.cluster}}": "Node {{.name}} zu Cluster {{.cluster}} hinzufügen", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "Node {{.name}} zu Cluster {{.cluster}} als {{.roles}} hinzufügen", + "Additional help topics": "Weitere Hilfe-Themen", + "Adds a node to the given cluster config, and starts it.": "Fügt einen Node zur angegebenen Cluster-Konfiguration hinzu und startet es.", + "Adds a node to the given cluster.": "Fügt einen Node zum angegebenen Cluster hinzu.", + "Advanced Commands:": "Fortgeschrittene Befehle:", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "Nachdem das Addon aktiviert wurde, führen Sie bitte \"minikube tunnel\" aus, dann sind ihre Resourcen über \"127.0.0.1\" erreichbar", + "Aliases": "Aliase", + "All existing scheduled stops cancelled": "Alle derzeit existierenden und geplanten Stops wurden storniert.", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "", + "Allow pods to use your GPUs. Options include: [all,nvidia] (Docker driver with Docker container-runtime only)": "Erlaube PODs auf die Grafikkarten zuzugreifen. Mögliche Optionen: [all,nvidia,amd] (nur für Docker Treiber mit Docker Container Runtime)", + "Allow user prompts for more information": "Benutzer-Eingabeaufforderungen für zusätzliche Informationen zulassen", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Alternatives Bild-Repository zum Abrufen von Docker-Images. Dies ist hilfreich, wenn Sie nur eingeschränkten Zugriff auf gcr.io haben. Stellen Sie \"auto\" ein, dann wählt minikube eins für sie aus. Nutzer vom chinesischen Festland können einen lokalen gcr.io-Mirror wie registry.cn-hangzhou.aliyuncs.com/google_containers verwenden.", + "Alternatively you could install one of these drivers:": "Alternativ könnten Sie einen dieser Treiber installieren:", "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Größe des der minikube-VM zugewiesenen Arbeitsspeichers (Format: \u003cNummer\u003e [\u003cEinheit\u003e], wobei Einheit = b, k, m oder g)", - "Amount of time to wait for a service in seconds": "", - "Amount of time to wait for service in seconds": "", - "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "", - "Another minikube instance is downloading dependencies... ": "", - "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "", - "At least needs control plane nodes to enable addon": "", - "Automatically selected the {{.driver}} driver": "", - "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "", - "Available Commands": "", - "Basic Commands:": "", - "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "", + "Amount of time to wait for a service in seconds": "Zeit in Sekunden, die auf einen Service gewartet werden soll", + "Amount of time to wait for service in seconds": "Zeit in Sekunden, die auf einen Service gewartet werden soll", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "Ein anderer Hypervisor (wie z.B. VirtualBox) steht im Konflikt mit KVM. Bitte stoppen Sie den anderen Hypervisor oder verwenden Sie --driver um den Hypervisor zu wechseln.", + "Another minikube instance is downloading dependencies... ": "Eine andere Minikube-Instanz lädt Abhängigkeiten herunter... ", + "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "Ein anderes Programm benutzt eine Datei, die Minikube benötigt. Wenn Sie Hyper-V verwenden, versuchen Sie die minikube VM aus dem Hyper-V Manager heraus zu stoppen", + "Another tunnel process is already running, terminate the existing instance to start a new one": "Ein anderer Tunnel Prozess läuft bereits, beenden Sie die existierende Instanz um eine neue starten zu können", + "At least needs control plane nodes to enable addon": "Benötige mindestens Control Plane Nodes um das Addon zu aktivieren", + "Auto-pause is already enabled.": "Auto-pause ist bereits aktiviert.", + "Automatically selected the {{.driver}} driver": "Treiber {{.driver}} wurde automatisch ausgewählt", + "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Treiber {{.driver}} wurde automatisch ausgewählt. Andere Möglichkeiten: {{.alternates}}", + "Automatically selected the {{.network}} network": "Netzwerk {{.network}} wurde automatisch ausgewählt.", + "Available Commands": "Verfügbare Befehle", + "Basic Commands:": "Grundlegende Befehle:", + "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Weil Sie einen Docker Treiber auf {{.operating_system}} verwenden, muss das Terminal während des Ausführens offen bleiben.", "Bind Address: {{.Address}}": "", - "Booting up control plane ...": "", - "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "", - "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", - "Build a container image in minikube": "", - "Build a container image, using the container runtime.": "", - "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", - "Cache image from docker daemon": "", - "Cache image from remote registry": "", - "Cannot find directory {{.path}} for copy": "", - "Cannot find directory {{.path}} for mount": "", - "Cannot use both --output and --format options": "", - "Check if you have unnecessary pods running by running 'kubectl get po -A": "", - "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", - "Check that libvirt is setup properly": "", - "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", - "Check that the provided apiserver flags are valid, and that SELinux is disabled": "", - "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "", - "Choose a smaller value for --memory, such as 2000": "", - "ChromeOS is missing the kernel support necessary for running Kubernetes": "", - "Cluster was created without any CNI, adding a node to it might cause broken networking.": "", - "Configuration and Management Commands:": "", - "Configure a default route on this Linux host, or use another --driver that does not require it": "", - "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", - "Configure environment to use minikube's Docker daemon": "", - "Configure environment to use minikube's Podman service": "", - "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "", - "Configuring RBAC rules ...": "", - "Configuring local host environment ...": "", - "Configuring {{.name}} (Container Networking Interface) ...": "", - "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "", - "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "", - "Connect to LoadBalancer services": "", - "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", - "Consider increasing Docker Desktop's memory size.": "", - "Continuously listing/getting the status with optional interval duration.": "", - "Control Plane could not update, try minikube delete --all --purge": "", - "Copy the specified file into minikube": "", - "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "", - "Could not determine a Google Cloud project, which might be ok.": "", - "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "", - "Could not process error from failed deletion": "", - "Could not process errors from failed deletion": "", - "Could not resolve IP address": "", + "Booting up control plane ...": "Starte Control-Plane ...", + "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "Sowohl driver={{.driver}} als auch vm-dirver={{.vmd}} wurden gesetzt.\n\n Da vm-driver veraltet (deprecated) ist, wird Minikube auf den Treiber driver={{.driver}} zurückfallen.\n\n Wenn ein VM-Treiber in der globalen Konfiguration gesetzt wurde, führen Sie bitte \"minikube config unset vm-driver\" aus um diese Warnung zu beheben.\n\t\t\t", + "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "Das CNI Bridge ist inkompatibel mit einem Multi-Node Cluster, bitte verwenden Sie ein anderes CNI", + "Build a container image in minikube": "Ein Container Image in Minikube bauen", + "Build a container image, using the container runtime.": "Ein Container Image mit Hilfe der Container Runtime bauen.", + "Build image on all nodes.": "Baue Image auf allen Nodes.", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "CGroup Zuteilung ist nicht verfügbar in Ihrer Umgebung, eventuell läuft Minikube in einem weiteren Container. Versuchen Sie folgendes auszuführen:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "CGroup Zuteilung ist nicht verfügbar in Ihrer Umgebung, eventuell läuft Minikube in einem weiteren Container. Versuchen Sie folgendes auszuführen:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "Zu verwendendes CNI Plugin. Valide Were sind: auto, bridge, calico, cilium, flannel, kindnet, oder einen Pfad zu einem CNI Manifest (default: auto)", + "Cache image from docker daemon": "Image von Docker Daemon cachen", + "Cache image from remote registry": "Image von entfernter Registry cachen", + "Cache image to docker daemon": "Image zum Docker Daemon cachen", + "Cache image to remote registry": "Image in entfernter Docker Registry cachen", + "Cannot find directory {{.path}} for copy": "Kann das Verzeichnis {{.path}} fürs Kopieren nicht finden.", + "Cannot find directory {{.path}} for mount": "Kann das Verzeichnis {{.path}} fürs Einhängen nicht finden.", + "Cannot use both --output and --format options": "--output und --format können nicht gleichzeitig verwendet werden", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "Die Option --no-kubernetes kann nicht mit dem {{.name}} Treiber verwendet werden", + "Certificate {{.certPath}} has expired. Generating a new one...": "Das Zertifikat {{.certPath}} ist ausgelaufen. Generiere ein neues...", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "Das Ändern des API Server Ports eines existierenden Minikube HA (mehrere Control-Plane Nodes) Clusters wird derzeit nicht unterstützt. Bitte löschen Sie erst den Cluster.", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "Das Ändern des HA (mehrere Control Plane) Modus eines existierenden Minikube Clusters wird derzeit nicht unterstützt. Bitte löschen Sie erst den Cluster und verwenden Sie 'minikube start --ha' um einen neuen zu erstellen.", + "Check if you have unnecessary pods running by running 'kubectl get po -A": "Prüfen Sie, ob sie unnötige PODs laufen haben, indem Sie folgenden Befehl ausführen: 'kubectl get po -A", + "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "Prüfen Sie die Ausgabe von 'journalctl -xeu kubelet', versuchen Sie --extra-config=kubelet.cgroup-driver=systemd beim Starten von Minikube zu verwenden", + "Check that libvirt is setup properly": "Prüfen Sie, ob libvirt korrekt eingerichtet wurde", + "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "Prüfen Sie, dass Minikube läuft und dass Sie den korrekten Namespace (-n Parameter) angegeben haben, falls notwendig.", + "Check that the provided apiserver flags are valid, and that SELinux is disabled": "Prüfen Sie, dass die angegebenen API-Server Parameter valide sind und dass SELinux deaktiviert ist", + "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "Prüfen Sie Ihre Firewall-Regeln auf Konflikte und starten Sie 'virt-host-validate' um die KVM Konfiguration auf Probleme zu prüfen. Wenn Sie Minikube in einer VM ausführen, erwägen Sie --driver=none zu verwenden", + "Choose a smaller value for --memory, such as 2000": "Wählen Sie einen schmaleren Wert für --memory (z.B. 2000)", + "ChromeOS is missing the kernel support necessary for running Kubernetes": "ChromeOS besitzt nicht die notwendige Kernel-Unterstützung um Kubernetes auszuführen", + "Cluster was created without any CNI, adding a node to it might cause broken networking.": "Der Cluster wurde ohne CNI erstellt, das Hinzufügen eines Nodes kann zu einem kaputten Netzwerk-Setup führen", + "Configuration and Management Commands:": "Konfigurations- und Management-Befehle:", + "Configure a default route on this Linux host, or use another --driver that does not require it": "Konfigurieren Sie eine Default-Route auf diesem Linux Host oder verwenden Sie einen anderen --driver, die dies nicht benötigt", + "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "Konfigurieren Sie einen externen Netzwerk-Switch mit Hilfe der offiziellen Dokumentation, dann fügen Sie `--hyperv-virtual-switch=\u003cswitch-name\u003e` zum Start-Befehl `minikube start` hinzu", + "Configure environment to use minikube's Docker daemon": "Konfiguriere die Umgebung um Minikubes Docker daemon zu verwenden", + "Configure environment to use minikube's Podman service": "Konfiguriere die Umgebung um Minikubes Podman Service zu verwenden", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "Konfiguriert das Addon mit Name ADDON_NAME in Minikube (Beispiel: minikube addons configure registry-creds). Eine Liste aller verfügbaren Addons erhält man mit: minikube addons list", + "Configuring RBAC rules ...": "Konfiguriere RBAC Regeln ...", + "Configuring local host environment ...": "Konfiguriere Umgebung des lokalen Hosts ...", + "Configuring {{.name}} (Container Networking Interface) ...": "Konfiguriere {{.name}} (Container Networking Interface) ...", + "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "Stellen Sie sicher, dass Sie eine funktionierende Internet-Verbindung haben und dass die erforderlichen Resourcen für die VM nicht ausgegangen sind: 'minikube logs'", + "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "Prüfen Sie, dass sie den korrekten Wert bei --hyperv-virtual-switch angegeben haben mit Hilfe des 'Get-VMSwitch' Befehls", + "Connect to LoadBalancer services": "Verbinde mit LoadBalancer Services", + "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "Erwägen Sie einen Cluster mit größerer", + "Consider increasing Docker Desktop's memory size.": "Erwägen Sie die Speichergröße für Docker-Desktop zu erhöhen.", + "Continuously listing/getting the status with optional interval duration.": "Zeige bzw. hole den Status kontinuierlich mit optionaler Angabe des Zeit-Intervalls", + "Control Plane could not update, try minikube delete --all --purge": "Control-Plane konnte nicht aktualisieren, versuchen Sie minikube delete --all --purge", + "Copy the specified file into minikube": "Kopiere die angegebene Datei in Minikube", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "Kopiere die angegebene Datei in Minikube. Die Datei wird unter dem Pfad \u003cZiel Datei absoluter Pfad\u003e in Ihrer Minikube Instanz gespeichert.\nDer Default-Ziel-Node ist die Control-Plane. Wenn der \u003cName des Quell Nodes\u003e nicht angegeben ist, wird versucht vom Host zu kopieren.\n\nBefehls-Beispiel : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"", + "Could not determine a Google Cloud project, which might be ok.": "Konnte Google Cloud Projekt nicht ermitteln, was OK sein könnte.", + "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "Konnte keine GCP Credentials finden. Führen Sie entweder `gcloud auth application-default login` aus oder setzen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Pfad zu Ihrer Konfigurations-Datei.", + "Could not process error from failed deletion": "Konnte den Fehler der fehlgeschlagenen Löschung nicht verarbeiten", + "Could not process errors from failed deletion": "Konnte die Fehler der fehlgeschlagenen Löschung nicht verarbeiten", + "Could not resolve IP address": "Konnte IP-Adresse nicht auflösen", "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "Ländercode des zu verwendenden Image Mirror. Lassen Sie dieses Feld leer, um den globalen zu verwenden. Nutzer vom chinesischen Festland stellen cn ein.", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "Erstelle einen HA Cluster mit mehreren Control-Plane Nodes mit einem Minimum von drei Control-Plane Nodes, welche auch zur Verwendung als Worker markiert werden.", "Creating mount {{.name}} ...": "Bereitstellung {{.name}} wird erstellt...", - "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "", - "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "Current context is \"{{.context}}\"": "", - "DEPRECATED, use `driver` instead.": "", - "DEPRECATED: Replaced by --cni=bridge": "", - "Default group id used for the mount": "", - "Default user id used for the mount": "", - "Delete an image from the local cache.": "", - "Deletes a local Kubernetes cluster": "", - "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "Erstelle {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Speicher={{.memory_size}}MB) ...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Erstelle {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Speicher={{.memory_size}}MB, Disk={{.disk_size}}MB ...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "Erstelle {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...", + "Current context is \"{{.context}}\"": "Der aktuelle Kontext ist \"{{.context}}\"", + "DEPRECATED, use `driver` instead.": "Veraltet, benuzten Sie `driver` stattdessen.", + "DEPRECATED: Replaced by --cni": "DEPRECATED: Ersetzt durch --cni", + "DEPRECATED: Replaced by --cni=bridge": "Veraltet: Wurde durch --cni=bridge ersetzt", + "Delete an image from the local cache.": "Lösche ein Image aus dem lokalen Cache.", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "Löschen Sie den existierenden {{.name}} Cluster mittels: '{{.delcommand}}' oder starten Sie den existierenden '{{.name}}' Cluster mittels: '{{.command}} --driver={{.old}}", + "Deletes a local Kubernetes cluster": "Löscht einen lokalen Kubernetes Cluster", + "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Löscht einen lokalen Kubernetes Cluster. Dieser Befehl löscht die VM und entfernt alle\nzugehörigen Dateien.", "Deletes a local kubernetes cluster. This command deletes the VM, and removes all associated files.": "Damit wird ein lokaler Kubernetes-Cluster gelöscht. Mit diesem Befehl wird die VM entfernt und alle zugehörigen Dateien gelöscht.", - "Deletes a node from a cluster.": "", - "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "{{.profile_name}}\" in {{.driver_name}} wird gelöscht...", - "Deleting container \"{{.name}}\" ...": "", - "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", - "Deleting node {{.name}} from cluster {{.cluster}}": "", + "Deletes a node from a cluster.": "Löscht einen Node aus einem Cluster.", + "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "\"{{.profile_name}}\" in {{.driver_name}} wird gelöscht...", + "Deleting container \"{{.name}}\" ...": "Lösche Container \"{{.name}}\" ...", + "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "Lösche den existierenden Cluster {{.name}} mit unterschiedlichem Treiber {{.driver_name}} aufgrund des vom Benutzer gesetzten --delete-on-failure Parameters. ", + "Deleting node {{.name}} from cluster {{.cluster}}": "Lösche Node {{.name}} von Cluster {{.cluster}}", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "", + "Directory to output licenses to": "Verzeichnis um Lizenzen zu speichern", "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "Deaktivieren Sie die Überprüfung der Verfügbarkeit der Hardwarevirtualisierung vor dem Starten der VM (nur Virtualbox-Treiber)", - "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", - "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", + "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "Deaktiveren Sie die dynmaische Memory-Verwaltung in ihrem VM manager oder verwenden Sie einen größeren --memory Wert", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "Deaktiviere das Addon mit dem Namen ADDON_NAME in Minikube (Beispiel: minikube addons disable dashboard). Um eine Liste aller verfügbaren Addons zu erhalten, führen Sie folgenden Befehl aus: minikube addons list ", "Disables the filesystem mounts provided by the hypervisors": "Deaktiviert die von den Hypervisoren bereitgestellten Dateisystembereitstellungen", "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Größe des der minikube-VM zugewiesenen Festplatte (Format: \u003cNummer\u003e [\u003cEinheit\u003e], wobei Einheit = b, k, m oder g)", - "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "", - "Display dashboard URL instead of opening a browser": "", - "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "", - "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "", - "Display values currently set in the minikube config file": "", - "Display values currently set in the minikube config file.": "", - "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "", - "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "", - "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "", - "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "", - "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", - "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", - "Docs have been saved at - {{.path}}": "", - "Documentation: {{.url}}": "", - "Done! kubectl is now configured to use \"{{.name}}": "Fertig! kubectl ist jetzt für die Verwendung von \"{{.name}} konfiguriert", - "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Größe des der minikube-VM zugewiesenen Festplatte (Format: \u003cNummer\u003e [\u003cEinheit\u003e], wobei Einheit = b, k, m oder g).", + "Display dashboard URL instead of opening a browser": "Zeige Dashboard URL an, anstatt diese im Browser zu öffnen.", + "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "Zeige die Kubernetes Addons URL in der Komandozeile, anstatt sie im Standard-Browser zu öffnen", + "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "Zeige die Kubernetes Service URL in der Kommandozeile, anstatt sie im Standard-Browser zu öffnen", + "Display values currently set in the minikube config file": "Zeige aktuell in der Minikube Konfigurationsdatei festgelegten Werte", + "Display values currently set in the minikube config file.": "Zeige aktuell in der Minikube Konfigurationsdatei festgelegten Werte.", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", + "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "Docker Desktop ist mit weniger als 2 CPUs konfiguriert, aber Kubernetes benötigt mindestens 2 CPUs", + "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Docker Desktop ist für Windows Container konfiguriert, aber für Minikube sind Linux Container erforderlich", + "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Docker Desktop hat nur {{.size}}MiB verfügbar, weniger als die mindestens erforderlichen {{.req}}MiB für Kubernetes", + "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "Docker Desktop hat nur {{.size}}MiB verfügbar, möglicherweise kommt es zu Application Deployment Fehlern.", + "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "Docker Container wurde nach dem Start frühzeitig beendet, erwögen Sie die Performance und Gesundheit von Docker zu überprüfen", + "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "Docker hat weniger als 2 CPUs zur Verfügung, aber Kubernetes benötigt mindestens 2", + "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "Docker in der VM ist nicht verfügbar. Versuchen sie die VM mit 'minikube delete' zurückzusetzen.", + "Docs have been saved at - {{.path}}": "Dokumentation wurde gespeichert unter - {{.path}}", + "Documentation: {{.url}}": "Dokumentation: {{.url}}", + "Done! kubectl is now configured to use \"{{.name}}": "Fertig! kubectl ist jetzt für die Verwendung von \"{{.name}}\" konfiguriert", + "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "Fertig! kubectl ist jetzt für die standardmäßige (default) Verwendung des Clusters \"{{.name}}\" und des Namespaces \"{{.ns}}\" konfiguriert", "Done! kubectl is now configured to use \"{{.name}}__1": "Fertig! kubectl ist jetzt für die Verwendung von \"{{.name}}\" konfiguriert", + "Done! minikube is ready without Kubernetes!": "Fertig! minikube ist ohne Kubernetes bereit!", "Download complete!": "Download abgeschlossen!", - "Downloading Kubernetes {{.version}} preload ...": "", - "Downloading VM boot image ...": "", - "Downloading driver {{.driver}}:": "", - "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "", - "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", - "ERROR creating `registry-creds-acr` secret": "", - "ERROR creating `registry-creds-dpr` secret": "", - "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", - "ERROR creating `registry-creds-gcr` secret: {{.error}}": "", - "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "", - "Enable addons. see `minikube addons list` for a list of valid addon names.": "", + "Downloading Kubernetes {{.version}} preload ...": "Lade Kubernetes {{.version}} herunter ...", + "Downloading VM boot image ...": "Lade VM boot image herunter ...", + "Downloading driver {{.driver}}:": "Lade Treiber {{.driver}} herunter:", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "Aufgrund von DNS-Problemen könnte der Cluster Probleme beim Starten haben und möglicherweise nicht in der Lage sein Images zu laden.\nWeitere Informationen finden sich unter: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as docker or {{.driver}}.\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}/\n\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "Aufgrund von Änderungen in macOS 13+ unterstützt Minikube derzeit VirtualBox nicht. Sie können alternative Treiber verwenden, wie z.B. Docker oder {{.driver}}.\nhttps://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}/\n\n Weitere Informationen finden sich in folgendem Issue: https://github.com/kubernetes/minikube/issues/15274\n", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "Dauer der Inaktivität bevor die Minikube VM pausiert wird (default 1m0s)", + "Duration of inactivity before the minikube VM is paused (default 1m0s). To disable, set to 0s": "Dauer von Inaktivität bevor Minikube VMs pausiert werden (default 1m0s). Zum deaktivieren, den Wert auf 0s setzen", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "Dauer bis das Minikube-Zertifikat abläuft, Default ist drei Jahre (26280 Stunden).", + "ERROR creating `registry-creds-acr` secret": "Fehler beim Erstellen des `registry-creds-acr` Secrets", + "ERROR creating `registry-creds-dpr` secret": "Fehler beim Erstellen des `registry-creds-dpr` Secrets", + "ERROR creating `registry-creds-ecr` secret: {{.error}}": "Fehler beim Erstellen des `registry-creds-ecr` Secrets: {{.error}}", + "ERROR creating `registry-creds-gcr` secret: {{.error}}": "Fehler beim Erstellen des `registry-creds-gcr` Secrets: {{.error}}", + "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "Entweder ist systemctl nicht installiert oder die Docker-Installation ist kaputt. Staten Sie 'sudo systemctl start docker' und 'journalctl -u docker'", + "Enable addons. see `minikube addons list` for a list of valid addon names.": "Aktiviere Addons. Führen Sie `minikube addons list` aus, um eine Liste verfügbarer Addons angezeigt zu bekommen.", "Enable experimental NVIDIA GPU support in minikube": "Experimentellen NVIDIA GPU-Support in minikube aktivieren", "Enable host resolver for NAT DNS requests (virtualbox driver only)": "Host Resolver für NAT DNS-Anfragen aktivieren (nur Virtualbox-Treiber)", - "Enable or disable a minikube addon": "", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "", + "Enable or disable a minikube addon": "Aktiviere oder deaktiviere ein Minikube Addon", "Enable proxy for NAT DNS requests (virtualbox driver only)": "Proxy für NAT-DNS-Anforderungen aktivieren (nur Virtualbox-Treiber)", "Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\": "Standard-CNI-Plugin-in (/etc/cni/net.d/k8s.conf) aktivieren. Wird in Verbindung mit \"--network-plugin = cni\" verwendet", - "Enabled addons: {{.addons}}": "", - "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "", - "Enabling '{{.name}}' returned an error: {{.error}}": "", - "Enabling dashboard ...": "", - "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "", - "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "", - "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "", - "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "", - "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "", - "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "", - "Ensure the tmp directory path is writable to the current user.": "", - "Ensure you have at least 20GB of free disk space.": "", - "Ensure your {{.driver_name}} is running and is healthy.": "", + "Enabled addons: {{.addons}}": "Addons aktiviert: {{.addons}}", + "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "Aktiviert das Addon mit dem Name ADDON_NAME in Minikube. Um eine Liste aller verfügbaren Addons angezeigt zu bekommen, verwenden Sie: minikube addons list ", + "Enabling '{{.name}}' returned an error: {{.error}}": "Das Aktivieren von '{{.name}} lieferte einen Fehler zurück: {{.error}}", + "Enabling dashboard ...": "Aktiviere Dashboard ...", + "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "Versichern Sie sich, dass CRI-O installiert und funktional ist: Führen Sie 'sudo systemctl start crio' und 'journalctl -u crio' aus. Alternativ verwenden Sie --container-runtime=docker", + "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "Versichern Sie sich, dass Docker installiert und funktional ist: Führen Sie 'sudeo systemctl start docker' und 'journalctl -u docker' aus. Alternativ verwenden Sie einen anderen Wert für --driver", + "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "Stellen Sie sicher, dass die erforderliche 'pids' cgroup auf Ihrem Host aktiviert ist: grep pids /proc/cgroups", + "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "Stellen Sie sicher, dass der User, der in /etc/libvirt/qemu.conf konfiguriert ist, Zugriff auf Ihr Home Verzeichnis hat", + "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "Stellen Sie sicher, dass Sie Mitglied in der passenden libvirt Gruppe sind (Denken Sie daran, sich neu anzumelden, damit Gruppen-Änderungen in Kraft treten!)", + "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "Stellen Sie sicher, dass die Umgebungsvariable HTTPS_PROXY auf einen HTTPS Proxy konfiguriert ist und nicht nur auf einen HTTP Proxy", + "Ensure the tmp directory path is writable to the current user.": "Stellen Sie sicher, dass der aktuelle User in das tmp Verzeichnis schreiben darf.", + "Ensure you have at least 20GB of free disk space.": "Stellen Sie sicher, dass sie mindestens 20 GB freien Plattenplatz haben.", + "Ensure your {{.driver_name}} is running and is healthy.": "Stellen Sie sicher, dass {{.driver_name}} läuft und gesund (healthy) ist.", "Environment variables to pass to the Docker daemon. (format: key=value)": "Umgebungsvariablen, die an den Docker-Daemon übergeben werden. (Format: Schlüssel = Wert)", - "Environment variables to pass to the build. (format: key=value)": "", + "Environment variables to pass to the build. (format: key=value)": "Umgebungsvariable, die in den Bau weitergegeben werden soll. (format: key=value)", "Error checking driver version: {{.error}}": "Fehler beim Prüfen der Treiberversion: {{.error}}", - "Error code docs have been saved at - {{.path}}": "", - "Error creating minikube directory": "", - "Error creating view template": "", - "Error detecting shell": "", - "Error executing view template": "", - "Error finding port for mount": "", - "Error generating set output": "", - "Error generating unset output": "", - "Error getting cluster bootstrapper": "", - "Error getting cluster config": "", - "Error getting host": "", - "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "", - "Error getting primary control plane": "", - "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "", - "Error getting ssh client": "", - "Error getting the host IP address to use from within the VM": "", - "Error killing mount process": "", - "Error loading profile config: {{.error}}": "", + "Error code docs have been saved at - {{.path}}": "Fehler-Code Dokumente wurden gespeichert unter - {{.path}}", + "Error creating minikube directory": "Fehler beim Erstellen des minikube Verzeichnisses", + "Error creating view template": "Fehler beim Erstellen der View Vorlage", + "Error detecting shell": "Fehler beim Erkennen der Shell", + "Error executing view template": "Fehler beim Ausführen der View Vorlage", + "Error finding port for mount": "Fehler bei der Suche eines Ports für mount", + "Error generating set output": "Fehler beim Generieren der set-Ausgabe", + "Error generating unset output": "Fehler beim Generieren der unset-Ausgabe", + "Error getting cluster bootstrapper": "Fehler beim Ermitteln des Cluster Bootstrapper", + "Error getting cluster config": "Fehler beim Ermitteln der Cluster Konfiguration", + "Error getting control-plane node": "Fehler beim Ermitteln der Control-Plan Node", + "Error getting host": "Fehler beim Ermitteln des Hosts", + "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "Fehler beim Binden des Ports für den Treiber {{.driver_name}}: {{.error}}", + "Error getting primary control plane": "Fehler beim Ermitteln der primären Control-Plane", + "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "Fehler beim Holen des Services mit Namespace: {{.namespace}} und Label {{.labelName}}.{{.addonName}}: {{.error}}", + "Error getting ssh client": "Fehler beim Holen des ssh Clients", + "Error getting the host IP address to use from within the VM": "Fehler beim Ermitteln der Host IP Addresse, die in der VM verwendet wird", + "Error killing mount process": "Fehler beim Töten des mount Prozesses", + "Error loading profile config: {{.error}}": "Fehler beim Laden der Profil Konfiguration: {{.error}}", "Error loading profile {{.name}}: {{.error}}": "Fehler beim Laden des Profils {{.name}}: {{.error}}", - "Error opening service": "", + "Error opening service": "Fehler beim Öffnen des Service", "Error parsing Driver version: {{.error}}": "Fehler beim Parsen der Driver-Version: {{.error}}", "Error parsing minikube version: {{.error}}": "Fehler beim Parsen der minikube-Version: {{.error}}", - "Error parsing {{.name}}={{.value}}, {{.err}}": "", - "Error reading {{.path}}: {{.error}}": "", - "Error starting cluster": "", - "Error starting mount": "", - "Error while setting kubectl current context : {{.error}}": "", - "Error while setting kubectl current context: {{.error}}": "", - "Error with ssh-add": "", - "Error writing mount pid": "", + "Error parsing {{.name}}={{.value}}, {{.err}}": "Fehler beim Parsen {{.name}}={{.value}}, {{.err}}", + "Error reading {{.path}}: {{.error}}": "Fehler beim Lesen von {{.path}}: {{.error}}", + "Error starting cluster": "Fehler beim Starten des Clusters", + "Error starting mount": "Fehler beim Starten von mount", + "Error while setting kubectl current context : {{.error}}": "Fehler beim Setzen des aktuellen Kontextes für kubectl : {{.error}}", + "Error while setting kubectl current context: {{.error}}": "Fehler beim Setzen des aktuellen Kontextes für kubectl: {{.error}}", + "Error with ssh-add": "Fehler mit ssh-add", + "Error writing mount pid": "Fehler beim Schreiben der mount pid", "Error: You have selected Kubernetes v{{.new}}, but the existing cluster for your profile is running Kubernetes v{{.old}}. Non-destructive downgrades are not supported, but you can proceed by performing one of the following options:\n* Recreate the cluster using Kubernetes v{{.new}}: Run \"minikube delete {{.profile}}\", then \"minikube start {{.profile}} --kubernetes-version={{.new}}\"\n* Create a second cluster with Kubernetes v{{.new}}: Run \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\"\n* Reuse the existing cluster with Kubernetes v{{.old}} or newer: Run \"minikube start {{.profile}} --kubernetes-version={{.old}}": "Fehler: Sie haben Kubernetes v{{.new}} ausgewählt, aber auf dem vorhandenen Cluster für Ihr Profil wird Kubernetes v{{.old}} ausgeführt. Zerstörungsfreie Downgrades werden nicht unterstützt. Sie können jedoch mit einer der folgenden Optionen fortfahren:\n* Erstellen Sie den Cluster mit Kubernetes v{{.new}} neu: Führen Sie \"minikube delete {{.profile}}\" und dann \"minikube start {{.profile}} - kubernetes-version = {{.new}}\" aus.\n* Erstellen Sie einen zweiten Cluster mit Kubernetes v{{.new}}: Führen Sie \"minikube start -p \u003cnew name\u003e --kubernetes-version = {{.new}}\" aus.\n* Verwenden Sie den vorhandenen Cluster mit Kubernetes v {{.old}} oder höher: Führen Sie \"minikube start {{.profile}} --kubernetes-version = {{.old}}\" aus.", - "Examples": "", - "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "", - "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "", + "Examples": "Beispiele", + "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "Das Ausführen von \"{{.command}}\" benötigte eine ungewöhnlich lange Zeit: {{.duration}}", + "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "Der existierenden Disk fehlen neue Features ({{.error}}). Verwenden Sie 'minikube delete' zum Aktualisieren.", "Exiting": "Wird beendet", - "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "", - "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "", - "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "", - "Fail check if container paused": "", - "Failed runtime": "", - "Failed to build image": "", - "Failed to cache and load images": "", - "Failed to cache binaries": "", - "Failed to cache images": "", - "Failed to cache images to tar": "", - "Failed to cache kubectl": "", + "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "Terminiere aufgrund von {{.fatal_code}}: {{.fatal_msg}}", + "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "Port, der für das über den Proxy erreichbare Dashboard freigegeben wird. Wenn man 0 angibt, wird ein zufälliger Port ausgewählt.", + "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "Externer Adapter, auf dem der externe Switch erzeugt wird, wenn kein externer Switch gefunden wurde. (nur hyperv Treiber)", + "Fail check if container paused": "Schlägt fehl, wenn der Container pausiert ist", + "Failed removing pid from pidfile: {{.error}}": "Entfernen der PID aus dem Pidfile fehlgeschlagen: {{.error}}", + "Failed runtime": "Runtime fehlgeschlagen", + "Failed to build image": "Bau des Images fehlgeschlagen", + "Failed to cache and load images": "Cachen und laden der Images fehlgeschlagen", + "Failed to cache binaries": "Cachen der Binär-Daten fehlgeschlagen", + "Failed to cache images": "Cachen der Bilder fehlgeschlagen", + "Failed to cache images to tar": "Cachen der Bilder mit tar fehlgeschlagen", + "Failed to cache kubectl": "Cachen von kubectl fehlgeschlagen", "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Fehler beim Ändern der Berechtigungen für {{.minikube_dir_path}}: {{.error}}", - "Failed to check main repository and mirrors for images": "", - "Failed to configure metallb IP {{.profile}}": "", - "Failed to create file": "", - "Failed to create runtime": "", - "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "", - "Failed to delete cluster {{.name}}.": "", + "Failed to check main repository and mirrors for images": "Prüfen des Haupt-Repositories und der Mirrors für Images fehlgeschlagen", + "Failed to configure auto-pause {{.profile}}": "Fehler beim Konfigurieren von auto-pause {{.profile}}", + "Failed to configure metallb IP {{.profile}}": "Konfiguration der metallb IP {{.profile}} fehlgeschlagen", + "Failed to configure registry-aliases {{.profile}}": "Konfigurieren von registry-aliases fehlgeschlagen {{.profile}}", + "Failed to create file": "Erstellen der Datei fehlgeschlagen", + "Failed to create runtime": "Erstellen der Runtime fehlgeschlagen", + "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "Löschen des Clusters {{.name}} fehlgeschlagen, versuche es dennoch erneut.", + "Failed to delete cluster {{.name}}.": "Löschen des Clusters {{.name}} fehlgeschlagen.", "Failed to delete cluster: {{.error}}": "Fehler beim Löschen des Clusters: {{.error}}", "Failed to delete cluster: {{.error}}__1": "Fehler beim Löschen des Clusters: {{.error}}", - "Failed to delete images": "", - "Failed to delete images from config": "", - "Failed to enable container runtime": "", - "Failed to get bootstrapper": "", - "Failed to get command runner": "", - "Failed to get image map": "", - "Failed to get service URL: {{.error}}": "", + "Failed to delete images": "Löschen der Images fehlgeschlagen", + "Failed to delete images from config": "Löschen der Images aus der Konfiguration fehlgeschlagen", + "Failed to delete profile(s): {{.error}}": "Löschen des Profils/der Profile fehlgeschlagen: {{.error}}", + "Failed to download licenses": "Lizenz-Download fehlgeschlagen", + "Failed to enable container runtime": "Aktivieren der Container Runtime fehlgeschlagen", + "Failed to extract integer in minutes to pause.": "Extrahieren der Anzahl der Minuten bis zum Pausieren fehlgeschlagen.", + "Failed to get bootstrapper": "Fehler beim Ermitteln des Bootstrappers", + "Failed to get command runner": "Fehler beim Ermitteln des Command Runner", + "Failed to get image map": "Fehler beim Ermitteln der Image Map", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "Fehler beim Ermitteln der Service URL - Prüfen Sie ob Minikube läuft und dass Sie, falls notwendig, den korrekten Namespace (-n Parameter) angegeben haben: {{.error}}", + "Failed to get service URL: {{.error}}": "Fehler beim Ermitteln der Service URL: {{.error}}", + "Failed to get temp": "Fehler beim Ermitteln von temp", "Failed to kill mount process: {{.error}}": "Fehler beim Beenden des Bereitstellungsprozesses: {{.error}}", - "Failed to list cached images": "", - "Failed to list images": "", - "Failed to load image": "", - "Failed to persist images": "", - "Failed to pull image": "", - "Failed to reload cached images": "", - "Failed to remove image": "", - "Failed to save config {{.profile}}": "", - "Failed to save dir": "", - "Failed to save stdin": "", - "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}": "NO_PROXY Env konnte nicht festgelegt werden. Benutzen Sie `export NO_PROXY = $ NO_PROXY, {{.ip}}", - "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "", - "Failed to setup certs": "", - "Failed to start container runtime": "", - "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "", - "Failed to stop node {{.name}}": "", - "Failed to update cluster": "", - "Failed to update config": "", - "Failed unmount: {{.error}}": "", - "File permissions used for the mount": "", - "Filter to use only VM Drivers": "", + "Failed to list cached images": "Auflisten der gecachten Images fehlschlagen", + "Failed to list images": "Auflisten der Images fehlgeschlagen", + "Failed to load image": "Laden des Images fehlgeschlagen", + "Failed to persist images": "Persistierung der Images fehlgeschlagen", + "Failed to pull image": "Ziehen des Images fehlgeschlagen", + "Failed to pull images": "Ziehen der Images fehlgeschlagen", + "Failed to push images": "Remote-Aktualisierung (push) des Images fehlgeschlagen", + "Failed to read temp": "Lesen von temp fehlgeschlagen", + "Failed to reload cached images": "Erneutes Laden der gecachten Images fehlgeschlagen", + "Failed to remove image": "Entfernen des Images fehlgeschlagen", + "Failed to remove images for profile {{.pName}} {{.error}}": "Entfernen des Images für Profil {{.pName}} fehlgeschlagen {{.error}}", + "Failed to save config {{.profile}}": "Speichern der Konfiguration {{.profile}} fehlgeschlagen", + "Failed to save dir": "Speichern des Verzeichnisses fehlgeschlagen", + "Failed to save image": "Speichern des Images fehlgeschlagen", + "Failed to save stdin": "Speichern der Standard-Eingabe fehlgeschlagen", + "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}": "NO_PROXY Env konnte nicht festgelegt werden. Benutzen Sie `export NO_PROXY=$NO_PROXY,{{.ip}}", + "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "NO_PROXY Env konnte nicht festgelegt werden. Benutzen Sie `export NO_PROXY=$NO_PROXY,{{.ip}}`.", + "Failed to setup certs": "Initialisieren der Zertifikate fehlgeschlagen", + "Failed to start container runtime": "Start der Container Runtime fehlgeschlagen", + "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "Start von {{.driver}} {{.driver_type}} fehlgeschlagen. Das Ausführen von \"{{.cmd}}\" könnte des Beheben: {{.error}}", + "Failed to stop node {{.name}}": "Anhalten von Node {{.name}} fehlgeschlagen", + "Failed to stop node {{.name}}: {{.error}}": "Fehler beim Anhalten des Nodes {{.name}}: {{.error}}", + "Failed to stop ssh-agent process: {{.error}}": "Anhalten des SSH-Agent Prozesses fehlgeschlagen: {{.error}}", + "Failed to tag images": "Erstellung des Tags für das Image fehlgeschlagen", + "Failed to update cluster": "Aktualisierung des Clusters fehlgeschlagen", + "Failed to update config": "Aktualisierung der Konfiguration fehlgeschlagen", + "Failed unmount: {{.error}}": "Aushängen fehlgeschlagen: {{.error}}", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "", + "Filter to use only VM Drivers": "Filtern um nur VM Treiber zu verwenden", "Flags": "", - "Follow": "", + "Follow": "Fehler beim Folgen der Logs", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "Um ein bessere Verhalten zu erreichen, wird empfohlen die Docker Engine anstelle von Docker Desktop zu verwenden.\nInstallationshinweise zur Docker Engine: https://docs.docker.com/engine/install/#server", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "Für beste Ergebnisse installieren Sie kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/__1": "Für beste Ergebnisse installieren Sie kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/", - "For improved {{.driver}} performance, {{.fix}}": "", - "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "", - "For more information, see:": "Weitere Informationen:", - "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", - "For more information, see: {{.url}}": "", - "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", + "For improved {{.driver}} performance, {{.fix}}": "Um die {{.driver}} Performance zu verbessern, {{.fix}}", + "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "Mehr Informationen finden Sie unter: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}", + "For more information, see:": "Mehr Informationen:", + "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Mehr Informationen finden Sie unter: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "For more information, see: {{.url}}": "Mehr Informationen finden Sie unter: {{.url}}", + "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "Erzwinge, dass die Umgebung für eine bestimmte Shell konfiguriert wird: [fish, cmd, powershell, tcsh, bash, zsh], default ist auto-detect", "Force minikube to perform possibly dangerous operations": "minikube zwingen, möglicherweise gefährliche Operationen durchzuführen", - "Format to print stdout in. Options include: [text,json]": "", - "Found docker, but the docker service isn't running. Try restarting the docker service.": "", - "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "", + "Format output. One of: short|table|json|yaml": "Format-Ausgabe. Mögliche Werte: short|table|json|yaml", + "Format to print stdout in. Options include: [text,json]": "Format für die Ausgabe aus stdout. Mögliche Werte: [text,json]", + "Forwards all services in a namespace (defaults to \"false\")": "Leitet alle Services in einen Namespace um (default: false)", + "Found docker, but the docker service isn't running. Try restarting the docker service.": "Docker erkannt, aber der Docker Service läuft nicht. Versuchen Sie den Docker Service zu restarten.", + "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "Treiber wurden gefunden, sind aber nicht funktional. Schauen Sie die obigen Anmerkungen an, um die installierten Treiber zu reparieren.", "Found network options:": "Gefundene Netzwerkoptionen:", - "Found {{.number}} invalid profile(s) ! ": "", - "Generate command completion for a shell": "", - "Generate command completion for bash.": "", - "Generate command completion for fish .": "", - "Generate command completion for zsh.": "", - "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", - "Generate unable to parse memory '{{.memory}}': {{.error}}": "", - "Generating certificates and keys ...": "", - "Get or list the current profiles (clusters)": "", - "Gets the logs of the running instance, used for debugging minikube, not user code.": "", - "Gets the status of a local Kubernetes cluster": "", - "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "", - "Gets the value of PROPERTY_NAME from the minikube config file": "", - "Global Flags": "", - "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", - "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", - "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", - "Group ID: {{.groupID}}": "", + "Found {{.number}} invalid profile(s) ! ": "{{.number}} ungütliger Profile gefunden !", + "Generate command completion for PowerShell.": "Generiere Command Completion für PowerShell", + "Generate command completion for a shell": "Generiere die Befehls-Vervollständigung für eine Shell", + "Generate command completion for bash.": "Generiere die Befehls-Vervollständigung für bash.", + "Generate command completion for fish .": "Generiere die Befehls-Vervollständigung für fish.", + "Generate command completion for zsh.": "Geniere die Befehls-Vervollständigung für zsh.", + "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "Generate kann die Disk-Größe nicht parsen '{{.diskSize}}': {{.error}}", + "Generate unable to parse memory '{{.memory}}': {{.error}}": "Generate kann die Speichergröße nicht parsen '{{.memory}}: {{.error}}", + "Generating certificates and keys ...": "Generiere Zertifikate und Schlüssel ...", + "Get or list the current profiles (clusters)": "Ermittle oder zeige alle aktuellen Profile (Cluster) an", + "Gets the logs of the running instance, used for debugging minikube, not user code.": "Ermittle die Logdateien der laufenden Instanz, die für das Debugging von Minikube verwendet werden, nicht für den Codes des Benutzers.", + "Gets the status of a local Kubernetes cluster": "Ermittle den Zustand des lokalen Kubernetes Cluster", + "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "Ermittle den Zustand des lokalen Kubernetes Cluster.\n\tDer Exit-Code enthält den Status der Minikube VM, des Clusters und von Kubernetes codiert in den Bits in der Reihenfolge der Auflistung von Rechts nach links.\n\tz.B. 7 bedeutet: 1 (für Minikube NOK) + 2 (für Cluster NOK) + 4 (für Kubernetes NOK)", + "Gets the value of PROPERTY_NAME from the minikube config file": "Ermittelt den Wert von PROPERTY_NAME aus der Minikube Konfigurationsdatei", + "Global Flags": "Globale Flags", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "Go Template Format String für die Ausgabe der Cache Liste. Das Format von Go Templates ist hier beschrieben: https://pkg.go.dev/text/template\nFür eine Liste der im Template verfügbaren Variablen, kann man die struct Werte hier einsehen: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "Go Template Format String für die Ausgabe der Konfigurations-Ansicht Ausgabe. Das Format von Go Templates ist hier beschrieben: https://pkg.go.dev/text/template\nFür eine Liste der im Template verfügbaren Variablen, kann man die struct Werte hier einsehen: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "Go Template Format String für die Status Ausgabe. Das Format von Go Templates ist hier beschrieben: https://pkg.go.dev/text/template\nFür eine Liste der im Template verfügbaren Variablen, kann man die struct Werte hier einsehen: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status", + "Group ID: {{.groupID}}": "Gruppen ID: {{.groupID}}", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "HA (mehrere Control-Plane) Cluster benötigen 3 oder mehr Control-Plane Nodes", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Headlamp kann detailliertere Informationen ausgeben, wenn Metrics-Server installiert ist. Um Metrics-Server zu installieren, führen Sie\n\n\tminikube{{.profileArg}} addons enable metrics-server\naus.\n", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\nminikube{{.profileArg}} addons enable metrics-server\t\n\n": "Headlamp kann detailliertere Informationen anzeigen, wenn der Metrics-Server installiert ist. Um ihn zu installieren, führen Sie folgenden Befehl aus:\n\nminikube{{.profileArg}} addons enable metrics-server\t\n\n", "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "Hypervisor-Signatur vor dem Gast in minikube verbergen (nur kvm2-Treiber)", - "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "IP Address to use to expose ports (docker and podman driver only)": "", - "IP address (ssh driver only)": "", - "If present, writes to the provided file instead of stdout.": "", - "If set, automatically updates drivers to the latest version. Defaults to true.": "", - "If set, delete the current cluster if start fails and try again. Defaults to false.": "", - "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "", - "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "", - "If set, install addons. Defaults to true.": "", - "If set, pause all namespaces": "", - "If set, unpause all namespaces": "", - "If the above advice does not help, please let us know:": "", - "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "Hyper-V erfordert, dass der Speicher in MB eine gerade Zahl ist, {{.memory}}MB wurde angegeben, versuchen Sie `--memory {{.suggestMemory}} zu anzugeben", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", + "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "Hyperkit ist kaputt. Aktualisieren Sie auf die neueste Version von Hyperkit und/oder Docker Desktop. Alternativ können Sie einen anderen Treiber auswählen mit --driver", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "Das Hyperkit Netzwerk ist kaputt. Versuchen Sie das Internet Sharing zu deaktivieren: System Preference \u003e Sharing \u003e Internet Sharing. Alternativ können Sie versuchen auf die aktuellste Hyperkit Version zu aktualisieren oder einen anderen Treiber zu verwenden.", + "IP Address to use to expose ports (docker and podman driver only)": "IP Adresse, die benutzt werden soll um Ports zu exponieren (nur docker und podman Treiber)", + "IP address (ssh driver only)": "IP Adresse (nur für den SSH-Treiber)", + "If present, writes to the provided file instead of stdout.": "Falls gesetzt, wird in die angegebene Datei geschrieben anstatt auf stdout.", + "If set, added node will be available as worker. Defaults to true.": "Falls gesetzt, wird der Node als Worker zur Verfügung stehen. Default: true", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "Falls gesetzt, wird der Node ein Control-Plane Node werden. Default: false. Derzeit nur für bereits bestehende HA (mehrere Control-Plane) Cluster unterstützt.", + "If set, automatically updates drivers to the latest version. Defaults to true.": "Falls gesetzt, werden alle Treiber automatisch auf die aktuellste Version geupdated. Default: true", + "If set, delete the current cluster if start fails and try again. Defaults to false.": "Falls gesetzt, lösche den Cluster wenn der Start fehlschlägt und versuche erneut zu starten. Default: false", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "Falls gesetzt, werden Metric Reports (CPU und Speicher Verwendung) deaktiviert, dies kann die Verwendung der CPU verbessern. Default: false.", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "Falls gesetzt werden Optimierungen des lokalen Kubernetes deaktiviert. Dies schließt einer Reduzierung der CoreDNS Replicas von 2 auf 1 mit ein. Default: false", + "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "Falls gesetzt, lade einen tarball von vorbereiteten Images herunter, falls vorhanden, um die Startzeit zu verbessern. Default: true", + "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "Fall gesetzt, zwinge die Container Runtime systemd als cgroup Manager zu verwenden. Default: false", + "If set, install addons. Defaults to true.": "Falls gesetzt, werden Addons installiert. Default: true", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "Falls gesetzt, die Minikube VM/der Minikube Container wird starten ohne Kubernetes zu starten oder zu konfigurieren (funktioniert nur mit neuen Cluster)", + "If set, pause all namespaces": "Falls gesetzt, pausiert alle Namespaces", + "If set, unpause all namespaces": "Falls gesetzt, setzt alle Namespace fort (unpause)", + "If the above advice does not help, please let us know:": "Bitte lassen Sie es uns wissen, falls der obige Hinweis nicht weiterhilft:", + "If the host has a firewall:\n\t\t\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "Wenn der Host eine Firewall hat:\n\t\t\n\t\t1. Geben Sie einen Port durch die Firewall frei\n\t\t2.Spezifieren Sie den Port mit \"--port=\u003cport_numer\u003e\" für \"minikube mount\"", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "Falls gesetzt, cache die Docker Images für den aktuellen Bootstrapper und lade sie in die Maschine. Ist immer false wenn --driver=none.", "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "Wenn true, speichern Sie Docker-Images für den aktuellen Bootstrapper zwischen und laden Sie sie auf den Computer. Immer falsch mit --vm-driver = none.", "If true, only download and cache files for later use - don't install or start anything.": "Wenn true, laden Sie nur Dateien für die spätere Verwendung herunter und speichern Sie sie – installieren oder starten Sie nichts.", - "If true, pods might get deleted and restarted on addon enable": "", - "If true, returns list of profiles faster by skipping validating the status of the cluster.": "", - "If true, the added node will be marked for work. Defaults to true.": "", - "If true, the node added will also be a control plane in addition to a worker.": "", - "If true, will perform potentially dangerous operations. Use with discretion.": "", - "If you are running minikube within a VM, consider using --driver=none:": "", - "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "", - "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "", - "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "", - "Ignoring empty custom image {{.name}}": "", - "Ignoring invalid pair entry {{.pair}}": "", - "Ignoring unknown custom image {{.name}}": "", - "Ignoring unknown custom registry {{.name}}": "", - "Images Commands:": "", - "Images used by this addon. Separated by commas.": "", - "In order to use the fall back image, you need to log in to the github packages registry": "", - "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", + "If true, pods might get deleted and restarted on addon enable": "Falls gesetzt, könnten Pods gelöscht und neugestartet werden, wenn ein Addon aktiviert wird", + "If true, print web links to addons' documentation if using --output=list (default).": "Falls gesetzt, gibt Links zu den Dokumentationen der Addons aus. Funktioniert nur, wenn --output=list (default).", + "If true, returns a detailed list of profiles.": "", + "If true, returns list of profiles faster by skipping validating the status of the cluster.": "Falls gesetzt, gibt die Liste der Profile schneller aus, indem das Validieren des Status des Clusters ausgelassen wird.", + "If true, the added node will be marked for work. Defaults to true.": "Falls gesetzt, wird der hinzugefügte Node als Arbeitsnode markiert. Default: true", + "If true, the node added will also be a control plane in addition to a worker.": "Falls gesetzt, wird der Knoten auch als Control Plane hinzugefügt, zusätzlich zu als Worker.", + "If true, will perform potentially dangerous operations. Use with discretion.": "Falls gesetzt, werden potentiell gefährliche Funktionalitäten durchgeführt. Mit Vorsicht verwenden.", + "If you are running minikube within a VM, consider using --driver=none:": "Wenn Sie Minikube in einer VM verwenden, erwägen Sie --driver=none zu verwenden.", + "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "Wenn Sie immer noch daran interessiert sind, {{.driver_name}} zum Funktionieren zu bringen, könnten Ihnen die folgenden Vorschläge dabei helfen, das Problem zu beheben:", + "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "Wenn Sie nicht wollen, dass ihre Zugsangsdaten in einen spezifischen Pod gemounted werden, fügen Sie ein Label mit dem Schlüssel 'gcp-auth-skip-secret' zu ihrer Pod-Konfiguration hinzu.", + "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "Wenn Sie wollen, dass existierende Pods die Zugangsdaten erhalten, erstellen Sie diese entweder neu oder führen sie addons enable mit --refresh aus.", + "Ignoring empty custom image {{.name}}": "Leeres Custom Image {{.name}} wird ignoriert.", + "Ignoring invalid pair entry {{.pair}}": "Ignoriere invaliden Wertepaar-Eintrag {{.pair}}", + "Ignoring unknown custom image {{.name}}": "Ignoriere unbekanntes Custom Image {{.name}}", + "Ignoring unknown custom registry {{.name}}": "Ignoriere unbekannte Custom Registry {{.name}}", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "Das Image wurde nicht für die aktuelle Minikube Version gebaut. Um dies zu beheben, können Sie die Installation löschen und Minikube mit dem neuesten Image neu erstellen. Erwartete Minikube Version: {{.imageMinikubeVersion}} - \u003e Aktuelle Minikube Version: {{.minikubeVersion}}", + "Images Commands:": "Image Befehle:", + "Images used by this addon. Separated by commas.": "Images, die durch dieses Addon verwendet werden. Durch Komma getrennt.", + "In order to use the fall back image, you need to log in to the github packages registry": "Um das Fallback Image zu verwenden, müssen Sie sich an der Github Package Registry anmelden", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Insecure Docker Registries die an den Docker Daemon durchgereicht werdne. Der Default Service CIDR Bereich wird automatisch hinzugefügt.", "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Unsichere Docker-Registrys, die an den Docker-Daemon übergeben werden. Der CIDR-Bereich des Standarddienstes wird automatisch hinzugefügt.", - "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", - "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", - "Invalid port": "", - "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", - "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", - "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "", - "Kill the mount process spawned by minikube start": "", - "Kubelet network plug-in to use (default: auto)": "", - "Kubernetes requires at least 2 CPU's to start": "", - "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "", - "Kubernetes {{.version}} is not supported by this release of minikube": "", + "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "Installieren Sie VirtualBox und stellen Sie sicher, dass es im Pfad ist. Alternativ verwenden Sie einen anderen --driver", + "Install the latest hyperkit binary, and run 'minikube delete'": "Installieren Sie das aktuellste hyperkit-Binary und führen Sie 'minikube delete' aus", + "Interval is an invalid duration: {{.error}}": "Der angegebene Intervall beinhaltet eine inkorrekte Dauer: {{.error}}", + "Interval must be greater than 0s": "Interval muss größer als 0s sein", + "Invalid port": "Falscher Port", + "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "Istio benötigt {{.minCPUs}} CPUs -- Ihre Konfiguration reserviert nur {{.cpus}} CPUs", + "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "Istio benötigt {{.minMem}}MB Speicher -- Ihre Konfiguration reserviert nur {{.memory}}MB", + "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "Es scheint, dass Sie GCE verwenden, was bedeutet, dass Authentifizierung auch ohne die GCP Auth Addons funktionieren sollte. Wenn Sie dennoch mittels Credential-Datei authentifizieren möchten, verwenden Sie --force.", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "Kept for backward compatibility, value is ignored.": "", + "Kicbase images have not been deleted. To delete images run:": "Die Kicbase Images wurden nicht gelöscht. Um sie zu löschen, starten Sie:", + "Kill the mount process spawned by minikube start": "Töte den Mount-Prozess, der durch minikube start gestartet wurde", + "Kubernetes requires at least 2 CPU's to start": "Kubernetes benötigt mindestens 2 CPU's um zu starten", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "Die Kuberenetes Vesion wurde nicht in der GitHub Versionsliste gefunden. Sie können die Verwendung einer Kubernetes Version durch Angabe des --force Flags erzwingen", + "Kubernetes version {{.specified}} found in GitHub version list": "Kubernetes version {{.specified}} in der GitHub Versionsliste gefunden", + "Kubernetes version {{.specified}} found in version list": "Kubernetes version {{.specified}} in der Versionsliste gefunden", + "Kubernetes version {{.version}} is not supported by this release of minikube": "Die Kubernetes Version {{.version}} wird von diesem Release von Minikube nicht unterstützt", + "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "Kubernetes {{.new}} ist nun verfügbar. Falls Sie aktualisieren möchten, verwenden Sie: --kubernetes-version={{.prefix}}{{.new}}", + "Kubernetes {{.version}} is not supported by this release of minikube": "Kubernetes {{.version}} wird von diesem Minikube Release nicht unterstützt", + "Kubernetes: Stopping ...": "Kubernetes: Stoppe ...", + "Kubernetes: {{.status}}": "", "Launching Kubernetes ...": "Kubernetes wird gestartet...", - "Launching proxy ...": "", - "List all available images from the local cache.": "", - "List existing minikube nodes.": "", - "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "", - "List images": "", - "List nodes.": "", + "Launching proxy ...": "Starte Proxy ...", + "List all available images from the local cache.": "Zeige alle im lokalen Cache verfügbaren Images.", + "List existing minikube nodes.": "Existierende Minikube Nodes anzeigen.", + "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "Zeige eine Liste von Images, die das Addon mit Namen ADDON_NAME verwendet. Um eine Liste aller verfügbaren Addons zu erhalten, verwenden Sie: minikube addons list", + "List images": "Liste der Images", + "List nodes.": "List der Nodes anzeigen.", "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "Liste der Gast-VSock-Ports, die als Sockets auf dem Host verfügbar gemacht werden (nur Hyperkit-Treiber)", - "List of ports that should be exposed (docker and podman driver only)": "", - "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "", - "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "", - "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "", - "Lists all minikube profiles.": "", - "Lists all valid default values for PROPERTY_NAME": "", - "Lists all valid minikube profiles and detects all possible invalid profiles.": "", - "Lists the URLs for the services in your local cluster": "", - "Load a image into minikube": "", + "List of ports that should be exposed (docker and podman driver only)": "Liste von Ports die von ausserhalb erreichbar sein sollen (nur docker und podman Treiber)", + "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "Lausche auf 0.0.0.0 am externen Docker Host {{.host}}. Bitte beachten Sie", + "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "Lausche auf {{.listenAddr}}. Dies ist nicht empfohlen und kann Sicherheits-Vorfälle erzeugen. Verwendung auf eigenes Risiko", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "Liste alle verfügbaren Addons sowie deren aktuellen Zustände (enabled/disabled)", + "Lists all minikube profiles.": "Liste alle Minikube Profile.", + "Lists all valid default values for PROPERTY_NAME": "Zeige alle Standard-Werte für PROPERTY_NAME", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "Zeige alle Minikube Profilel und erkenne alle möglicherweise ungültigen Profile.", + "Lists the URLs for the services in your local cluster": "Zeigt die URLs für die Services in ihrem lokalen Cluster", + "Load an image into minikube": "Lade ein Image in Minikube", "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "Lokale Ordner, die über NFS-Bereitstellungen für Gast freigegeben werden (nur Hyperkit-Treiber)", - "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", + "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "Lokaler Proxy ignoriert: reiche {{.name}}={{.value}} an docker env weiter.", "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "Speicherort des VPNKit-Sockets, der für das Netzwerk verwendet wird. Wenn leer, wird Hyperkit VPNKitSock deaktiviert. Wenn 'auto' die Docker for Mac VPNKit-Verbindung verwendet, wird andernfalls der angegebene VSock verwendet (nur Hyperkit-Treiber).", "Location of the minikube iso": "Speicherort der minikube-ISO", - "Locations to fetch the minikube ISO from.": "", - "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", - "Log into the minikube environment (for debugging)": "", - "Manage images": "", - "Message Size: {{.size}}": "", - "Modify persistent configuration values": "", - "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "", - "Most users should use the newer 'docker' driver instead, which does not require root!": "", - "Mount type: {{.name}}": "", - "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", - "Mounts the specified directory into minikube": "", - "Mounts the specified directory into minikube.": "", - "Multiple errors deleting profiles": "", - "Multiple minikube profiles were found - ": "", - "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", - "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", - "NOTE: This process must stay alive for the mount to be accessible ...": "", - "Networking and Connectivity Commands:": "", - "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "", - "No changes required for the \"{{.context}}\" context": "", - "No minikube profile was found. ": "", - "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "", - "No such addon {{.name}}": "", - "Node {{.name}} failed to start, deleting and trying again.": "", - "Node {{.name}} was successfully deleted.": "", - "Node {{.nodeName}} does not exist.": "", - "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "Ort von dem kubectl, kubelet, \u0026 kubeadm Binärdateien geladen werden.", + "Locations to fetch the minikube ISO from.": "Ort von dem das Minikube ISO geladen werden soll.", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Einloggen oder einen Befehl auf der Maschine mit SSH ausführen; vergleichbar mit 'docker-machine ssh'.", + "Log into the minikube environment (for debugging)": "In die Minikube Umgebung einloggen (fürs Debugging)", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "Log-Dateien wurden erstellt ({{.logPath}}), bitte denken Sie daran diese anzuhängen, wenn Sie Probleme melden!", + "Manage cache for images": "Cache für Images verwalten", + "Manage images": "Images verwalten", + "Message Size: {{.size}}": "Message Größe: {{.size}}", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "Minimal-Version von VirtualBox, die unterstützt wird: {{.vers}}, aktuelle VirtualBox Version: {{.cvers}}", + "Modify persistent configuration values": "Persistente Konfigurations-Werte anpassen", + "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "Mehr Informationen: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", + "Most users should use the newer 'docker' driver instead, which does not require root!": "Die meisten Benutzer sollten den neuen 'docker' Treiber verwenden, welcher keinen root-Zugriff benötigt!", + "Mount type: {{.name}}": "Mount-Typ: {{.name}}", + "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "Hänge Host Pfad {{.sourcePath}} in die VM als {{.destinationPath}} ein ...", + "Mounts the specified directory into minikube": "Mounted das angegebene Verzeichnis in Minikube", + "Mounts the specified directory into minikube.": "Mounted das angegebene Verzeichnis in Minikube.", + "Multiple errors deleting profiles": "Es sind mehrere Fehler beim Löschen der Profile aufgetreten", + "Multiple errors encountered:": "Mehrere Fehler aufgetreten:", + "Multiple minikube profiles were found - ": "Es wurden mehrere Minikube Profile gefunden - ", + "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "NIC Type der fürs Host only Netzwerk verwendet wird. Einer aus Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, oder virtio (nur virtualbox Treiber)", + "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "NIC Type der fürs NAT Network verwendet wird. Einer aus Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (Nur virtualbox Treiber)", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "ACHTUNG: Schließen Sie dieses Terminal nicht. Der Prozess muss am Laufen bleiben, damit die Tunnels zugreifbar sind ...", + "NOTE: This process must stay alive for the mount to be accessible ...": "ACHTUNG: Dieser Prozess muss am Laufen bleiben, damit die Mounts zugreifbar bleiben ...", + "Networking and Connectivity Commands:": "Netzwerk- und Verbindungs-Befehle:", + "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "Es wurde keine IP-Addresse angegeben. Verwernden Sie --ssh-ip-address oder lesen Sie https://minikube.sigs.k8s.io/docs/drivers/ssh/", + "No changes required for the \"{{.context}}\" context": "Keine Anpassungen erforderlich für den Kontext \"{{.context}}\"", + "No control-plane nodes found.": "Keine Control-Plane Nodes gefunden.", + "No minikube profile was found.": "Kein Minikube Profil gefunden.", + "No minikube profile was found. ": "Kein Minikube Profil gefunden. ", + "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Kein möglicher Treiber gefunden. Versuchen Sie mit --driver anzugeben oder schauen Sie unter https://minikube.sigs.k8s.io/docs/start/", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "", + "No such addon {{.name}}": "Addon {{.name}} existiert nicht", + "No valid URL found for tunnel.": "Keine valide Tunnel-URL gefunden.", + "No valid port found for tunnel.": "Kein valider Tunnel-Port für den Tunnel", + "Node {{.name}} failed to start, deleting and trying again.": "Node {{.name}} konnte nicht gestartet werden. Lösche den Node und versuche es erneut.", + "Node {{.name}} was successfully deleted.": "Node {{.name}} erfolgreich gelöscht.", + "Node {{.nodeName}} does not exist.": "Node {{.nodeName}} existiert nicht.", + "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "Keiner der bekannten Repositories sind zugreifbar. Erwägen Sie ein alternatives Image Repository mit --image-repository anzugeben", "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "Keines der bekannten Repositories an Ihrem Standort ist zugänglich. {{.image_repository_name}} wird als Fallback verwendet.", "None of the known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "Keines der bekannten Repositories ist zugänglich. Erwägen Sie, ein alternatives Image-Repository mit der Kennzeichnung --image-repository anzugeben", - "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", - "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", + "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "Aktivives docker-env am Treiber {{.driver_name}} in diesem Terminal erkannt:", + "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "Aktivives podman-env am Treiber {{.driver_name}} in diesem Terminal erkannt:", "Number of CPUs allocated to the minikube VM": "Anzahl der CPUs, die der minikube-VM zugeordnet sind", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", - "Number of lines back to go within the log": "", - "OS release is {{.pretty_name}}": "", - "One of 'yaml' or 'json'.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "", - "Open the addons URL with https instead of http": "", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "", - "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", - "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "", - "Opening {{.url}} in your default browser...": "", - "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", - "Operations on nodes": "", - "Options: {{.options}}": "", - "Output format. Accepted values: [json]": "", - "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", - "Overwrite image even if same image:tag name exists": "", - "Path to the Dockerfile to use (optional)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "Anzahl der Extra-Disks, die erstellt und an die Minikube VM gehängt werden (derzeit nur im hyperkit und kvm2 Treiber implementiert)", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, and qemu2 drivers)": "Anzahl der Extra-Disks die erstellen und an die Minikube VM gehängt werden (derzeit nur für die Treiber Hyperkit, kvm2 und qemu2 implementiert", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "", + "Number of lines back to go within the log": "Anzahl der Zeilen, die im Log zurückgegangen werden soll", + "OS release is {{.pretty_name}}": "Die Betriebssystem-Version ist {{.pretty_name}}", + "One of 'text', 'yaml' or 'json'.": "Entweder 'text', 'yaml' oder 'json'.", + "One of 'yaml' or 'json'.": "Entweder 'yaml' oder 'json'", + "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "Nur alphanumerische Werte und Striche sind erlaubt '-'. Minimum 1 Zeichen, muss mit alphanumerisch anfangen.", + "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "Nur alphanumerische Werte und Striche sind erlaubt '-'. Minimum 2 Zeichen, muss mit alphanumerisch anfangen.", + "Open the addons URL with https instead of http": "Öffnen Sie die URL des Addons mit https anstelle von http", + "Open the service URL with https instead of http (defaults to \"false\")": "Öffne die Service URL mit https anstelle von http (default: \"false\")", + "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "Öffne Kubernetes service {{.namespace_name}}/{{.service_name}} im Default-Browser...", + "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "Öffne Service {{.namespace_name}}/{{.service_name}} im Default-Browser...", + "Opening {{.url}} in your default browser...": "Öffne {{.url}} im Default-Browser...", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "Öffnet das Addon mit Namen ADDON_NAME in Minikube (Beispiel: minikube addons open dashboard). Um eine Liste aller verfügbaren Addons zu erhalten, verwenden Sie: minikube addons list ", + "Operations on nodes": "Operationen auf dem Node", + "Options: {{.options}}": "Optionen: {{.options}}", + "Output format. Accepted values: [json, yaml]": "Ausgabe Format. Akzeptierte Werte: [json, yaml]", + "Output format. Accepted values: [json]": "Ausgabe Format. Akzeptierte Werte: [json]", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "Gibt minikube shell completion für die angegebene Shell aus (bash, zsh, fish oder powershell)\n\n\tDies ist abhängig vom bash-completion Binary. Beispiel für mögliche Installations-Befehle: \n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # für bash Benutzer\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # für zsh Benutzer\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # für fish Benutzer\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # für bash Benuzter\n\t\t$ source \u003c(minikube completion zsh) # für zsh Benutzer\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # für fish Benutzer\n\n\tZusätzlich können Sie die Completion Befehle in eine Datei ausgeben und diese aus der .bashrc sourcen.\n\n\tWindows:\n\t\t## Sichern Sie den Code in ein Skript und führen Sie es im Profil aus\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Führe Completion Code im Profil aus\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tHinweis für zsh Benuzter: [1] zsh completions werden erst ab Version \u003e= 5.2 von zsh unterstützt\n\tHinweis für fish Benuzter: [2] Weitere Informationen finden sich unter https://fishshell.com/docs/current/#tab-completion\n", + "Outputs the licenses of dependencies to a directory": "Gibt die Lizenzen der Abhängigkeiten in ein Verzeichnis aus", + "Overwrite image even if same image:tag name exists": "Überschreibe das Image, auch wenn ein Image mit dem gleichen Image:Tag-Namen existiert", + "Path to socket vmnet binary (QEMU driver only)": "Pfad zum Socket des vmnet Binaries (nur QEMU Treiber)", + "Path to the Dockerfile to use (optional)": "Pfad des zu verwendenden Dockerfiles (optional)", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "Pfad zur QEMU Firmware Datei. Default: Unter Linux, der Ort der Standard-Firmware. Unter macOS der Installations-Ort der brew Instalation. Für Windows: C:\\Program Files\\qemu\\share", + "Path to the socket vmnet client binary (QEMU driver only)": "Pfad zum Socket des vmnet Client Binaries (nur QEMU Treiber)", "Pause": "", - "Paused {{.count}} containers": "", - "Paused {{.count}} containers in: {{.namespaces}}": "", - "Pausing node {{.name}} ... ": "", - "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", - "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", - "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", - "Please enter a value:": "", - "Please free up disk or prune images.": "", - "Please increse Desktop's disk size.": "", - "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", - "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", - "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", - "Please provide a path or url to build": "", - "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", - "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", - "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", - "Please see {{.documentation_url}} for more details": "", - "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", - "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", - "Please try purging minikube using `minikube delete --all --purge`": "", + "Paused {{.count}} containers": "{{.count}} Container pausiert", + "Paused {{.count}} containers in: {{.namespaces}}": "{{.count}} Container pausiert in: {{.namespaces}}", + "Pausing node {{.name}} ... ": "Pausiere Node {{.name}} ...", + "Please also attach the following file to the GitHub issue:": "Bitte hängen Sie die folgende Datei an das GitHub Issue an:", + "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "Bitte erstellen Sie einen Cluster mit größerer Disk-Größe: `minikube start --disk SIZE_MB` ", + "Please either authenticate to the registry or use --base-image flag to use a different registry.": "Entweder authentifizieren Sie sich bitte bei der Registry oder verwenden Sie den --base-image Parameter um eine andere Registry zu verwenden.", + "Please enter a value:": "Bitte geben Sie einen Wert ein:", + "Please free up disk or prune images.": "Bitte geben Sie Plattenplatz frei oder löschen Sie unbenutzte Images (prune)", + "Please increase Desktop's disk size.": "Bitte erhöhen Sie die Plattengröße von Desktop", + "Please install the minikube hyperkit VM driver, or select an alternative --driver": "Bitte installieren Sie den minikube hyperkit VM Treiber oder geben Sie einen alternativen Treiber mit --driver an", + "Please install the minikube kvm2 VM driver, or select an alternative --driver": "Bitte installieren Sie den minikube kvm2 VM Treiber oder geben Sie einen alternativen Treiber mit --driver an", + "Please make sure the service you are looking for is deployed or is in the correct namespace.": "Bitte stellen Sie sicher, dass der gesuchte Service deployed ist oder im korrekten Namespace ist.", + "Please provide a path or url to build": "Bitte geben Sie einen Pfad oder eine URL zum Bauen an", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "Bitte geben Sie ein Image in der Container Runtime an, welches aus Minikube mittels \u003cminikube image save IMAGE_NAME\u003e gesichert wreden soll", + "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "Bitte geben Sie ein Image im lokalen Daemon an, welches in Minikube mittels \u003cminikube image load IMAGE_NAME\u003e geladen werden soll", + "Please provide source and target image": "Bitte geben Sie das Quell- und das Ziel-Image an", + "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "Bitte re-evaluieren (eval) Sie ihr docker-env erneut, um sicherzustellen, dass die Umgebungsvariablen geupdated wurden, führen Sie folgendes aus:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t", + "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "Bitte re-evaluieren (eval) Sie ihr podman-env erneut, um sicherzustellen, dass die Umgebungsvariablen geupdated wurden, führen Sie folgendes aus:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "Bitte führen Sie `minikube logs --file=logs.txt` aus und fügen Sie logs.txt an das GitHub Issue an.", + "Please see {{.documentation_url}} for more details": "Für weitere Informationen schauen Sie bitte unter {{.documentation_url}}", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", + "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "Bitte geben Sie die Verzeichnisse an, die gemountet werden sollen: \n\tminikube mount \u003cQuell-Verzeichnis\u003e:\u003cZiel-Verzeichnis\u003e (Beispiel: \"/host-home:/vm-home\")", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "Bitte geben Sie den Pfad zum Kopieren an: \n\tminikube cp \u003cPfad zur Quell-Datei\u003e \u003cAbsoluter Pfad zur Ziel-Datei\u003e (Beispiel: \"minikube cp a/b.txt /copied.txt\")", + "Please try purging minikube using `minikube delete --all --purge`": "Bitte versuchen Sie minikube aufzuräumen, indem Sie `minikube delete --all --purge` aufrufen", "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "Aktualisieren Sie '{{.driver_executable}}'. {{.documentation_url}}", - "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", - "Populates the specified folder with documentation in markdown about minikube": "", - "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", - "Powering off \"{{.profile_name}}\" via SSH ...": "{{.profile_name}}\" wird über SSH ausgeschaltet...", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "Bitte besuchen Sie folgende Links für diesbezügliche Dokumentation: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n", + "Populates the specified folder with documentation in markdown about minikube": "Erstellt im angegebenen Verzeichnis Dokumentation über Minikube im Markdown-Format", + "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "PowerShell läuft im constrained mode, welcher nicht kompatibel mit Hyper-V Scripting ist.", + "Powering off \"{{.profile_name}}\" via SSH ...": "\"{{.profile_name}}\" wird über SSH ausgeschaltet...", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Vorbereiten von Kubernetes {{.k8sVersion}} auf {{.runtime}} {{.runtimeVersion}}...", - "Print current and latest version number": "", - "Print just the version number.": "", - "Print the version of minikube": "", - "Print the version of minikube.": "", - "Problems detected in {{.entry}}:": "", - "Problems detected in {{.name}}:": "", - "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "", - "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "", - "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "", - "Profile name '{{.name}}' is not valid": "", - "Profile name '{{.profilename}}' is not valid": "", - "Profile name should be unique": "", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "Bereite {{.runtime}} {{.runtimeVersion}} vor ...", + "Print current and latest version number": "Gebe die aktuelle und die aktuellste verfügbare Versionsnummer aus", + "Print just the version number.": "Gebe nur die Versionsnummer aus", + "Print the version of minikube": "Gebe die Version von Minikube aus", + "Print the version of minikube.": "Gebe die Version von Minikube aus.", + "Problems detected in {{.entry}}:": "Probleme erkannt in {{.entry}}:", + "Problems detected in {{.name}}:": "Probleme erkannt in {{.name}}:", + "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "Profile \"{{.cluster}}\" nicht gefunden. Führen Sie \"minikube profile list\" aus, um alle Profile anzuzeigen.", + "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "Der Profilname \"{{.profilename}}\" ist ein reserviertes Schlüsselwort. Um das Profil zu löschen, führen Sie \"{{.cmd}}\" aus", + "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "Profile mit Namen '{{.name}}' wird durch Maschine mit Name '{{.machine}}' im Profil '{{.profile}}' dupliziert", + "Profile name '{{.name}}' is not valid": "Der Profilname '{{.name}}' ist nicht valide", + "Profile name '{{.profilename}}' is not valid": "Der Profilename '{{.profilename}}' ist nicht valide", + "Profile name should be unique": "Der Profilname sollte einzigartig sein", "Provide VM UUID to restore MAC address (hyperkit driver only)": "Geben Sie die VM-UUID an, um die MAC-Adresse wiederherzustellen (nur Hyperkit-Treiber)", - "Pull the remote image (no caching)": "", - "Pulling base image ...": "", - "Push the new image (requires tag)": "", - "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "", - "Rebuild libvirt with virt-network support": "", - "Received {{.name}} signal": "", - "Registries used by this addon. Separated by commas.": "", - "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "Gibt Anweisungen aus, wie Sie die docker-cli Ihres Terminals auf die Docker Engine in Minikube umleiten. (Nützlich um Docker Images direkt in Minikube zu bauen)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "Gibt Anweisungen aus, wie Sie die docker-cli Ihres Terminals auf die Docker Engine in Minikube umleiten. (Nützlich um Docker Images direkt in Minikube zu bauen)\n\nZum Beispiel können Sie alle Docker Operationen wie docker build, docker run und docker ps direkt in minikube ausführen.\n\nHinweis: Sie müssen die docker-cli auf Ihrer Maschine installiert haben.\nAnleitung zur Installation von docker-cli: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps", + "Pull images": "Ziehe (pull) Images", + "Pull the remote image (no caching)": "Ziehe (pull) das Remote Image (kein Caching)", + "Pulling base image ...": "Ziehe das Base Image ...", + "Pulling base image {{.kicVersion}} ...": "Ziehe Base Image {{.kicVersion}} ...", + "Push images": "Veröffentliche (push) Images", + "Push the new image (requires tag)": "Veröffentliche das neue Image (benötigt einen Tag)", + "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "Restarten (reboot) Sie die komplette VirtualBox Installation und stellen Sie sicher, dass VirtualBox nicht durch Ihr System blockiert wird, und/oder verwenden Sie einen anderen Hypervisor", + "Rebuild libvirt with virt-network support": "Baue libvirt erneut mit virt-network Support", + "Received {{.name}} signal": "Signal {{.name}} empfangen", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "Erstelle den Cluster neu indem Sie folgendes ausführen:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}", + "Registries used by this addon. Separated by commas.": "Registries, die dieses Addon verwendet. Komma-separiert.", + "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "Das Registry Addon mit dem Treiber {{.driver}} verwendet Port {{.port}}. Bitte verwenden Sie diesen anstelle des Default-Ports 5000", "Registry mirrors to pass to the Docker daemon": "Registry-Mirror, die an den Docker-Daemon übergeben werden", - "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "", - "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", - "Related issue: {{.url}}": "", - "Related issues:": "", + "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "Installieren Sie VirtualBox erneut und starten Sie neu (reboot). Verwenden Sie alternativ den kvm2 Treiber: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/", + "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "Installieren Sie Virtualbox neu und verifizieren Sie, dass es nicht blockiert wurde: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Einige System-Software konnte nicht geladen werden", + "Related issue: {{.url}}": "Verwandtes Issue: {{.url}}", + "Related issues:": "Verwandtes Issue:", "Relaunching Kubernetes using {{.bootstrapper}} ...": "Kubernetes mit {{.bootstrapper}} neu starten...", - "Remove one or more images": "", - "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "", - "Removed all traces of the \"{{.name}}\" cluster.": "", + "Remove one or more images": "Entfernen Sie ein oder mehrere Images", + "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "Entfernen Sie die ungültigen Parameter --docker-opt oder --insecure-registry falls einer davon verwendet wurde", + "Removed all traces of the \"{{.name}}\" cluster.": "Alle Spuren des \"{{.name}}\" Clusters wurden entfernt.", "Removing {{.directory}} ...": "{{.directory}} wird entfernt...", - "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", - "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "", + "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "Die Anzahl der angeforderten CPUs {{.requested_cpus}} ist größer als die Anzahl der verfügbaren CPUs {{.avail_cpus}}", + "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "Die Anzahl der angeforderten CPUs {{.requested_cpus}} ist kleiner als die erlaube Minimal-Anzahl von CPUs {{.minimum_cpus}}", "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "Die angeforderte Festplattengröße {{.requested_size}} liegt unter dem Mindestwert von {{.minimum_size}}.", "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "Die angeforderte Speicherzuordnung ({{.memory}} MB) ist geringer als die Standardspeicherzuordnung von {{.default_memorysize}} MB. Beachten Sie, dass minikube möglicherweise nicht richtig funktioniert oder unerwartet abstürzt.", - "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", + "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "Die angeforderte Speicherzuweisung {{.requested}} liegt unter dem zulässigen Mindestwert von {{.recommend}}MB. Deployments könnten fehlschlagen.", "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "Die angeforderte Speicherzuweisung {{.requested_size}} liegt unter dem zulässigen Mindestwert von {{.minimum_size}}.", - "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", - "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", - "Reset Docker to factory defaults": "", - "Restart Docker": "", - "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "", - "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "", - "Restarting the {{.name}} service may improve performance.": "", - "Retrieve the ssh host key of the specified node": "", - "Retrieve the ssh host key of the specified node.": "", - "Retrieve the ssh identity key path of the specified node": "", - "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "", - "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "", - "Retrieves the IP address of the specified node": "", - "Retrieves the IP address of the specified node, and writes it to STDOUT.": "", - "Returns a URL to connect to a service": "", - "Returns logs to debug a local Kubernetes cluster": "", - "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", - "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", - "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", - "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", - "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "", - "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "", - "Run a kubectl binary matching the cluster version": "", - "Run minikube from the C: drive.": "", - "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "", - "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "", - "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", - "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", - "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", - "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "", - "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "SSH key (ssh driver only)": "", - "SSH port (ssh driver only)": "", - "SSH user (ssh driver only)": "", - "Select a valid value for --dnsdomain": "", - "Send trace events. Options include: [gcp]": "", - "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "", - "Set failed": "", - "Set flag to delete all profiles": "", - "Set flag to stop all profiles (clusters)": "", - "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "", - "Set this flag to delete the '.minikube' folder from your user directory.": "", - "Sets an individual value in a minikube config file": "", - "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", - "Sets up docker env variables; similar to '$(docker-machine env)'.": "", - "Sets up podman env variables; similar to '$(podman-machine env)'.": "", - "Setting profile failed": "", - "Show a list of global command-line options (applies to all commands).": "", - "Show only log entries which point to known problems": "", - "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", - "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "", - "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "", - "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "", - "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "", - "Sorry, completion support is not yet implemented for {{.name}}": "", - "Sorry, please set the --output flag to one of the following valid options: [text,json]": "", - "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "", - "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "", + "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "Die angeforderte Speicherzuweisung {{.requested}}MB liegt über dem System-Limit {{.system_limit}}MB.", + "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "Die angeforderte Speicherzuweisung {{.requested}}MB ist weniger als das verwendbare Minimum {{.minimum_memory}}MB", + "Reset Docker to factory defaults": "Setze Docker auf Werkseinstellungen zurück", + "Restart Docker": "Starten Sie Docker neu", + "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "Starten Sie Docker neu, stellen Sie sicher, dass Docker läuft und führen Sie dann 'minikube delete' aus und dann 'minikube start' um erneut zu Starten", + "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "Starte existierenden {{.driver_name}} {{.machine_type}} für \"{{.cluster}}\" ...", + "Restarting the {{.name}} service may improve performance.": "Das Neustarten des Services {{.name}} könnte zu Performance-Verbesserungen führen.", + "Retrieve the ssh host key of the specified node": "Ermittle den SSH Host Schlüssel des angegebenen Nodes", + "Retrieve the ssh host key of the specified node.": "Ermittle den SSH Host Schlüssel des angegebenen Nodes.", + "Retrieve the ssh identity key path of the specified node": "Ermittle den Pfad des SSH Identitäts-Schlüssel des angegebenen Nodes", + "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "\"Ermittle den Pfad des SSH Identitäts-Schlüssel des angegebenen Nodes und geben ihn auf STDOUT aus.", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "Ermittelt die IP Adresse des laufenden Clusters und prüft ob sie\n\t\t\tmit der in der kubeconfig angegebenen IP-Adresse übereinstimmt, und korrigiert die IP-Adresse in kubeconfig wenn sie nicht stimmt.", + "Retrieves the IP address of the specified node": "Ermittelt die IP Adresse des angegebenen Nodes", + "Retrieves the IP address of the specified node, and writes it to STDOUT.": "Ermittelt die IP Adresse des angegebenen Nodes und schreibt es auf STDOUT.", + "Returns a URL to connect to a service": "Liefert die URL zurück, um zu einem Service zu verbinden.", + "Returns logs to debug a local Kubernetes cluster": "Liefert die Logs zurück um den lokalen Kubernetes Cluster zu debuggen", + "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "Liefert die Kubernetes URL für einen Service im lokalen Cluster zurück. Falls es mehrere URLs gibt, werden diese einzeln ausgegeben.", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "Liefert die Kubernetes URL(s) für Service(s) im lokalen Cluster zurück. Falls mehrere URLs existieren, werden diese einzeln ausgegeben.", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "Liefert den Wert von PROPERTY_NAME aus der Minikube-Konfigurationsdatei zurück. Dieser Wert kann zur Laufzeit durch Parameter oder Umgebungsvariablen angepasst werden.", + "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "Klicken Sie mit der rechten Mautaste auf das PowerShell Symbol und wählen Sie \"Als Administrator ausführen\" um PowerShell mit erhöhten Rechten zu starten.", + "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "Führen Sie 'kubectl describe pod coredns -n kube-system' aus und prüfen ob es einen Firewall oder DNS Konflikt gibt", + "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "Führen Sie 'minikube delete' aus um die hängende VM zu löschen, und/oder stellen Sie sicher, dass Sie Minikube mit dem gleichen Benutzer ausführen, mit dem Sie den Befehl ausführen", + "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "Führen Sie 'sudo sysctl fs.protected_regular=0' aus oder verwenden Sie einen Treiber, der keine root-Rechte benötigt, wie z.B. '--driver=docker'", + "Run a kubectl binary matching the cluster version": "Starten Sie ein kubectl Binärprogramm das zur Cluster Version passt", + "Run minikube from the C: drive.": "Start Minikube von Laufwerk C:", + "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "Starte den Kubernetes Client, lade ihn herunter, falls notwendig. Bedenke -- nach kubectl!\n\nDies wird den Kubernetes Client (kubectl) mit der selben Version des Clusters ausführen.\n\nNormalerweise wird es das Binärprogramm herunterladen, welches zum Host Betriebssystem und Architektur passt\naber optional kann man es auch direkt auf der Control Plane über die SSH-Verbindung ausführen.\nDas kann nützlich sein, wenn man kubectl aus Gründen nicht lokal laufen lassen kann, weil z.B. der Host unsupported ist.\nBitte beachten Sie, dass alle Pfade die man mit --ssh verwendet, auf die entfernte Maschine angewendet werden.", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "Führen Sie folgendes aus:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "Führe 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All' aus", + "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "Führe 'kubectl delete clusterrolebinding kubernetes-dashboard' aus", + "Run: 'minikube delete --all' to clean up all the abandoned networks.": "Führe 'minikube delete --all' aus um alle nicht mehr verwendeten Netzwerke zu bereinigen.", + "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "Führe 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config' aus", + "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "Führe 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd' aus", + "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Läuft auf localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", + "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Läuft auf entfernten System (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", + "SSH key (ssh driver only)": "SSH key (nur SSH Treiber)", + "SSH port (ssh driver only)": "SSH port (nur SSH Treiber)", + "SSH user (ssh driver only)": "SSH user (nur SSH Treiber)", + "Save a image from minikube": "Speichere ein Image von Minikube", + "Searching the internet for Kubernetes version...": "Suche Kubernetes version im Internet...", + "Select a valid value for --dnsdomain": "Wähle einen gültigen Wert für --dnsdomain", + "Send trace events. Options include: [gcp]": "Schicke Trace Events. Mögliche Optionen sind [gcp]", + "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "Service '{{.service}}' konnte nicht im Namespace '{{.namespace}} gefunden werden.\nEs ist möglich einen anderen Namespace mit 'minikube service {{.service}} -n \u003cnamespace\u003e' auszuwählen. Oder die Liste aller Services anzuzeigen mit 'minikube service list'", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "Die Services {{.svc_names}} sind vom Type \"ClusterIP\" welcher nicht freigeben werden sollte, allerdings erlaubt minikube diesen Zugriff für lokale Entwicklung !", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "Setzte eine statische IP für den Minikube Cluster, die IP muss folgendes erfüllen: eine private Addresse, IPv4, das letzte Oktet muss zwischen 2 und 254 liegen, z.B. 192.168.200.200 (Nur Docker und Podman Treiber)", + "Set failed": "Setzen fehlgeschlagen", + "Set flag to delete all profiles": "Setze Flag um alle Profile zu löschen", + "Set flag to stop all profiles (clusters)": "Setze Flag um alle Profile (Cluster) zu stoppen", + "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "Setze Flag um den Cluster nach einer angegebenen Zeit zu stoppen (z.B. --schedule=5m)", + "Set this flag to delete the '.minikube' folder from your user directory.": "Setze dieses Flag um das '.minikube' Verzeichnis aus deinem Benutzer Verzeichnis zu löschen.", + "Sets an individual value in a minikube config file": "Setzt einen individuellen Wert in der Minikube Konfigurations-Datei", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "Setzt den Wert von PROPERTY_NAME zu PROPERTY_VALUE\n\tDiese Werte können durch Parameter oder Umgebungsvariablen zur Laufzeit überschrieben werden.", + "Sets up docker env variables; similar to '$(docker-machine env)'.": "Setzt Docker env Variablen; ähnlich wie '$(docker-machine env)'.", + "Sets up podman env variables; similar to '$(podman-machine env)'.": "Setzt podman env Variablen; ähnlich wie '$(podman-machine env)'.", + "Setting profile failed": "Setzten des Profiles fehlgeschlagen", + "Show a list of global command-line options (applies to all commands).": "Zeige eine Liste von globalen Kommandozeilen Parametern (die auf alle Befehle angewendet werden können)", + "Show only log entries which point to known problems": "Zeige nur Log Einträge, die auf bekannte Probleme hinweisen", + "Show only the audit logs": "Zeige nur das Audit Log", + "Show only the last start logs.": "Zeige nur das Log des letzten Starts.", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "Zeige die aktuellsten Journal Einträge und gebe neue Einträge aus, sobald diese im Journal eingetragen werden.", + "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "Simuliere den Numa Node Count in Minikube, der unterstützte Numa Node Count Bereich ist 1-8 (nur kvm2 Treiber)", + "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Wechsel des kubectl Kontexts für {{.profile_name}} übersprungen, weil --keep-context gesetzt wurde.", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "Einige Dashboard Features erfordern das metrics-server Addon. Um alle Features zu aktivieren:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Einige Dashboard Features erfordern das metrics-server addon. Um alle Features zu aktivieren:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n", + "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "Entschuldigung, Kubernetes {{.k8sVersion}} erfordert, dass conntrack im Pfad von root installiert ist", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "Entschuldigung, Kubernetes {{.k8sVersion}} erfordert, dass crictl im Pfad on root installiert ist", + "Sorry, completion support is not yet implemented for {{.name}}": "Entschuldigung, Vervollständigungs-Unterstützung ist noch nicht implementiert für {{.name}}", + "Sorry, please set the --output flag to one of the following valid options: [text,json]": "Entschuldigung, bitte setze den --output flag auf einen der folgenden Werte: [text,json]", + "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "Entschuldigung, die IP die bei --listen-address angegeben wurde, ist ungültig: {{.listenAddr}}.", + "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "Entschuldigung, die Addresse, die mit --insecure-registry angegeben wurde, ist ungültig: {{.addr}}. Erwartete Formate sind: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e", "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "Leider wird der Parameter kubeadm.{{.parameter_name}} momentan von --extra-config nicht unterstützt.", "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "Die angegebene URL mit dem Flag --registry-mirror ist ungültig: {{.url}}.", - "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "", - "Source {{.path}} can not be empty": "", - "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "", - "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", - "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", - "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Spezifizieren Sie arbiträre Flags, die an den Docker-Daemon übergeben werden. (Format: Schlüssel = Wert)", - "Specify arbitrary flags to pass to the build. (format: key=value)": "", - "Specify the 9p version that the mount should use": "", - "Specify the ip that the mount should be setup on": "", - "Specify the mount filesystem type (supported types: 9p)": "", - "Specify the port that the mount should be setup on, where 0 means any free port.": "", - "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "", - "StartHost failed, but will try again: {{.error}}": "", - "Starting control plane node {{.name}} in cluster {{.cluster}}": "", - "Starting node {{.name}} in cluster {{.cluster}}": "", - "Starting tunnel for service {{.service}}.": "", - "Starts a local Kubernetes cluster": "", + "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "Entschuldigung, {{.driver}} erlaubt es nicht, dass Mounts nach dem Erstellen des Containers geändert werden (vorheriger Mount: '{{.old}}, neuer Mount: '{{.new}}'", + "Source {{.path}} can not be empty": "Quelle {{.path}} kann nicht leer sein", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "Die angegebene Kubernetes Version {{.specified}} ist kleiner als die älteste unterstütze Version: {{.oldest}}", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "Die angegebene Kubernetes Version {{.specified}} is kleiner als die älteste unterstützte Version: {{.oldest}}. Verwenden Sie `minikube config defaults kubernetes-version` um weitere Details zu erfahren.", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "Die angegebene Kubernetes Version {{.specified}} ist neuer als die neuste supportete Version: {{.newest}}. Verwenden Sie `minikube config defaults kubernetes-version` um weitere Details zu erfahren.", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "Die angegebene Kubernetes Version {{.specified}} wurde nicht in der Kubernetes Versionsliste gefunden", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "Die angebene Kubernetes Major-Version {{.specifiedMajor}} ist neuer als die neueste unterstützte Major-Version: {{.newestMajor}}", + "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "Gebe die --kubernetes-version in folgender Form an: v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e Beispiel: 'v1.1.14'", + "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "Gebe einen alternativen --host-only-cidr Wert an, z.B. 172.16.0.1/24", + "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Spezifiziere arbiträre Flags, die an den Docker-Daemon übergeben werden. (Format: Schlüssel = Wert)", + "Specify arbitrary flags to pass to the build. (format: key=value)": "Spezifiziere arbiträre Flags an, die an den Build übergeben werden sollen. (Format: key=value)", + "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "Das Spezifizieren von extra Disks ist derzeit nur von den folgenden Treibern unterstützt: {{.supported_drivers}}. Wenn du dieses Feature beisteuern kannst, erstelle bitte einen PR.", + "StartHost failed, but will try again: {{.error}}": "StartHost fehlgeschlagen, aber es wird noch einmal versucht: {{.error}}", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "Starte \"{{.node}}\" {{.role}} Node im \"{{.cluster}}\" Cluster", + "Starting control plane node {{.name}} in cluster {{.cluster}}": "Starte Control Plane Node {{.name}} in Cluster {{.cluster}}", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "Starte Minikube ohne Kubernetes in Cluster {{.cluster}}", + "Starting minikube without Kubernetes {{.name}} in cluster {{.cluster}}": "Starte Minikube ohne Kubernetes {{.name}} in Cluster {{.cluster}}", + "Starting tunnel for service {{.service}}.": "Start Tunnel für den Service {{.service}}", + "Starting worker node {{.name}} in cluster {{.cluster}}": "Starte Worker Node {{.name}} in Cluster {{.cluster}}", + "Starts a local Kubernetes cluster": "Startet einen lokalen Kubernetes-Cluster", "Starts a local kubernetes cluster": "Startet einen lokalen Kubernetes-Cluster", - "Starts a node.": "", - "Starts an existing stopped node in a cluster.": "", - "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "", - "Stopping node \"{{.name}}\" ...": "", - "Stopping tunnel for service {{.service}}.": "", - "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "", - "Stops a node in a cluster.": "", - "Stops a running local Kubernetes cluster": "", - "Successfully added {{.name}} to {{.cluster}}!": "", - "Successfully deleted all profiles": "", - "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", - "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "", - "Successfully started node {{.name}}!": "", - "Successfully stopped node {{.name}}": "", - "Suggestion: {{.advice}}": "", - "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "Tag to apply to the new image (optional)": "", - "Target directory {{.path}} must be an absolute path": "", - "Target {{.path}} can not be empty": "", - "Test docs have been saved at - {{.path}}": "", + "Starts a node.": "Startet einen Node", + "Starts an existing stopped node in a cluster.": "Startet einen existierenden gestoppten Node in einem Cluster", + "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "Start mit dem Treiber {{.old_driver}} fehlgeschlagen. Versuche alternativen Treiber {{.new_driver}}: {{.error}}", + "Stopped tunnel for service {{.service}}.": "Tunnel Service für Service {{.service}} angehalten.", + "Stopping node \"{{.name}}\" ...": "Stoppe Node \"{{.name}}\" ...", + "Stopping tunnel for service {{.service}}.": "Stoppe den Tunnel für Service {{.service}}.", + "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "Stoppt einen lokalen Kubernetes Cluster. Dieser Befehl stoppt die unterliegenden VMs oder Container, belässt jedoch die Daten intakt. Der Cluster kann mit dem \"start\" Befehl wieder gestartet werden.", + "Stops a node in a cluster.": "Stoppt einen Node in einem Cluster", + "Stops a running local Kubernetes cluster": "Stoppt einen lokal laufenden Kubernetes Cluster", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "Subnetz welches für den Kic-Cluster verwendet werden soll. Wenn leergelassen, wird Minikube eine Subnetz-Adresse auswählen, beginnend von 192.168.49.0. (Nur Docker und Podman Treiber)", + "Successfully added {{.name}} to {{.cluster}}!": "{{.name}} erfolgreich zu Cluster {{.cluster}} hinzugefügt!", + "Successfully deleted all profiles": "Alle Profile erfolgreich gelöscht", + "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "{{.sourcePath}} erfolgreich nach {{.destinationPath}} eingehängt", + "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "Das Minikube Verzeichnis {{.minikubeDirectory}} wurde erfolgreich bereinigt", + "Successfully started node {{.name}}!": "Node {{.name}} erfolgreich gestartet!", + "Successfully stopped node {{.name}}": "Node {{.name}} erfolgreich gestoppt", + "Successfully unblocked bootpd process from firewall, retrying": "bootpd Prozess erfolgreich entblockt an der Firewall, versuche erneut", + "Suggestion: {{.advice}}": "Vorschlag: {{.advice}}", + "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Das System hat nur {{.size}}MiB verfügbar, weniger als {{.req}}MiB sind erforderlich für Kubernetes", + "Tag images": "Versehe Images mit einem Tag", + "Tag to apply to the new image (optional)": "Tag welches auf neue Images angewendet werden soll (optional)", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "Das Zielverzeichnis \u003cZiel Verzeichnis Pfad\u003e muss ein absoluter Pfad sein. Relative Pfade sind nicht erlaubt (Beispiel: \"minikube:/home/docker/copied.txt\")", + "Target directory {{.path}} must be an absolute path": "Das Zielverzeichnis {{.path}} muss ein absoluter Pfad sein", + "Target {{.path}} can not be empty": "Der Zielpfad {{.path}} darf nicht leer sein", + "Test docs have been saved at - {{.path}}": "Test Dokumentate wurden gespeichert in - {{.path}}", "The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo minikube --vm-driver={{.driver_name}}": "Der Treiber \"{{.driver_name}}\" benötigt Root-Rechte. Führen Sie minikube aus mit 'sudo minikube --vm-driver = {{.driver_name}}.", - "The \"{{.driver_name}}\" driver should not be used with root privileges.": "", + "The \"{{.driver_name}}\" driver should not be used with root privileges.": "Der Treiber \"{{.driver_name}}\" sollte nicht mit Root Privilegien gestartet werden.", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "Der Treiber \"{{.driver_name}}\" sollte nicht mit Root Privilegien gestartet werden. Wenn Sie dennoch weitermachen wollten, verwenden Sie --force.", "The \"{{.name}}\" cluster has been deleted.": "Der Cluster \"{{.name}}\" wurde gelöscht.", "The \"{{.name}}\" cluster has been deleted.__1": "Der Cluster \"{{.name}}\" wurde gelöscht.", - "The 'none' driver is designed for experts who need to integrate with an existing VM": "", + "The \"{{.name}}\" container runtime requires CNI": "Die Container Runtime \"{{.name}}\" erfordert ein CNI", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "", + "The 'none' driver is designed for experts who need to integrate with an existing VM": "Der Treiber \"Keine\" ist für Experten designed, die mit einer existierenden VM integrieren müssen", "The 'none' driver provides limited isolation and may reduce system security and reliability.": "Der Treiber \"Keine\" bietet eine eingeschränkte Isolation und beeinträchtigt möglicherweise Sicherheit und Zuverlässigkeit des Systems.", - "The '{{.addonName}}' addon is enabled": "", - "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "", - "The '{{.driver}}' provider was not found: {{.error}}": "", - "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", - "The '{{.name}}' driver does not respect the --cpus flag": "", - "The '{{.name}}' driver does not respect the --memory flag": "", - "The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically": "", - "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "", + "The '{{.addonName}}' addon is enabled": "Das Addon {{.addonName}} ist aktiviert", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "Der Treiber {{.driver}} benötigt höhere Berechtigungen. Die folgenden Befehle werden ausgeführt:\n\n{{ .example }}\n", + "The '{{.driver}}' provider was not found: {{.error}}": "Der Provider des Treibers {{.driver}} wurde nicht gefunden: {{.error}}", + "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Der Treiber '{{.name}} unterstützt keine mehrfach Profile: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "The '{{.name}}' driver does not respect the --cpus flag": "Der {{.name}} Treiber respektiert den Parameter --cpus nicht", + "The '{{.name}}' driver does not respect the --memory flag": "Der {{.name}} Treiber respektiert den Parameter --memory nicht", + "The '{{.name}}' driver does not support --cpus=no-limit": "Der '{{.name}}' Treiber unterstützt die Verwendung von --cpus=no-limit nicht", + "The '{{.name}}' driver does not support --memory=no-limit": "Der '{{.name}}' Treiber unterstützt die Verwendung von --memory=no-limit nicht", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "Das angebene --image-repository verwendet das Schema: {{.scheme}} welches automatisch entfernt wird", + "The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically": "Der angegebene Wert von --image-repository enthält das Schema {{.scheme}}, welches automatisch entfernt wird", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "Der angegebene Wert von --image-repository endet mit einem /, dies könnte zu Konflikten in Kubernetes führen, automatisch entfernt", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "Der angegebene Wert von --image-repository endet mit einem /, dies könnte zu Konflikten in Kubernetes führen, automatisch entfernt ", "The CIDR to be used for service cluster IPs.": "Die CIDR, die für Service-Cluster-IPs verwendet werden soll.", "The CIDR to be used for the minikube VM (virtualbox driver only)": "Die CIDR, die für die minikube-VM verwendet werden soll (nur Virtualbox-Treiber)", "The KVM QEMU connection URI. (kvm2 driver only)": "Der KVM-QEMU-Verbindungs-URI. (Nur kvm2-Treiber)", - "The KVM default network name. (kvm2 driver only)": "", - "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", + "The KVM default network name. (kvm2 driver only)": "Der KVM Standard-Netzwerk-Name. (Nur kvm2-Treiber)", + "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "Der KVM Treiber ist nicht in der Lage die alte VM erneut zu starten. Bitte starte 'minikube delete' um die VM zu löschen udn versuche es erneut.", "The KVM network name. (kvm2 driver only)": "Der KVM-Netzwerkname. (Nur kvm2-Treiber)", - "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", - "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", - "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", - "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "Das OLM Addon funktioniert nicht mehr, für mehr Informationen, siehe: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534", + "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "Der VM Treiber ist abgestürzt. Starte 'minikube start --alsologtostderr -v=8' um die Fehlermeldung des VM Treibers zu sehen", + "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "Der VM Treiber wurde mit Fehler beendet und ist möglicherweise defekt. Führe 'minikube start' mit --alsologtostderr -v=8 aus um den Fehler zu sehen", + "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "Die VM, für welche Minikube konfiguriert wurde, existiert nicht mehr. Führe 'minikube delete' aus", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "Das Ambassador Addon funktioniert seit v1.23.0 nicht mehr. Weitere Details finden sich hier: https://github.com/datawire/ambassador-operator/issues/73", "The apiserver listening port": "Der Überwachungsport des API-Servers", "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Der API-Servername, der im generierten Zertifikat für Kubernetes verwendet wird. Damit kann der API-Server von außerhalb des Computers verfügbar gemacht werden.", "The argument to pass the minikube mount command on start": "Das Argument, um den Bereitstellungsbefehl für minikube beim Start zu übergeben", - "The argument to pass the minikube mount command on start.": "", - "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", - "The base image to use for docker/podman drivers. Intended for local development.": "", - "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", - "The cluster dns domain name used in the Kubernetes cluster": "", + "The argument to pass the minikube mount command on start.": "Das Argument, um den Bereitstellungsbefehl für minikube beim Start zu übergeben.", + "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "Der Authoritative API-Server Hostname welcher für die API-Server Zertifikate und Verbindungen verwendet wird. Dies kann benutzt werden, um den API-Service außerhalb der Maschine verfügbar zu machen", + "The base image to use for docker/podman drivers. Intended for local development.": "Das Basis-Image, welche für den Docker/Podman Treiber verwendet werden soll. Für lokale Deployments vorgesehen.", + "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "Der angegebene Zertifikats-Hostname scheint ungültig zu sein (könnte aber auch ein Minikube bug sein, versuche 'minikube delete')", + "The cluster dns domain name used in the Kubernetes cluster": "Der Cluster DNS Domain Name, der im Kubernetes Cluster verwendet wird", "The cluster dns domain name used in the kubernetes cluster": "Der DNS-Domänenname des Clusters, der im Kubernetes-Cluster verwendet wird", - "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "", + "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "Der Cluster {{.cluster}} existiert bereits, was bedeutet, dass der --nodes Parameter ignoriert wird. Verwende \"minikube node add\" um weitere Nodes zu einem existierenden Cluster hinzuzufügen.", "The container runtime to be used (docker, crio, containerd)": "Die zu verwendende Container-Laufzeit (Docker, Crio, Containerd)", - "The control plane for \"{{.name}}\" is paused!": "", - "The control plane node \"{{.name}}\" does not exist.": "", - "The control plane node is not running (state={{.state}})": "", - "The control plane node must be running for this command": "", + "The control plane for \"{{.name}}\" is paused!": "Die Control-Plane für \"{{.name}}\" ist pausiert!", + "The control plane node \"{{.name}}\" does not exist.": "Die Control-Plane für \"{{.name}}\" existiert nicht.", + "The control plane node is not running (state={{.state}})": "Der Control-Plane-Node läuft nicht (state={{.state}})", + "The control plane node must be running for this command": "Der Control-Plane-Node muss für diesen Befehl laufen", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "Der API-Server des Control-Plane Nodes {{.name}} läuft nicht (versuche andere): (state={{.state}})", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "Der API-Server des Control-Plane Nodes {{.name}} läuft nicht: (state={{.state}})", + "The control-plane node {{.name}} apiserver is paused": "Der API-Server des Control-Plane Nodes {{.name}} ist pausiert", + "The control-plane node {{.name}} apiserver is paused (will try others)": "Der API-Server des Control-Plane Nodes {{.name}} ist pausiert (versuche andere)", + "The control-plane node {{.name}} host does not exist": "Der Host des Control-Plan Nodes {{.name}} existiert nicht", + "The control-plane node {{.name}} host does not exist (will try others)": "Der Host des Control-Plane Nodes {{.name}} existiert nicht (versuche andere)", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "Der Host des Control-Plane Nodes {{.name}} läuft nicht (versuche andere): state={{.state}}", + "The control-plane node {{.name}} host is not running: state={{.state}}": "Der Host des Control-Plane Nodes {{.name}} läuft nicht: state={{.state}}", "The cri socket path to be used": "Der zu verwendende Cri-Socket-Pfad", - "The cri socket path to be used.": "", - "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", + "The cri socket path to be used.": "Der zu verwendende Cri-Socket-Pfad.", + "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "Der docker-env Befehl ist inkompatibel mit multi-node Clustern. Bitte verwende das 'registry' Addon: https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "Der docker-env Befehl ist nur mit der \"Docker\" Laufzeitsumgebung kompatibel, aber dieser Cluster ist für die\"{{.runtime}}\" Laufzeitumgebung konfiguriert.", "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Der Treiber '{{.driver}}' wird auf {{.os}}/{{.arch}} nicht unterstützt", - "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "", - "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", - "The heapster addon is depreciated. please try to disable metrics-server instead": "", + "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "Der existierende \"{{.name}}\" Cluster wurde mit dem alten Treiber \"{{.old}}\" erstellt, welcher inkompatibel ist mit dem Treiber \"{{.new}}\".", + "The existing node configuration appears to be corrupt. Run 'minikube delete'": "Die existierende Node Konfiguration scheint defekt. Starte 'minikube delete'", + "The heapster addon is depreciated. please try to disable metrics-server instead": "Das heapster Addon ist veraltet (deprecated). Bitte deaktiviere stattdessen den Metris-Server.", + "The host does not support filesystem 9p.": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "Der Name des virtuellen Hyperv-Switch. Standardmäßig zuerst gefunden. (nur Hyperv-Treiber)", - "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image '{{.imageName}}' was not found; unable to add it to cache.": "", - "The initial time interval for each check that wait performs in seconds": "", - "The kubeadm binary within the Docker container is not executable": "", + "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "Der Hypervisor wurde scheinbar nicht korrekt konfiguriert. Starte 'minikube start --alsologtostderr -v=1' und inspiziere den Fehler-Code", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "Das Image '{{.imageName}}' wurde nicht gefunden; Image kann nicht zum Cache hinzugefügt werden.", + "The initial time interval for each check that wait performs in seconds": "Der initiale Zeitintervall für jeden Check den wait durchfürt, in Sekunden", + "The kubeadm binary within the Docker container is not executable": "Das kubeadm Programm im Docker Container ist nicht ausführbar", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "Die von der minikube-VM verwendete Kubernetes-Version (Beispiel: v1.2.3)", - "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "", - "The minikube VM is offline. Please run 'minikube start' to start it again.": "", - "The minikube {{.driver_name}} container exited unexpectedly.": "", - "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", + "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "Der angegebene Maschinen-Treiber kann nicht gestartet werden. Versuche 'docker-machine-driver-\u003ctype\u003e version'", + "The minikube VM is offline. Please run 'minikube start' to start it again.": "Die Minikube VM ist offline. Bitte führe 'minikube start' aus, um sie erneut zu starten.", + "The minikube {{.driver_name}} container exited unexpectedly.": "Der Minikube {{.driver_name}} Container wurde unerwartet beendet.", + "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "Die minimale erforderliche Version für podman ist \"{{.minVersion}}\". Die verwendete Version ist \"{{.currentVersion}}\". Minikube könnte nicht funktionieren. Verwenden auf eigene Gefahr. Um die neueste Version zu installieren, siehe https://podman.io/getting-started/installation.html", "The name of the network plugin": "Der Name des Netzwerk-Plugins", - "The named space to activate after start": "", - "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", - "The node to get IP. Defaults to the primary control plane.": "", - "The node to get logs from. Defaults to the primary control plane.": "", - "The node to get ssh-key path. Defaults to the primary control plane.": "", - "The node to ssh into. Defaults to the primary control plane.": "", - "The node {{.name}} has ran out of available PIDs.": "", - "The node {{.name}} has ran out of disk space.": "", - "The node {{.name}} has ran out of memory.": "", - "The node {{.name}} network is not available. Please verify network settings.": "", - "The none driver is not compatible with multi-node clusters.": "", - "The number of bytes to use for 9p packet payload": "", - "The number of nodes to spin up. Defaults to 1.": "", - "The output format. One of 'json', 'table'": "", - "The path on the file system where the docs in markdown need to be saved": "", - "The path on the file system where the error code docs in markdown need to be saved": "", - "The path on the file system where the testing docs in markdown need to be saved": "", - "The podman service within '{{.cluster}}' is not active": "", - "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "", - "The service namespace": "", - "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "", - "The services namespace": "", - "The time interval for each check that wait performs in seconds": "", - "The value passed to --format is invalid": "", - "The value passed to --format is invalid: {{.error}}": "", + "The named space to activate after start": "Der Namespace, der nach dem start aktiviert werden soll", + "The node to build on. Defaults to the primary control plane.": "Der Node auf dem gebaut wird. Standardmäßig ist dies die primäre Kontroll-Ebene.", + "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "Der Node, für den der Status geprüft werden soll. Standardmäßig ist das die Kontroll-Ebene. Leer lassen um mit dem standardmäßigen Format den Status für alle Nodes zu erhalten.", + "The node to get IP. Defaults to the primary control plane.": "Der Node von dem die IP ermittelt werden soll. Standardmäßig ist dies die primäre Kontroll-Ebene.", + "The node to get logs from. Defaults to the primary control plane.": "Der Node von dem die Logs ermittelt werden. Standardmäßig ist dies die primäre Kontroll-Ebene.", + "The node to get ssh-key path. Defaults to the primary control plane.": "Der Node von dem der ssh-Schlüssel Pfad ermittelt werden soll. Standardmäßig ist dies die primäre Kontroll-Ebene.", + "The node to ssh into. Defaults to the primary control plane.": "Der Node in den sich per ssh eingeloggt werden soll. Standardmäßig ist dies die primäre Kontroll-Ebene.", + "The node {{.name}} has ran out of available PIDs.": "Der Node {{.name}} hat keine verfügbaren PIDs mehr.", + "The node {{.name}} has ran out of disk space.": "Der Node {{.name}} hat keinen verfügbaren Speicherplatz mehr.", + "The node {{.name}} has ran out of memory.": "Der Node {{.name}} hat keinen verfügbaren Speicher mehr.", + "The node {{.name}} network is not available. Please verify network settings.": "Das Netzwerk des Node {{.name}}", + "The none driver is not compatible with multi-node clusters.": "Der 'none' Treiber ist nicht kompatibel mit Multi-Node Clustern.", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Die Verwendung des 'none' Treibers mit Kubernetes v1.24+ und einer Docker Container Runtime erfordert cri-dockerd.\n\t\t\n\t\tBitte folgen Sie diesen Anweisungen um cri-dockerd zu installieren:\n\n\t\thttps://github.com/Mirantis/cri-dockerd ", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Die Verwendung des 'none' Treibers mit Kubernetes v1.24+ und der Docker Container-Runtime erfordert dockert.\n\t\t\n\t\tBitte folgen Sie diesen Anweisungen um dockerd zu installieren:\n\n\t\thttps://docs.docker.com/engine/install/", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "Die Verwendung des 'none' Treibers mit Kubernetes v1.24+ erfordert containernetworking-plugins.\n\n\t\t Bitte folgen Sie diesen Anweisungen um containernetworking-plugins zu installieren:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver", + "The number of nodes to spin up. Defaults to 1.": "Die Anzahl der zu startenden Nodes. Default: 1", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "", + "The output format. One of 'json', 'table'": "Das Ausgabe Format. (Entweder 'json' oder 'table')", + "The path on the file system where the docs in markdown need to be saved": "Der Pfad auf dem Dateisystem indem die Dokumente in Markdown gespeichert werden müssen", + "The path on the file system where the error code docs in markdown need to be saved": "Der Pfad auf dem Dateisystem auf dem die Fehler-Code Dokumente in Markdown gespeichert werden müssen", + "The path on the file system where the testing docs in markdown need to be saved": "Der Pfad auf dem Dateisystem auf dem die Test-Dokumente in Markdown gespeichert werden müssen", + "The podman service within '{{.cluster}}' is not active": "Der Podman Service im Cluster '{{.cluster}}' ist nicht aktiv", + "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "Der Befehl podman-env ist inkompatibel mit multi-node Clustern. Verwende das 'registry' Addon: https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "Der podman-env Befehl ist nur mit der \"crio\" Runtime kompatibel, aber dieser Cluster ist für die Verwendung der \"{{.runtime}}\" konfiguriert.", + "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "Die angeforderte Speicherzuweisung von {{.requested}}MiB lässt nicht genug Speicher für das System (Gesamt-System-Speicher: {{.system_limit}}MiB). Dies könnte zu Stabilitätsproblemen führen.", + "The service namespace": "Der Namespace des Service", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "Der Service/Ingress {{.resource}} benötigt, dass priviligierte Ports verwendet werden können: {{.ports}}", + "The services namespace": "Der Namespace des Service", + "The socket_vmnet network is only supported on macOS": "Das socket_vmnet Netzwerk wird nur unter macOS unterstützt.", + "The time interval for each check that wait performs in seconds": "Der Zeitintervall für jeden Check, den wait ausführt, in Sekunden", + "The total number of nodes to spin up. Defaults to 1.": "Die Gesamtzahl der zu startenden Nodes. Default: 1.", + "The value passed to --format is invalid": "Der mit --format angegebene Wert ist ungültig", + "The value passed to --format is invalid: {{.error}}": "Der mit --format angegebene Wert ist ungültig: {{.error}}", + "The vfkit driver is only supported on macOS": "", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "", "The {{.driver_name}} driver should not be used with root privileges.": "Der Treiber {{.driver_name}} sollte nicht mit Root-Rechten verwendet werden.", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "Es gibt mehrere Möglichkeiten das benötigte File-Sharing zu aktivieren:\n1. Aktiviere \"Use the WSL 2 based engine\" in Docker Desktop\noder\n2. Aktiviere File-Sharing in Docker Desktop für das %s%s Verzeichnis", "There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "Es gibt eine neue Version für '{{.driver_executable}}'. Bitte erwägen Sie ein Upgrade. {{.documentation_url}}", - "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "", - "These changes will take effect upon a minikube delete and then a minikube start": "", - "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", + "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "Diese --extra-config Parameter sind ungültig: {{.invalid_extra_opts}}", + "These changes will take effect upon a minikube delete and then a minikube start": "Dieser Änderungen werden aktiv, nach einem 'minikube delete' und anschließendem 'minikube start'", + "Things to try without Kubernetes ...": "Dinge, die man ohne Kubernetes ausprobieren kann ...", + "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "Dieses Addon hat keinen definierte Endpoint für den Befehl 'addons open'\nSie können einen definieren, indem Sie den Service mit dem Label {{.labelName}}:{{.addonName}} versehen (anotate)", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "Dies kann auch automatisch erfolgen, indem Sie die env var CHANGE_MINIKUBE_NONE_USER = true setzen", - "This control plane is not running! (state={{.state}})": "", - "This driver does not yet work on your architecture. Maybe try --driver=none": "", - "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", - "This is unusual - you may want to investigate using \"{{.command}}\"": "", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "Dieser Cluster wurde vor Minikube v1.26.0 installiert und hat cri-docker nicht installiert. Bitte führen Sie 'minikube delete' aus und starten Sie Minikube erneut", + "This control plane is not running! (state={{.state}})": "Diese Kontroll-Ebene läuft nicht! (state={{.state}})", + "This driver does not yet work on your architecture. Maybe try --driver=none": "Dieser Treiber funktioniert noch nicht mit dieser Architektur. Versuche --driver=none zu verwenden", + "This flag is currently unsupported.": "Dieses Flag wird derzeit nicht unterstützt.", + "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "Dies ist ein bekanntes Problem mit dem BTRFS Treiber. Es exisitiert ein Workaround. Bitte schaue das GitHub Issue an", + "This is unusual - you may want to investigate using \"{{.command}}\"": "Das ist ungewöhnlich - Du könntest versuchen \"{{.command}}\" zu verwenden", "This will keep the existing kubectl context and will create a minikube context.": "Dadurch wird der vorhandene Kubectl-Kontext beibehalten und ein minikube-Kontext erstellt.", "This will start the mount daemon and automatically mount files into minikube": "Dadurch wird der Mount-Daemon gestartet und die Dateien werden automatisch in minikube geladen", - "This will start the mount daemon and automatically mount files into minikube.": "", - "This {{.type}} is having trouble accessing https://{{.repository}}": "", - "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "", + "This will start the mount daemon and automatically mount files into minikube.": "Dies startet den Mount-Daemon und mounted automatisch Dateien in Minikube.", + "This {{.type}} is having trouble accessing https://{{.repository}}": "Dieser {{.type}} hat Probleme beim Zugriff auf https://{{.repository}}", + "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "Tip: Um diesen zu root gehörenden Cluster zu entfernen, führe {{.cmd}} aus", "Tip: To remove this root owned cluster, run: sudo {{.cmd}} delete": "Tipp: Um diesen Root-Cluster zu entfernen, führen Sie Folgendes aus: sudo {{.cmd}} delete", - "To connect to this cluster, use: --context={{.name}}": "", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "Um auf Headlamp zuzugreifen, verwenden Sie den folgenden Befehl:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n", + "To access Headlamp, use the following command:\nminikube service headlamp -n headlamp\n\n": "Um auf Headlamp zuzugreifen, führen Sie folgenden Befehl aus:\nminikube service headlamp -n headlamp\n\n", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "Um auf das YAKD - Kubernetes Dashboard zuzugreifen, warten Sie bis der POD ready ist und führen Sie folgenden Befehl aus:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n", + "To configure vment-helper to run without a password, please check the documentation:": "", + "To connect to this cluster, use: --context={{.name}}": "Um zu diesem Cluster zu verbinden, verwende --context={{.name}}", "To connect to this cluster, use: kubectl --context={{.name}}": "Verwenden Sie zum Herstellen einer Verbindung zu diesem Cluster: kubectl --context = {{.name}}", "To connect to this cluster, use: kubectl --context={{.name}}__1": "Verwenden Sie zum Herstellen einer Verbindung zu diesem Cluster: kubectl --context = {{.name}}", - "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", - "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "", - "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", - "To see addons list for other profiles use: `minikube addons -p name list`": "", - "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", - "To start a cluster, run: \"{{.command}}\"": "", - "To start minikube with Hyper-V, Powershell must be in your PATH`": "", + "To connect to this cluster, use: kubectl --context={{.profile_name}}": "Verwenden Sie zum Herstellen einer Verbindung zu diesem Cluster: kubectl --context={{.profile_name}}", + "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "Um Beta-Hinweise zu deaktivieren, starte: 'minikube config set WantBetaUpdateNotification false'", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "Um diesen Hinweis zu deaktivieren, starte: 'minikube config set WantUpdateNotification false'\n", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "Um Hinweise generell zu deaktivieren, starte: 'minikube config set WantUpdateNotification false'\n", + "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "Um neue externe Images zu ziehen, müsste eventuell ein Proxy konfiguriert werden: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/", + "To see addons list for other profiles use: `minikube addons -p name list`": "Um die Addon-List für andere Profile anzusehen, verwende: `minikube addons -p name list`", + "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "Um das Google Cloud project zu setzten, starte:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\noder setze die Umgebungsvariabel GOOGLE_CLOUD_PROJECT.", + "To start a cluster, run: \"{{.command}}\"": "Um einen Cluster zu starten, starte: \"{{.command}}\"", + "To start minikube with Hyper-V, Powershell must be in your PATH`": "Um Minikube mit Hyper-V zu starten, muss Powershell im PATH sein`", "To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "Möglicherweise müssen Sie Kubectl- oder minikube-Befehle verschieben, um sie als eigenen Nutzer zu verwenden. Um beispielsweise Ihre eigenen Einstellungen zu überschreiben, führen Sie aus:", - "Troubleshooting Commands:": "", - "Try 'minikube delete' to force new SSL certificates to be installed": "", - "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", - "Trying to delete invalid profile {{.profile}}": "", - "Unable to bind flags": "", - "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", - "Unable to enable dashboard": "", - "Unable to fetch latest version info": "", - "Unable to find control plane": "", - "Unable to generate docs": "", - "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", - "Unable to get CPU info: {{.err}}": "", + "Troubleshooting Commands:": "Befehle zur Fehlerbehebung:", + "Try 'minikube delete' to force new SSL certificates to be installed": "Versuche 'minikube delete' um zu erzwingen, dass neue SSL Zertifikate installiert werden", + "Try 'minikube delete', and disable any conflicting VPN or firewall software": "Versuche 'minikube delete' und deaktiviere alle störenden VPN oder Firewall-Software", + "Try one or more of the following to free up space on the device:\n\t\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Versuche einen oder mehrere der folgenden Befehle um Speicherplatz auf dem Gerät freizugeben:\n\t\n\t\t\t1. Starte \"docker system prune\" um ungenützte Docker Daten zu entfernen (Optional mit \"-a\")\n\t\t\t2. Erhöhe den Speicherplatz welcher für Docker Desktop reserviert wurde durch klicken auf:,\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Starte \"minikube ssh -- docker system prune\" wenn die Docker Container Laufzeitsumgebung verwendet wird", + "Try one or more of the following to free up space on the device:\n\t\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Verwende einen oder mehrere der folgenden Befehl um Speicherplatz auf dem Gerät freizugeben:\n\t\n\t\t\t1. Starte \"sudo podman system prune\" um ungenutzte Podman Daten zu entfernen\n\t\t\t2. Starte \"minikube ssh -- docker system prune\" falls die Docker Container Laufzeitsumgebung verwendet wird", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Trying to delete invalid profile {{.profile}}": "Versuche ungültige Profile zu löschen: {{.profile}}", + "Tunnel successfully started": "Tunnel erfolgreich gestartet", + "Unable to bind flags": "Konnte Parameter-Flags nicht binden", + "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "Kann dediziertes Netzwerk nicht anlegen, dies kann dazu führen, dass sich die Cluster IP ändert, wenn der Cluster neugestartet wird: {{.error}}", + "Unable to delete profile(s): {{.error}}": "Kann Profil(e) nicht löschen: {{.error}}", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "Kann das letzte Release Patch für die angegebene major.minor Version v{{.majorminor}} nicht erkennen.", + "Unable to enable dashboard": "Kann Dashboard nicht aktivieren", + "Unable to fetch latest version info": "Kann aktuellste Versions-Info nicht laden", + "Unable to find any control-plane nodes": "Kann keine Control-Plane Nodes finden", + "Unable to find control plane": "Kann Control-Plane nicht finden", + "Unable to generate docs": "Kann Dokumente nicht generieren", + "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "Kann Dokumentation nicht genieren. Stellen Sie sicher, dass der angegebene Pfad ein Verzeichnis ist, existiert und es geschrieben werden kann (Schreibrechte)", + "Unable to get CPU info: {{.err}}": "Kann CPU info nicht holen: {{.err}}", "Unable to get bootstrapper: {{.error}}": "Bootstrapper kann nicht abgerufen werden: {{.error}}", - "Unable to get command runner": "", - "Unable to get control plane status: {{.error}}": "", - "Unable to get current user": "", - "Unable to get forwarded endpoint": "", - "Unable to get machine status": "", - "Unable to get runtime": "", - "Unable to kill mount process: {{.error}}": "", - "Unable to list profiles: {{.error}}": "", + "Unable to get command runner": "Kann Command Runner nicht holen", + "Unable to get control plane status: {{.error}}": "Kann Kontroll-Ebene Status nicht holen: {{.error}}", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "Kann API-Server Status des Control-Plane Nodes {{.name}} nicht ermitteln (versuch einen anderen): {{.error}}", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "Kann API-Server Status des Control-Plane Nodes {{.name}} nicht ermitteln: {{.error}}", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "Kann Endpoint des Control-Plane Nodes {{.name}} nicht ermitteln (versuche andere): {{.err}}", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "Kann Endpoint des Control-Plane Nodes {{.name}} nicht ermitteln: {{.err}}", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "Kann Host Command Runner des Control-Plane Nodes {{.name}} nicht ermitteln (versuche andere): {{.err}}", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "Kann Host Command Runner des Control-Plane Nodes {{.name}} nicht ermitteln: {{.err}}", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "Kann Host Status des Control Plane Nodes {{.name}} nicht ermitteln (versuche andere): {{.err}}", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "Kann Host Status des Control-Plane Nodes {{.name}} nicht ermitteln: {{.err}}", + "Unable to get current user": "Kann aktuellen Benutzer nicht holen", + "Unable to get forwarded endpoint": "Kann weitergeleiteten Endpoint nicht laden", + "Unable to get machine status": "Kann Maschinen Status nicht holen", + "Unable to get runtime": "Kann Runtime nicht holen", + "Unable to kill mount process: {{.error}}": "Kann Mount Prozess nicht beenden: {{.error}}", + "Unable to list profiles: {{.error}}": "Kann Liste von Profilen nicht holen: {{.error}}", "Unable to load cached images from config file.": "Zwischengespeicherte Bilder können nicht aus der Konfigurationsdatei geladen werden.", - "Unable to load cached images: {{.error}}": "", + "Unable to load cached images: {{.error}}": "Kann gecachete Images nicht laden: {{.error}}", "Unable to load config: {{.error}}": "Konfig kann nicht geladen werden: {{.error}}", - "Unable to load host": "", - "Unable to load profile: {{.error}}": "", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "Kann Host des Control-Plane Nodes {{.name}} nicht laden (versuche andere): {{.err}}", + "Unable to load control-plane node {{.name}} host: {{.err}}": "Kann Host des Control-Plane Nodes {{.name}} nicht laden: {{.err}}", + "Unable to load host": "Kann Host nicht laden", + "Unable to load profile: {{.error}}": "Kann Profil nicht laden: {{.error}}", "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "\"{{.kubernetes_version}}\" kann nicht geparst werden: {{.error}}", - "Unable to parse default Kubernetes version from constants: {{.error}}": "", - "Unable to parse memory '{{.memory}}': {{.error}}": "", - "Unable to parse oldest Kubernetes version from constants: {{.error}}": "", - "Unable to pick a default driver. Here is what was considered, in preference order:": "", + "Unable to parse memory '{{.memory}}': {{.error}}": "Kann Speicher nicht parsen: '{{.memory}}': {{.error}}", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "Kann version.json nicht parsen: {{.error}}, json: {{.json}}", + "Unable to pick a default driver. Here is what was considered, in preference order:": "Kann keinen Default-Treiber auswählen. Hier eine List der Treiber, die in Erwägung gezogen wurden, in der Reihe ihrer Präferenz", "Unable to pull images, which may be OK: {{.error}}": "Bilder können nicht abgerufen werden, was möglicherweise kein Problem darstellt: {{.error}}", - "Unable to push cached images: {{.error}}": "", - "Unable to remove machine directory": "", - "Unable to restart cluster, will reset it: {{.error}}": "", - "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", - "Unable to stop VM": "", - "Unable to update {{.driver}} driver: {{.error}}": "", - "Unfortunately, could not download the base image {{.image_name}} ": "", + "Unable to push cached images: {{.error}}": "Kann gecachete Image nicht veröffentlichen (push): {{.error}}", + "Unable to remove machine directory": "Kann Maschinen Verzeichnis nicht entfernen", + "Unable to restart cluster, will reset it: {{.error}}": "Kann den Cluster nicht neustarten, werde ihn zurücksetzen (reset): {{.error}}", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "Kann Control-Plane Node(s) nicht neustarten, Cluster wird zurückgesetzt (reset): {{.error}}", + "Unable to run vmnet-helper without a password": "", + "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "Kann existierenden Kubernetes v{{.old}} Cluster nicht auf Version v{{.new}} downgraden", + "Unable to stop VM": "Kann VM nicht stoppen", + "Unable to update {{.driver}} driver: {{.error}}": "Kann Treiber {{.driver}} nicht aktualisieren: {{.error}}", + "Unfortunately, could not download the base image {{.image_name}} ": "Leider konnte das Basis Image (base image) {{.image_name}} nicht heruntergeladen werden", "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "Kubernetes {{.kubernetes_version}} wird mit {{.bootstrapper_name}} deinstalliert...", - "Unmounting {{.path}} ...": "", - "Unpause": "", - "Unpaused {{.count}} containers": "", - "Unpaused {{.count}} containers in: {{.namespaces}}": "", - "Unpausing node {{.name}} ... ": "", - "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "", - "Unset variables instead of setting them": "", - "Update Docker to the latest minor version, this version is unsupported": "", - "Update kubeconfig in case of an IP or port change": "", - "Update server returned an empty list": "", - "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "", - "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", + "Unmounting {{.path}} ...": "Unmounte {{.path}} ...", + "Unpause": "Reaktiviere (nach Pause)", + "Unpaused {{.count}} containers": " Reaktiviere {{.count}} pausierte Container", + "Unpaused {{.count}} containers in: {{.namespaces}}": "Reaktiviere {{.count}} pausierte Container in: {{.namespaces}}", + "Unpausing node {{.name}} ... ": "Reaktiviere pausierten Node {{.name}} ...", + "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "Löschen (unset) Sie die KUBECONFIG-Umgebungs-Variable oder stellen Sie sicher, dass diese nicht auf einen leeren oder anderweitig ungültigen Pfad verweist", + "Unset variables instead of setting them": "Löschen Sie Variabeln (unset) anstatt diese zu setzen", + "Update Docker to the latest minor version, this version is unsupported": "Aktualisieren Sie Docker auf die aktuellste Minor-Version, diese Version wird nicht unterstützt", + "Update kubeconfig in case of an IP or port change": "Aktualisieren Sie die kubeconfig falls sich die IP oder der Port geändert haben", + "Update server returned an empty list": "Update server lieferte eine leere Liste zurück", + "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "Aktualisiere den laufenden {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...", + "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "Aktualisieren Sie auf QEMU v3.1.0+, führen Sie 'virt-host-validate' aus oder stellen Sie sicher, dass Sie keine Nested VM Umgebung verwenden.", "Upgrading from Kubernetes {{.old}} to {{.new}}": "Upgrade von Kubernetes {{.old}} auf {{.new}}", - "Usage": "", - "Usage: minikube completion SHELL": "", - "Usage: minikube delete": "", - "Usage: minikube delete --all --purge": "", - "Usage: minikube node [add|start|stop|delete|list]": "", - "Usage: minikube node delete [name]": "", - "Usage: minikube node list": "", - "Usage: minikube node start [name]": "", - "Usage: minikube node stop [name]": "", - "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", - "Use 'kubect get po -A' to find the correct and namespace name": "", - "Use -A to specify all namespaces": "", - "Use SSH connection instead of HTTPS (port 2376)": "", - "Use SSH for running kubernetes client on the node": "", - "Use VirtualBox to remove the conflicting VM and/or network interfaces": "", - "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "", - "User ID: {{.userID}}": "", - "User name '{{.username}}' is not valid": "", - "User name must be 60 chars or less.": "", - "Userspace file server is shutdown": "", - "Userspace file server: ": "", + "Usage": "Verwendung", + "Usage: minikube completion SHELL": "Verwendung: minikube completion SHELL", + "Usage: minikube delete": "Verwendung: minikube delete", + "Usage: minikube delete --all --purge": "Verwendung: minikube delete --all --purge", + "Usage: minikube node [add|start|stop|delete|list]": "Verwendung: minikube node [add|start|stop|delete|list]", + "Usage: minikube node delete [name]": "Verwendung: minikube node delete [name]", + "Usage: minikube node list": "Verwendung: minikube node list", + "Usage: minikube node start [name]": "Verwendung: minikube node start [name]", + "Usage: minikube node stop [name]": "Verwendung: minikube node stop [name]", + "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "Verwende \"{{.CommandPath}} [command] --help\" um mehr Informationen zu einem Befehl zu erhalten.", + "Use 'kubectl get po -A' to find the correct and namespace name": "Verwende 'kubectl get po -A' um den richtigen Namen und den Namespace Namen zu finden", + "Use -A to specify all namespaces": "Verwende -A um alle Namespaces zu verwenden", + "Use SSH connection instead of HTTPS (port 2376)": "Verwende SSH-Verbindung stelle von HTTPS (Port 2376)", + "Use SSH for running kubernetes client on the node": "Verwende SSH für den laufenden Kubernetes Client auf dem Node", + "Use VirtualBox to remove the conflicting VM and/or network interfaces": "Verwende VirtualBox um die stärende VM und/oder die störende Netzwerk-Schnittstelle zu entfernen", + "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "Verwende den Golang SSH client (Default: true). Wenn man es auf 'false' setzt, dann wird die Command-Line 'ssh' verwendet, wenn auf die Docker-Maschine zugegriffen wird. Dies ist nützlich, wenn man einen Maschinen Treiber verwendet und dieser mit der Meldung 'Waiting for SSH' nicht startet.", + "User ID: {{.userID}}": "Benutzer ID: {{.userID}}", + "User name '{{.username}}' is not valid": "Benutzername '{{.username}} is ungültig", + "User name must be 60 chars or less.": "Der Benutzername kann 60 oder weniger Zeichen lang sein", + "Userspace file server is shutdown": "Userspace File Server ist heruntergefahren", + "Userspace file server: ": "Userspace File Server:", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "Für die Verwendung von Kubernetes v1.24+ mit der Docker Runtime ist eine Installation von cri-docker erforderlich.", + "Using Kubernetes {{.version}} since patch version was unspecified": "Verwende Kubernetes {{.version}} da die Patch-Version nicht angegeben wurde", "Using image repository {{.name}}": "Verwenden des Image-Repositorys {{.name}}", - "Using image {{.registry}}{{.image}}": "", - "Using image {{.registry}}{{.image}} (global image repository)": "", - "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "", - "Using the {{.driver}} driver based on existing profile": "", - "Using the {{.driver}} driver based on user configuration": "", + "Using image {{.registry}}{{.image}}": "Verwende Image {{.registry}}{{.image}}", + "Using image {{.registry}}{{.image}} (global image repository)": "Verwende das Image {{.registry}}{{.image}} (globale Image Repository)", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "Die Verwendung des rootless Docker Treiber ist erforderlich, aber der aktuelle Docker scheint nicht rootless. Verwenden Sie 'docker context use rootless' .", + "Using rootless driver was required, but the current driver does not seem rootless": "Die Verwendung des rootless Treibers ist erforderlich, aber der aktuelle Treiber scheint nicht rootless", + "Using rootless {{.driver_name}} driver": "Verwende rootless {{.driver_name}} Treiber", + "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "Das Verwenden der '{{.runtime}}' Laufzeitumgebung mit dem 'none' Treiber ist eine ungetestete Konfiguration!", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "Die Verwendung des docker-env Befehls mit der Containerd Runtime ist ein höchst experimentelles Feature, bitte geben Sie Feedback oder tragen Sie zur Verbesserung bei", + "Using the {{.driver}} driver based on existing profile": "Verwende den Treiber {{.driver}} basierend auf dem existierenden Profil", + "Using the {{.driver}} driver based on user configuration": "Verwende den Treiber {{.driver}} basierend auf der Benutzer-Konfiguration", + "Using {{.driver_name}} driver with root privileges": "Verwende den Treiber {{.driver_name}} mit root-Privilegien", "VM driver is one of: %v": "VM-Treiber ist einer von: %v", - "Valid components are: {{.valid_extra_opts}}": "", - "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", - "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", - "Verifying Kubernetes components...": "", - "Verifying dashboard health ...": "", - "Verifying proxy health ...": "", - "Verifying {{.addon_name}} addon...": "", + "Valid components are: {{.valid_extra_opts}}": "Gültige Komponenten sind: {{.valid_extra_opts}}", + "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "Validieren Sie ihre KVM Netzwerke. Führen Sie folgendes aus: virt-host-validate and then virsh net-list --all", + "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "Verfizieren Sie, dass die HTTP_PROXY und HTTPS_PROXY Umgebungsvariablen korrekt gesetzt sind.", + "Verifying Kubernetes components...": "Verifiziere Kubernetes Komponenten...", + "Verifying dashboard health ...": "Verifiziere Dashboard Funktionalität ...", + "Verifying proxy health ...": "Verifiziere Proxy Funktionalität ...", + "Verifying {{.addon_name}} addon...": "Verifiziere {{.addon_name}} Addon...", "Version: {{.version}}": "", - "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "", - "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "", - "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "", - "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "", - "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "", - "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "", - "Wait failed: {{.error}}": "", + "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "VirtualBox und Hyper-V haben einen Konflikt. Verwenden Sie '--driver=hyperv' oder deaktivieren Sie Hyper-V indem Sie 'bcdedit /set hypervisorlaunchtype off' aufrufen", + "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "VirtualBox kann kein Netzwerk anlegen, möglicherweise weil es mit einem existierenden Netzwerk in Konflikt steht, über welches Minikube nichts mehr weiß. Versuchen Sie 'minikube delete' aufzurufen", + "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "VirtualBox ist nicht funktionial. Deaktivieren Sie Real-Time Antivirus Software, Reboot und installieren Sie VirtualBox erneut falls das Problem weiterhin besteht.", + "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "VirtualBox ist nicht funktional. ", + "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "VirtualBox kann seine Netzwerk-Schnittstellen nicht finden. Versuchen Sie auf die aktuellste Version zu aktualisieren und zu rebooten.", + "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "Virtualisierungs-Unterstützung ist auf ihrem Computer deaktivert. Wenn Sie Minikube in einer VM ausführen, versuchen Sie '--driver=docker' anzugeben. Andernfalls schauen Sie im BIOS-Handbuch ihres Systems nach, wie man die Virtualisierungs-Unterstützung aktiviert.", + "Wait failed: {{.error}}": "Warten fehlgeschlagen: {{.error}}", "Wait until Kubernetes core services are healthy before exiting": "Warten Sie vor dem Beenden, bis die Kerndienste von Kubernetes fehlerfrei arbeiten", - "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", + "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "Sie wollen kubectl in der Version {{.version}}? Versuchen Sie 'minikube kubectl -- get pods -A'", "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "Als Root für die NFS-Freigaben wird standardmäßig /nfsshares verwendet (nur Hyperkit-Treiber)", - "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "", - "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", - "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", + "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "Gitb an, ob ein externer Switch anstelle des Default Switches verwendet werden soll, wenn kein virtueller Switch explizit angegeben wurde. (nur HyperV-Treiber)", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", + "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "Bei Angabe von --network-plugin=cni müssen Sie ein eigenes CNI angeben. Verwenden Sie das --cni Flag als eine benutzer-freundlichere Alternative", + "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "Sie scheinen einen Proxy zu verwenden, aber Ihre NO_PROXY-Umgebung enthält keine minikube-IP ({{.ip_address}}).", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see {{.documentation_url}} for more details": "Sie scheinen einen Proxy zu verwenden, aber Ihre NO_PROXY-Umgebung enthält keine minikube-IP ({{.ip_address}}). Weitere Informationen finden Sie unter {{.documentation_url}}", - "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", - "You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "", - "You can delete them using the following command(s): ": "", - "You can force an unsupported Kubernetes version via the --force flag": "", - "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", - "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", - "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", + "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "Sie versuchen eine Windows .exe Binärdatei innerhalb von WSL auszuführen. Bitte verwenden Sie stattdessen eine Linux Binärdatei für eine bessere Integration (Download-Möglichkeit: https://minikube.sigs.k8s.io/docs/start/.). Alternativ, wenn Sie dies wirklich möchten, können Sie dies mit --force erzwingen", + "You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "Sie versuchen ein amd64-Binärformat auf einem M1 System auszuführen. Bitte erwägen Sie eine darwin/amd64 Binärdatei stattdessen zu verwenden (Download-Möglichkeit: {{.url}})", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "Sie versuchen ein amd64 Binary auf einem M1 System zu verwenden.\nBitte ziehen Sie stattdessen die Verwendung des darwin/arm65 Binaries in Betracht.\nHerunterladbar unter {{.url}}", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "Sie verwenden den QEMU-Treiber ohne ein dediziertes Netzwerk, welches nicht `minikube service` \u0026 `minikube tunnel` Befehle unterstützt.", + "You can create one using 'minikube start'.\n\t\t": "Sie können einen mit 'minikube start' erstellen.\n\t\t", + "You can delete them using the following command(s): ": "Sie können diese mit dem folgenden Befehl/den folgenden Befehlen löschen:", + "You can force an unsupported Kubernetes version via the --force flag": "Sie können das Verwenden einer nicht unterstützten Kubernetes Version mit dem --force Parameter erzwingen", + "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "Zusätzliche Platten können nicht zu einem existieren Cluster hinzugefügt oder von einem existierenden Cluster entfernt werden. Bitte löschen Sie den Cluster zuerst.", + "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "Die Anzahl der CPUs eines existierenden Minikube Clusters kann nicht geändert werden. Bitte löschen Sie den Cluster zuerst.", + "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "Die Plattengröße eines existierenden Minikube Clusters kann nicht geändert werden. Bitte löschen Sie den Cluster zuerst.", + "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "Die Speichergröße eines existierenden Minikube Clusters kann nicht geändert werden. Bitte löschen Sie den Cluster zuerst.", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "Sie können die Anzahl der Nodes eines existierenden Minikube Clusters nicht verändern. Bitte verwenden Sie 'minikube node add' um weitere Nodes zu einem existierenden Cluster hinzuzufügen.", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "Es ist nicht möglich die statische IP eines existierenden Clusters zu ändern. Bitte löschen Sie den Cluster zuerst.", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "Sie können keine Addons in einem Cluster ohne Kubernetes aktivieren. Um Kubernetes in ihrem Cluster zu verwende, starten sie: minikube start --kubernetes-version=stable", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "Sie haben sich mit einem Service-Account authentifiziert, welcher keine JSON-Datei zugeordnet ist. Das GCP Auth Addon benötigt Zugangsdaten in einer JSON Datei um weitermachen zu können.", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "Sie haben sich mit einem Service Account authentifiziert, welcher kein zugehöriges JSON besitzt. GCP Auth benötigt Zugangsdaten in einer JSON-Datei um weitermachen zu können. Das Image Pull Secret wurde importiert.", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "Sie haben den CNI Treiber deaktiviert, aber die \"{{.name}}\" Container Laufzeitumgebung benötigt ein CNI", + "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "Sie haben den \"virtualbox\" Treiber ausgewählt, aber es existieren bessere Möglichkeiten !\nFür eine bessere Performanz und besseren Support erwägen Sie die Verwendung eines anderen Treibers: {{.drivers}}\n\nUm diese Warnung zu deaktivieren, führen Sie folgendes aus:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nUm mehr über die Minikube-Treiber zu erfahren, lesen Sie https://minikube.sigs.k8s.io/docs/drivers/\nZu Benchmarks lesen Sie https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Möglicherweise müssen Sie die VM \"{{.name}}\" manuell von Ihrem Hypervisor entfernen", - "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", - "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "", - "You must specify a service name": "", - "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", - "Your cgroup does not allow setting memory.": "", - "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "", - "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "", - "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", - "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "", - "Your minikube vm is not running, try minikube start.": "", - "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", - "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "", - "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", - "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", - "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "", - "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", - "bash completion failed": "", + "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "Möglicherweise müssen Sie den Hyper-V Manager stoppen und `minikube delete` erneut ausführen.", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "Möglicherweise wird eine amd64 Version von Minikube auf einem Apple-Chip Mac verwendet, verwende stattdessen die amd64 Version von Minikube", + "You must specify a service name": "Sie müssen einen Service-Namen angeben", + "You must specify service name(s) or --all": "Sie müssen Service-Namen angeben oder --all", + "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "Ihre GCP Credentials werden nun in jeden Pod im {{.name}} Cluster gemounted.", + "Your cgroup does not allow setting memory.": "Ihre cgroup erlaubt das Setzen von memory nicht.", + "Your firewall is blocking bootpd which is required for socket_vmnet. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "Ihre Firewall blockiert die Verwendung von bootp, welches erforderlich ist um socket_vmnet zu verwenden. Die folgenden Befehle werden ausgeführt, um bootp zu entblocken:\n\n{{.commands}}\n", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "Ihre Firewall blockiert wahrscheinlich bootp, führen Sie die folgenden Befehle aus, um es zu entblocken:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd", + "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "Ihr Host unterstützt KVM Virtualisierung nicht. Stellen Sie sicher, dass qemu-kvm installiert ist und führen Sie 'virt-host-validate' aus um das Problem zu debuggen.", + "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "Ihr Host unterstützt keine Virtualisierung. Wenn Sie Minikube in einer VM ausführen, versuchen sie '--driver=docker'. Andernfalls aktivieren Sie die Virtualisierung im BIOS", + "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "Ihr Host kann keine Pakete zur Minikube VM routen. Wenn Sie eine VPN Software einsetzen, versuchen Sie diese auszuschalten oder konfigurieren Sie sie, so das sie keinen Verkehr für die VM IP re-routed. Falls nicht, prüfen Sie die Routing Optionen ihrer VM Umgebung.", + "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "Ihre Minikube Konfiguration referenziert einen unsupporteten Treiber. Lösche ~/.minikube und versuche es erneut.", + "Your minikube vm is not running, try minikube start.": "Die Minikube VM läuft nicht, versuche minikube start.", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "Ihrem Benutzer fehlen die Rechte zum Minikube Profile Verzeichnis. Führe 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' zum Reparieren aus", + "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "[WARNUNG] Um die volle Funktionalität zu erreichen, benötigt das 'csi-hostpath-driver' Addon, dass das 'volumesnapshots' Addon aktiviert ist.\n\nDas 'volumesnapshots' addon kann folgendermaßen aktiviert werden: 'minikube addons enable volumesnapshots'\n", + "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "Addon '{{.name}}' ist derzeit nicht aktiviert.\nUm es zu aktivieren, führe Folgendes aus:\nminikube addons enable {{.name}}", + "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "Addon '{{.name}}' ist kein valides Addon welches mit Minikube paketiert ist.\nUm eine Liste der verfügbaren Addons anzuzeigen, führe Folgendes aus:\nminikube addons list", + "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "addons modifiziert Minikube Addon Dateien mittels Unter-Befehlen wie \"minikube addons enable dashboard\"", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "arm64 VM Treiber unterstützen derzeit die crio Container Runtime nicht. Siehe https://github.com/kubernetes/minikube/issues/14146 für Details.", + "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "auto-pause für ein Addon ist ein Alpha-Feature und ist immer noch in Entwicklung. Bitte melde Issues um uns zu helfen das Feature zu verbessern.", + "bash completion failed": "bash completion fehlgeschlagen", "bash completion.": "", - "call with cleanup=true to remove old tunnels": "", - "cancel any existing scheduled stop requests": "", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", - "config view failed": "", - "containers paused status: {{.paused}}": "", - "dashboard service is not running: {{.error}}": "", - "delete ctx": "", - "deleting node": "", - "disable failed": "", - "dry-run mode. Validates configuration, but does not mutate system state": "", - "dry-run validation complete!": "", - "enable failed": "", - "error creating clientset": "", - "error getting primary control plane": "", - "error getting ssh port": "", - "error initializing tracing: {{.Error}}": "", - "error parsing the input ip address for mount": "", - "error provisioning guest": "", - "error starting tunnel": "", - "error stopping tunnel": "", - "error: --output must be 'yaml' or 'json'": "", - "experimental": "", - "failed to add node": "", - "failed to open browser: {{.error}}": "", - "failed to save config": "", - "failed to start node": "", - "fish completion failed": "", - "fish completion.": "", - "if true, will embed the certs in kubeconfig.": "", - "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", - "initialization failed, will try again: {{.error}}": "", - "invalid kubernetes version": "", - "keep the kube-context active after cluster is stopped. Defaults to false.": "", - "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "", + "call with cleanup=true to remove old tunnels": "Rufe mit cleanup=true auf auf, um alte Tunnel zu entfernen", + "cancel any existing scheduled stop requests": "halte alle existierenden, geplanten Stop Requests ab", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "die --kubernetes-version kann nicht angegeben werden, wenn --no-kubernetes verwendet wird,\nzum Löschen der Einstellung in der globalen Konfiguration führe Folgendes aus:\n\n$ minikube config unset kubernetes-version", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "config modifiziert Minikube Konfigurations Dateien mit Unter-Befehlen wie \"minikube config set driver kvm2\"\nConfigurable fields: \n\n", + "config view failed": "config view fehlgeschlagen", + "containers paused status: {{.paused}}": "Container in pausiert status: {{.paused}}", + "dashboard": "Dashboard", + "dashboard service is not running: {{.error}}": "Dashboard Service läuft nicht: {{.error}}", + "delete ctx": "lösche ctx", + "deleting node": "lösche Node", + "disable failed": "deaktivieren fehlgeschlagen", + "dry-run mode. Validates configuration, but does not mutate system state": "dry-run Modus. Validiert die Konfiguration, aber ändert den System Zustand nicht", + "dry-run validation complete!": "dry-run Validierung komplett!", + "enable failed": "aktivieren fehlgeschlagen", + "enabled failed": "aktivieren fehlgeschlagen", + "error creating clientset": "Fehler beim Anlegen des Clientsets", + "error creating urls": "Fehler beim Erstellen der URLs", + "error fetching Kubernetes version list from GitHub": "Fehler beim Laden der Kubernetes Versionliste von GitHub", + "error getting control-plane node": "Fehler beim Ermitteln der Control-Plane Node", + "error getting defaults: {{.error}}": "Fehler beim Ermitteln der Default-Einstellungen: {{.error}}", + "error getting primary control plane": "Fehler beim Ermitteln der primären Kontroll-Ebene", + "error getting ssh port": "Fehler beim Ermitteln des ssh Ports", + "error initializing tracing: {{.Error}}": "Fehler beim Initialisieren des Tracings: {{.Error}}", + "error parsing the input ip address for mount": "Fehler beim Parsen der Input IP-Adresse für mount", + "error provisioning guest": "Fehler beim Provisionieren des Gastes", + "error starting tunnel": "Fehler beim Starten des Tunnels", + "error stopping tunnel": "Fehler beim Stoppen des Tunnels", + "error: --output must be 'text', 'yaml' or 'json'": "Fehler: --output muss entweder 'text', 'yaml' oder 'json' sein", + "error: --output must be 'yaml' or 'json'": "Fehler: --output muss entweder 'yaml' oder 'json' sein", + "experimental": "experimentell", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "Probleme beim Sperren, aufgrund von unerwarteten Fehlern", + "failed to add node": "Hinzufügen des Nodes fehlgeschlagen", + "failed to load profile: {{.error}}": "", + "failed to open browser: {{.error}}": "Öffnen des Browsers fehlgeschlagen: {{.error}}", + "failed to restart auto-pause: {{.error}}": "", + "failed to save config": "Speichern der Konfiguration fehlgeschlagen", + "failed to set cloud shell kubelet config options": "Setzen der Cloud Shell Kublet Konfigurations Opetionen fehlgeschlagen", + "failed to set extra option": "Fehler beim Setzen von Extra Option", + "failed to start node": "Start des Nodes fehlgeschlagen", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "", + "fish completion failed": "fish completion fehlgeschlagen", + "fish completion.": "fish fehlgeschlagen", + "if true, will embed the certs in kubeconfig.": "Falls gesetzt, werden die Zeritifikate in die kubeconfig integriert.", + "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "Falls Sie ein Profil anlegen möchten, können Sie das mit diesem Befehl: minikube start -p {{.profile_name}}", + "initialization failed, will try again: {{.error}}": "Initialisierung fehlgeschlagen, versuche erneut: {{.error}}", + "invalid kubernetes version": "Invalide Kubernetes Version", + "ip not found": "IP nicht gefunden", + "json encoding failure": "JSON Encoding Fehler", + "keep the kube-context active after cluster is stopped. Defaults to false.": "Halte den kube-context aktiv, wenn der Cluster gestoppt ist. Default: false", + "kubeadm certificates have expired. Generating new ones...": "kubeadm Zertifikate sind abgelaufen. Generiere neue...", + "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm erkannte einen TCP Port Konflikt mit anderen Prozessen: wahrscheinlich eine andere lokale Kubernetes Installation. Führe lsof -p\u003cport\u003e aus um den Prozess zu finden und zu töten", "kubectl and minikube configuration will be stored in {{.home_folder}}": "Konfiguration von Kubectl und minikube wird in {{.home_folder}} gespeichert", - "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "", + "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl nicht gefunden. Falls Sie es benötigen, versuchen Sie 'minikube kubectl -- get pods -A' aufzurufen", "kubectl proxy": "", - "libmachine failed": "", - "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "", - "list versions of all components included with minikube. (the cluster must be running)": "", - "loading profile": "", - "max time to wait per Kubernetes or host to be healthy.": "", + "libmachine failed": "libmachine fehlgeschlagen", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "Zeigt einer Liste aller validen Standard-Einstellungen (default-Werte) für das Property PROPERTY_NAME\nAkzeptierte Felder: \n\n", + "list versions of all components included with minikube. (the cluster must be running)": "Liste alle Versionen der Komponenten die in Minikube enthalten sind.", + "loading profile": "Lade Profil", + "max time to wait per Kubernetes or host to be healthy.": "maximale Zeit die gewartet werden soll, bis Kubernetes oder der Host als funktional angesehen soll.", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", "minikube addons list --output OUTPUT. json, list": "", - "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", - "minikube is not meant for production use. You are opening non-local traffic": "", - "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", - "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", - "minikube profile was successfully set to {{.profile_name}}": "", - "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "", - "minikube quickly sets up a local Kubernetes cluster": "", - "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "Minikube unterstützt den BTRFS Storage Treiber noch nicht, aber es existiert eine Workaround, fügen Sie folgenden Flag zu Ihrem Start-Befehl hinzu `--feature-gates=\"LocalStorageCapacityIsolation=false\"`", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\\\"LocalStorageCapacityIsolation=false\\\"`": "minikube unterstützt den BTRFS Storage Treiber nicht, es gibt einen Workaround, füge den folgenden Paramater zum Start-Befehl hinzu `--feature-gates=\\\"LocalStorageCapacityIsolation=false\\\"`", + "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "Minikube fehlen die Dateien, die für die Gast-Umgebung erforderlich sind. Dies kann durch Ausführen von 'minikube delete' repariert werden", + "minikube is not meant for production use. You are opening non-local traffic": "Minikube ist nicht für die Verwendung in Produktion gedacht. Nicht lokaler Traffik wird zugelassen", + "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "Minikube ist nicht in der Lage auf die Google Container Registry zuzugreifen. Eventuell müssen Sie einen HTTP Proxy konfigurieren.", + "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "Minikube kann nicht zur VM verbinden: {{.error}}\n\n\tDies ist wahrscheinlich aufgrund einem von zwei Gründen:\n\n\t- VPN oder Firewall Probleme\n\t- {{.hypervisor}} Netzwerk Konfiguration Issue\n\n\tVorgeschlagene Workarounds:\n\n\t- Deaktiviere die lokale VPN oder Firewall Software\n\t- Konfigure das lokale VPN oder die Firewall so, dass Zugriff auf die IP {{.ip}} erlaubt ist\n\t- Restarte oder Reinstalliere {{.hypervisor}}\n\t- Verwende einen alternativen --vm-dirver\n\t- Verwende --force um die Konnektivitäts-Prüfung zu überspringen\n\t", + "minikube mount is not currently implemented with the builtin network on QEMU": "minikube mount ist derzeit nicht implementiert bei Verwendung des builtin Netzwerkes von QEMU", + "minikube profile was successfully set to {{.profile_name}}": "Minikube Profil wurde erfolgreich gesetzt auf {{.profile_name}}", + "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "Minikube provisioniert und managed lokale Kubernetes Cluster optimiert für Entwicklungs-Workflows.", + "minikube quickly sets up a local Kubernetes cluster": "Minikube installiert schnell einen lokalen Kubernetes Cluster", + "minikube service is not currently implemented with the builtin network on QEMU": "minikube service ist derzeit nicht mit der Verwendung des QEMU Builtin Netzwerks implementiert", + "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "Minikube überspringt diverse Validierungen wenn --force angegeben ist; das könnte zu unerwartetem Verhalten führen", "minikube status --output OUTPUT. json, text": "", - "minikube {{.version}} is available! Download it: {{.url}}": "", - "mkcmp is used to compare performance of two minikube binaries": "", - "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", - "mount could not connect": "", - "mount failed": "", - "namespaces to pause": "", - "namespaces to unpause": "", - "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "", - "none driver does not support multi-node clusters": "", - "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", - "numa node is only supported on k8s v1.18 and later": "", - "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", - "pause Kubernetes": "", - "preload extraction failed: \\\"No space left on device\\\"": "", - "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", - "provisioning host for node": "", - "reload cached images.": "", - "reloads images previously added using the 'cache add' subcommand": "", - "retrieving node": "", - "scheduled stop is not supported on the none driver, skipping scheduling": "", - "service {{.namespace_name}}/{{.service_name}} has no node port": "", - "stat failed": "", - "status json failure": "", - "status text failure": "", - "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", - "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", - "unable to bind flags": "", - "unable to daemonize: {{.err}}": "", - "unable to delete minikube config folder": "", - "unpause Kubernetes": "", - "unset failed": "", - "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "", - "unsets an individual value in a minikube config file": "", - "unsupported or missing driver: {{.name}}": "", - "update config": "", - "usage: minikube addons configure ADDON_NAME": "", - "usage: minikube addons disable ADDON_NAME": "", - "usage: minikube addons enable ADDON_NAME": "", - "usage: minikube addons images ADDON_NAME": "", - "usage: minikube addons list": "", - "usage: minikube addons open ADDON_NAME": "", - "usage: minikube config unset PROPERTY_NAME": "", - "usage: minikube delete": "", - "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", - "using metrics-server addon, heapster is deprecated": "", - "version json failure": "", - "version yaml failure": "", - "zsh completion failed": "", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "minikube tunnel ist derzeit nicht unter Verwendung des Builtin-Netzwerks von QEMU implementiert", + "minikube {{.version}} is available! Download it: {{.url}}": "Minikube {{.version}} ist verfügbar. Lade es herunter: {{.url}}", + "mkcmp is used to compare performance of two minikube binaries": "mkcmp wird verwendet um die Performance von zwei Minikube Binaries zu vergleichen", + "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "Das Argument \"{{.value}}\" für Mount muss in der Form \u003cQuell Verzeichnis\u003e:\u003cZiel Verzeichnis\u003e", + "mount could not connect": "Mount konnte nicht verbinden", + "mount failed": "Mount fehlgeschlagen", + "namespaces to pause": "Namespaces, die pausiert werden sollen", + "namespaces to unpause": "Namespaces, die fortgesetzt werden sollen", + "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "Netzwerk, welches Minikube verwenden soll. Derzeit wird dies vom docker/podman-Treiber und dem KVM Treiber unterstützt. Falls keines angeben wird, wird Minikube ein neues Netzwerk anlegen.", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", + "none driver does not support multi-node clusters": "Der 'none'-Treiber unterstützt keine Multi-Node Cluster", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "nicht genug Argumente ({{.ArgCount}}).\nVerwendung: minikube config set PROPERTY_NAME PROPERTY_VALUE", + "numa node is only supported on k8s v1.18 and later": "Numa Node wird nur von k8s Version v1.18 oder später unterstützt", + "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "Ausgabe Layout (EXPERIMENTELL, nur JSON): 'nodes' oder 'clusters'", + "pause Kubernetes": "pausiere Kubernetes", + "powershell completion failed": "Powershell completion fehlgeschlagen", + "powershell completion.": "", + "preload extraction failed: \"No space left on device\"": "Auspacken von Preload fehlgeschlagen: \"Es ist kein Speicherplatz mehr verfügbar\"", + "preload extraction failed: \\\"No space left on device\\\"": "Auspacken von Preload fehlgeschlagen: \\\"Es ist kein Speicherplatz mehr verfügbar\\\"", + "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "profile setzt das aktuelle Minikube Profil oder ermittelt das aktuelle Profil, wenn keine Argumente angegeben werden. Dies wird verwendet, um mehrere Minikube Instanzen zu verwalten und laufen zu lassen. Sie können zum Minikube Default Profil zurückkehren indem Sie `minikube profile default` ausführen", + "provisioning host for node": "Provisioniere Host für Node", + "reload cached images.": "lade gecachte Images erneut.", + "reloads images previously added using the 'cache add' subcommand": "Lädt Images erneut, die vormals mit dem Unter-Befehl 'cache add' hinzugefügt wurden", + "retrieving node": "Ermittele Node", + "scheduled stop is not supported on the none driver, skipping scheduling": "Das geplante Stoppen wird von none Treiber nicht unterstützt, überspringe Planung", + "service not available": "Service nicht verfügbar", + "service {{.namespace_name}}/{{.service_name}} has no node port": "Service {{.namespace_name}}/{{.service_name}} hat keinen Node Port", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "Tunnel Bind-Adresse setzen, leer gelassen oder '*' zeigen an, dass der Tunnel für alle Netzwerkschnittstellen verfügbar sein soll", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "socket_vmnet wurde mit einer inkorrekten Gruppe installiert, löschen Sie diesen Cluster mit 'minikube delete' und ändern Sie die Gruppe 'sudo chown root:$(id -ng) /var/run/socket_vmnet' und versuchen Sie es erneut.", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "socket_vmnet wurde nicht auf dem System gefunden, um dies zu beheben:\n\n\t\tOption 1) Installieren Sie socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Verwenden Sie ein Benutzer-Netzwerk:\n\n\t\t minikube start{{.profile}} --driver qemu --network user", + "stat failed": "state Fehler", + "status json failure": "Status json Fehler", + "status text failure": "Status text Fehler", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "Zu viele Parameter ({{.ArgCount}}).\nVerwendung: minikube config set PROPERTY_NAME PROPERTY_VALUE", + "true": "", + "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "tunnel erstellt eine Route zu Services vom Typ LoadBalancer und setzt deren Ingress zu deren ClusterIP. Ein detailiertes Beispiel findet sich unter https://minikube.sigs.k8s.io/docs/tasks/loadbalancer", + "unable to bind flags": "Kann Parameter nicht zuweisen", + "unable to daemonize: {{.err}}": "Kann nicht in den Hintergrund starten (daemonize): {{.err}}", + "unable to delete minikube config folder": "Kann das Minikube Konfigurations-Verzeichnis nicht löschen", + "unpause Kubernetes": "Setze Kubernetes fort (unpause)", + "unset failed": "unset fehlgeschlagen", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "entfernt PROPERTY_NAME aus der Minikube Konfigurationsdatei. Dies kann durch Parameter oder Umgebungsvariablen überschrieben werden", + "unsets an individual value in a minikube config file": "Entfernt einen individuellen Wert aus der Minikube Konfigurations-Datei", + "unsupported or missing driver: {{.name}}": "nicht unterstützter oder fehlender Treiber: {{.name}}", + "update config": "aktualisiere Konfiguration", + "usage: minikube addons configure ADDON_NAME": "Verwendung: minikube addons configure ADDON_NAME", + "usage: minikube addons disable ADDON_NAME": "Verwendung: minikube addons disable ADDON_NAME", + "usage: minikube addons enable ADDON_NAME": "Verwendung: minikube addons enable ADDON_NAME", + "usage: minikube addons images ADDON_NAME": "Verwendung: minikube addons images ADDON_NAME", + "usage: minikube addons list": "Verwendung: minikube addons list", + "usage: minikube addons open ADDON_NAME": "Verwendung: minikube addons open ADDON_NAME", + "usage: minikube config list PROPERTY_NAME": "Verwendung: minikube config list PROPERTY_NAME", + "usage: minikube config unset PROPERTY_NAME": "Verwendung: minikube config unset PROPERTY_NAME", + "usage: minikube delete": "Verwendung: minikube delete", + "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "Verwendung: minikube profile [MINIKUBE_PROFILE_NAME]", + "using metrics-server addon, heapster is deprecated": "Verwende Metrics-Server Addon, heapster ist veraltet (deprecated)", + "version json failure": "version json Fehler", + "version yaml failure": "version yaml Fehler", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "Yaml Encoding Fehler", + "zsh completion failed": "zsh completion fehlgeschlagen", "zsh completion.": "", - "{{ .name }}: Suggestion: {{ .suggestion}}": "", - "{{ .name }}: {{ .rejection }}": "", - "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", - "{{.count}} nodes stopped.": "", - "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "", - "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", - "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", - "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", - "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", - "{{.name}} doesn't have images.": "", - "{{.name}} has following images:": "", - "{{.name}} has no available configuration options": "", - "{{.name}} is already running": "", - "{{.name}} was successfully configured": "", + "{{ .name }}: Suggestion: {{ .suggestion}}": "{{ .name }}: Vorschlag: {{ .suggestion}}", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "{{.Driver}} verwendet derzeit den {{.StorageDriver}} Storage Treiber, erwäge zu overlay2 zu wechseln für bessere Performance", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "{{.Driver}} verwendet gerade den {{.StorageDriver}} Storage Teiber, setze preload=false", + "{{.addon}} does not currently have an associated maintainer.": "{{.addon}} hat derzeit keinen zugewiesenen Maintainer.", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "{{.addon}} ist ein Dritt-Anbieter Addon und wird nicht von den Minikube Maintainern s unterhalten oder verifziert, Aktivieren auf eigene Gefahr.", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "{{.addon}} ist ein Addon, welches von {{.maintainer}} unterhalten wird. Bei Bedenken kontaktieren Sie Minikube auf GitHub.\n Sie können eine Liste der Minikube-Maintainer einsehen unter: https://github.com/kubernetes/minikube/blob/master/OWNERS", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "{{.addon}} wird von {{.maintainer}} unterhalten, bei Bedenken kontaktieren Sie {{.verifiedMaintainer}} auf GitHub", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "{{.count}} Node{{if gt .count 1}}s{{end}} angehalten.", + "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} fehlt, wird neu erstellt.", + "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "{{.driver_name}} konnte nicht weiterlaufen, da {{.driver_name}} Service nicht funktional ist.", + "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "{{.driver_name}} verfügt über weniger als 2 CPUs, aber Kubernetes benötigt mindestens 2 verfügbare CPUs", + "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "{{.driver_name}} hat nur {{.container_limit}}MB Speicher aber spezifiziert wurden {{.specified_memory}}MB", + "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "{{.driver}} hat nur {{.size}}MiB verfügbar, weniger als die für Kubernetes notwendigen {{.req}}MiB", + "{{.env}}={{.value}}": "", + "{{.name}} doesn't have images.": "{{.name}} hat keine Images.", + "{{.name}} has following images:": "{{.name}} hat die folgenden Images:", + "{{.name}} has no available configuration options": "{{.name}} hat keine verfügbaren Konfigurations-Optionen", + "{{.name}} has the following images:": "", + "{{.name}} is already running": "{{.name}} läuft bereits", + "{{.name}} was successfully configured": "{{.name}} wurde erfolgreich konfiguriert", "{{.name}}\" profile does not exist": "Profil \"{{.name}}\" existiert nicht", - "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "", - "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "", - "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "", - "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "{{.n}} hat fast keinen Plattenplatz mehr. Dies kann dazu führen, dass Deployments fehlschlagen! ({{.p}}% der Kapazität)", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} ist fast ohne Festplattenspeicher. Dies könnte dazu führen, dass Deployments fehlschlagen! (({{.p}}% der Kapazität). Sie können '--force'' angeben um diese Prüfung zu überspringen.", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "{{.n}} hat keinen Plattenplatz mehr! (/var ist bei {{.p}}% seiner Kapazität)", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} hat keinen Speicherplatz mehr! (/var ist bei {{.p}}% seiner Kapazität). Sie können '--force'' angeben, um diese Prüfung zu überspringen.", + "{{.ociBin}} rmi {{.images}}": "", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} benötigt unnötig lange zum Antworten, erwäge {{.ocibin}} neuzustarten", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "{{.path}} ist Version {{.client_version}}, welche inkompatibel ist mit Kubernetes {{.cluster_version}}", "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} auf {{.platform}}", - "{{.profile}} profile is not valid: {{.err}}": "", - "{{.type}} is not yet a supported filesystem. We will try anyways!": "", - "{{.url}} is not accessible: {{.error}}": "" -} \ No newline at end of file + "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} ist nicht valide: {{.err}}", + "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} ist kein derzeit unterstütztes Dateisystem. Wir versuchen es trotzdem!", + "{{.url}} is not accessible: {{.error}}": "Fehler beim Zugriff auf {{.url}}: {{.error}}" +} diff --git a/translations/el.json b/translations/el.json new file mode 100644 index 000000000000..4d91073c535f --- /dev/null +++ b/translations/el.json @@ -0,0 +1,1089 @@ +{ + "\n\n": "\n\n", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "Το πρόσθετο '{{.minikube_addon}}' δεν είναι έκγυρο πρόσθετο minikube", + "\"The '{{.minikube_addon}}' addon is disabled": "Το πρόσθετο '{{.minikube_addon}}' έχει απενεργοποιηθεί", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "Το \"minikube cache\" θα απαρχαιωθεί σε μελλοντικές εκδόσεις, παρακαλούμε μεταβείτε στο \"minikube image load\"", + "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "Το context \"{{.context}}\" έχει ενημερωθεί για να δείχνει στο {{.hostname}}:{{.port}}", + "\"{{.machineName}}\" does not exist, nothing to stop": "Το \"{{.machineName}}\" δεν υπάρχει, τίποτα προς διακοπή", + "\"{{.name}}\" profile does not exist, trying anyways.": "Το προφίλ \"{{.name}}\" δεν υπάρχει, δοκιμή ούτως ή άλλως.", + "'none' driver does not support 'minikube docker-env' command": "Ο οδηγός 'none' δεν υποστηρίζει την εντολή 'minikube docker-env'", + "'none' driver does not support 'minikube mount' command": "Ο οδηγός 'none' δεν υποστηρίζει την εντολή 'minikube mount'", + "'none' driver does not support 'minikube podman-env' command": "Ο οδηγός 'none' δεν υποστηρίζει την εντολή 'minikube podman-env'", + "'none' driver does not support 'minikube ssh' command": "Ο οδηγός 'none' δεν υποστηρίζει την εντολή 'minikube ssh'", + "'none' driver does not support 'minikube ssh-host' command": "Ο οδηγός 'none' δεν υποστηρίζει την εντολή 'minikube ssh-host'", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" για SSH μέσα στον κόμβο του minikube.\n- \"minikube docker-env\" για να κατευθύνετε το docker-cli σας στον docker μέσα στο minikube.\n- \"minikube image\" για να φτιάξετε images χωρίς docker.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" για SSH μέσα στον κόμβο του minikube.\n- \"minikube image\" για να φτιάξετε images χωρίς docker.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" για SSH μέσα στον κόμβο του minikube.\n- \"minikube podman-env\" για να κατευθύνετε το podman-cli σας στον podman μέσα στο minikube.\n- \"minikube image\" για να φτιάξετε images χωρίς docker.", + "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "Διαγράψτε και δημιουργήστε ξανά το minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}", + "- Docs https://docs.docker.com/docker-for-mac/#resources": "Οδηγίες https://docs.docker.com/docker-for-mac/#resources", + "- Docs https://docs.docker.com/docker-for-windows/#resources": "Οδηγίες https://docs.docker.com/docker-for-windows/#resources", + "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "Βεβαιωθείτε ότι ο daemon {{.driver_name}} έχει επαρκή πρόσβαση σε πόρους CPU/μνήμης.", + "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "- Καθαρίστε τα αχρησιμοποίητα images, volumes, δίκτυα και εγκαταλελειμμένα containers {{.driver_name}}.\n\n\t\t\t\t{{.driver_name}} system prune --volumes", + "- Restart your {{.driver_name}} service": "Επανεκκινήστε την υπηρεσία σας {{.driver_name}}", + "--kvm-numa-count range is 1-8": "-Το εύρος -kvm-numa-count είναι 1-8", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "Η επισήμανση --network είναι έγκυρη μόνο με τους οδηγούς docker/podman, qemu, kvm και vfkit, θα αγνοηθεί", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "Το --network με το QEMU πρέπει να είναι 'builtin' ή 'socket_vmnet'", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "Το --network με το vfkit πρέπει να είναι 'nat' ή 'vmnet-shared'", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "Το --static-ip είναι μόνο για τους οδηγούς Docker και Podman, το flag θα αγνοηθεί", + "--static-ip overrides --subnet, --subnet will be ignored": "Το --static-ip αντικαθιστά το --subnet, το --subnet θα αγνοηθεί", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Ξαναδημιουργήστε το cluster με Kubernetes {{.new}}, εκτελώντας:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\tΔημιουργήστε ένα δεύτερο cluster με Kubernetes {{.new}}, εκτελώντας:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\tΧρησιμοποιήστε το υπάρχον cluster στην έκδοση Kubernetes {{.old}}, εκτελώντας:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Κάντε κλικ στο εικονίδιο μενού \"Docker for Desktop\"\n\t\t\t2. Κάντε κλικ στο \"Προτιμήσεις\"\n\t\t\t3. Κάντε κλικ στο \"Πόροι\"\n\t\t\t4. Αυξήστε την μπάρα ολίσθησης της \"CPU\" σε 2 ή μεγαλύτερο\n\t\t\t5. Κάντε κλικ στο \"Εφαρμογή \u0026 Επανεκκίνηση\"", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Κάντε κλικ στο εικονίδιο μενού \"Docker for Desktop\"\n\t\t\t2. Κάντε κλικ στο \"Προτιμήσεις\"\n\t\t\t3. Κάντε κλικ στο \"Πόροι\"\n\t\t\t4. Αυξήστε την μπάρα ολίσθησης \"Μνήμη\" σε {{.recommend}} ή μεγαλύτερη\n\t\t\t5. Κάντε κλικ στο \"Εφαρμογή \u0026 Επανεκκίνηση\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. Ανοίξτε το μενού \"Docker Desktop\" κάνοντας κλικ στο εικονίδιο Docker στην περιοχή ειδοποιήσεων\n\t\t2. Κάντε κλικ στο \"Ρυθμίσεις\"\n\t\t3. Κάντε κλικ στο \"Πόροι\"\n\t\t4. Αυξήστε την μπάρα ολίσθησης \"CPUs\" σε 2 ή μεγαλύτερη\n\t\t5. Κάντε κλικ στο \"Εφαρμογή \u0026 Επανεκκίνηση\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. Ανοίξτε το μενού \"Docker Desktop\" κάνοντας κλικ στο εικονίδιο Docker στην περιοχή ειδοποιήσεων\n\t\t2. Κάντε κλικ στο \"Ρυθμίσεις\"\n\t\t3. Κάντε κλικ στο \"Πόροι\"\n\t\t4. Αυξήστε την μπάρα ολίσθησης \"Μνήμη\" σε {{.recommend}} ή μεγαλύτερη\n\t\t5. Κάντε κλικ στο \"Εφαρμογή \u0026 Επανεκκίνηση\"", + "==\u003e Audit \u003c==": "==\u003e Έλεγχος \u003c==", + "==\u003e Last Start \u003c==": "==\u003e Τελευταία Εκκίνηση \u003c==", + "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "", + "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "", + "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", + "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "", + "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Ένα σύνολο Διευθύνσεων IP του apiserver που χρησιμοποιούνται στο παραγόμενο πιστοποιητικό για το kubernetes. Αυτό μπορεί να χρησιμοποιηθεί εάν θέλετε να κάνετε τον apiserver διαθέσιμο εκτός του μηχανήματος", + "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Ένα σύνολο ονομάτων apiserver που χρησιμοποιούνται στο παραγόμενο πιστοποιητικό για το kubernetes. Αυτό μπορεί να χρησιμοποιηθεί εάν θέλετε να κάνετε τον apiserver διαθέσιμο εκτός του μηχανήματος", + "A set of key=value pairs that describe feature gates for alpha/experimental features.": "Ένα σύνολο ζευγών κλειδιού=τιμής που περιγράφουν πύλες δυνατοτήτων για alpha/πειραματικές δυνατότητες.", + "Access the Kubernetes dashboard running within the minikube cluster": "Πρόσβαση στον πίνακα ελέγχου Kubernetes που εκτελείται εντός του συμπλέγματος minikube", + "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "Η πρόσβαση σε θύρες κάτω από 1024 ενδέχεται να αποτύχει στα Windows με πελάτες OpenSSH παλαιότερους από την έκδοση v8.1. Για περισσότερες πληροφορίες, ανατρέξτε: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission", + "Add SSH identity key to SSH authentication agent": "Προσθήκη κλειδιού ταυτότητας SSH στον παράγοντα ελέγχου ταυτότητας SSH", + "Add an image into minikube as a local cache, or delete, reload the cached images": "Προσθήκη ενός image στο minikube ως τοπική κρυφή μνήμη, ή διαγραφή, επαναφόρτωση των αποθηκευμένων images στην κρυφή μνήμη", + "Add an image to local cache.": "Προσθήκη image στην τοπική κρυφή μνήμη.", + "Add host key to SSH known_hosts file": "Προσθήκη κλειδιού κεντρικού υπολογιστή στο αρχείο known_hosts SSH", + "Add image to cache for all running minikube clusters": "Προσθήκη image στην κρυφή μνήμη για όλα τα τρέχοντα συμπλέγματα minikube", + "Add machine IP to NO_PROXY environment variable": "Προσθήκη IP μηχανήματος στη μεταβλητή περιβάλλοντος NO_PROXY", + "Add, remove, or list additional nodes": "Προσθήκη, κατάργηση ή εμφάνιση λίστας πρόσθετων κόμβων", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "Η προσθήκη ενός κόμβου επιπέδου ελέγχου σε ένα σύμπλεγμα μη-HA (non-multi-control plane) δεν υποστηρίζεται προς το παρόν. Διαγράψτε πρώτα το σύμπλεγμα και χρησιμοποιήστε την εντολή 'minikube start --ha' για να δημιουργήσετε ένα νέο.", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "Προσθήκη κόμβου {{.name}} στο σύμπλεγμα {{.cluster}} ως {{.roles}}", + "Additional help topics": "Επιπρόσθετα θέματα βοήθειας", + "Adds a node to the given cluster config, and starts it.": "Προσθέτει έναν κόμβο στη δοθείσα διαμόρφωση συμπλέγματος και τον εκκινεί.", + "Adds a node to the given cluster.": "Προσθέτει έναν κόμβο στο δοσμένο σύμπλεγμα.", + "Advanced Commands:": "Προηγμένες εντολές", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "Αφού ενεργοποιηθεί το πρόσθετο, εκτελέστε την εντολή \"minikube tunnel\" και οι πόροι εισόδου σας θα είναι διαθέσιμοι στη διεύθυνση \"127.0.0.1\"", + "Aliases": "Ψευδώνυμα", + "All existing scheduled stops cancelled": "Όλες οι υπάρχουσες προγραμματισμένες διακοπές ακυρώθηκαν", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "Να επιτρέπεται στα pods να χρησιμοποιούν τις GPU σας. Οι επιλογές περιλαμβάνουν: [all,nvidia,amd] (μόνο πρόγραμμα οδήγησης Docker με περιβάλλον εκτέλεσης Docker container)", + "Allow user prompts for more information": "Να επιτρέπονται οι προτροπές χρήστη για περισσότερες πληροφορίες", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Εναλλακτικό αποθετήριο image για τη λήψη docker images. Αυτό μπορεί να χρησιμοποιηθεί όταν έχετε περιορισμένη πρόσβαση στο gcr.io. Ορίστε το σε \"auto\" για να επιτρέψετε στο minikube να αποφασίσει για εσάς. Για χρήστες της ηπειρωτικής Κίνας, μπορείτε να χρησιμοποιήσετε τοπικούς mirrors του gcr.io όπως το registry.cn-hangzhou.aliyuncs.com/google_containers", + "Alternatively you could install one of these drivers:": "Εναλλακτικά, θα μπορούσατε να εγκαταστήσετε έναν από αυτούς τους οδηγούς:", + "Amount of time to wait for a service in seconds": "Χρονικό διάστημα αναμονής για μια υπηρεσία σε δευτερόλεπτα", + "Amount of time to wait for service in seconds": "Χρονικό διάστημα αναμονής για την υπηρεσία σε δευτερόλεπτα", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "Ένα προαιρετικό αρχείο διαμόρφωσης για την ανάγνωση συγκεκριμένων διαμορφώσεων πρόσθετων αντί να σας ζητείται κάθε φορά.", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "", + "Another minikube instance is downloading dependencies... ": "Μια άλλη οντότητα minikube κατεβάζει εξαρτήσεις...", + "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "", + "Another tunnel process is already running, terminate the existing instance to start a new one": "Μια άλλη διαδικασία σήραγγας εκτελείται ήδη, τερματίστε την υπάρχουσα οντότητα για να ξεκινήσετε μια νέα", + "At least needs control plane nodes to enable addon": "Απαιτούνται τουλάχιστον κόμβοι επιπέδου ελέγχου για την ενεργοποίηση του πρόσθετου", + "Automatically selected the {{.driver}} driver": "Αυτόματη επιλογή του οδηγού {{.driver}}", + "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Αυτόματη επιλογή του οδηγού {{.driver}}. Άλλες επιλογές: {{.alternates}}", + "Automatically selected the {{.network}} network": "Αυτόματη επιλογή του δικτύου {{.network}}", + "Available Commands": "Διαθέσιμες εντολές", + "Basic Commands:": "Βασικές εντολές:", + "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Επειδή χρησιμοποιείτε πρόγραμμα οδήγησης Docker σε {{.operating_system}}, το τερματικό πρέπει να είναι ανοιχτό για την εκτέλεσή του.", + "Bind Address: {{.Address}}": "Διεύθυνση Δέσμευσης: {{.Address}}", + "Booting up control plane ...": "Εκκίνηση επιπέδου ελέγχου ...", + "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "Έχουν οριστεί και το driver={{.driver}} και το vm-driver={{.vmd}}.\n\n Δεδομένου ότι το vm-driver είναι απαρχαιωμένο, το minikube θα χρησιμοποιήσει από προεπιλογή το driver={{.driver}}.\n\n Εάν το vm-driver έχει οριστεί στην καθολική διαμόρφωση, εκτελέστε την εντολή \"minikube config unset vm-driver\" για να επιλύσετε αυτήν την προειδοποίηση.\n\t\t\t", + "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", + "Build a container image in minikube": "Δημιουργία ενός container image στο minikube", + "Build a container image, using the container runtime.": "Δημιουργία ενός container image, χρησιμοποιώντας το περιβάλλον εκτέλεσης container.", + "Build image on all nodes.": "Δημιουργία image σε όλους τους κόμβους.", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", + "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "Πρόσθετο CNI προς χρήση. Έγκυρες επιλογές: auto, bridge, calico, cilium, flannel, kindnet, ή διαδρομή προς ένα μανιφέστο CNI (προεπιλογή: auto)", + "Cache image from docker daemon": "Αποθήκευση image από τον docker daemon στην κρυφή μνήμη", + "Cache image from remote registry": "Αποθήκευση image από απομακρυσμένο μητρώο στην κρυφή μνήμη", + "Cache image to docker daemon": "Αποθήκευση image στον δαίμονα docker στην κρυφή μνήμη", + "Cache image to remote registry": "Αποθήκευση image σε απομακρυσμένο μητρώο στην κρυφή μνήμη", + "Cannot find directory {{.path}} for copy": "Δεν είναι δυνατή η εύρεση του καταλόγου {{.path}} για αντιγραφή", + "Cannot find directory {{.path}} for mount": "Δεν είναι δυνατή η εύρεση του καταλόγου {{.path}} για προσάρτηση", + "Cannot use both --output and --format options": "Δεν είναι δυνατή η ταυτόχρονη χρήση των επιλογών --output και --format", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "Δεν είναι δυνατή η χρήση της επιλογής --no-kubernetes στον οδηγό {{.name}}", + "Certificate {{.certPath}} has expired. Generating a new one...": "Το πιστοποιητικό {{.certPath}} έχει λήξει. Δημιουργία νέου...", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "Η αλλαγή της θύρας του διακομιστή API ενός υπάρχοντος συμπλέγματος minikube HA (multi-control plane) δεν υποστηρίζεται προς το παρόν. Διαγράψτε πρώτα το σύμπλεγμα.", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "Η αλλαγή της λειτουργίας HA (multi-control plane) ενός υπάρχοντος συμπλέγματος minikube δεν υποστηρίζεται προς το παρόν. Διαγράψτε πρώτα το σύμπλεγμα και χρησιμοποιήστε την εντολή 'minikube start --ha' για να δημιουργήσετε ένα νέο.", + "Check if you have unnecessary pods running by running 'kubectl get po -A": "Ελέγξτε εάν εκτελούνται περιττά pods εκτελώντας την εντολή 'kubectl get po -A'", + "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", + "Check that libvirt is setup properly": "", + "Check that the provided apiserver flags are valid, and that SELinux is disabled": "", + "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "", + "Choose a smaller value for --memory, such as 2000": "", + "ChromeOS is missing the kernel support necessary for running Kubernetes": "", + "Cluster was created without any CNI, adding a node to it might cause broken networking.": "Το σύμπλεγμα δημιουργήθηκε χωρίς CNI, η προσθήκη ενός κόμβου σε αυτό ενδέχεται να προκαλέσει προβλήματα δικτύωσης.", + "Configuration and Management Commands:": "Εντολές διαμόρφωσης και διαχείρισης:", + "Configure a default route on this Linux host, or use another --driver that does not require it": "", + "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", + "Configure environment to use minikube's Podman service": "Διαμόρφωση περιβάλλοντος για χρήση της υπηρεσίας Podman του minikube", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\n\t\thttps://github.com/nirs/vmnet-helper#granting-permission-to-run-vmnet-helper": "Διαμορφώστε το vmnet-helper ώστε να εκτελείται χωρίς κωδικό πρόσβασης.\n\n\t\tΕγκαταστήστε έναν κανόνα sudoers vmnet-helper χρησιμοποιώντας αυτές τις οδηγίες:\n\n\t\thttps://github.com/nirs/vmnet-helper#granting-permission-to-run-vmnet-helper", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "Διαμορφώνει το πρόσθετο με ADDON_NAME εντός του minikube (παράδειγμα: minikube addons configure registry-creds). Για μια λίστα με τα διαθέσιμα πρόσθετα χρησιμοποιήστε: minikube addons list", + "Configuring RBAC rules ...": "Διαμόρφωση κανόνων RBAC ...", + "Configuring local host environment ...": "Διαμόρφωση τοπικού host περιβάλλοντος ...", + "Configuring {{.name}} (Container Networking Interface) ...": "Διαμόρφωση {{.name}} (Διεπαφή Δικτύου Container) ...", + "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "", + "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "", + "Connect to LoadBalancer services": "Σύνδεση σε υπηρεσίες LoadBalancer", + "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "Σκεφτείτε να δημιουργήσετε ένα σύμπλεγμα με μεγαλύτερο μέγεθος μνήμης χρησιμοποιώντας `minikube start --memory SIZE_MB`", + "Consider increasing Docker Desktop's memory size.": "Σκεφτείτε να αυξήσετε το μέγεθος μνήμης του Docker.", + "Continuously listing/getting the status with optional interval duration.": "Συνεχής εμφάνιση/λήψη της κατάστασης με προαιρετική διάρκεια διαστήματος.", + "Control Plane could not update, try minikube delete --all --purge": "", + "Copy the specified file into minikube": "Αντιγραφή του καθορισμένου αρχείου στο minikube", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "Αντιγράψτε το καθορισμένο αρχείο στο minikube, θα αποθηκευτεί στη διαδρομή \u003cαπόλυτη διαδρομή αρχείου προορισμού\u003e στο minikube σας.\nΠροεπιλεγμένος κόμβος προορισμού το controlplane και εάν παραλειφθεί το \u003cόνομα κόμβου προέλευσης\u003e, θα προσπαθήσει να αντιγράψει από τον κεντρικό υπολογιστή.\n\nΠαράδειγμα εντολής: \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"", + "Could not determine a Google Cloud project, which might be ok.": "Δεν ήταν δυνατός ο προσδιορισμός ενός έργου Google Cloud, το οποίο μάλλλον δε πειράζει.", + "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "Δεν βρέθηκαν διαπιστευτήρια GCP. Είτε εκτελέστε την εντολή `gcloud auth application-default login` είτε ορίστε τη μεταβλητή περιβάλλοντος GOOGLE_APPLICATION_CREDENTIALS στη διαδρομή του αρχείου διαπιστευτηρίων σας.", + "Could not process error from failed deletion": "Δεν ήταν δυνατή η επεξεργασία του σφάλματος από την αποτυχημένη διαγραφή", + "Could not process errors from failed deletion": "Δεν ήταν δυνατή η επεξεργασία των σφαλμάτων από την αποτυχημένη διαγραφή", + "Could not resolve IP address": "Αδύνατη η επίλυση της διεύθυνσης IP", + "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "Κωδικός χώρας του image mirror που θα χρησιμοποιηθεί. Αφήστε κενό για να χρησιμοποιήσετε τον καθολικό. Για χρήστες της ηπειρωτικής Κίνας, ορίστε τον σε cn.", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "Δημιουργία Συμπλέγματος Multi-Control Plane Υψηλής Διαθεσιμότητας με τουλάχιστον τρεις κόμβους control-plane που θα επισημανθούν επίσης για εργασία.", + "Creating mount {{.name}} ...": "Δημιουργία προσάρτησης {{.name}} ...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Δημιουργία {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Μνήμη={{.memory_size}}MB, Δίσκος={{.disk_size}}MB) ...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "Δημιουργία {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}χωρίς όριο{{else}}{{.number_of_cpus}}{{end}}, Μνήμη={{if not .memory_size}}χωρίς όριο{{else}}{{.memory_size}}MB{{end}}) ...", + "Current context is \"{{.context}}\"": "Το τρέχον context είναι \"{{.context}}\"", + "DEPRECATED, use `driver` instead.": "ΑΠΑΡΧΑΙΩΜΕΝΟ, χρήση `driver` αντί αυτού.", + "DEPRECATED: Replaced by --cni": "ΑΠΑΡΧΑΙΩΜΕΝΟ: Αντικαταστάθηκε από --cni", + "DEPRECATED: Replaced by --cni=bridge": "ΑΠΑΡΧΑΙΩΜΕΝΟ: Αντικαταστάθηκε από --cni=bridge", + "Delete an image from the local cache.": "Διαγράψτε ένα image από την κρυφή μνήμη.", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "Διαγράψτε το υπάρχον σύμπλεγμα '{{.name}}' χρησιμοποιώντας: '{{.delcommand}}', ή ξεκινήστε το υπάρχον σύμπλεγμα '{{.name}}' χρησιμοποιώντας: '{{.command}} --driver={{.old}}'", + "Deletes a local Kubernetes cluster": "Διαγράφει ένα τοπικό σύμπλεγμα Kubernetes", + "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Διαγράφει ένα τοπικό σύμπλεγμα Kubernetes. Αυτή η εντολή διαγράφει το VM και καταργεί όλα τα\nσυσχετισμένα αρχεία.", + "Deletes a node from a cluster.": "Διαγράφει έναν κόμβο από ένα σύμπλεγμα.", + "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "Διαγραφή του \"{{.profile_name}}\" στο {{.driver_name}} ...", + "Deleting container \"{{.name}}\" ...": "Διαγραφή container \"{{.name}}\" ...", + "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "Διαγραφή υπάρχοντος συμπλέγματος {{.name}} με διαφορετικό πρόγραμμα οδήγησης {{.driver_name}} λόγω της σημαίας --delete-on-failure που ορίστηκε από τον χρήστη.", + "Deleting node {{.name}} from cluster {{.cluster}}": "Διαγραφή κόμβου {{.name}} από το σύμπλεγμα {{.cluster}}", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "", + "Directory to output licenses to": "Κατάλογος για την εξαγωγή αδειών", + "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "Απενεργοποίηση ελέγχου διαθεσιμότητας εικονικοποίησης υλικού πριν από την εκκίνηση του vm (μόνο πρόγραμμα οδήγησης virtualbox)", + "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "Απενεργοποιεί το πρόσθετο w/ADDON_NAME εντός του minikube (παράδειγμα: minikube addons disable dashboard). Για μια λίστα με τα διαθέσιμα πρόσθετα χρησιμοποιήστε: minikube addons list ", + "Disables the filesystem mounts provided by the hypervisors": "Απενεργοποιεί τις προσαρτήσεις συστήματος αρχείων που παρέχονται από τους hypervisors", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Μέγεθος δίσκου που εκχωρείται στο minikube VM (μορφή: \u003cαριθμός\u003e[\u003cμονάδα\u003e], όπου μονάδα = b, k, m ή g).", + "Display dashboard URL instead of opening a browser": "Εμφάνιση διεύθυνσης URL του πίνακα ελέγχου αντί για άνοιγμα σε πρόγραμμα περιήγησης", + "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "Εμφάνιση της διεύθυνσης URL των πρόσθετων Kubernetes στο CLI αντί για άνοιγμα στο προεπιλεγμένο πρόγραμμα περιήγησης", + "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "Εμφάνιση της διεύθυνσης URL της υπηρεσίας Kubernetes στο CLI αντί για άνοιγμα στο προεπιλεγμένο πρόγραμμα περιήγησης", + "Display values currently set in the minikube config file": "Εμφάνιση τιμών που έχουν οριστεί τρέχοντα στο αρχείο διαμόρφωσης minikube", + "Display values currently set in the minikube config file.": "Εμφάνιση τιμών που έχουν οριστεί τρέχοντα στο αρχείο διαμόρφωσης minikube.", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", + "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "Το Docker Desktop έχει διαμορφωμένες λιγότερες από 2 CPU, αλλά το Kubernetes απαιτεί τουλάχιστον 2 να είναι διαθέσιμες", + "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Το Docker Desktop είναι διαμορφωμένο για Windows containers, αλλά απαιτούνται Linux containers για το minikube", + "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Το Docker Desktop έχει διαθέσιμα μόνο {{.size}}MiB, λιγότερα από τα απαιτούμενα {{.req}}MiB για το Kubernetes", + "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "Το Docker Desktop έχει διαθέσιμα μόνο {{.size}}MiB, ενδέχεται να αντιμετωπίσετε αποτυχίες ανάπτυξης εφαρμογών.", + "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "Το Docker containers τερματίστηκε πρόωρα μετά τη δημιουργία του, εξετάστε το ενδεχόμενο διερεύνησης της απόδοσης/υγείας του Docker.", + "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "Το Docker έχει διαθέσιμες λιγότερες από 2 CPU, αλλά το Kubernetes απαιτεί τουλάχιστον 2 να είναι διαθέσιμες", + "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", + "Docs have been saved at - {{.path}}": "Τα έγγραφα έχουν αποθηκευτεί στο - {{.path}}", + "Documentation: {{.url}}": "Τεκμηρίωση: {{.url}}", + "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "Έτοιμο! Το kubectl είναι τώρα ρυθμισμένο να χρησιμοποιεί το σύμπλεγμα \"{{.name}}\" και το \"{{.ns}}\" namespace από προεπιλογή", + "Done! minikube is ready without Kubernetes!": "Τέλος! Το minikube είναι έτοιμο χωρίς Kubernetes!", + "Download complete!": "Η λήψη ολοκληρώθηκε!", + "Downloading Kubernetes {{.version}} preload ...": "Λήψη προφόρτωσης Kubernetes {{.version}} ...", + "Downloading VM boot image ...": "Λήψη image εκκίνησης VM ...", + "Downloading driver {{.driver}}:": "Λήψη οδηγού {{.driver}}:", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "Λόγω προβλημάτων DNS, το σύμπλεγμά σας ενδέχεται να αντιμετωπίσει προβλήματα κατά την εκκίνηση και ενδέχεται να μην μπορείτε να τραβήξετε images\nΠερισσότερες λεπτομέρειες διατίθενται στη διεύθυνση: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as docker or {{.driver}}.\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}/\n\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "Λόγω αλλαγών στο macOS 13+, το minikube δεν υποστηρίζει προς το παρόν το VirtualBox. Μπορείτε να χρησιμοποιήσετε εναλλακτικούς οδηγούς όπως docker ή {{.driver}}.\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}/\n\n Για περισσότερες λεπτομέρειες σχετικά με το ζήτημα, ανατρέξτε στη διεύθυνση: https://github.com/kubernetes/minikube/issues/15274\n", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "Διάρκεια αδράνειας πριν από την παύση του minikube VM (προεπιλογή 1m0s)", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "Διάρκεια μέχρι τη λήξη του πιστοποιητικού minikube, προεπιλογή στα τρία έτη (26280 ώρες).", + "ERROR creating `registry-creds-acr` secret": "ΣΦΑΛΜΑ κατά τη δημιουργία του μυστικού `registry-creds-acr`", + "ERROR creating `registry-creds-dpr` secret": "ΣΦΑΛΜΑ κατά τη δημιουργία του μυστικού `registry-creds-dpr`", + "ERROR creating `registry-creds-ecr` secret: {{.error}}": "ΣΦΑΛΜΑ κατά τη δημιουργία του μυστικού `registry-creds-ecr`: {{.error}}", + "ERROR creating `registry-creds-gcr` secret: {{.error}}": "ΣΦΑΛΜΑ κατά τη δημιουργία του μυστικού `registry-creds-gcr`: {{.error}}", + "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "", + "Enable addons. see `minikube addons list` for a list of valid addon names.": "Ενεργοποίηση πρόσθετων. Δείτε `minikube addons list` για μια λίστα με έγκυρα ονόματα πρόσθετων.", + "Enable experimental NVIDIA GPU support in minikube": "Ενεργοποίηση πειραματικής υποστήριξης NVIDIA GPU στο minikube", + "Enable host resolver for NAT DNS requests (virtualbox driver only)": "Ενεργοποίηση επιλυτή κεντρικού υπολογιστή για αιτήματα NAT DNS (μόνο πρόγραμμα οδήγησης virtualbox)", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "", + "Enable or disable a minikube addon": "Ενεργοποίηση ή απενεργοποίηση ενός πρόσθετου minikube", + "Enable proxy for NAT DNS requests (virtualbox driver only)": "Ενεργοποίηση διακομιστή μεσολάβησης για αιτήματα NAT DNS (μόνο πρόγραμμα οδήγησης virtualbox)", + "Enabled addons: {{.addons}}": "Ενεργά πρόσθετα: {{.addons}}", + "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "Ενεργοποιεί το πρόσθετο w/ADDON_NAME εντός του minikube. Για μια λίστα με τα διαθέσιμα πρόσθετα χρησιμοποιήστε: minikube addons list ", + "Enabling '{{.name}}' returned an error: {{.error}}": "Η ενεργοποίηση του '{{.name}}' επέστρεψε σφάλμα: {{.error}}", + "Enabling dashboard ...": "Ενεργοποίηση dashboard ...", + "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "", + "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "", + "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "", + "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "", + "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "", + "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "", + "Ensure the tmp directory path is writable to the current user.": "", + "Ensure you have at least 20GB of free disk space.": "", + "Ensure your {{.driver_name}} is running and is healthy.": "Βεβαιωθείτε ότι το {{.driver_name}} εκτελείται και είναι υγιές.", + "Environment variables to pass to the Docker daemon. (format: key=value)": "Μεταβλητές περιβάλλοντος για μεταβίβαση στον daemon. (μορφή: κλειδί=τιμή)", + "Environment variables to pass to the build. (format: key=value)": "Μεταβλητές περιβάλλοντος για μεταβίβαση στο build. (μορφή: κλειδί=τιμή)", + "Error code docs have been saved at - {{.path}}": "Τα έγγραφα κωδικών σφάλματος έχουν αποθηκευτεί στο - {{.path}}", + "Error creating minikube directory": "Σφάλμα κατά τη δημιουργία του καταλόγου minikube", + "Error creating view template": "Σφάλμα κατά τη δημιουργία προτύπου προβολής", + "Error detecting shell": "Σφάλμα εντοπισμού κελύφους", + "Error executing view template": "Σφάλμα εκτέλεσης προτύπου προβολής", + "Error finding port for mount": "Σφάλμα εύρεσης θύρας για προσάρτηση", + "Error generating set output": "Σφάλμα δημιουργίας εξόδου set", + "Error generating unset output": "Σφάλμα δημιουργίας εξόδου unset", + "Error getting cluster bootstrapper": "Σφάλμα λήψης του bootstrapper συμπλέγματος", + "Error getting cluster config": "Σφάλμα λήψης διαμόρφωσης συμπλέγματος", + "Error getting control-plane node": "Σφάλμα λήψης κόμβου control-plane", + "Error getting host": "Σφάλμα λήψης κεντρικού υπολογιστή", + "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "Σφάλμα λήψης δέσμευσης θύρας για τον οδηγό '{{.driver_name}}: {{.error}}", + "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "Σφάλμα λήψης υπηρεσίας με χώρο ονομάτων: {{.namespace}} και ετικέτες {{.labelName}}:{{.addonName}}: {{.error}}", + "Error getting ssh client": "Σφάλμα λήψης πελάτη ssh", + "Error getting the host IP address to use from within the VM": "Σφάλμα λήψης της διεύθυνσης IP του κεντρικού υπολογιστή για χρήση εντός του VM", + "Error killing mount process": "Σφάλμα τερματισμού διαδικασίας προσάρτησης", + "Error loading profile config: {{.error}}": "Σφάλμα φόρτωσης διαμόρφωσης προφίλ: {{.error}}", + "Error opening service": "Σφάλμα ανοίγματος υπηρεσίας", + "Error parsing minikube version: {{.error}}": "Σφάλμα ανάλυσης έκδοσης minikube: {{.error}}", + "Error parsing {{.name}}={{.value}}, {{.err}}": "Σφάλμα ανάλυσης {{.name}}={{.value}}, {{.err}}", + "Error reading {{.path}}: {{.error}}": "Σφάλμα ανάγνωσης {{.path}}: {{.error}}", + "Error starting cluster": "Σφάλμα εκκίνησης συμπλέγματος", + "Error starting mount": "Σφάλμα εκκίνησης προσάρτησης", + "Error while setting kubectl current context : {{.error}}": "Σφάλμα κατά τον ορισμό του τρέχοντος context kubectl : {{.error}}", + "Error while setting kubectl current context: {{.error}}": "Σφάλμα κατά τον ορισμό του τρέχοντος context kubectl: {{.error}}", + "Error with ssh-add": "Σφάλμα με το ssh-add", + "Error writing mount pid": "Σφάλμα εγγραφής pid προσάρτησης", + "Examples": "Παραδείγματα", + "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "Η εκτέλεση της εντολής \"{{.command}}\" διήρκεσε ασυνήθιστα πολύ: {{.duration}}", + "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "Ο υπάρχων δίσκος δεν διαθέτει νέες δυνατότητες ({{.error}}). Για αναβάθμιση, εκτελέστε την εντολή 'minikube delete'", + "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "Έξοδος λόγω {{.fatal_code}}: {{.fatal_msg}}", + "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "Εκτεθειμένη θύρα του πίνακα ελέγχου με διακομιστή μεσολάβησης. Ορίστε σε 0 για επιλογή τυχαίας θύρας.", + "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "Εξωτερικός προσαρμογέας στον οποίο θα δημιουργηθεί εξωτερικός διακόπτης εάν δεν βρεθεί εξωτερικός διακόπτης. (μόνο πρόγραμμα οδήγησης hyperv)", + "Fail check if container paused": "Αποτυχία ελέγχου εάν το container είναι σε παύση", + "Failed removing pid from pidfile: {{.error}}": "Αποτυχία κατάργησης pid από το pidfile: {{.error}}", + "Failed runtime": "Αποτυχία περιβάλλοντος εκτέλεσης", + "Failed to build image": "Αποτυχία δημιουργίας image", + "Failed to cache and load images": "Αποτυχία αποθήκευσης και φόρτωσης images στην κρυφή μνήμη", + "Failed to cache binaries": "Αποτυχία αποθήκευσης δυαδικών αρχείων στην κρυφή μνήμη", + "Failed to cache images to tar": "Αποτυχία αποθήκευσης images σε tar στην κρυφή μνήμη", + "Failed to cache kubectl": "Αποτυχία αποθήκευσης kubectl στην κρυφή μνήμη", + "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Αποτυχία αλλαγής δικαιωμάτων για {{.minikube_dir_path}}: {{.error}}", + "Failed to check main repository and mirrors for images": "Αποτυχία ελέγχου του κύριου αποθετηρίου και των mirrors για images", + "Failed to configure auto-pause {{.profile}}": "Αποτυχία διαμόρφωσης αυτόματης παύσης {{.profile}}", + "Failed to configure metallb IP {{.profile}}": "Αποτυχία διαμόρφωσης IP metallb {{.profile}}", + "Failed to configure registry-aliases {{.profile}}": "Αποτυχία διαμόρφωσης ψευδωνύμων μητρώου {{.profile}}", + "Failed to create file": "Αποτυχία δημιουργίας αρχείου", + "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "Αποτυχία διαγραφής συμπλέγματος {{.name}}, επανάληψη προσπάθειας ούτως ή άλλως.", + "Failed to delete cluster {{.name}}.": "Αποτυχία διαγραφής συμπλέγματος {{.name}}.", + "Failed to delete cluster: {{.error}}": "Αποτυχία διαγραφής συμπλέγματος: {{.error}}", + "Failed to delete images": "Αποτυχία διαγραφής images", + "Failed to delete images from config": "Αποτυχία διαγραφής images από config", + "Failed to delete profile(s): {{.error}}": "Αποτυχία διαγραφής προφίλ: {{.error}}", + "Failed to download licenses": "Αποτυχία λήψης αδειών", + "Failed to enable container runtime": "Αποτυχία ενεργοποίησης περιβάλλοντος εκτέλεσης container", + "Failed to get bootstrapper": "Αποτυχία λήψης bootstrapper", + "Failed to get command runner": "Αποτυχία λήψης εκτελεστή εντολών", + "Failed to get image map": "Αποτυχία λήψης χάρτη image", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "Αποτυχία λήψης διεύθυνσης URL υπηρεσίας - ελέγξτε ότι το minikube εκτελείται και ότι έχετε καθορίσει τον σωστό χώρο ονομάτων (σημαία -n) εάν απαιτείται: {{.error}}", + "Failed to get temp": "Αποτυχία λήψης temp", + "Failed to kill mount process: {{.error}}": "Αποτυχία τερματισμού διαδικασίας προσάρτησης: {{.error}}", + "Failed to list cached images": "Αποτυχία εμφάνισης λίστας αποθηκευμένων images στην κρυφή μνήμη", + "Failed to list images": "Αποτυχία εμφάνισης λίστας images", + "Failed to load image": "Αποτυχία φόρτωσης image", + "Failed to persist images": "Αποτυχία διατήρησης images", + "Failed to pull image": "Αποτυχία λήψης image", + "Failed to pull images": "Αποτυχία λήψης images", + "Failed to push images": "Αποτυχία ώθησης images", + "Failed to read temp": "Αποτυχία ανάγνωσης προσωρινού", + "Failed to reload cached images": "Αποτυχία επαναφόρτωσης αποθηκευμένων images στην κρυφή μνήμη", + "Failed to remove image": "Αποτυχία κατάργησης image", + "Failed to remove images for profile {{.pName}} {{.error}}": "Αποτυχία κατάργησης images για το προφίλ {{.pName}} {{.error}}", + "Failed to save config {{.profile}}": "Αποτυχία αποθήκευσης διαμόρφωσης {{.profile}}", + "Failed to save dir": "Αποτυχία αποθήκευσης καταλόγου", + "Failed to save image": "Αποτυχία αποθήκευσης image", + "Failed to save stdin": "Αποτυχία αποθήκευσης stdin", + "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "Αποτυχία ορισμού του NO_PROXY Env. Παρακαλούμε χρησιμοποιήστε `export NO_PROXY=$NO_PROXY,{{.ip}}`.", + "Failed to setup certs": "Αποτυχία ρύθμισης πιστοποιητικών", + "Failed to start container runtime": "Αποτυχία εκκίνησης περιβάλλοντος εκτέλεσης container", + "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "Αποτυχία εκκίνησης {{.driver}} {{.driver_type}}. Η εκτέλεση της εντολής \"{{.cmd}}\" ενδέχεται να το διορθώσει: {{.error}}", + "Failed to stop node {{.name}}: {{.error}}": "Αποτυχία διακοπής κόμβου {{.name}}: {{.error}}", + "Failed to stop ssh-agent process: {{.error}}": "Αποτυχία διακοπής διαδικασίας ssh-agent: {{.error}}", + "Failed to tag images": "Αποτυχία προσθήκης ετικετών σε images", + "Failed to update cluster": "Αποτυχία ενημέρωσης συμπλέγματος", + "Failed to update config": "Αποτυχία ενημέρωσης config", + "Failed unmount: {{.error}}": "Αποτυχία αποπροσάρτησης: {{.error}}", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "Αποτυχία σύνδεσης στο {{.curlTarget}} από το εσωτερικό του minikube {{.type}}", + "Filter to use only VM Drivers": "Φίλτρο για χρήση μόνο προγραμμάτων οδήγησης VM", + "Flags": "Σημαίες", + "Follow": "Ακολούθηση", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "Για βελτιωμένη εμπειρία, συνιστάται η χρήση του Docker Engine αντί του Docker Desktop.\nΟδηγίες εγκατάστασης του Docker Engine: https://docs.docker.com/engine/install/#server", + "For improved {{.driver}} performance, {{.fix}}": "Για βελτιωμένη απόδοση {{.driver}}, {{.fix}}", + "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "Για περισσότερες πληροφορίες δείτε: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}", + "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Για περισσότερες πληροφορίες, ανατρέξτε: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "For more information, see: {{.url}}": "Για περισσότερες πληροφορίες, ανατρέξτε : {{.url}}", + "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "Εξαναγκασμός διαμόρφωσης περιβάλλοντος για ένα καθορισμένο κέλυφος: [fish, cmd, powershell, tcsh, bash, zsh],η προεπιλογή είναι αυτόματη ανίχνευση", + "Force minikube to perform possibly dangerous operations": "Εξαναγκασμός του minikube να εκτελέσει πιθανώς επικίνδυνες λειτουργίες", + "Format output. One of: short|table|json|yaml": "Μορφή εξόδου. Ένα από: short|table|json|yaml", + "Format to print stdout in. Options include: [text,json]": "Μορφή εκτύπωσης stdout. Οι επιλογές περιλαμβάνουν: [text,json]", + "Forwards all services in a namespace (defaults to \"false\")": "Προωθεί όλες τις υπηρεσίες σε έναν χώρο ονομάτων (προεπιλογή \"false\")", + "Found docker, but the docker service isn't running. Try restarting the docker service.": "Βρέθηκε το docker, αλλά η υπηρεσία docker δεν εκτελείται. Δοκιμάστε να επανεκκινήσετε την υπηρεσία docker.", + "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "Βρέθηκαν προγράμματα οδήγησης αλλά κανένα δεν ήταν υγιές. Δείτε παραπάνω για προτάσεις σχετικά με τον τρόπο διόρθωσης των εγκατεστημένων προγραμμάτων οδήγησης.", + "Found network options:": "Βρέθηκαν επιλογές δικτύου:", + "Found {{.number}} invalid profile(s) ! ": "Βρέθηκαν {{.number}} μη έγκυρα προφίλ!", + "Generate command completion for PowerShell.": "Δημιουργία ολοκλήρωσης εντολών για το PowerShell.", + "Generate command completion for a shell": "Δημιουργία ολοκλήρωσης εντολών για ένα κέλυφος", + "Generate command completion for bash.": "Δημιουργία ολοκλήρωσης εντολών για το bash.", + "Generate command completion for fish .": "Δημιουργία ολοκλήρωσης εντολών για το fish.", + "Generate command completion for zsh.": "Δημιουργία ολοκλήρωσης εντολών για το zsh.", + "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "Δημιουργία: αδυναμία ανάλυσης μεγέθους δίσκου '{{.diskSize}}': {{.error}}", + "Generate unable to parse memory '{{.memory}}': {{.error}}": "Δημιουργία: αδυναμία ανάλυσης μνήμης '{{.memory}}': {{.error}}", + "Generating certificates and keys ...": "Δημιουργία πιστοποιητικών και κλειδιών ...", + "Get or list the current profiles (clusters)": "Λήψη ή εμφάνιση λίστας των τρεχόντων προφίλ (συμπλεγμάτων)", + "Gets the logs of the running instance, used for debugging minikube, not user code.": "Λαμβάνει τα αρχεία καταγραφής της τρέχουσας παρουσίας, που χρησιμοποιούνται για τον εντοπισμό σφαλμάτων του minikube, όχι του κώδικα χρήστη.", + "Gets the status of a local Kubernetes cluster": "Λαμβάνει την κατάσταση ενός τοπικού συμπλέγματος Kubernetes", + "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "Λαμβάνει την κατάσταση ενός τοπικού συμπλέγματος Kubernetes.\n\tΗ κατάσταση εξόδου περιέχει την κατάσταση του VM, του συμπλέγματος και του Kubernetes του minikube κωδικοποιημένη στα bit του με αυτή τη σειρά από δεξιά προς τα αριστερά.\n\tΠ.χ.: 7 σημαίνει: 1 (για minikube NOK) + 2 (για σύμπλεγμα NOK) + 4 (για Kubernetes NOK)", + "Gets the value of PROPERTY_NAME from the minikube config file": "Λαμβάνει την τιμή του PROPERTY_NAME από το αρχείο διαμόρφωσης minikube", + "Global Flags": "Καθολικές Σημαίες", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "Συμβολοσειρά μορφής προτύπου Go για την έξοδο λίστας κρυφής μνήμης. Η μορφή για πρότυπα Go μπορεί να βρεθεί εδώ: https://pkg.go.dev/text/template\nΓια τη λίστα των προσβάσιμων μεταβλητών για το πρότυπο, δείτε τις τιμές δομής εδώ: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "Συμβολοσειρά μορφής προτύπου Go για την έξοδο προβολής διαμόρφωσης. Η μορφή για πρότυπα Go μπορεί να βρεθεί εδώ: https://pkg.go.dev/text/template\nΓια τη λίστα των προσβάσιμων μεταβλητών για το πρότυπο, δείτε τις τιμές δομής εδώ: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "Συμβολοσειρά μορφής προτύπου Go για την έξοδο κατάστασης. Η μορφή για πρότυπα Go μπορεί να βρεθεί εδώ: https://pkg.go.dev/text/template\nΓια τις προσβάσιμες μεταβλητές λίστας για το πρότυπο, δείτε τις τιμές δομής εδώ: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status", + "Group ID: {{.groupID}}": "Αναγνωριστικό ομάδας: {{.groupID}}", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "Τα συμπλέγματα HA (multi-control plane) απαιτούν 3 ή περισσότερους κόμβους multi-control plane", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Το Headlamp μπορεί να εμφανίσει πιο λεπτομερείς πληροφορίες όταν είναι εγκατεστημένος ο metrics-server. Για να τον εγκαταστήσετε, εκτελέστε:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n", + "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "Απόκρυψη της υπογραφής του hypervisor από τον επισκέπτη στο minikube (μόνο πρόγραμμα οδήγησης kvm2)", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "Το Hyper-V απαιτεί η μνήμη MB να είναι ζυγός αριθμός, καθορίστηκε {{.memory}}MB, δοκιμάστε να περάσετε `--memory {{.suggestMemory}}`", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", + "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "", + "IP Address to use to expose ports (docker and podman driver only)": "Διεύθυνση IP για χρήση για την έκθεση θυρών (μόνο πρόγραμμα οδήγησης docker και podman)", + "IP address (ssh driver only)": "Διεύθυνση IP (μόνο πρόγραμμα οδήγησης ssh)", + "If present, writes to the provided file instead of stdout.": "Εάν υπάρχει, γράφει στο παρεχόμενο αρχείο αντί για το stdout.", + "If set, added node will be available as worker. Defaults to true.": "Εάν οριστεί, ο προστιθέμενος κόμβος θα είναι διαθέσιμος ως worker. Προεπιλογή true.", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "Εάν οριστεί, ο προστιθέμενος κόμβος θα γίνει επίπεδο ελέγχου. Προεπιλογή false. Προς το παρόν υποστηρίζεται μόνο για υπάρχοντα συμπλέγματα HA (multi-control plane).", + "If set, automatically updates drivers to the latest version. Defaults to true.": "Εάν οριστεί, ενημερώνει αυτόματα τους οδηγούς στην τελευταία έκδοση. Προεπιλογή true.", + "If set, delete the current cluster if start fails and try again. Defaults to false.": "Εάν οριστεί, διαγράφει το τρέχον σύμπλεγμα εάν η εκκίνηση αποτύχει και προσπαθεί ξανά. Προεπιλογή false.", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "Εάν οριστεί, απενεργοποιεί την αναφορά μετρήσεων (χρήση CPU και μνήμης), αυτό μπορεί να βελτιώσει τη χρήση της CPU. Προεπιλογή false.", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "Εάν οριστεί, απενεργοποιεί τις βελτιστοποιήσεις που έχουν οριστεί για το τοπικό Kubernetes. Συμπεριλαμβανομένης της μείωσης των αντιγράφων CoreDNS από 2 σε 1. Προεπιλογή false.", + "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "Εάν οριστεί, γίνεται λήψη του tarball των προφορτωμένων images εάν είναι διαθέσιμο για βελτίωση του χρόνου εκκίνησης. Προεπιλογή true.", + "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "Εάν οριστεί, εξαναγκάζει το περιβάλλον εκτέλεσης container να χρησιμοποιεί το systemd ως διαχειριστή cgroup. Προεπιλογή false.", + "If set, install addons. Defaults to true.": "Εάν οριστεί, γίνεται εγκατάσταση πρόσθετων. Προεπιλογή true.", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "Εάν οριστεί, το minikube VM/container θα ξεκινήσει χωρίς εκκίνηση ή διαμόρφωση του Kubernetes. (λειτουργεί μόνο σε νέα συμπλέγματα)", + "If set, pause all namespaces": "Εάν οριστεί, γίνεται παύση όλων των χώρων ονομάτων", + "If set, unpause all namespaces": "Εάν οριστεί, γίνεται κατάργηση παύσης όλων των χώρων ονομάτων", + "If the above advice does not help, please let us know:": "Εάν οι παραπάνω συμβουλές δεν βοηθήσουν, ενημερώστε μας:", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "Εάν ο κεντρικός υπολογιστής διαθέτει τείχος προστασίας:\n\n\t\t1. Επιτρέψτε μια θύρα μέσω του τείχους προστασίας\n\t\t2. Καθορίστε \"--port=\u003cαριθμός_θύρας\u003e\" για \"minikube mount\"", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "Εάν true, αποθηκεύει τα images docker για τον τρέχοντα bootstrapper στην κρυφή μνήμη και τα φορτώνει στο μηχάνημα. Πάντα false με --driver=none.", + "If true, only download and cache files for later use - don't install or start anything.": "Εάν true, γίνεται μόνο λήψη και αποθήκευση αρχείων στην κρυφή μνήμη για μελλοντική χρήση - να μη γίνει εγκατάσταση ή εκκίνηση τίποτα.", + "If true, pods might get deleted and restarted on addon enable": "Εάν true, τα pods ενδέχεται να διαγραφούν και να επανεκκινηθούν κατά την ενεργοποίηση του πρόσθετου", + "If true, print web links to addons' documentation if using --output=list (default).": "Εάν true, εκτυπώνει συνδέσμους ιστού στην τεκμηρίωση των πρόσθετων εάν χρησιμοποιείται --output=list (προεπιλογή).", + "If true, returns a detailed list of profiles.": "", + "If true, returns list of profiles faster by skipping validating the status of the cluster.": "Εάν true, επιστρέφει τη λίστα προφίλ γρηγορότερα παρακάμπτοντας την επικύρωση της κατάστασης του συμπλέγματος.", + "If true, will perform potentially dangerous operations. Use with discretion.": "Εάν true, θα εκτελέσει πιθανώς επικίνδυνες λειτουργίες. Χρησιμοποιήστε με σύνεση.", + "If you are running minikube within a VM, consider using --driver=none:": "Εάν εκτελείτε το minikube εντός ενός VM, εξετάστε το ενδεχόμενο χρήσης --driver=none:", + "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "Εάν εξακολουθείτε να ενδιαφέρεστε να κάνετε τον οδηγό {{.driver_name}} να λειτουργήσει. Οι ακόλουθες προτάσεις ενδέχεται να σας βοηθήσουν να ξεπεράσετε αυτό το ζήτημα:", + "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "Εάν δεν θέλετε τα διαπιστευτήριά σας να προσαρτηθούν σε ένα συγκεκριμένο pod, προσθέστε μια ετικέτα με το κλειδί `gcp-auth-skip-secret` στη διαμόρφωση του pod σας.", + "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "Εάν θέλετε τα υπάρχοντα pods να προσαρτηθούν με διαπιστευτήρια, είτε αναδημιουργήστε τα είτε εκτελέστε ξανά την ενεργοποίηση πρόσθετων με --refresh.", + "Ignoring empty custom image {{.name}}": "Παράβλεψη κενού προσαρμοσμένου image {{.name}}", + "Ignoring invalid pair entry {{.pair}}": "Παράβλεψη μη έγκυρης καταχώρησης ζεύγους {{.pair}}", + "Ignoring unknown custom image {{.name}}": "Παράβλεψη άγνωστου προσαρμοσμένου image {{.name}}", + "Ignoring unknown custom registry {{.name}}": "Παράβλεψη άγνωστου προσαρμοσμένου μητρώου {{.name}}", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "Το image δεν δημιουργήθηκε για την τρέχουσα έκδοση minikube. Για να το επιλύσετε, μπορείτε να διαγράψετε και να δημιουργήσετε ξανά το σύμπλεγμα minikube χρησιμοποιώντας τα πιο πρόσφατα images. Αναμενόμενη έκδοση minikube: {{.imageMinikubeVersion}} -\u003e Πραγματική έκδοση minikube: {{.minikubeVersion}}", + "Images Commands:": "Εντολές Images:", + "Images used by this addon. Separated by commas.": "Images που χρησιμοποιούνται από αυτό το πρόσθετο. Διαχωρίζονται με κόμματα.", + "In order to use the fall back image, you need to log in to the github packages registry": "Για να χρησιμοποιήσετε το εφεδρικό image, πρέπει να συνδεθείτε στο μητρώο πακέτων github", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Μη ασφαλή μητρώα Docker για μεταβίβαση στον δαίμονα Docker. Το προεπιλεγμένο εύρος CIDR υπηρεσίας θα προστεθεί αυτόματα.", + "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", + "Install the latest hyperkit binary, and run 'minikube delete'": "", + "Interval is an invalid duration: {{.error}}": "Το διάστημα είναι μη έγκυρη διάρκεια: {{.error}}", + "Interval must be greater than 0s": "Το διάστημα πρέπει να είναι μεγαλύτερο από 0s", + "Invalid port": "Μη έγκυρη θύρα", + "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "Το Istio χρειάζεται {{.minCPUs}} CPU -- η διαμόρφωσή σας δεσμεύει μόνο {{.cpus}} CPU", + "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "Το Istio χρειάζεται {{.minMem}}MB μνήμης -- η διαμόρφωσή σας δεσμεύει μόνο {{.memory}}MB", + "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "Φαίνεται ότι εκτελείτε σε GCE, πράγμα που σημαίνει ότι ο έλεγχος ταυτότητας θα πρέπει να λειτουργεί χωρίς το πρόσθετο GCP Auth. Εάν εξακολουθείτε να θέλετε να κάνετε έλεγχο ταυτότητας χρησιμοποιώντας ένα αρχείο διαπιστευτηρίων, χρησιμοποιήστε τη σημαία --force.", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configure is:": "Είναι πολύ πιθανό να έχετε πρόβλημα με το διαδίκτυο. Βεβαιωθείτε ότι μπορείτε να έχετε πρόσβαση στο διαδίκτυο τουλάχιστον μέσω HTTP, απευθείας ή με διακομιστή μεσολάβησης. Προς το παρόν, η διαμόρφωση του διακομιστή μεσολάβησης είναι:", + "Kept for backward compatibility, value is ignored.": "", + "Kicbase images have not been deleted. To delete images run:": "Τα images Kicbase δεν έχουν διαγραφεί. Για να διαγράψετε images εκτελέστε:", + "Kill the mount process spawned by minikube start": "Τερματισμός της διαδικασίας προσάρτησης που δημιουργήθηκε από την εκκίνηση του minikube", + "Kubernetes requires at least 2 CPU's to start": "", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "Η έκδοση Kubernetes δεν βρέθηκε στη λίστα εκδόσεων του GitHub. Μπορείτε να εξαναγκάσετε μια έκδοση Kubernetes μέσω της σημαίας --force", + "Kubernetes version {{.specified}} found in GitHub version list": "Η έκδοση Kubernetes {{.specified}} βρέθηκε στη λίστα εκδόσεων του GitHub", + "Kubernetes version {{.specified}} found in version list": "Η έκδοση Kubernetes {{.specified}} βρέθηκε στη λίστα εκδόσεων", + "Kubernetes version {{.version}} is not supported by this release of minikube": "Η έκδοση Kubernetes {{.version}} δεν υποστηρίζεται από αυτήν την έκδοση του minikube", + "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "Το Kubernetes {{.new}} είναι τώρα διαθέσιμο. Εάν θέλετε να κάνετε αναβάθμιση, καθορίστε: --kubernetes-version={{.prefix}}{{.new}}", + "Kubernetes {{.version}} is not supported by this release of minikube": "Η έκδοση Kubernetes {{.version}} δεν υποστηρίζεται από αυτήν την έκδοση του minikube", + "Kubernetes: Stopping ...": "Kubernetes: Διακοπή ...", + "Kubernetes: {{.status}}": "Kubernetes: {{.status}}", + "Launching proxy ...": "Εκκίνηση διακομιστή μεσολάβησης ...", + "List all available images from the local cache.": "Εμφάνιση λίστας όλων των διαθέσιμων images από την τοπική κρυφή μνήμη.", + "List existing minikube nodes.": "Εμφάνιση λίστας υπαρχόντων κόμβων minikube.", + "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "Εμφάνιση λίστας ονομάτων image που χρησιμοποιεί το πρόσθετο με ADDON_NAME. Για μια λίστα με τα διαθέσιμα πρόσθετα χρησιμοποιήστε: minikube addons list", + "List images": "Εμφάνιση λίστας images", + "List nodes.": "Εμφάνιση λίστας κόμβων.", + "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "Λίστα θυρών VSock επισκέπτη που πρέπει να εκτεθούν ως υποδοχές στον κεντρικό υπολογιστή (μόνο πρόγραμμα οδήγησης hyperkit)", + "List of ports that should be exposed (docker and podman driver only)": "Λίστα θυρών που πρέπει να εκτεθούν (μόνο πρόγραμμα οδήγησης docker και podman)", + "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "Ακρόαση στο 0.0.0.0 στον εξωτερικό κεντρικό υπολογιστή docker {{.host}}. Παρακαλούμε λάβετε υπόψη", + "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "Ακρόαση στο {{.listenAddr}}. Αυτό δεν συνιστάται και μπορεί να προκαλέσει ευπάθεια ασφαλείας. Χρησιμοποιήστε με δική σας ευθύνη", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "Εμφανίζει όλα τα διαθέσιμα πρόσθετα minikube καθώς και τις τρέχουσες καταστάσεις τους (ενεργοποιημένο/απενεργοποιημένο)", + "Lists all minikube profiles.": "Εμφανίζει όλα τα προφίλ minikube.", + "Lists all valid default values for PROPERTY_NAME": "Εμφανίζει όλες τις έγκυρες προεπιλεγμένες τιμές για το PROPERTY_NAME", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "Εμφανίζει όλα τα έγκυρα προφίλ minikube και εντοπίζει όλα τα πιθανά μη έγκυρα προφίλ.", + "Lists the URLs for the services in your local cluster": "Εμφανίζει τις διευθύνσεις URL για τις υπηρεσίες στο τοπικό σας σύμπλεγμα", + "Load an image into minikube": "Φόρτωση ενός image στο minikube", + "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "Τοπικοί φάκελοι για κοινή χρήση με τον Επισκέπτη μέσω προσαρτήσεων NFS (μόνο πρόγραμμα οδήγησης hyperkit)", + "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "Τοπικός διακομιστής μεσολάβησης αγνοήθηκε: δεν μεταβιβάζεται το {{.name}}={{.value}} στο περιβάλλον docker.", + "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "Τοποθεσία της υποδοχής VPNKit που χρησιμοποιείται για δικτύωση. Εάν είναι κενό, απενεργοποιεί το Hyperkit VPNKitSock, εάν 'auto' χρησιμοποιεί σύνδεση Docker για Mac VPNKit, διαφορετικά χρησιμοποιεί το καθορισμένο VSock (μόνο πρόγραμμα οδήγησης hyperkit)", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "Τοποθεσία ανάκτησης των binaries των kubectl, kubelet, \u0026 kubeadm.", + "Locations to fetch the minikube ISO from.": "Τοποθεσίες ανάκτησης του minikube ISO.", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Σύνδεση ή εκτέλεση εντολής σε ένα μηχάνημα με SSH. παρόμοιο με το 'docker-machine ssh'.", + "Log into the minikube environment (for debugging)": "Σύνδεση στο περιβάλλον minikube (για εντοπισμό σφαλμάτων)", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "Δημιουργήθηκε αρχείο καταγραφής ({{.logPath}}), θυμηθείτε να το συμπεριλάβετε κατά την αναφορά προβλημάτων!", + "Manage cache for images": "Διαχείριση κρυφής μνήμης για images", + "Manage images": "Διαχείριση images", + "Message Size: {{.size}}": "Μέγεθος μηνύματος: {{.size}}", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "Ελάχιστη υποστηριζόμενη έκδοση VirtualBox: {{.vers}}, τρέχουσα έκδοση VirtualBox: {{.cvers}}", + "Modify persistent configuration values": "Τροποποίηση μόνιμων τιμών διαμόρφωσης", + "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "Περισσότερες πληροφορίες: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", + "Most users should use the newer 'docker' driver instead, which does not require root!": "Οι περισσότεροι χρήστες θα πρέπει να χρησιμοποιούν αντ' αυτού τον νεότερο οδηγό 'docker', ο οποίος δεν απαιτεί root!", + "Mount type: {{.name}}": "Τύπος προσάρτησης: {{.name}}", + "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "Προσάρτηση διαδρομής κεντρικού υπολογιστή {{.sourcePath}} στο VM ως {{.destinationPath}} ...", + "Mounts the specified directory into minikube": "Προσαρτά τον καθορισμένο κατάλογο στο minikube", + "Mounts the specified directory into minikube.": "Προσαρτά τον καθορισμένο κατάλογο στο minikube.", + "Multiple errors deleting profiles": "Πολλαπλά σφάλματα κατά τη διαγραφή προφίλ", + "Multiple errors encountered:": "Πολλαπλά σφάλματα που εντοπίστηκαν:", + "Multiple minikube profiles were found - ": "Βρέθηκαν πολλαπλά προφίλ minikube - ", + "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "Τύπος NIC που χρησιμοποιείται για δίκτυο μόνο κεντρικού υπολογιστή. Ένα από τα Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, ή virtio (μόνο πρόγραμμα οδήγησης virtualbox)", + "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "Τύπος NIC που χρησιμοποιείται για δίκτυο nat. Ένα από τα Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, ή virtio (μόνο πρόγραμμα οδήγησης virtualbox)", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "ΣΗΜΕΙΩΣΗ: Μην κλείσετε αυτό το τερματικό καθώς αυτή η διαδικασία πρέπει να παραμείνει ενεργή για να είναι προσβάσιμη η σήραγγα ...", + "NOTE: This process must stay alive for the mount to be accessible ...": "ΣΗΜΕΙΩΣΗ: Αυτή η διαδικασία πρέπει να παραμείνει ενεργή για να είναι προσβάσιμη η προσάρτηση ...", + "Networking and Connectivity Commands:": "Εντολές δικτύωσης και συνδεσιμότητας:", + "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "Δεν δόθηκε διεύθυνση IP. Δοκιμάστε να καθορίσετε το --ssh-ip-address, ή ανατρέξτε στη διεύθυνση https://minikube.sigs.k8s.io/docs/drivers/ssh/", + "No changes required for the \"{{.context}}\" context": "Δεν απαιτούνται αλλαγές για το context \"{{.context}}\"", + "No control-plane nodes found.": "Δεν βρέθηκαν κόμβοι control-plane.", + "No minikube profile was found.": "Δεν βρέθηκε προφίλ minikube.", + "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Δεν εντοπίστηκε κανένας πιθανός οδηγός. Δοκιμάστε να καθορίσετε το --driver, ή ανατρέξτε στη διεύθυνση https://minikube.sigs.k8s.io/docs/start/", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "Δεν βρέθηκαν υπηρεσίες στον χώρο ονομάτων '{{.namespace}}'.\nΜπορείτε να επιλέξετε έναν άλλο χώρο ονομάτων χρησιμοποιώντας την εντολή 'minikube service --all -n \u003cnamespace\u003e'", + "No such addon {{.name}}": "Δεν υπάρχει πρόσθετο {{.name}}", + "No valid URL found for tunnel.": "Δεν βρέθηκε έγκυρη διεύθυνση URL για τη σήραγγα.", + "No valid port found for tunnel.": "Δεν βρέθηκε έγκυρη θύρα για τη σήραγγα.", + "Node {{.name}} failed to start, deleting and trying again.": "Ο κόμβος {{.name}} απέτυχε να ξεκινήσει, διαγράφεται και γίνεται νέα προσπάθεια.", + "Node {{.name}} was successfully deleted.": "Ο κόμβος {{.name}} διαγράφηκε με επιτυχία.", + "Node {{.nodeName}} does not exist.": "Ο κόμβος {{.nodeName}} δεν υπάρχει.", + "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "Κανένα από τα γνωστά αποθετήρια δεν είναι προσβάσιμο. Εξετάστε το ενδεχόμενο καθορισμού ενός εναλλακτικού αποθετηρίου image με τη σημαία --image-repository", + "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "Κανένα από τα γνωστά αποθετήρια στην τοποθεσία σας δεν είναι προσβάσιμο. Χρήση του {{.image_repository_name}} ως εφεδρικού.", + "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "Παρατηρήθηκε ότι έχετε ενεργοποιημένο docker-env στον οδηγό {{.driver_name}} σε αυτό το τερματικό:", + "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "Παρατηρήθηκε ότι έχετε ενεργοποιημένο podman-env στον οδηγό {{.driver_name}} σε αυτό το τερματικό:", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, and qemu2 drivers)": "Αριθμός επιπλέον δίσκων που δημιουργήθηκαν και προσαρτήθηκαν στο minikube VM (προς το παρόν υλοποιείται μόνο για προγράμματα οδήγησης hyperkit, kvm2 και qemu2)", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "", + "Number of lines back to go within the log": "Αριθμός γραμμών για επιστροφή εντός του αρχείου καταγραφής", + "OS release is {{.pretty_name}}": "Η έκδοση του ΛΣ είναι {{.pretty_name}}", + "One of 'text', 'yaml' or 'json'.": "Ένα από 'text', 'yaml' ή 'json'.", + "One of 'yaml' or 'json'.": "Ένα από 'yaml' ή 'json'.", + "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "Επιτρέπονται μόνο αλφαριθμητικοί χαρακτήρες και παύλες '-'. Ελάχιστο 1 χαρακτήρας, αρχίζοντας με αλφαριθμητικό.", + "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "Επιτρέπονται μόνο αλφαριθμητικοί χαρακτήρες και παύλες '-'. Ελάχιστο 2 χαρακτήρες, αρχίζοντας με αλφαριθμητικό.", + "Open the addons URL with https instead of http": "Άνοιγμα της διεύθυνσης URL των πρόσθετων με https αντί για http", + "Open the service URL with https instead of http (defaults to \"false\")": "Άνοιγμα της διεύθυνσης URL της υπηρεσίας με https αντί για http (προεπιλογή \"false\")", + "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "Άνοιγμα υπηρεσίας Kubernetes {{.namespace_name}}/{{.service_name}} στο προεπιλεγμένο πρόγραμμα περιήγησης...", + "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "Άνοιγμα υπηρεσίας {{.namespace_name}}/{{.service_name}} στο προεπιλεγμένο πρόγραμμα περιήγησης...", + "Opening {{.url}} in your default browser...": "Άνοιγμα {{.url}} στο προεπιλεγμένο πρόγραμμα περιήγησής σας...", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "Ανοίγει το πρόσθετο με ADDON_NAME εντός του minikube (παράδειγμα: minikube addons open dashboard). Για μια λίστα με τα διαθέσιμα πρόσθετα χρησιμοποιήστε: minikube addons list ", + "Operations on nodes": "Λειτουργίες σε κόμβους", + "Options: {{.options}}": "Επιλογές: {{.options}}", + "Output format. Accepted values: [json, yaml]": "Μορφή εξόδου. Αποδεκτές τιμές: [json, yaml]", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "Εξάγει την ολοκλήρωση κελύφους minikube για το δεδομένο κέλυφος (bash, zsh, fish ή powershell)\n\n\tΑυτό εξαρτάται από το δυαδικό αρχείο bash-completion. Παράδειγμα οδηγιών εγκατάστασης:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # για χρήστες bash\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # για χρήστες zsh\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # για χρήστες fish\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # για χρήστες bash\n\t\t$ source \u003c(minikube completion zsh) # για χρήστες zsh\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # για χρήστες fish\n\n\tΕπιπλέον, μπορεί να θέλετε να εξάγετε την ολοκλήρωση σε ένα αρχείο και να την κάνετε source στο .bashrc σας\n\n\tWindows:\n\t\t## Αποθήκευση κώδικα ολοκλήρωσης σε ένα σενάριο και εκτέλεση στο προφίλ\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Εκτέλεση κώδικα ολοκλήρωσης στο προφίλ\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tΣημείωση για χρήστες zsh: [1] οι ολοκληρώσεις zsh υποστηρίζονται μόνο σε εκδόσεις zsh \u003e= 5.2\n\tΣημείωση για χρήστες fish: [2] ανατρέξτε σε αυτήν την τεκμηρίωση για περισσότερες λεπτομέρειες https://fishshell.com/docs/current/#tab-completion\n", + "Outputs the licenses of dependencies to a directory": "Εξάγει τις άδειες των εξαρτήσεων σε έναν κατάλογο", + "Overwrite image even if same image:tag name exists": "Αντικατάσταση image ακόμη και αν υπάρχει το ίδιο όνομα image:tag", + "Path to socket vmnet binary (QEMU driver only)": "Διαδρομή για το δυαδικό αρχείο socket vmnet (μόνο πρόγραμμα οδήγησης QEMU)", + "Path to the Dockerfile to use (optional)": "Διαδρομή για το Dockerfile προς χρήση (προαιρετικό)", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "Διαδρομή προς το αρχείο υλικολογισμικού qemu. Προεπιλογές: Για Linux, η προεπιλεγμένη τοποθεσία υλικολογισμικού. Για macOS, η τοποθεσία εγκατάστασης brew. Για Windows, C:\\Program Files\\qemu\\share", + "Path to the socket vmnet client binary (QEMU driver only)": "Διαδρομή προς το δυαδικό αρχείο πελάτη socket vmnet (μόνο πρόγραμμα οδήγησης QEMU)", + "Pause": "Παύση", + "Paused {{.count}} containers": "Έγινε παύση {{.count}} containers", + "Paused {{.count}} containers in: {{.namespaces}}": "Έγινε παύση {{.count}} containers σε: {{.namespaces}}", + "Pausing node {{.name}} ... ": "Παύση κόμβου {{.name}} ... ", + "Please also attach the following file to the GitHub issue:": "Επισυνάψτε επίσης το ακόλουθο αρχείο στο ζήτημα GitHub:", + "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "Δημιουργήστε ένα σύμπλεγμα με μεγαλύτερο μέγεθος δίσκου: `minikube start --disk SIZE_MB` ", + "Please either authenticate to the registry or use --base-image flag to use a different registry.": "Είτε κάντε έλεγχο ταυτότητας στο μητρώο είτε χρησιμοποιήστε τη σημαία --base-image για να χρησιμοποιήσετε ένα διαφορετικό μητρώο.", + "Please enter a value:": "Εισαγάγετε μια τιμή:", + "Please free up disk or prune images.": "Ελευθερώστε χώρο στο δίσκο ή καθαρίστε images.", + "Please increase Desktop's disk size.": "Αυξήστε το μέγεθος δίσκου του Desktop.", + "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", + "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", + "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", + "Please provide a path or url to build": "Παρέχετε μια διαδρομή ή διεύθυνση URL για δημιουργία", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "Παρέχετε ένα image στο περιβάλλον εκτέλεσης container για αποθήκευση από το minikube μέσω \u003cminikube image save IMAGE_NAME\u003e", + "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "Παρέχετε ένα image στον τοπικό σας daemon για φόρτωση στο minikube μέσω \u003cminikube image load IMAGE_NAME\u003e", + "Please provide source and target image": "Παρέχετε image προέλευσης και προορισμού", + "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "Επαναξιολογήστε το docker-env σας, για να βεβαιωθείτε ότι οι μεταβλητές περιβάλλοντός σας έχουν ενημερωμένες θύρες:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t", + "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "Επαναξιολογήστε το podman-env σας, για να βεβαιωθείτε ότι οι μεταβλητές περιβάλλοντός σας έχουν ενημερωμένες θύρες:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "Εκτελέστε την εντολή `minikube logs --file=logs.txt` και επισυνάψτε το logs.txt στο ζήτημα GitHub.", + "Please see {{.documentation_url}} for more details": "Ανατρέξτε στη διεύθυνση {{.documentation_url}} για περισσότερες λεπτομέρειες", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", + "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "Καθορίστε τον κατάλογο προς προσάρτηση: \n\tminikube mount \u003cκατάλογος προέλευσης\u003e:\u003cκατάλογος προορισμού\u003e (παράδειγμα: \"/host-home:/vm-home\")", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "Καθορίστε τη διαδρομή για αντιγραφή: \n\tminikube cp \u003cδιαδρομή αρχείου προέλευσης\u003e \u003cαπόλυτη διαδρομή αρχείου προορισμού\u003e (παράδειγμα: \"minikube cp a/b.txt /copied.txt\")", + "Please try purging minikube using `minikube delete --all --purge`": "", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "Επισκεφθείτε τον ακόλουθο σύνδεσμο για τεκμηρίωση σχετικά με αυτό: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n", + "Populates the specified folder with documentation in markdown about minikube": "Συμπληρώνει τον καθορισμένο φάκελο με τεκμηρίωση σε markdown σχετικά με το minikube", + "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", + "Powering off \"{{.profile_name}}\" via SSH ...": "Απενεργοποίηση του \"{{.profile_name}}\" μέσω SSH ...", + "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Προετοιμασία Kubernetes {{.k8sVersion}} σε {{.runtime}} {{.runtimeVersion}} ...", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "Προετοιμασία {{.runtime}} {{.runtimeVersion}} ...", + "Print current and latest version number": "Εκτύπωση τρέχοντος και τελευταίου αριθμού έκδοσης", + "Print just the version number.": "Εκτύπωση μόνο του αριθμού έκδοσης.", + "Print the version of minikube": "Εκτύπωση της έκδοσης του minikube", + "Print the version of minikube.": "Εκτύπωση της έκδοσης του minikube.", + "Problems detected in {{.entry}}:": "Εντοπίστηκαν προβλήματα στο {{.entry}}:", + "Problems detected in {{.name}}:": "Εντοπίστηκαν προβλήματα στο {{.name}}:", + "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "Το προφίλ \"{{.cluster}}\" δεν βρέθηκε. Εκτελέστε \"minikube profile list\" για να δείτε όλα τα προφίλ.", + "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "Το όνομα προφίλ \"{{.profilename}}\" είναι δεσμευμένη λέξη-κλειδί. Για να διαγράψετε αυτό το προφίλ, εκτελέστε: \"{{.cmd}}\"", + "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "Το όνομα προφίλ '{{.name}}' είναι διπλότυπο με το όνομα μηχανήματος '{{.machine}}' στο προφίλ '{{.profile}}'", + "Profile name '{{.name}}' is not valid": "Το όνομα προφίλ '{{.name}}' δεν είναι έγκυρο", + "Profile name '{{.profilename}}' is not valid": "Το όνομα προφίλ '{{.profilename}}' δεν είναι έγκυρο", + "Profile name should be unique": "Το όνομα προφίλ πρέπει να είναι μοναδικό", + "Provide VM UUID to restore MAC address (hyperkit driver only)": "Παροχή UUID VM για επαναφορά διεύθυνσης MAC (μόνο πρόγραμμα οδήγησης hyperkit)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "Παρέχει οδηγίες για να κατευθύνετε το docker-cli του τερματικού σας στο Docker Engine εντός του minikube. (Χρήσιμο για τη δημιουργία images docker απευθείας εντός του minikube)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "Παρέχει οδηγίες για να κατευθύνετε το docker-cli του τερματικού σας στο Docker Engine εντός του minikube. (Χρήσιμο για τη δημιουργία images docker απευθείας εντός του minikube)\n\nΓια παράδειγμα, μπορείτε να εκτελέσετε όλες τις λειτουργίες docker όπως docker build, docker run και docker ps απευθείας στο docker εντός του minikube.\n\nΣημείωση: Πρέπει να έχετε εγκατεστημένο το docker-cli στο μηχάνημά σας.\nΟδηγίες εγκατάστασης docker-cli: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps", + "Pull images": "Λήψη images", + "Pull the remote image (no caching)": "Λήψη του απομακρυσμένου image (χωρίς αποθήκευση στην κρυφή μνήμη)", + "Pulling base image {{.kicVersion}} ...": "Λήψη βασικού image {{.kicVersion}} ...", + "Push images": "Ώθηση images", + "Push the new image (requires tag)": "Ώθηση του νέου image (απαιτεί ετικέτα)", + "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "", + "Rebuild libvirt with virt-network support": "", + "Received {{.name}} signal": "Λήφθηκε σήμα {{.name}}", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "Αναδημιουργήστε το σύμπλεγμα εκτελώντας:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}", + "Registries used by this addon. Separated by commas.": "Μητρώα που χρησιμοποιούνται από αυτό το πρόσθετο. Διαχωρίζονται με κόμματα.", + "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "Το πρόσθετο μητρώου με τον οδηγό {{.driver}} χρησιμοποιεί τη θύρα {{.port}}, χρησιμοποιήστε αυτήν αντί της προεπιλεγμένης θύρας 5000", + "Registry mirrors to pass to the Docker daemon": "Καθρέφτες μητρώου για μεταβίβαση στον δαίμονα Docker", + "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "", + "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", + "Related issue: {{.url}}": "Σχετικό ζήτημα: {{.url}}", + "Related issues:": "Σχετικά ζητήματα:", + "Remove one or more images": "Κατάργηση ενός ή περισσότερων images", + "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "", + "Removed all traces of the \"{{.name}}\" cluster.": "Καταργήθηκαν όλα τα ίχνη του συμπλέγματος \"{{.name}}\".", + "Removing {{.directory}} ...": "Κατάργηση {{.directory}} ...", + "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "Ο αιτούμενος αριθμός CPU {{.requested_cpus}} είναι μεγαλύτερος από τις διαθέσιμες CPU {{.avail_cpus}}", + "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "Ο αιτούμενος αριθμός CPU {{.requested_cpus}} είναι μικρότερος από το ελάχιστο επιτρεπόμενο {{.minimum_cpus}}", + "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "Η αιτούμενη δέσμευση μνήμης ({{.requested}}MB) είναι μικρότερη από το συνιστώμενο ελάχιστο {{.recommend}}MB. Τα deployments ενδέχεται να αποτύχουν.", + "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "Η αιτούμενη δέσμευση μνήμης {{.requested}}MB είναι μεγαλύτερη από το όριο του συστήματός σας {{.system_limit}}MB.", + "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "Η αιτούμενη δέσμευση μνήμης {{.requested}}MiB είναι μικρότερη από το χρησιμοποιήσιμο ελάχιστο των {{.minimum_memory}}MB", + "Reset Docker to factory defaults": "", + "Restart Docker": "", + "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "", + "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "Επανεκκίνηση υπάρχοντος {{.driver_name}} {{.machine_type}} για \"{{.cluster}}\" ...", + "Restarting the {{.name}} service may improve performance.": "Η επανεκκίνηση της υπηρεσίας {{.name}} ενδέχεται να βελτιώσει την απόδοση.", + "Retrieve the ssh host key of the specified node": "Ανάκτηση του κλειδιού κεντρικού υπολογιστή ssh του καθορισμένου κόμβου", + "Retrieve the ssh host key of the specified node.": "Ανάκτηση του κλειδιού κεντρικού υπολογιστή ssh του καθορισμένου κόμβου.", + "Retrieve the ssh identity key path of the specified node": "Ανάκτηση της διαδρομής κλειδιού ταυτότητας ssh του καθορισμένου κόμβου", + "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "Ανακτά τη διαδρομή κλειδιού ταυτότητας ssh του καθορισμένου κόμβου και την γράφει στο STDOUT.", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "Ανακτά τη διεύθυνση IP του τρέχοντος συμπλέγματος, την ελέγχει\n\t\t\tμε την IP στο kubeconfig και διορθώνει το kubeconfig εάν είναι λανθασμένο.", + "Retrieves the IP address of the specified node": "Ανακτά τη διεύθυνση IP του καθορισμένου κόμβου", + "Retrieves the IP address of the specified node, and writes it to STDOUT.": "Ανακτά τη διεύθυνση IP του καθορισμένου κόμβου και την γράφει στο STDOUT.", + "Returns a URL to connect to a service": "Επιστρέφει μια διεύθυνση URL για σύνδεση σε μια υπηρεσία", + "Returns logs to debug a local Kubernetes cluster": "Επιστρέφει αρχεία καταγραφής για τον εντοπισμό σφαλμάτων ενός τοπικού συμπλέγματος Kubernetes", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "Επιστρέφει τις διευθύνσεις URL του Kubernetes για υπηρεσίες στο τοπικό σας σύμπλεγμα. Σε περίπτωση πολλαπλών διευθύνσεων URL, θα εκτυπωθούν μία κάθε φορά.", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "Επιστρέφει την τιμή του PROPERTY_NAME από το αρχείο διαμόρφωσης minikube. Μπορεί να αντικατασταθεί κατά το χρόνο εκτέλεσης από σημαίες ή μεταβλητές περιβάλλοντος.", + "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", + "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", + "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "", + "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "", + "Run a kubectl binary matching the cluster version": "Εκτέλεση ενός kubectl binary που αντιστοιχεί στην έκδοση του συμπλέγματος", + "Run minikube from the C: drive.": "", + "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "Εκτελέστε τον πελάτη Kubernetes, κατεβάστε τον εάν είναι απαραίτητο. Θυμηθείτε -- μετά το kubectl!\n\nΑυτό θα εκτελέσει τον πελάτη Kubernetes (kubectl) με την ίδια έκδοση με το σύμπλεγμα\n\nΚανονικά θα κατεβάσει ένα binary που αντιστοιχεί στο λειτουργικό σύστημα και την αρχιτεκτονική του κεντρικού υπολογιστή,\nαλλά προαιρετικά μπορείτε επίσης να το εκτελέσετε απευθείας στο control plane μέσω της σύνδεσης ssh.\nΑυτό μπορεί να είναι χρήσιμο εάν δεν μπορείτε να εκτελέσετε το kubectl τοπικά για κάποιο λόγο, όπως μη υποστηριζόμενος\nκεντρικός υπολογιστής. Λάβετε υπόψη ότι όταν χρησιμοποιείτε --ssh όλες οι διαδρομές θα ισχύουν για το απομακρυσμένο μηχάνημα.", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "", + "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", + "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", + "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", + "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "", + "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Εκτέλεση σε localhost (CPUs={{.number_of_cpus}}, Μνήμη={{.memory_size}}MB, Δίσκος={{.disk_size}}MB) ...", + "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Εκτέλεση απομακρυσμένα (CPUs={{.number_of_cpus}}, Μνήμη={{.memory_size}}MB, Δίσκος={{.disk_size}}MB) ...", + "SSH key (ssh driver only)": "Κλειδί SSH (μόνο πρόγραμμα οδήγησης ssh)", + "SSH port (ssh driver only)": "Θύρα SSH (μόνο πρόγραμμα οδήγησης ssh)", + "SSH user (ssh driver only)": "Χρήστης SSH (μόνο πρόγραμμα οδήγησης ssh)", + "Save a image from minikube": "Αποθήκευση ενός image από το minikube", + "Searching the internet for Kubernetes version...": "Αναζήτηση στο διαδίκτυο για έκδοση Kubernetes...", + "Select a valid value for --dnsdomain": "", + "Send trace events. Options include: [gcp]": "Αποστολή συμβάντων ανίχνευσης. Οι επιλογές περιλαμβάνουν: [gcp]", + "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "Η υπηρεσία '{{.service}}' δεν βρέθηκε στον χώρο ονομάτων '{{.namespace}}'.\nΜπορείτε να επιλέξετε έναν άλλο χώρο ονομάτων χρησιμοποιώντας την εντολή 'minikube service {{.service}} -n \u003cnamespace\u003e'. Ή εμφανίστε όλες τις υπηρεσίες χρησιμοποιώντας την εντολή 'minikube service list'", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "Οι υπηρεσίες {{.svc_names}} έχουν τύπο \"ClusterIP\" που δεν προορίζεται για έκθεση, ωστόσο για τοπική ανάπτυξη το minikube σάς επιτρέπει την πρόσβαση σε αυτό!", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "Ορισμός στατικής IP για το σύμπλεγμα minikube, η IP πρέπει να είναι: ιδιωτική, IPv4 και το τελευταίο octet πρέπει να είναι μεταξύ 2 και 254, για παράδειγμα 192.168.200.200 (μόνο προγράμματα οδήγησης Docker και Podman)", + "Set failed": "Ο ορισμός απέτυχε", + "Set flag to delete all profiles": "Ορισμός σημαίας για διαγραφή όλων των προφίλ", + "Set flag to stop all profiles (clusters)": "Ορισμός σημαίας για διακοπή όλων των προφίλ (συμπλεγμάτων)", + "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "Ορισμός σημαίας για διακοπή συμπλέγματος μετά από ένα καθορισμένο χρονικό διάστημα (π.χ. --schedule=5m)", + "Set this flag to delete the '.minikube' folder from your user directory.": "Ορίστε αυτήν τη σημαία για να διαγράψετε τον φάκελο '.minikube' από τον κατάλογο χρήστη σας.", + "Sets an individual value in a minikube config file": "Ορίζει μια μεμονωμένη τιμή σε ένα αρχείο διαμόρφωσης minikube", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "Ορίζει την τιμή διαμόρφωσης PROPERTY_NAME σε PROPERTY_VALUE\n\tΑυτές οι τιμές μπορούν να αντικατασταθούν από σημαίες ή μεταβλητές περιβάλλοντος κατά το χρόνο εκτέλεσης.", + "Sets up podman env variables; similar to '$(podman-machine env)'.": "Ρυθμίζει τις μεταβλητές περιβάλλοντος podman. παρόμοιο με το '$(podman-machine env)'.", + "Setting profile failed": "Ο ορισμός προφίλ απέτυχε", + "Show a list of global command-line options (applies to all commands).": "Εμφάνιση λίστας καθολικών επιλογών γραμμής εντολών (ισχύει για όλες τις εντολές).", + "Show only log entries which point to known problems": "Εμφάνιση μόνο καταχωρήσεων αρχείου καταγραφής που υποδεικνύουν γνωστά προβλήματα", + "Show only the audit logs": "Εμφάνιση μόνο των αρχείων καταγραφής ελέγχου", + "Show only the last start logs.": "Εμφάνιση μόνο των τελευταίων αρχείων καταγραφής εκκίνησης.", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "Εμφάνιση μόνο των πιο πρόσφατων καταχωρήσεων ημερολογίου και συνεχής εκτύπωση νέων καταχωρήσεων καθώς προστίθενται στο ημερολόγιο.", + "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "Προσομοίωση αριθμού κόμβων numa στο minikube, το υποστηριζόμενο εύρος αριθμού κόμβων numa είναι 1-8 (μόνο πρόγραμμα οδήγησης kvm2)", + "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Παραλείφθηκε η εναλλαγή του context kubectl για το {{.profile_name}} επειδή ορίστηκε το --keep-context.", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Ορισμένες δυνατότητες του πίνακα ελέγχου απαιτούν το πρόσθετο metrics-server. Για να ενεργοποιήσετε όλες τις δυνατότητες, εκτελέστε:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n", + "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "Λυπούμαστε, το Kubernetes {{.k8sVersion}} απαιτεί την εγκατάσταση του conntrack στη διαδρομή root", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "Λυπούμαστε, το Kubernetes {{.k8sVersion}} απαιτεί την εγκατάσταση του crictl στη διαδρομή root", + "Sorry, completion support is not yet implemented for {{.name}}": "Λυπούμαστε, η υποστήριξη ολοκλήρωσης δεν έχει ακόμη υλοποιηθεί για το {{.name}}", + "Sorry, please set the --output flag to one of the following valid options: [text,json]": "Λυπούμαστε, ορίστε τη σημαία --output σε μία από τις ακόλουθες έγκυρες επιλογές: [text,json]", + "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "Λυπούμαστε, η IP που παρασχέθηκε με τη σημαία --listen-address δεν είναι έγκυρη: {{.listenAddr}}.", + "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "Λυπούμαστε, η διεύθυνση που παρασχέθηκε με τη σημαία --insecure-registry δεν είναι έγκυρη: {{.addr}}. Οι αναμενόμενες μορφές είναι: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] ή \u003cnetwork\u003e/\u003cnetmask\u003e", + "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "Λυπούμαστε, η παράμετρος kubeadm.{{.parameter_name}} δεν υποστηρίζεται προς το παρόν από το --extra-config", + "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "Λυπούμαστε, η διεύθυνση URL που παρασχέθηκε με τη σημαία --registry-mirror δεν είναι έγκυρη: {{.url}}", + "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "Λυπούμαστε, το {{.driver}} δεν επιτρέπει την αλλαγή των προσαρτήσεων μετά τη δημιουργία του κοντέινερ (προηγούμενη προσάρτηση: '{{.old}}', νέα προσάρτηση: '{{.new}})'", + "Source {{.path}} can not be empty": "Η προέλευση {{.path}} δεν μπορεί να είναι κενή", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "Η καθορισμένη έκδοση Kubernetes {{.specified}} είναι παλαιότερη από την παλαιότερη υποστηριζόμενη έκδοση: {{.oldest}}. Χρησιμοποιήστε `minikube config defaults kubernetes-version` για λεπτομέρειες.", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "Η καθορισμένη έκδοση Kubernetes {{.specified}} είναι νεότερη από την νεότερη υποστηριζόμενη έκδοση: {{.newest}}. Χρησιμοποιήστε `minikube config defaults kubernetes-version` για λεπτομέρειες.", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "Η καθορισμένη έκδοση Kubernetes {{.specified}} δεν βρέθηκε στη λίστα εκδόσεων Kubernetes", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "Η καθορισμένη Κύρια έκδοση του Kubernetes {{.specifiedMajor}} είναι νεότερη από την νεότερη υποστηριζόμενη Κύρια έκδοση: {{.newestMajor}}", + "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "Καθορίστε --kubernetes-version σε μορφή v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e. παράδειγμα: 'v1.1.14'", + "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", + "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Καθορίστε αυθαίρετες σημαίες για μεταβίβαση στον Docker daemon. (μορφή: κλειδί=τιμή)", + "Specify arbitrary flags to pass to the build. (format: key=value)": "Καθορίστε αυθαίρετες σημαίες για μεταβίβαση στο build. (μορφή: κλειδί=τιμή)", + "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "Ο καθορισμός επιπλέον δίσκων υποστηρίζεται προς το παρόν μόνο για τους ακόλουθους οδηγούς: {{.supported_drivers}}. Εάν μπορείτε να συνεισφέρετε για να προσθέσετε αυτήν τη δυνατότητα, δημιουργήστε ένα PR.", + "StartHost failed, but will try again: {{.error}}": "Η εκκίνηση του κεντρικού υπολογιστή απέτυχε, αλλά θα προσπαθήσει ξανά: {{.error}}", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "Εκκίνηση κόμβου \"{{.node}}\" {{.role}} στο σύμπλεγμα \"{{.cluster}}\"", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "Εκκίνηση minikube χωρίς Kubernetes στο σύμπλεγμα {{.cluster}}", + "Starting tunnel for service {{.service}}.": "Εκκίνηση σήραγγας για την υπηρεσία {{.service}}.", + "Starts a local Kubernetes cluster": "Εκκινεί ένα τοπικό σύμπλεγμα Kubernetes", + "Starts a node.": "Εκκινεί έναν κόμβο.", + "Starts an existing stopped node in a cluster.": "Εκκινεί έναν υπάρχοντα σταματημένο κόμβο σε ένα σύμπλεγμα.", + "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "Η εκκίνηση με τον οδηγό {{.old_driver}} απέτυχε, δοκιμή με εναλλακτικό οδηγό {{.new_driver}}: {{.error}}", + "Stopped tunnel for service {{.service}}.": "Διακόπηκε η σήραγγα για την υπηρεσία {{.service}}.", + "Stopping node \"{{.name}}\" ...": "Διακοπή κόμβου \"{{.name}}\" ...", + "Stopping tunnel for service {{.service}}.": "Διακοπή σήραγγας για την υπηρεσία {{.service}}.", + "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "Διακόπτει ένα τοπικό σύμπλεγμα Kubernetes. Αυτή η εντολή διακόπτει το υποκείμενο VM ή container, αλλά διατηρεί ανέπαφα τα δεδομένα χρήστη. Το σύμπλεγμα μπορεί να ξεκινήσει ξανά με την εντολή \"start\".", + "Stops a node in a cluster.": "Διακόπτει έναν κόμβο σε ένα σύμπλεγμα.", + "Stops a running local Kubernetes cluster": "Διακόπτει ένα τρέχον τοπικό σύμπλεγμα Kubernetes", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "Υποδίκτυο προς χρήση στο σύμπλεγμα kic. Εάν παραμείνει κενό, το minikube θα επιλέξει διεύθυνση υποδικτύου, ξεκινώντας από 192.168.49.0. (μόνο προγράμματα οδήγησης docker και podman)", + "Successfully added {{.name}} to {{.cluster}}!": "Προστέθηκε με επιτυχία το {{.name}} στο {{.cluster}}!", + "Successfully deleted all profiles": "Όλα τα προφίλ διαγράφηκαν με επιτυχία", + "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "Προσάρτηση {{.sourcePath}} στο {{.destinationPath}} με επιτυχία", + "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "Επιτυχής εκκαθάριση του καταλόγου minikube που βρίσκεται στο - [{{.minikubeDirectory}}]", + "Successfully started node {{.name}}!": "Επιτυχής εκκίνηση κόμβου {{.name}}!", + "Successfully stopped node {{.name}}": "Επιτυχής διακοπή κόμβου {{.name}}", + "Successfully unblocked bootpd process from firewall, retrying": "Επιτυχής απεμπλοκή της διαδικασίας bootpd από το τείχος προστασίας, επανάληψη προσπάθειας", + "Suggestion: {{.advice}}": "Πρόταση: {{.advice}}", + "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Το σύστημα έχει διαθέσιμα μόνο {{.size}}MiB, λιγότερα από τα απαιτούμενα {{.req}}MiB για το Kubernetes", + "Tag images": "Προσθήκη ετικετών σε images", + "Tag to apply to the new image (optional)": "Ετικέτα για εφαρμογή στο νέο image (προαιρετικό)", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "Ο προορισμός \u003cδιαδρομή απομακρυσμένου αρχείου\u003e πρέπει να είναι απόλυτη διαδρομή. Η σχετική διαδρομή δεν επιτρέπεται (παράδειγμα: \"minikube:/home/docker/copied.txt\")", + "Target directory {{.path}} must be an absolute path": "Ο κατάλογος προορισμού {{.path}} πρέπει να είναι απόλυτη διαδρομή", + "Target {{.path}} can not be empty": "Ο προορισμός {{.path}} δεν μπορεί να είναι κενός", + "Test docs have been saved at - {{.path}}": "Τα έγγραφα δοκιμών έχουν αποθηκευτεί στο - {{.path}}", + "The \"{{.driver_name}}\" driver should not be used with root privileges.": "Ο οδηγός \"{{.driver_name}}\" δεν πρέπει να χρησιμοποιείται με δικαιώματα root.", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "Ο οδηγός \"{{.driver_name}}\" δεν πρέπει να χρησιμοποιείται με δικαιώματα root. Εάν θέλετε να συνεχίσετε ως root, χρησιμοποιήστε --force.", + "The \"{{.name}}\" container runtime requires CNI": "Το περιβάλλον εκτέλεσης container \"{{.name}}\" απαιτεί CNI", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "", + "The 'none' driver is designed for experts who need to integrate with an existing VM": "Ο οδηγός 'none' είναι σχεδιασμένος για ειδικούς που χρειάζονται ενσωμάτωση με ένα υπάρχον VM", + "The '{{.addonName}}' addon is enabled": "Το πρόσθετο '{{.addonName}}' είναι ενεργό", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "Ο οδηγός '{{.driver}}' απαιτεί αυξημένα δικαιώματα. Θα εκτελεστούν οι ακόλουθες εντολές:\n\n{{ .example }}\n", + "The '{{.driver}}' provider was not found: {{.error}}": "Ο πάροχος '{{.driver}}' δεν βρέθηκε: {{.error}}", + "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Ο οδηγός '{{.name}} δεν υποστηρίζει πολλαπλά προφίλ: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "The '{{.name}}' driver does not respect the --cpus flag": "Ο οδηγός '{{.name}}' δεν σέβεται τη σημαία --cpus", + "The '{{.name}}' driver does not respect the --memory flag": "Ο οδηγός '{{.name}}' δεν σέβεται τη σημαία --memory", + "The '{{.name}}' driver does not support --cpus=no-limit": "Ο οδηγός '{{.name}}' δεν υποστηρίζει --cpus=no-limit", + "The '{{.name}}' driver does not support --memory=no-limit": "Ο οδηγός '{{.name}}' δεν υποστηρίζει --memory=no-limit", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "Η σημαία --image-repository που παρείχατε περιέχει Σχήμα: {{.scheme}}, το οποίο θα καταργηθεί αυτόματα", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "Η σημαία --image-repository που παρείχατε κατέληγε σε μια τελική / που θα μπορούσε να προκαλέσει διένεξη στο kubernetes, καταργήθηκε αυτόματα", + "The CIDR to be used for service cluster IPs.": "Το CIDR που θα χρησιμοποιηθεί για τις IP συμπλέγματος υπηρεσιών.", + "The CIDR to be used for the minikube VM (virtualbox driver only)": "Το CIDR που θα χρησιμοποιηθεί για το minikube VM (μόνο πρόγραμμα οδήγησης virtualbox)", + "The KVM QEMU connection URI. (kvm2 driver only)": "Το URI σύνδεσης KVM QEMU. (μόνο πρόγραμμα οδήγησης kvm2)", + "The KVM default network name. (kvm2 driver only)": "Το προεπιλεγμένο όνομα δικτύου KVM. (μόνο πρόγραμμα οδήγησης kvm2)", + "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "Το πρόσθετο OLM έχει σταματήσει να λειτουργεί, για περισσότερες λεπτομέρειες επισκεφθείτε: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534", + "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", + "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", + "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "Το πρόσθετο ambassador έχει σταματήσει να λειτουργεί από την έκδοση v1.23.0, για περισσότερες λεπτομέρειες επισκεφθείτε: https://github.com/datawire/ambassador-operator/issues/73", + "The apiserver listening port": "Η θύρα ακρόασης του apiserver", + "The argument to pass the minikube mount command on start.": "Το όρισμα για μεταβίβαση στην εντολή προσάρτησης minikube κατά την εκκίνηση.", + "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "Το έγκυρο όνομα κεντρικού υπολογιστή apiserver για πιστοποιητικά και συνδεσιμότητα apiserver. Αυτό μπορεί να χρησιμοποιηθεί εάν θέλετε να κάνετε τον apiserver διαθέσιμο εκτός του μηχανήματος", + "The base image to use for docker/podman drivers. Intended for local development.": "Το βασικό image προς χρήση για προγράμματα οδήγησης docker/podman. Προορίζεται για τοπική ανάπτυξη.", + "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", + "The cluster dns domain name used in the Kubernetes cluster": "Το όνομα τομέα DNS συμπλέγματος που χρησιμοποιείται στο σύμπλεγμα Kubernetes", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "Ο apiserver του κόμβου control-plane {{.name}} δεν εκτελείται (θα δοκιμαστούν άλλοι): (κατάσταση={{.state}})", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "Ο apiserver του κόμβου control-plane {{.name}} δεν εκτελείται: (κατάσταση={{.state}})", + "The control-plane node {{.name}} apiserver is paused": "Ο apiserver του κόμβου control-plane {{.name}} είναι σε παύση", + "The control-plane node {{.name}} apiserver is paused (will try others)": "Ο apiserver του κόμβου control-plane {{.name}} είναι σε παύση (θα δοκιμαστούν άλλοι)", + "The control-plane node {{.name}} host does not exist": "Ο κεντρικός υπολογιστής του κόμβου control-plane {{.name}} δεν υπάρχει", + "The control-plane node {{.name}} host does not exist (will try others)": "Ο κεντρικός υπολογιστής του κόμβου control-plane {{.name}} δεν υπάρχει (θα δοκιμαστούν άλλοι)", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "Ο κεντρικός υπολογιστής του κόμβου control-plane {{.name}} δεν εκτελείται (θα δοκιμαστούν άλλοι): κατάσταση={{.state}}", + "The control-plane node {{.name}} host is not running: state={{.state}}": "Ο κεντρικός υπολογιστής του κόμβου control-plane {{.name}} δεν εκτελείται: κατάσταση={{.state}}", + "The cri socket path to be used.": "Η διαδρομή υποδοχής cri προς χρήση.", + "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "Η εντολή docker-env δεν είναι συμβατή με συμπλέγματα πολλαπλών κόμβων. Χρησιμοποιήστε το πρόσθετο 'registry': https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Ο οδηγός '{{.driver}}' δεν υποστηρίζεται σε {{.os}}/{{.arch}}", + "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "Το υπάρχον σύμπλεγμα \"{{.name}}\" δημιουργήθηκε χρησιμοποιώντας τον οδηγό \"{{.old}}\", ο οποίος δεν είναι συμβατός με τον αιτούμενο οδηγό \"{{.new}}\".", + "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", + "The heapster addon is depreciated. please try to disable metrics-server instead": "Το πρόσθετο heapster είναι απαρχαιωμένο. δοκιμάστε να απενεργοποιήσετε αντ' αυτού τον metrics-server", + "The host does not support filesystem 9p.": "Ο κεντρικός υπολογιστής δεν υποστηρίζει σύστημα αρχείων 9p.", + "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "Το όνομα του εικονικού διακόπτη hyperv. Προεπιλογή ο πρώτος που θα βρεθεί. (μόνο πρόγραμμα οδήγησης hyperv)", + "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "Το image '{{.imageName}}' δεν αντιστοιχεί στην αρχιτεκτονική του περιβάλλοντος εκτέλεσης container, χρησιμοποιήστε αντ' αυτού ένα image πολλαπλών αρχιτεκτονικών", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "Το image '{{.imageName}}' δεν βρέθηκε. αδυναμία προσθήκης στην κρυφή μνήμη.", + "The initial time interval for each check that wait performs in seconds": "Το αρχικό χρονικό διάστημα για κάθε έλεγχο που εκτελεί η αναμονή σε δευτερόλεπτα", + "The kubeadm binary within the Docker container is not executable": "Το δυαδικό αρχείο kubeadm εντός του κοντέινερ Docker δεν είναι εκτελέσιμο", + "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "", + "The minikube VM is offline. Please run 'minikube start' to start it again.": "", + "The minikube {{.driver_name}} container exited unexpectedly.": "Το κοντέινερ minikube {{.driver_name}} τερματίστηκε απροσδόκητα.", + "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "Η ελάχιστη απαιτούμενη έκδοση για το podman είναι \"{{.minVersion}}\". η έκδοσή σας είναι \"{{.currentVersion}}\". το minikube ενδέχεται να μην λειτουργεί. χρησιμοποιήστε με δική σας ευθύνη. Για να εγκαταστήσετε την τελευταία έκδοση, ανατρέξτε στη διεύθυνση https://podman.io/getting-started/installation.html", + "The named space to activate after start": "Ο κατονομασμένος χώρος προς ενεργοποίηση μετά την εκκίνηση", + "The node to build on. Defaults to the primary control plane.": "Ο κόμβος στον οποίο θα γίνει η κατασκευή. Προεπιλογή το κύριο control-plane.", + "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "Ο κόμβος για έλεγχο κατάστασης. Προεπιλογή το επίπεδο ελέγχου. Αφήστε κενό με προεπιλεγμένη μορφή για κατάσταση σε όλους τους κόμβους.", + "The node to get IP. Defaults to the primary control plane.": "Ο κόμβος για λήψη IP. Προεπιλογή το κύριο επίπεδο ελέγχου.", + "The node to get logs from. Defaults to the primary control plane.": "Ο κόμβος από τον οποίο θα ληφθούν τα αρχεία καταγραφής. Προεπιλογή το κύριο επίπεδο ελέγχου.", + "The node to get ssh-key path. Defaults to the primary control plane.": "Ο κόμβος για λήψη διαδρομής κλειδιού ssh. Προεπιλογή το κύριο επίπεδο ελέγχου.", + "The node to ssh into. Defaults to the primary control plane.": "Ο κόμβος στον οποίο θα γίνει ssh. Προεπιλογή το κύριο επίπεδο ελέγχου.", + "The node {{.name}} has ran out of available PIDs.": "Ο κόμβος {{.name}} έχει εξαντλήσει τα διαθέσιμα PID.", + "The node {{.name}} has ran out of disk space.": "Ο κόμβος {{.name}} έχει εξαντλήσει τον χώρο στο δίσκο.", + "The node {{.name}} has ran out of memory.": "Ο κόμβος {{.name}} έχει εξαντλήσει τη μνήμη.", + "The node {{.name}} network is not available. Please verify network settings.": "Το δίκτυο του κόμβου {{.name}} δεν είναι διαθέσιμο. Επαληθεύστε τις ρυθμίσεις δικτύου.", + "The none driver is not compatible with multi-node clusters.": "Ο οδηγός none δεν είναι συμβατός με συμπλέγματα πολλαπλών κόμβων.", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Ο οδηγός none με Kubernetes v1.24+ και το περιβάλλον εκτέλεσης container docker απαιτεί cri-dockerd.\n\n\t\tΕγκαταστήστε το cri-dockerd χρησιμοποιώντας αυτές τις οδηγίες:\n\n\t\thttps://github.com/Mirantis/cri-dockerd", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Ο οδηγός none με Kubernetes v1.24+ και το περιβάλλον εκτέλεσης container docker απαιτεί dockerd.\n\n\t\tΕγκαταστήστε το dockerd χρησιμοποιώντας αυτές τις οδηγίες:\n\n\t\thttps://docs.docker.com/engine/install/", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "Ο οδηγός none με Kubernetes v1.24+ απαιτεί containernetworking-plugins.\n\n\t\tΕγκαταστήστε τα containernetworking-plugins χρησιμοποιώντας αυτές τις οδηγίες:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "Το πρόσθετο nvidia-gpu-device-plugin είναι απαρχαιωμένο και η λειτουργικότητά του συγχωνεύεται εντός του πρόσθετου nvidia-device-plugin. Θα καταργηθεί σε μελλοντική έκδοση. Χρησιμοποιήστε αντ' αυτού το πρόσθετο nvidia-device-plugin. Για περισσότερες λεπτομέρειες, επισκεφθείτε: https://github.com/kubernetes/minikube/issues/19114.", + "The output format. One of 'json', 'table'": "Η μορφή εξόδου. Ένα από 'json', 'table'", + "The path on the file system where the docs in markdown need to be saved": "Η διαδρομή στο σύστημα αρχείων όπου πρέπει να αποθηκευτούν τα έγγραφα σε markdown", + "The path on the file system where the error code docs in markdown need to be saved": "Η διαδρομή στο σύστημα αρχείων όπου πρέπει να αποθηκευτούν τα έγγραφα κωδικών σφάλματος σε markdown", + "The path on the file system where the testing docs in markdown need to be saved": "Η διαδρομή στο σύστημα αρχείων όπου πρέπει να αποθηκευτούν τα έγγραφα δοκιμών σε markdown", + "The podman service within '{{.cluster}}' is not active": "Η υπηρεσία podman εντός του '{{.cluster}}' δεν είναι ενεργή", + "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "Η εντολή podman-env δεν είναι συμβατή με συμπλέγματα πολλαπλών κόμβων. Χρησιμοποιήστε το πρόσθετο 'registry': https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "Η εντολή podman-env είναι συμβατή μόνο με το περιβάλλον εκτέλεσης \"crio\", αλλά αυτό το σύμπλεγμα διαμορφώθηκε για χρήση του περιβάλλοντος εκτέλεσης \"{{.runtime}}\".", + "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "Η αιτούμενη εκχώρηση μνήμης {{.requested}}MiB δεν αφήνει περιθώριο για υπερφόρτωση συστήματος (συνολική μνήμη συστήματος: {{.system_limit}}MiB). Ενδέχεται να αντιμετωπίσετε προβλήματα σταθερότητας.", + "The service namespace": "Ο χώρος ονομάτων υπηρεσίας", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "Η υπηρεσία/είσοδος {{.resource}} απαιτεί την έκθεση προνομιακών θυρών: {{.ports}}", + "The services namespace": "Ο χώρος ονομάτων υπηρεσιών", + "The socket_vmnet network is only supported on macOS": "Το δίκτυο socket_vmnet υποστηρίζεται μόνο σε macOS", + "The time interval for each check that wait performs in seconds": "Το χρονικό διάστημα για κάθε έλεγχο που εκτελεί η αναμονή σε δευτερόλεπτα", + "The total number of nodes to spin up. Defaults to 1.": "Ο συνολικός αριθμός κόμβων προς εκκίνηση. Προεπιλογή 1.", + "The value passed to --format is invalid": "Η τιμή που μεταβιβάστηκε στο --format δεν είναι έγκυρη", + "The value passed to --format is invalid: {{.error}}": "Η τιμή που μεταβιβάστηκε στο --format δεν είναι έγκυρη: {{.error}}", + "The vfkit driver is only supported on macOS": "Ο οδηγός vfkit υποστηρίζεται μόνο σε macOS", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "Το πρόσθετο {{.addon}} υποστηρίζεται μόνο με τον οδηγό KVM.\n\nΓια οδηγίες ρύθμισης GPU ανατρέξτε στη διεύθυνση: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "", + "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "Αυτές οι παράμετροι --extra-config δεν είναι έγκυρες: {{.invalid_extra_opts}}", + "These changes will take effect upon a minikube delete and then a minikube start": "Αυτές οι αλλαγές θα τεθούν σε ισχύ μετά από μια διαγραφή minikube και στη συνέχεια μια εκκίνηση minikube", + "Things to try without Kubernetes ...": "Πράγματα που μπορείτε να δοκιμάσετε χωρίς το Kubernetes ...", + "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "Αυτό το πρόσθετο δεν έχει ορισμένο τελικό σημείο για την εντολή 'addons open'.\nΜπορείτε να προσθέσετε ένα σχολιάζοντας μια υπηρεσία με την ετικέτα {{.labelName}}:{{.addonName}}", + "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "Αυτό μπορεί επίσης να γίνει αυτόματα ορίζοντας τη μεταβλητή περιβάλλοντος CHANGE_MINIKUBE_NONE_USER=true", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "", + "This driver does not yet work on your architecture. Maybe try --driver=none": "", + "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", + "This will keep the existing kubectl context and will create a minikube context.": "Αυτό θα διατηρήσει το υπάρχον context kubectl και θα δημιουργήσει ένα minikube context.", + "This will start the mount daemon and automatically mount files into minikube.": "Αυτό θα ξεκινήσει τον δαίμονα προσάρτησης και θα προσαρτήσει αυτόματα αρχεία στο minikube.", + "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "Συμβουλή: Για να καταργήσετε αυτό το σύμπλεγμα που ανήκει στο root, εκτελέστε: sudo {{.cmd}}", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "Για πρόσβαση στο Headlamp, χρησιμοποιήστε την ακόλουθη εντολή:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "Για πρόσβαση στο YAKD - Kubernetes Dashboard, περιμένετε να είναι έτοιμο το Pod και εκτελέστε την ακόλουθη εντολή:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n", + "To configure vment-helper to run without a password, please check the documentation:": "Για να διαμορφώσετε το vment-helper ώστε να εκτελείται χωρίς κωδικό πρόσβασης, ελέγξτε την τεκμηρίωση:", + "To connect to this cluster, use: --context={{.name}}": "Για να συνδεθείτε σε αυτό το σύμπλεγμα, χρησιμοποιήστε: --context={{.name}}", + "To connect to this cluster, use: kubectl --context={{.profile_name}}": "Για να συνδεθείτε σε αυτό το σύμπλεγμα, χρησιμοποιήστε: kubectl --context={{.profile_name}}", + "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "Για να απενεργοποιήσετε τις ειδοποιήσεις beta, εκτελέστε: 'minikube config set WantBetaUpdateNotification false'", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "Για να απενεργοποιήσετε αυτήν την ειδοποίηση, εκτελέστε: 'minikube config set WantUpdateNotification false'\n", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "Για να απενεργοποιήσετε γενικά τις ειδοποιήσεις ενημέρωσης, εκτελέστε: 'minikube config set WantUpdateNotification false'\n", + "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", + "To see addons list for other profiles use: `minikube addons -p name list`": "", + "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", + "To start a cluster, run: \"{{.command}}\"": "", + "To start minikube with Hyper-V, Powershell must be in your PATH`": "", + "To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "", + "Troubleshooting Commands:": "", + "Try 'minikube delete' to force new SSL certificates to be installed": "", + "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Trying to delete invalid profile {{.profile}}": "", + "Tunnel successfully started": "", + "Unable to bind flags": "", + "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", + "Unable to delete profile(s): {{.error}}": "", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "", + "Unable to enable dashboard": "", + "Unable to fetch latest version info": "", + "Unable to find any control-plane nodes": "", + "Unable to generate docs": "", + "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", + "Unable to get CPU info: {{.err}}": "", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "", + "Unable to get current user": "", + "Unable to get runtime": "", + "Unable to kill mount process: {{.error}}": "", + "Unable to list profiles: {{.error}}": "", + "Unable to load cached images: {{.error}}": "", + "Unable to load config: {{.error}}": "", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "", + "Unable to load control-plane node {{.name}} host: {{.err}}": "", + "Unable to load profile: {{.error}}": "", + "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "", + "Unable to parse memory '{{.memory}}': {{.error}}": "", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "", + "Unable to pick a default driver. Here is what was considered, in preference order:": "", + "Unable to push cached images: {{.error}}": "", + "Unable to remove machine directory": "", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "", + "Unable to run vmnet-helper without a password": "", + "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", + "Unable to stop VM": "", + "Unable to update {{.driver}} driver: {{.error}}": "", + "Unfortunately, could not download the base image {{.image_name}} ": "", + "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "", + "Unmounting {{.path}} ...": "", + "Unpause": "", + "Unpaused {{.count}} containers": "", + "Unpaused {{.count}} containers in: {{.namespaces}}": "", + "Unpausing node {{.name}} ... ": "", + "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "", + "Unset variables instead of setting them": "", + "Update Docker to the latest minor version, this version is unsupported": "", + "Update kubeconfig in case of an IP or port change": "", + "Update server returned an empty list": "", + "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "", + "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", + "Usage": "", + "Usage: minikube completion SHELL": "", + "Usage: minikube delete": "", + "Usage: minikube delete --all --purge": "", + "Usage: minikube node [add|start|stop|delete|list]": "", + "Usage: minikube node delete [name]": "", + "Usage: minikube node list": "", + "Usage: minikube node start [name]": "", + "Usage: minikube node stop [name]": "", + "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", + "Use 'kubectl get po -A' to find the correct and namespace name": "", + "Use -A to specify all namespaces": "", + "Use SSH connection instead of HTTPS (port 2376)": "", + "Use SSH for running kubernetes client on the node": "", + "Use VirtualBox to remove the conflicting VM and/or network interfaces": "", + "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "", + "User ID: {{.userID}}": "", + "User name '{{.username}}' is not valid": "", + "User name must be 60 chars or less.": "", + "Userspace file server is shutdown": "", + "Userspace file server: ": "", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "", + "Using Kubernetes {{.version}} since patch version was unspecified": "", + "Using image repository {{.name}}": "", + "Using image {{.registry}}{{.image}}": "", + "Using image {{.registry}}{{.image}} (global image repository)": "", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "", + "Using rootless driver was required, but the current driver does not seem rootless": "", + "Using rootless {{.driver_name}} driver": "", + "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "", + "Using the {{.driver}} driver based on existing profile": "", + "Using the {{.driver}} driver based on user configuration": "", + "Using {{.driver_name}} driver with root privileges": "", + "Valid components are: {{.valid_extra_opts}}": "", + "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", + "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", + "Verifying Kubernetes components...": "", + "Verifying dashboard health ...": "", + "Verifying proxy health ...": "", + "Verifying {{.addon_name}} addon...": "", + "Version: {{.version}}": "", + "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "", + "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "", + "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "", + "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "", + "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "", + "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "", + "Wait failed: {{.error}}": "", + "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", + "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "", + "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", + "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", + "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", + "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "", + "You can create one using 'minikube start'.\n\t\t": "", + "You can delete them using the following command(s): ": "", + "You can force an unsupported Kubernetes version via the --force flag": "", + "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "", + "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", + "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", + "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "", + "You must specify service name(s) or --all": "", + "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", + "Your cgroup does not allow setting memory.": "", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "", + "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "", + "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "", + "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", + "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "", + "Your minikube vm is not running, try minikube start.": "", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "", + "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", + "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", + "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", + "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "", + "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", + "bash completion failed": "", + "bash completion.": "", + "call with cleanup=true to remove old tunnels": "", + "cancel any existing scheduled stop requests": "", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "", + "config view failed": "", + "dashboard": "", + "dashboard service is not running: {{.error}}": "", + "delete ctx": "", + "deleting node": "", + "disable failed": "", + "dry-run mode. Validates configuration, but does not mutate system state": "", + "dry-run validation complete!": "", + "enable failed": "", + "enabled failed": "", + "error creating clientset": "", + "error creating urls": "", + "error fetching Kubernetes version list from GitHub": "", + "error getting control-plane node": "", + "error getting defaults: {{.error}}": "", + "error getting ssh port": "", + "error initializing tracing: {{.Error}}": "", + "error parsing the input ip address for mount": "", + "error provisioning guest": "", + "error starting tunnel": "", + "error: --output must be 'text', 'yaml' or 'json'": "", + "error: --output must be 'yaml' or 'json'": "", + "experimental": "", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "", + "failed to add node": "", + "failed to load profile: {{.error}}": "", + "failed to open browser: {{.error}}": "", + "failed to restart auto-pause: {{.error}}": "", + "failed to save config": "", + "failed to set extra option": "", + "failed to start node": "", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "", + "fish completion failed": "", + "fish completion.": "", + "if true, will embed the certs in kubeconfig.": "", + "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", + "initialization failed, will try again: {{.error}}": "", + "invalid kubernetes version": "", + "ip not found": "", + "json encoding failure": "", + "keep the kube-context active after cluster is stopped. Defaults to false.": "", + "kubeadm certificates have expired. Generating new ones...": "", + "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "", + "kubectl and minikube configuration will be stored in {{.home_folder}}": "", + "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "", + "kubectl proxy": "", + "libmachine failed": "", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "", + "list versions of all components included with minikube. (the cluster must be running)": "", + "loading profile": "", + "max time to wait per Kubernetes or host to be healthy.": "", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", + "minikube addons list --output OUTPUT. json, list": "", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "", + "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", + "minikube is not meant for production use. You are opening non-local traffic": "", + "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", + "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", + "minikube mount is not currently implemented with the builtin network on QEMU": "", + "minikube profile was successfully set to {{.profile_name}}": "", + "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "", + "minikube quickly sets up a local Kubernetes cluster": "", + "minikube service is not currently implemented with the builtin network on QEMU": "", + "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "", + "minikube status --output OUTPUT. json, text": "", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "", + "minikube {{.version}} is available! Download it: {{.url}}": "", + "mkcmp is used to compare performance of two minikube binaries": "", + "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", + "mount could not connect": "", + "mount failed": "", + "namespaces to pause": "", + "namespaces to unpause": "", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", + "none driver does not support multi-node clusters": "", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "numa node is only supported on k8s v1.18 and later": "", + "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", + "pause Kubernetes": "", + "powershell completion failed": "", + "powershell completion.": "", + "preload extraction failed: \"No space left on device\"": "", + "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", + "provisioning host for node": "", + "reload cached images.": "", + "reloads images previously added using the 'cache add' subcommand": "", + "retrieving node": "", + "scheduled stop is not supported on the none driver, skipping scheduling": "", + "service not available": "", + "service {{.namespace_name}}/{{.service_name}} has no node port": "", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "", + "stat failed": "", + "status json failure": "", + "status text failure": "", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "true": "", + "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", + "unable to bind flags": "", + "unable to daemonize: {{.err}}": "", + "unable to delete minikube config folder": "", + "unpause Kubernetes": "", + "unset failed": "", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "", + "unsets an individual value in a minikube config file": "", + "unsupported or missing driver: {{.name}}": "", + "update config": "", + "usage: minikube addons configure ADDON_NAME": "", + "usage: minikube addons disable ADDON_NAME": "", + "usage: minikube addons enable ADDON_NAME": "", + "usage: minikube addons images ADDON_NAME": "", + "usage: minikube addons list": "", + "usage: minikube addons open ADDON_NAME": "", + "usage: minikube config list PROPERTY_NAME": "", + "usage: minikube config unset PROPERTY_NAME": "", + "usage: minikube delete": "", + "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", + "version json failure": "", + "version yaml failure": "", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "", + "zsh completion failed": "", + "zsh completion.": "", + "{{ .name }}: Suggestion: {{ .suggestion}}": "", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "", + "{{.addon}} does not currently have an associated maintainer.": "", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "", + "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "", + "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", + "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", + "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", + "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "{{.env}}={{.value}}": "", + "{{.name}} doesn't have images.": "", + "{{.name}} has no available configuration options": "", + "{{.name}} has the following images:": "", + "{{.name}} is already running": "", + "{{.name}} was successfully configured": "", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.ociBin}} rmi {{.images}}": "", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "", + "{{.prefix}}minikube {{.version}} on {{.platform}}": "", + "{{.profile}} profile is not valid: {{.err}}": "", + "{{.type}} is not yet a supported filesystem. We will try anyways!": "", + "{{.url}} is not accessible: {{.error}}": "" +} diff --git a/translations/es.json b/translations/es.json index 4f728b24839e..7c676a663f8d 100644 --- a/translations/es.json +++ b/translations/es.json @@ -1,5 +1,8 @@ { + "\n\n": "", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "", "\"The '{{.minikube_addon}}' addon is disabled": "El complemento \"{{.minikube_addon}}\" está desactivado", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "", "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "El contexto \"{{.context}}\" ha sido actualizado para apuntar a {{.hostname}}:{{.port}}", "\"{{.machineName}}\" does not exist, nothing to stop": "\"{{.machineName}}\" no existe, nada para detener.", "\"{{.name}}\" profile does not exist": "El perfil \"{{.name}}\" no existe.", @@ -8,17 +11,29 @@ "'none' driver does not support 'minikube mount' command": "El driver 'none' no soporta el comando 'minikube mount'.", "'none' driver does not support 'minikube podman-env' command": "El controlador 'none' no soporta el comando 'minikube podman-env'.", "'none' driver does not support 'minikube ssh' command": "El controlador 'none' no soporta el comando 'minikube ssh'.", - "'none' driver does not support 'minikube ssh-host' command": "", + "'none' driver does not support 'minikube ssh-host' command": "El controlador 'none' no soporta el comando 'minikube ssh-host'", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "", "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "- Eliminando y recreando el cluster minikube\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}", "- Docs https://docs.docker.com/docker-for-mac/#resources": "Documentación https://docs.docker.com/docker-for-mac/#resources", "- Docs https://docs.docker.com/docker-for-windows/#resources": "Documentación https://docs.docker.com/docker-for-windows/#resources", "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "Garantiza que {{.driver_name}} posee suficientes recursos de CPU/Memoria", "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "- Recorta las imágenes, volumenes, redes y contenedores abandonados de {{.driver_name}}.\n\n\t\t\t\t{{.driver_name}} system prune --volumes", "- Restart your {{.driver_name}} service": "- Reinicia el servicio {{.driver_name}}", - "- {{.logPath}}": "", - "--kvm-numa-count range is 1-8": "", - "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", - "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", + "--container-runtime must be set to \"containerd\" or \"cri-o\" for rootless": "--container-runtime debe ser configurado a \"containerd\" o \"crio-o\" para no usar usuario root", + "--kvm-numa-count range is 1-8": "--kvm-numa-count el rango es 1-8", + "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "el flag --network es válido solamente con docker/podman y KVM, será ignorado", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "", + "--static-ip overrides --subnet, --subnet will be ignored": "", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "", "==\u003e Audit \u003c==": "", "==\u003e Last Start \u003c==": "", "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "Una VPN o cortafuegos está interfiriendo con el acceso HTTP a la máquina virtual de minikube. Alternativamente prueba otro controlador: https://minikube.sigs.k8s.io/docs/start/", @@ -33,14 +48,17 @@ "A set of key=value pairs that describe feature gates for alpha/experimental features.": "Un conjunto de pares clave=valor que indican si las funciones experimentales o en versión alfa deben estar o no habilitadas.", "Access the Kubernetes dashboard running within the minikube cluster": "Acceder al panel de Kubernetes que corre dentro del cluster minikube", "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", - "Add SSH identity key to SSH authentication agent": "", + "Add SSH identity key to SSH authentication agent": "Agregar llave SSH al agente de autenticacion SSH", + "Add an image into minikube as a local cache, or delete, reload the cached images": "", "Add an image to local cache.": "Agregar una imagen al caché local", - "Add host key to SSH known_hosts file": "", - "Add image to cache for all running minikube clusters": "", + "Add host key to SSH known_hosts file": "Agregar la llave del host al fichero known_hosts", + "Add image to cache for all running minikube clusters": "Agregar la imagen al cache para todos los cluster de minikube activos", "Add machine IP to NO_PROXY environment variable": "Agregar una IP de máquina a la variable de entorno NO_PROXY", "Add, delete, or push a local image into minikube": "Agrega, elimina, o empuja una imagen local dentro de minikube, haciendo (add, delete, push) respectivamente.", "Add, remove, or list additional nodes": "Usa (add, remove, list) para agregar, eliminar o listar nodos adicionales.", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", "Adding node {{.name}} to cluster {{.cluster}}": "Agregando el nodo {{.name}} al cluster {{.cluster}}.", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "", "Additional help topics": "Temas de ayuda adicionales", "Additional mount options, such as cache=fscache": "Opciones de montaje adicionales, por ejemplo cache=fscache", "Adds a node to the given cluster config, and starts it.": "Agrega un nodo a la configuración de cluster dada e iniciarlo.", @@ -49,32 +67,46 @@ "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "", "Aliases": "Aliases", "All existing scheduled stops cancelled": "", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "", "Allow user prompts for more information": "Permitir que el usuario solicite más información", - "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Repositorio de imágenes alternativo del que extraer imágenes de Docker. Puedes usarlo cuando tengas acceso limitado a gcr.io. Si quieres que minikube elija uno por ti, solo tienes que definir el valor como \"auto\". Los usuarios de China continental pueden utilizar réplicas locales de gcr.io, como registry.cn-hangzhou.aliyuncs.com/google_containers", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Repositorio de imágenes alternativo del que extraer imágenes de Docker. Puedes usarlo cuando tengas acceso limitado a gcr.io. Si quieres que minikube elija uno por ti, solo tienes que definir el valor como \"auto\". Los usuarios de China continental pueden utilizar réplicas locales de gcr.io, como registry.cn-hangzhou.aliyuncs.com/google_containers", + "Alternatively you could install one of these drivers:": "Alternativamente, puede installar uno de estos drivers:", "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Cantidad de RAM asignada a la VM de minikube (formato: \u003cnúmero\u003e[\u003cunidad\u003e], donde unidad = b, k, m o g)", "Amount of time to wait for a service in seconds": "Cantidad de tiempo para esperar por un servicio en segundos", "Amount of time to wait for service in seconds": "Cantidad de tiempo para esperar un servicio en segundos", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "", "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "Otro hipervisor, por ejemplo VirtualBox, está en conflicto con KVM. Por favor detén el otro hipervisor, o usa --driver para cambiarlo.", - "Another minikube instance is downloading dependencies... ": "", + "Another minikube instance is downloading dependencies... ": "Otra instancia de minikube esta descargando dependencias...", "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "Otro programa está usando un archivo requerido por minikube. Si estas usando Hyper-V, intenta detener la máquina virtual de minikube desde el administrador de Hyper-V", - "At least needs control plane nodes to enable addon": "", + "Another tunnel process is already running, terminate the existing instance to start a new one": "", + "At least needs control plane nodes to enable addon": "Al menos se necesita un nodo de plano de control para habilitar el addon", "Automatically selected the {{.driver}} driver": "Controlador {{.driver}} seleccionado automáticamente", "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Controlador {{.driver}} seleccionado automáticamente. Otras opciones: {{.alternates}}", + "Automatically selected the {{.network}} network": "", "Available Commands": "Comandos disponibles", "Basic Commands:": "Comandos basicos:", "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Porque estás usando controlador Docker en {{.operating_system}}, la terminal debe abrirse para ejecutarlo.", "Bind Address: {{.Address}}": "Dirección de enlace: {{.Address}}", - "Booting up control plane ...": "", + "Booting up control plane ...": "Iniciando plano de control", "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "Ambos driver={{.driver}} y vm-driver={{.vmd}} han sido establecidos.\n\n vm-driver ya es obsoleto, el por defecto de minikube será driver={{.driver}}.\n\n Si vm-driver está establecido en la configuracion global, ejecuta \"minikube config unset vm-driver\" para resolver esta advertencia.\n\t\t\t", - "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", + "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "El CNI Bridge no es compatible con clusters multi-nodo, use un CNI diferente", "Build a container image in minikube": "", "Build a container image, using the container runtime.": "", + "Build image on all nodes.": "", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "Plug-in CNI para usar. Opciones validas: auto, bridge, calico, cilium, flannel, kindnet, o ruta a un manifiesto CNI (Por defecto: auto)", "Cache image from docker daemon": "", "Cache image from remote registry": "", + "Cache image to docker daemon": "", + "Cache image to remote registry": "", "Cannot find directory {{.path}} for copy": "", "Cannot find directory {{.path}} for mount": "No se pudo encontrar el directorio {{.path}} para montar", "Cannot use both --output and --format options": "No se pueden usar ambas opciones (--output y --path)", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "", + "Certificate {{.certPath}} has expired. Generating a new one...": "", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "Comprueba si tienes pods innecesarios corriendo, con el comando 'kubectl get pods -A'", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "Comprueba la salida de 'journalctl -xeu kubelet', intenta pasar --extra-config=kubelet.cgroup-driver=systemd a minikube start", "Check that libvirt is setup properly": "Comprueba que libvirt esté configurado correctamente", @@ -89,8 +121,9 @@ "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "Configura un switch de red externo siguiendo la documentación oficial, y luego añade `--hyperv-virtual-switch=\u003cswitch-name\u003e` a `minikube start`", "Configure environment to use minikube's Docker daemon": "Configura un entorno para usar el Docker daemon de minikube", "Configure environment to use minikube's Podman service": "Configura un entorno para usar el servicio Podman de minikube", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "Configura los complementos dentro de minikube con ADDON_NAME (Por ejemplo: minikube addons configure registry-creds). Para ver los complementos disponibles usa: minikube addons list", - "Configuring RBAC rules ...": "", + "Configuring RBAC rules ...": "Configurando reglas RBAC...", "Configuring local host environment ...": "Configuranto entorno del host local ...", "Configuring {{.name}} (Container Networking Interface) ...": "Configurando CNI {{.name}} ...", "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "Confirma que su conexión a internet funciona y que su VM no se quedó sin recursos con: 'minikube logs'", @@ -100,23 +133,27 @@ "Consider increasing Docker Desktop's memory size.": "Considera incrementar la memoria asignada a Docker Desktop", "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", - "Copy the specified file into minikube": "", - "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "", + "Copy the specified file into minikube": "Copie el fichero dentro de minikube", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "", "Could not determine a Google Cloud project, which might be ok.": "No se pudo determinar un proyecto de Google Cloud que podría estar bien.", "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "No se puedo encontrar ninguna credencial de GCP. Corre `gcloud auth application-default login` o establezca la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta de su archivo de credentiales.", "Could not process error from failed deletion": "No se pudo procesar el error de la eliminación fallida", "Could not process errors from failed deletion": "No se pudieron procesar los errores de la eliminación fallida", - "Could not resolve IP address": "", + "Could not resolve IP address": "No se puede resolver la dirección IP", "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "Código de país de la réplica de imagen que quieras utilizar. Déjalo en blanco para usar el valor global. Los usuarios de China continental deben definirlo como cn.", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "", "Creating mount {{.name}} ...": "Montando {{.name}}...", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "Creando {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Creando {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "", "Current context is \"{{.context}}\"": "Contexto actual \"{{.context}}\"", "DEPRECATED, use `driver` instead.": "OBSOLETO, usa `driver` en su lugar", + "DEPRECATED: Replaced by --cni": "", "DEPRECATED: Replaced by --cni=bridge": "OBSOLETO: Reemplazalo con --cni=bridge", "Default group id used for the mount": "ID de grupo por defecto usado para el montaje", "Default user id used for the mount": "ID de usuario por defecto usado para el montaje", "Delete an image from the local cache.": "Elimina una imagen del caché local.", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "", "Deletes a local Kubernetes cluster": "Elimina un cluster de Kubernetes local", "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Elimina un clúster local de Kubernetes. Este comando borra la VM, y todos los\narchivos asociados.", "Deletes a local kubernetes cluster. This command deletes the VM, and removes all associated files.": "Elimina un clúster local de Kubernetes. Este comando borra la VM y todos los archivos asociados.", @@ -125,6 +162,8 @@ "Deleting container \"{{.name}}\" ...": "Eliminando contenedor \"{{.name}}\" ...", "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", "Deleting node {{.name}} from cluster {{.cluster}}": "Eliminando nodo {{.name}} del clúster {{.cluster}}", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "", + "Directory to output licenses to": "", "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "Permite inhabilitar la comprobación de disponibilidad de la virtualización de hardware antes de iniciar la VM (solo con el controlador de Virtualbox)", "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "Desactivar memoria dinámica in tu administrador de VM, o pasa un mayor valor --memory", "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "Desactiva un complemento con ADDON_NAME dentro de minikube (Por ejemplo minikube addons disable dashboard). Para ver los complementos disponibles usa: minikube addons list", @@ -136,6 +175,7 @@ "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "Muestra la URL de los servicios de Kubernetes en la CLI en lugar de abrirlas en el navegador por defecto", "Display values currently set in the minikube config file": "Muestra los valores actuales establecidos en el archivo de configuración de minikube", "Display values currently set in the minikube config file.": "Muestra los valores actuales establecidos en el archivo de configuración de minikube.", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "Docker Desktop tiene menos de 2 CPUs configurados, pero Kubernetes requiere al menos 2 para estar disponible", "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Docker Desktop necesita estar configurado para contenedores Linux para poder usar minikube", "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Docker Desktop tiene solo {{.size}}MiB disponibles, menos que los {{.req}}MiB requeridos por Kubernetes", @@ -149,14 +189,18 @@ "Done! kubectl is now configured to use \"{{.name}}\" by default": "¡Listo! Se ha configurado kubectl para que use \"{{.name}}\" por defecto", "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "", "Done! kubectl is now configured to use \"{{.name}}__1": "¡Listo! Se ha configurado kubectl para que use \"{{.name}}__1 \n", + "Done! minikube is ready without Kubernetes!": "", "Download complete!": "Se ha completado la descarga", "Downloading Kubernetes {{.version}} preload ...": "Descargando Kubernetes {{.version}} ...", "Downloading VM boot image ...": "Descargando la imagen de arranque de la VM", "Downloading driver {{.driver}}:": "Descargando el controlador {{.driver}}:", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "", "Due to issues with CRI-O post v1.17.3, we need to restart your cluster.": "Debido a problemas con CRI-O post v1.17.3, necesitamos reiniciar tu cluster.", "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "Debido a las limitaciones de red del controlador {{.driver_name}} en {{.os_name}}, el complemento \"{{.addon_name}}\" no está soportado.\nPara usar este complemento, puedes utilizar un controlador basado en vm\n\n\t'minikube start --vm=true'\n\nPara realizar un seguimiento de las actualizaciones de esta función consulte:\nhttps://github.com/kubernetes/minikube/issues/7332", - "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not supported. Try using a different driver.": "Debido a limitaciones de red del controlador {{.driver_name}}, el complemento \"{{.addon_name}}\" no está soportado. Intenta usar un controlador diferente.", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "ERROR creando el secreto `registry-creds-acr`", "ERROR creating `registry-creds-dpr` secret": "ERROR creando el secreto `registry-creds-dpr`", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "ERROR creando el secreto `registry-creds-ecr`: {{.error}}", @@ -165,6 +209,7 @@ "Enable addons. see `minikube addons list` for a list of valid addon names.": "Habilitar complementos. Mira `minikube addons list` para una lista de complementos válidos.", "Enable experimental NVIDIA GPU support in minikube": "Permite habilitar la compatibilidad experimental con GPUs NVIDIA en minikube", "Enable host resolver for NAT DNS requests (virtualbox driver only)": "Permite habilitar la resolución del host en las solicitudes DNS con traducción de direcciones de red (NAT) aplicada (solo con el controlador de Virtualbox)", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "", "Enable or disable a minikube addon": "Habilita o deshabilita un complemento de minikube", "Enable proxy for NAT DNS requests (virtualbox driver only)": "Permite habilitar el uso de proxies en las solicitudes de DNS con traducción de direcciones de red (NAT) aplicada (solo con el controlador de Virtualbox)", "Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\": "Permite habilitar el complemento CNI predeterminado (/etc/cni/net.d/k8s.conf). Se utiliza junto con \"--network-plugin=cni", @@ -179,8 +224,8 @@ "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "Garantiza de que los usuarios listados en /etc/libvirt/qemu.conf tienen acceso a tu carpeta home", "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "", "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "Garantiza de que tú valor para HTTPS_PROXY apunte a un proxy HTTPS en lugar de uno HTTP", - "Ensure the tmp directory path is writable to the current user.": "", - "Ensure you have at least 20GB of free disk space.": "", + "Ensure the tmp directory path is writable to the current user.": "Asegúrese que el usuario actual puede escribir en el direcotorio tmp", + "Ensure you have at least 20GB of free disk space.": "Asegúrese de tener por lo menos 20GB libres en el disco", "Ensure your {{.driver_name}} is running and is healthy.": "Garantiza que {{.driver_name}} está corriendo y está saludable.", "Environment variables to pass to the Docker daemon. (format: key=value)": "Variables de entorno que se transferirán al daemon de Docker. Formato: clave=valor", "Environment variables to pass to the build. (format: key=value)": "", @@ -195,6 +240,7 @@ "Error generating unset output": "No se a podido unsetear la salida", "Error getting cluster bootstrapper": "No se ha podido obtener el bootstrapper del clúster", "Error getting cluster config": "No se a podido obtener la configuración del clúster", + "Error getting control-plane node": "", "Error getting host": "No se ha podido obtener el host", "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "No se ha podido obtener el puerto de enlace para el controlador '{{.driver_name}}': {{.error}} ", "Error getting primary control plane": "No se ha podido obtener el control plane primario", @@ -207,70 +253,82 @@ "Error opening service": "No se ha podido abrir el servicio", "Error parsing Driver version: {{.error}}": "No se ha podido analizar la versión de Driver: {{.error}}", "Error parsing minikube version: {{.error}}": "No se ha podido analizar la versión de minikube: {{.error}}", - "Error parsing {{.name}}={{.value}}, {{.err}}": "", - "Error reading {{.path}}: {{.error}}": "", + "Error parsing {{.name}}={{.value}}, {{.err}}": "No se ha podido analizar {{.name}}={{.value}},{{.err}}", + "Error reading {{.path}}: {{.error}}": "Error leyendo {{.path}}: {{.error}}", "Error starting cluster": "No se ha podido iniciar el clúster", "Error starting mount": "No se ha podido iniciar el montaje", "Error while setting kubectl current context : {{.error}}": "Error mientras se configuraba el contexto actual de kubectl: {{.error}}", "Error while setting kubectl current context: {{.error}}": "Error mientras se configuraba el contexto actual de kubectl: {{.error}}", - "Error with ssh-add": "", + "Error with ssh-add": "Error al ejecutar ssh-add", "Error writing mount pid": "No se ha podido escribir el pid de montaje", "Error: You have selected Kubernetes v{{.new}}, but the existing cluster for your profile is running Kubernetes v{{.old}}. Non-destructive downgrades are not supported, but you can proceed by performing one of the following options:\n* Recreate the cluster using Kubernetes v{{.new}}: Run \"minikube delete {{.profile}}\", then \"minikube start {{.profile}} --kubernetes-version={{.new}}\"\n* Create a second cluster with Kubernetes v{{.new}}: Run \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\"\n* Reuse the existing cluster with Kubernetes v{{.old}} or newer: Run \"minikube start {{.profile}} --kubernetes-version={{.old}}": "Error: Has seleccionado Kubernetes {{.new}}, pero el clúster de tu perfil utiliza la versión {{.old}}. No se puede cambiar a una versión inferior sin eliminar todos los datos y recursos pertinentes, pero dispones de las siguientes opciones para continuar con la operación:\n* Volver a crear el clúster con Kubernetes {{.new}}: ejecuta \"minikube delete {{.profile}}\" y, luego, \"minikube start {{.profile}} --kubernetes-version={{.new}}\"\n* Crear un segundo clúster con Kubernetes {{.new}}: ejecuta \"minikube start -p \u003cnuevo nombre\u003e --kubernetes-version={{.new}}\"\n* Reutilizar el clúster actual con Kubernetes {{.old}} o una versión posterior: ejecuta \"minikube start {{.profile}} --kubernetes-version={{.old}}", - "Examples": "", + "Examples": "Ejemplos", "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "", - "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "", + "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "El disco existente no tiene nuevas características ({{.error}}). Para actualizar, ejecute 'minikube delete'", "Exiting": "Saliendo", - "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "", + "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "Saliendo por un error {{.fatal_code}}: {{.fatal_msg}}", "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "", "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "", "Fail check if container paused": "", + "Failed removing pid from pidfile: {{.error}}": "", "Failed runtime": "", - "Failed to build image": "", + "Failed to build image": "No se pudo construir la imagen", "Failed to cache and load images": "", "Failed to cache binaries": "", - "Failed to cache images": "", "Failed to cache images to tar": "", "Failed to cache kubectl": "", "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "No se han podido cambiar los permisos de {{.minikube_dir_path}}: {{.error}}", "Failed to check main repository and mirrors for images": "", + "Failed to configure auto-pause {{.profile}}": "", "Failed to configure metallb IP {{.profile}}": "", - "Failed to create file": "", - "Failed to create runtime": "", + "Failed to configure registry-aliases {{.profile}}": "", + "Failed to create file": "No se pudo crear el fichero", "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "", "Failed to delete cluster {{.name}}.": "", "Failed to delete cluster: {{.error}}": "No se ha podido eliminar el clúster: {{.error}}", "Failed to delete cluster: {{.error}}__1": "No se ha podido eliminar el clúster: {{.error}}", - "Failed to delete images": "", + "Failed to delete images": "No se pudo borrar las imagenes", "Failed to delete images from config": "", + "Failed to delete profile(s): {{.error}}": "", + "Failed to download licenses": "", "Failed to enable container runtime": "", "Failed to get bootstrapper": "", "Failed to get command runner": "", "Failed to get image map": "", - "Failed to get service URL: {{.error}}": "", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "", + "Failed to get temp": "", "Failed to kill mount process: {{.error}}": "No se ha podido detener el proceso de activación: {{.error}}", - "Failed to list cached images": "", - "Failed to list images": "", - "Failed to load image": "", + "Failed to list cached images": "No se pudo listar las imágenes en cache", + "Failed to list images": "No se pudieron listar las imagenes", + "Failed to load image": "No se pudo cargar la imagen", "Failed to persist images": "", - "Failed to pull image": "", + "Failed to pull image": "No se pudo enviar la imágen", + "Failed to pull images": "No se pudieron obtener imágenes", + "Failed to push images": "No se pudieron enviar las imágenes", + "Failed to read temp": "", "Failed to reload cached images": "", - "Failed to remove image": "", + "Failed to remove image": "No se pudo eliminar la imagen", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to save config {{.profile}}": "", "Failed to save dir": "", + "Failed to save image": "No se pudo guardar la imágen", "Failed to save stdin": "", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}": "No se ha podido definir la variable de entorno NO_PROXY. Utiliza export NO_PROXY=$NO_PROXY,{{.ip}}", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "", - "Failed to setup certs": "", + "Failed to setup certs": "No se pudieron configurar los certificados", "Failed to start container runtime": "", "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "", - "Failed to stop node {{.name}}": "", - "Failed to update cluster": "", - "Failed to update config": "", + "Failed to stop node {{.name}}: {{.error}}": "", + "Failed to stop ssh-agent process: {{.error}}": "", + "Failed to tag images": "", + "Failed to update cluster": "No se pudo actualizar el cluster", + "Failed to update config": "No se puedo actualizar la configuración", "Failed unmount: {{.error}}": "", - "File permissions used for the mount": "", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "", "Filter to use only VM Drivers": "", "Flags": "", "Follow": "", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "Para disfrutar de un funcionamiento óptimo, instala kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/__1": "Para disfrutar de un funcionamiento óptimo, instala kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/", "For improved {{.driver}} performance, {{.fix}}": "", @@ -280,49 +338,63 @@ "For more information, see: {{.url}}": "", "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", "Force minikube to perform possibly dangerous operations": "Permite forzar minikube para que realice operaciones potencialmente peligrosas", + "Format output. One of: short|table|json|yaml": "", "Format to print stdout in. Options include: [text,json]": "", + "Forwards all services in a namespace (defaults to \"false\")": "", "Found docker, but the docker service isn't running. Try restarting the docker service.": "", "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "", "Found network options:": "Se han encontrado las siguientes opciones de red:", - "Found {{.number}} invalid profile(s) ! ": "", + "Found {{.number}} invalid profile(s) ! ": "Se encontraron {{.number}} perfil(es) invalido(s)", + "Generate command completion for PowerShell.": "", "Generate command completion for a shell": "", "Generate command completion for bash.": "", "Generate command completion for fish .": "", "Generate command completion for zsh.": "", "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Generate unable to parse memory '{{.memory}}': {{.error}}": "", - "Generating certificates and keys ...": "", - "Get or list the current profiles (clusters)": "", + "Generating certificates and keys ...": "Generando certificados y llaves", + "Get or list the current profiles (clusters)": "Obtener o listar los perfiles actuales (clusters)", "Gets the logs of the running instance, used for debugging minikube, not user code.": "", "Gets the status of a local Kubernetes cluster": "", "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "", "Gets the value of PROPERTY_NAME from the minikube config file": "", "Global Flags": "", - "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", - "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", - "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "", "Group ID: {{.groupID}}": "", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "Permite ocultar la firma del hipervisor al invitado en minikube (solo con el controlador de kvm2)", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "", "IP Address to use to expose ports (docker and podman driver only)": "", "IP address (ssh driver only)": "", "If present, writes to the provided file instead of stdout.": "", + "If set, added node will be available as worker. Defaults to true.": "", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "", "If set, automatically updates drivers to the latest version. Defaults to true.": "", "If set, delete the current cluster if start fails and try again. Defaults to false.": "", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "", "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "", "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "", "If set, install addons. Defaults to true.": "", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "", "If set, pause all namespaces": "", "If set, unpause all namespaces": "", "If the above advice does not help, please let us know:": "", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "", "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "", "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "Si el valor es \"true\", las imágenes de Docker del programa previo actual se almacenan en caché y se cargan en la máquina. Siempre es \"false\" si se especifica --vm-driver=none.", "If true, only download and cache files for later use - don't install or start anything.": "Si el valor es \"true\", los archivos solo se descargan y almacenan en caché (no se instala ni inicia nada).", "If true, pods might get deleted and restarted on addon enable": "", + "If true, print web links to addons' documentation if using --output=list (default).": "", + "If true, returns a detailed list of profiles.": "", "If true, returns list of profiles faster by skipping validating the status of the cluster.": "", - "If true, the added node will be marked for work. Defaults to true.": "", - "If true, the node added will also be a control plane in addition to a worker.": "", "If true, will perform potentially dangerous operations. Use with discretion.": "", "If you are running minikube within a VM, consider using --driver=none:": "", "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "", @@ -332,6 +404,7 @@ "Ignoring invalid pair entry {{.pair}}": "", "Ignoring unknown custom image {{.name}}": "", "Ignoring unknown custom registry {{.name}}": "", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "", "Images Commands:": "", "Images used by this addon. Separated by commas.": "", "In order to use the fall back image, you need to log in to the github packages registry": "", @@ -339,16 +412,25 @@ "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Registros de Docker que no son seguros y que se transferirán al daemon de Docker. Se añadirá automáticamente el intervalo CIDR de servicio predeterminado.", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", + "Interval is an invalid duration: {{.error}}": "", + "Interval must be greater than 0s": "", "Invalid port": "", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "Kept for backward compatibility, value is ignored.": "", + "Kicbase images have not been deleted. To delete images run:": "", "Kill the mount process spawned by minikube start": "", - "Kubelet network plug-in to use (default: auto)": "", "Kubernetes requires at least 2 CPU's to start": "", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "", + "Kubernetes version {{.specified}} found in GitHub version list": "", + "Kubernetes version {{.specified}} found in version list": "", + "Kubernetes version {{.version}} is not supported by this release of minikube": "", "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "", "Kubernetes {{.version}} is not supported by this release of minikube": "", + "Kubernetes: Stopping ...": "", + "Kubernetes: {{.status}}": "", "Launching Kubernetes ...": "Iniciando Kubernetes...", "Launching proxy ...": "", "List all available images from the local cache.": "", @@ -365,16 +447,20 @@ "Lists all valid default values for PROPERTY_NAME": "", "Lists all valid minikube profiles and detects all possible invalid profiles.": "", "Lists the URLs for the services in your local cluster": "", - "Load a image into minikube": "", + "Load an image into minikube": "", "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "Carpetas locales que se compartirán con el invitado mediante activaciones de NFS (solo con el controlador de hyperkit)", "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "Ubicación del socket de VPNKit que se utiliza para ofrecer funciones de red. Si se deja en blanco, se inhabilita VPNKitSock de Hyperkit; si se define como \"auto\", se utiliza Docker para las conexiones de VPNKit en Mac. Con cualquier otro valor, se utiliza el VSock especificado (solo con el controlador de hyperkit)", "Location of the minikube iso": "Ubicación de la ISO de minikube", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "", "Locations to fetch the minikube ISO from.": "", "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", "Log into the minikube environment (for debugging)": "", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "", + "Manage cache for images": "", "Manage images": "", "Message Size: {{.size}}": "", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "", "Modify persistent configuration values": "", "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "", "Most users should use the newer 'docker' driver instead, which does not require root!": "", @@ -383,16 +469,22 @@ "Mounts the specified directory into minikube": "", "Mounts the specified directory into minikube.": "", "Multiple errors deleting profiles": "", + "Multiple errors encountered:": "", "Multiple minikube profiles were found - ": "", "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", "Networking and Connectivity Commands:": "", "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "", "No changes required for the \"{{.context}}\" context": "", - "No minikube profile was found. ": "", + "No control-plane nodes found.": "", + "No minikube profile was found.": "", "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "", "No such addon {{.name}}": "", + "No valid URL found for tunnel.": "", + "No valid port found for tunnel.": "", "Node {{.name}} failed to start, deleting and trying again.": "", "Node {{.name}} was successfully deleted.": "", "Node {{.nodeName}} does not exist.": "", @@ -402,52 +494,60 @@ "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", "Number of CPUs allocated to the minikube VM": "Número de CPU asignadas a la VM de minikube", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "", + "One of 'text', 'yaml' or 'json'.": "", "One of 'yaml' or 'json'.": "", "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "", "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "", "Open the addons URL with https instead of http": "", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "", + "Open the service URL with https instead of http (defaults to \"false\")": "", "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "", "Opening {{.url}} in your default browser...": "", "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", "Operations on nodes": "", "Options: {{.options}}": "", - "Output format. Accepted values: [json]": "", - "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Output format. Accepted values: [json, yaml]": "", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Outputs the licenses of dependencies to a directory": "", "Overwrite image even if same image:tag name exists": "", + "Path to socket vmnet binary (QEMU driver only)": "", "Path to the Dockerfile to use (optional)": "", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "", + "Path to the socket vmnet client binary (QEMU driver only)": "", "Pause": "", "Paused {{.count}} containers": "", "Paused {{.count}} containers in: {{.namespaces}}": "", "Pausing node {{.name}} ... ": "", - "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", + "Please also attach the following file to the GitHub issue:": "", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", "Please enter a value:": "", "Please free up disk or prune images.": "", - "Please increse Desktop's disk size.": "", + "Please increase Desktop's disk size.": "", "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", "Please provide a path or url to build": "", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "", "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", + "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "", - "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", - "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", "Please try purging minikube using `minikube delete --all --purge`": "", "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "Actualiza \"{{.driver_executable}}\". {{.documentation_url}}", - "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", "Populates the specified folder with documentation in markdown about minikube": "", "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", "Powering off \"{{.profile_name}}\" via SSH ...": "Apagando \"{{.profile_name}}\" mediante SSH...", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Preparando Kubernetes {{.k8sVersion}} en {{.runtime}} {{.runtimeVersion}}...", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "", "Print current and latest version number": "", "Print just the version number.": "", "Print the version of minikube": "", @@ -461,12 +561,17 @@ "Profile name '{{.profilename}}' is not valid": "", "Profile name should be unique": "", "Provide VM UUID to restore MAC address (hyperkit driver only)": "Permite especificar un UUID de VM para restaurar la dirección MAC (solo con el controlador de hyperkit)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "", + "Pull images": "", "Pull the remote image (no caching)": "", - "Pulling base image ...": "", + "Pulling base image {{.kicVersion}} ...": "", + "Push images": "", "Push the new image (requires tag)": "", "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "", "Rebuild libvirt with virt-network support": "", "Received {{.name}} signal": "", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "", "Registries used by this addon. Separated by commas.": "", "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "", "Registry mirrors to pass to the Docker daemon": "Réplicas del registro que se transferirán al daemon de Docker", @@ -501,7 +606,7 @@ "Retrieves the IP address of the specified node, and writes it to STDOUT.": "", "Returns a URL to connect to a service": "", "Returns logs to debug a local Kubernetes cluster": "", - "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", @@ -510,7 +615,8 @@ "Run a kubectl binary matching the cluster version": "", "Run minikube from the C: drive.": "", "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "", - "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "", "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", @@ -520,9 +626,13 @@ "SSH key (ssh driver only)": "", "SSH port (ssh driver only)": "", "SSH user (ssh driver only)": "", + "Save a image from minikube": "", + "Searching the internet for Kubernetes version...": "", "Select a valid value for --dnsdomain": "", "Send trace events. Options include: [gcp]": "", "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "", "Set failed": "", "Set flag to delete all profiles": "", "Set flag to stop all profiles (clusters)": "", @@ -530,16 +640,18 @@ "Set this flag to delete the '.minikube' folder from your user directory.": "", "Sets an individual value in a minikube config file": "", "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", - "Sets up docker env variables; similar to '$(docker-machine env)'.": "", "Sets up podman env variables; similar to '$(podman-machine env)'.": "", "Setting profile failed": "", "Show a list of global command-line options (applies to all commands).": "", "Show only log entries which point to known problems": "", + "Show only the audit logs": "", + "Show only the last start logs.": "", "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "", "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "", - "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "", "Sorry, completion support is not yet implemented for {{.name}}": "", "Sorry, please set the --output flag to one of the following valid options: [text,json]": "", "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "", @@ -548,91 +660,104 @@ "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "La URL proporcionada con la marca --registry-mirror no es válida: {{.url}}", "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "", "Source {{.path}} can not be empty": "", - "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "", "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Permite indicar marcas arbitrarias que se transferirán al daemon de Docker (el formato es \"clave=valor\").", "Specify arbitrary flags to pass to the build. (format: key=value)": "", - "Specify the 9p version that the mount should use": "", - "Specify the ip that the mount should be setup on": "", - "Specify the mount filesystem type (supported types: 9p)": "", - "Specify the port that the mount should be setup on, where 0 means any free port.": "", "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "", "StartHost failed, but will try again: {{.error}}": "", - "Starting control plane node {{.name}} in cluster {{.cluster}}": "", - "Starting node {{.name}} in cluster {{.cluster}}": "", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "", "Starting tunnel for service {{.service}}.": "", "Starts a local Kubernetes cluster": "", "Starts a local kubernetes cluster": "Inicia un clúster de Kubernetes local", "Starts a node.": "", "Starts an existing stopped node in a cluster.": "", "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "", + "Stopped tunnel for service {{.service}}.": "", "Stopping node \"{{.name}}\" ...": "", "Stopping tunnel for service {{.service}}.": "", "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "", "Stops a node in a cluster.": "", "Stops a running local Kubernetes cluster": "", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "", "Successfully added {{.name}} to {{.cluster}}!": "", "Successfully deleted all profiles": "", "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "", "Successfully started node {{.name}}!": "", "Successfully stopped node {{.name}}": "", + "Successfully unblocked bootpd process from firewall, retrying": "", "Suggestion: {{.advice}}": "", "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "Tag images": "", "Tag to apply to the new image (optional)": "", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "", "Target directory {{.path}} must be an absolute path": "", "Target {{.path}} can not be empty": "", "Test docs have been saved at - {{.path}}": "", "The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo minikube --vm-driver={{.driver_name}}": "El controlador \"{{.driver_name}}\" requiere privilegios de raíz. Ejecuta minikube mediante sudo minikube --vm-driver={{.driver_name}}", "The \"{{.driver_name}}\" driver should not be used with root privileges.": "", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "", "The \"{{.name}}\" cluster has been deleted.": "Se ha eliminado el clúster \"{{.name}}\".", "The \"{{.name}}\" cluster has been deleted.__1": "Se ha eliminado el clúster \"{{.name}}\".", + "The \"{{.name}}\" container runtime requires CNI": "", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "", "The 'none' driver is designed for experts who need to integrate with an existing VM": "", "The 'none' driver provides limited isolation and may reduce system security and reliability.": "La opción de controlador \"none\" proporciona un aislamiento limitado y puede reducir la seguridad y la fiabilidad del sistema.", "The '{{.addonName}}' addon is enabled": "", - "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "", "The '{{.driver}}' provider was not found: {{.error}}": "", "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", "The '{{.name}}' driver does not respect the --cpus flag": "", "The '{{.name}}' driver does not respect the --memory flag": "", - "The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically": "", - "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "", + "The '{{.name}}' driver does not support --cpus=no-limit": "", + "The '{{.name}}' driver does not support --memory=no-limit": "", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "", "The CIDR to be used for service cluster IPs.": "El CIDR de las IP del clúster de servicio.", "The CIDR to be used for the minikube VM (virtualbox driver only)": "El CIDR de la VM de minikube (solo con el controlador de Virtualbox)", "The KVM QEMU connection URI. (kvm2 driver only)": "El URI de la conexión de QEMU de la KVM (solo con el controlador de kvm2).", "The KVM default network name. (kvm2 driver only)": "", "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", "The KVM network name. (kvm2 driver only)": "El nombre de la red de KVM (solo con el controlador de kvm2).", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "", "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", - "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "El puerto de escucha del apiserver", "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "El nombre del apiserver del certificado de Kubernetes generado. Se puede utilizar para que sea posible acceder al apiserver desde fuera de la máquina", "The argument to pass the minikube mount command on start": "El argumento para ejecutar el comando de activación de minikube durante el inicio", - "The argument to pass the minikube mount command on start.": "", "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", "The base image to use for docker/podman drivers. Intended for local development.": "", "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", "The cluster dns domain name used in the Kubernetes cluster": "", "The cluster dns domain name used in the kubernetes cluster": "El nombre de dominio de DNS del clúster de Kubernetes", - "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "", "The container runtime to be used (docker, crio, containerd)": "El entorno de ejecución del contenedor (Docker, cri-o, containerd)", - "The control plane for \"{{.name}}\" is paused!": "", - "The control plane node \"{{.name}}\" does not exist.": "", - "The control plane node is not running (state={{.state}})": "", - "The control plane node must be running for this command": "", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is paused": "", + "The control-plane node {{.name}} apiserver is paused (will try others)": "", + "The control-plane node {{.name}} host does not exist": "", + "The control-plane node {{.name}} host does not exist (will try others)": "", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "", + "The control-plane node {{.name}} host is not running: state={{.state}}": "", "The cri socket path to be used": "La ruta del socket de cri", "The cri socket path to be used.": "", "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "El controlador \"{{.driver}}\" no se puede utilizar en {{.os}}/{{.arch}}", "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "", "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", "The heapster addon is depreciated. please try to disable metrics-server instead": "", + "The host does not support filesystem 9p.": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "El nombre del conmutador virtual de hyperv. El valor predeterminado será el primer nombre que se encuentre (solo con el controlador de hyperv).", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "", "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", @@ -643,6 +768,7 @@ "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", "The name of the network plugin": "El nombre del complemento de red", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -653,44 +779,53 @@ "The node {{.name}} has ran out of memory.": "", "The node {{.name}} network is not available. Please verify network settings.": "", "The none driver is not compatible with multi-node clusters.": "", - "The number of bytes to use for 9p packet payload": "", - "The number of nodes to spin up. Defaults to 1.": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "", "The output format. One of 'json', 'table'": "", "The path on the file system where the docs in markdown need to be saved": "", "The path on the file system where the error code docs in markdown need to be saved": "", "The path on the file system where the testing docs in markdown need to be saved": "", "The podman service within '{{.cluster}}' is not active": "", "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "", "The service namespace": "", - "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "", "The services namespace": "", + "The socket_vmnet network is only supported on macOS": "", "The time interval for each check that wait performs in seconds": "", + "The total number of nodes to spin up. Defaults to 1.": "", "The value passed to --format is invalid": "", "The value passed to --format is invalid: {{.error}}": "", + "The vfkit driver is only supported on macOS": "", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "", "The {{.driver_name}} driver should not be used with root privileges.": "El controlador {{.driver_name}} no se debe utilizar con privilegios de raíz.", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "", "There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "Hay una nueva versión de \"{{.driver_executable}}\". Te recomendamos que realices la actualización. {{.documentation_url}}", "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "", "These changes will take effect upon a minikube delete and then a minikube start": "", + "Things to try without Kubernetes ...": "", "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "El proceso se puede automatizar si se define la variable de entorno CHANGE_MINIKUBE_NONE_USER=true", - "This control plane is not running! (state={{.state}})": "", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "", "This driver does not yet work on your architecture. Maybe try --driver=none": "", "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", - "This is unusual - you may want to investigate using \"{{.command}}\"": "", "This will keep the existing kubectl context and will create a minikube context.": "Se conservará el contexto de kubectl actual y se creará uno de minikube.", "This will start the mount daemon and automatically mount files into minikube": "Se iniciará el daemon de activación y se activarán automáticamente los archivos en minikube", - "This will start the mount daemon and automatically mount files into minikube.": "", - "This {{.type}} is having trouble accessing https://{{.repository}}": "", "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "", "Tip: To remove this root owned cluster, run: sudo {{.cmd}} delete": "Para eliminar este clúster de raíz, ejecuta: sudo {{.cmd}} delete", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "", + "To configure vment-helper to run without a password, please check the documentation:": "", "To connect to this cluster, use: --context={{.name}}": "", "To connect to this cluster, use: kubectl --context={{.name}}": "Para conectarte a este clúster, usa: kubectl --context={{.name}}", "To connect to this cluster, use: kubectl --context={{.name}}__1": "Para conectarte a este clúster, usa: kubectl --context={{.name}}", "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "", - "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "", "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", "To see addons list for other profiles use: `minikube addons -p name list`": "", "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", @@ -700,38 +835,48 @@ "Troubleshooting Commands:": "", "Try 'minikube delete' to force new SSL certificates to be installed": "", "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", "Trying to delete invalid profile {{.profile}}": "", + "Tunnel successfully started": "", "Unable to bind flags": "", "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", + "Unable to delete profile(s): {{.error}}": "", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "", "Unable to enable dashboard": "", "Unable to fetch latest version info": "", - "Unable to find control plane": "", + "Unable to find any control-plane nodes": "", "Unable to generate docs": "", "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", "Unable to get CPU info: {{.err}}": "", "Unable to get bootstrapper: {{.error}}": "No se ha podido obtener el programa previo: {{.error}}", - "Unable to get command runner": "", - "Unable to get control plane status: {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "", "Unable to get current user": "", - "Unable to get forwarded endpoint": "", - "Unable to get machine status": "", "Unable to get runtime": "", "Unable to kill mount process: {{.error}}": "", "Unable to list profiles: {{.error}}": "", "Unable to load cached images from config file.": "No se han podido cargar las imágenes almacenadas en caché del archivo de configuración.", "Unable to load cached images: {{.error}}": "", "Unable to load config: {{.error}}": "No se ha podido cargar la configuración: {{.error}}", - "Unable to load host": "", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "", + "Unable to load control-plane node {{.name}} host: {{.err}}": "", "Unable to load profile: {{.error}}": "", "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "No se ha podido analizar la versión \"{{.kubernetes_version}}\": {{.error}}", - "Unable to parse default Kubernetes version from constants: {{.error}}": "", "Unable to parse memory '{{.memory}}': {{.error}}": "", - "Unable to parse oldest Kubernetes version from constants: {{.error}}": "", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "", "Unable to pick a default driver. Here is what was considered, in preference order:": "", "Unable to pull images, which may be OK: {{.error}}": "No se ha podido recuperar imágenes, que podrían estar en buen estado: {{.error}}", "Unable to push cached images: {{.error}}": "", "Unable to remove machine directory": "", - "Unable to restart cluster, will reset it: {{.error}}": "", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "", + "Unable to run vmnet-helper without a password": "", "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", "Unable to stop VM": "", "Unable to update {{.driver}} driver: {{.error}}": "", @@ -760,7 +905,7 @@ "Usage: minikube node start [name]": "", "Usage: minikube node stop [name]": "", "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", - "Use 'kubect get po -A' to find the correct and namespace name": "", + "Use 'kubectl get po -A' to find the correct and namespace name": "", "Use -A to specify all namespaces": "", "Use SSH connection instead of HTTPS (port 2376)": "", "Use SSH for running kubernetes client on the node": "", @@ -771,16 +916,22 @@ "User name must be 60 chars or less.": "", "Userspace file server is shutdown": "", "Userspace file server: ": "", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "", + "Using Kubernetes {{.version}} since patch version was unspecified": "", "Using image repository {{.name}}": "Utilizando el repositorio de imágenes {{.name}}", "Using image {{.registry}}{{.image}}": "", "Using image {{.registry}}{{.image}} (global image repository)": "", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "", + "Using rootless driver was required, but the current driver does not seem rootless": "", + "Using rootless {{.driver_name}} driver": "", "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "", "Using the {{.driver}} driver based on existing profile": "", "Using the {{.driver}} driver based on user configuration": "", + "Using {{.driver_name}} driver with root privileges": "", "VM driver is one of: %v": "El controlador de la VM es uno de los siguientes: %v", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", "Verifying Kubernetes components...": "", "Verifying dashboard health ...": "", @@ -798,43 +949,55 @@ "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "Ruta en la raíz de los recursos compartidos de NFS. Su valor predeterminado es /nfsshares (solo con el controlador de hyperkit)", "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see {{.documentation_url}} for more details": "Parece que estás usando un proxy, pero tu entorno NO_PROXY no incluye la dirección IP de minikube ({{.ip_address}}). Consulta {{.documentation_url}} para obtener más información", "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", - "You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "", + "You can create one using 'minikube start'.\n\t\t": "", "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", - "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Puede que tengas que retirar manualmente la VM \"{{.name}}\" de tu hipervisor", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", - "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "", - "You must specify a service name": "", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "", + "You must specify service name(s) or --all": "", "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", "Your cgroup does not allow setting memory.": "", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "", "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "", "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "", "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "", "Your minikube vm is not running, try minikube start.": "", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "", "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", - "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "", "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "", "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "bash completion failed": "", "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "", "config view failed": "", - "containers paused status: {{.paused}}": "", + "dashboard": "", "dashboard service is not running: {{.error}}": "", "delete ctx": "", "deleting node": "", @@ -842,46 +1005,66 @@ "dry-run mode. Validates configuration, but does not mutate system state": "", "dry-run validation complete!": "", "enable failed": "", + "enabled failed": "", "error creating clientset": "", - "error getting primary control plane": "", + "error creating urls": "", + "error fetching Kubernetes version list from GitHub": "", + "error getting control-plane node": "", + "error getting defaults: {{.error}}": "", "error getting ssh port": "", "error initializing tracing: {{.Error}}": "", "error parsing the input ip address for mount": "", "error provisioning guest": "", "error starting tunnel": "", - "error stopping tunnel": "", + "error: --output must be 'text', 'yaml' or 'json'": "", "error: --output must be 'yaml' or 'json'": "", "experimental": "", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "", "failed to add node": "", + "failed to load profile: {{.error}}": "", "failed to open browser: {{.error}}": "", + "failed to restart auto-pause: {{.error}}": "", "failed to save config": "", + "failed to set extra option": "", "failed to start node": "", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "", "fish completion failed": "", "fish completion.": "", "if true, will embed the certs in kubeconfig.": "", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", "invalid kubernetes version": "", + "ip not found": "", + "json encoding failure": "", "keep the kube-context active after cluster is stopped. Defaults to false.": "", + "kubeadm certificates have expired. Generating new ones...": "", "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "La configuración de kubectl y de minikube se almacenará en {{.home_folder}}", "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "", "kubectl proxy": "", "libmachine failed": "", - "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "", "list versions of all components included with minikube. (the cluster must be running)": "", "loading profile": "", "max time to wait per Kubernetes or host to be healthy.": "", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", "minikube addons list --output OUTPUT. json, list": "", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "", "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", "minikube is not meant for production use. You are opening non-local traffic": "", "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", + "minikube mount is not currently implemented with the builtin network on QEMU": "", "minikube profile was successfully set to {{.profile_name}}": "", "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "", "minikube quickly sets up a local Kubernetes cluster": "", + "minikube service is not currently implemented with the builtin network on QEMU": "", "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "", "minikube status --output OUTPUT. json, text": "", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "", "minikube {{.version}} is available! Download it: {{.url}}": "", "mkcmp is used to compare performance of two minikube binaries": "", "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", @@ -889,24 +1072,31 @@ "mount failed": "", "namespaces to pause": "", "namespaces to unpause": "", - "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", "none driver does not support multi-node clusters": "", - "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "numa node is only supported on k8s v1.18 and later": "", "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", "pause Kubernetes": "", - "preload extraction failed: \\\"No space left on device\\\"": "", + "powershell completion failed": "", + "powershell completion.": "", + "preload extraction failed: \"No space left on device\"": "", "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", "provisioning host for node": "", "reload cached images.": "", "reloads images previously added using the 'cache add' subcommand": "", "retrieving node": "", "scheduled stop is not supported on the none driver, skipping scheduling": "", + "service not available": "", "service {{.namespace_name}}/{{.service_name}} has no node port": "", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "", "stat failed": "", "status json failure": "", "status text failure": "", - "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "true": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", "unable to daemonize: {{.err}}": "", @@ -923,35 +1113,42 @@ "usage: minikube addons images ADDON_NAME": "", "usage: minikube addons list": "", "usage: minikube addons open ADDON_NAME": "", + "usage: minikube config list PROPERTY_NAME": "", "usage: minikube config unset PROPERTY_NAME": "", "usage: minikube delete": "", "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", - "using metrics-server addon, heapster is deprecated": "", "version json failure": "", "version yaml failure": "", - "zsh completion failed": "", - "zsh completion.": "", - "{{ .name }}: Suggestion: {{ .suggestion}}": "", - "{{ .name }}: {{ .rejection }}": "", - "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", - "{{.count}} nodes stopped.": "", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "", + "zsh completion failed": "Falló el autocompletado de zsh", + "zsh completion.": "autocompletado zsh", + "{{ .name }}: Suggestion: {{ .suggestion}}": "{{ .name }}: Sugerencia: {{ .suggestion}}", + "{{ .name }}: {{ .rejection }}": "{{ .name }}: {{ .rejection }}", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "", + "{{.addon}} does not currently have an associated maintainer.": "", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "", "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "", "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", + "{{.env}}={{.value}}": "", "{{.name}} doesn't have images.": "", - "{{.name}} has following images:": "", "{{.name}} has no available configuration options": "", + "{{.name}} has the following images:": "", "{{.name}} is already running": "", "{{.name}} was successfully configured": "", - "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "", - "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "", - "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "", - "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.ociBin}} rmi {{.images}}": "", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "", "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} en {{.platform}}", "{{.profile}} profile is not valid: {{.err}}": "", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", "{{.url}} is not accessible: {{.error}}": "" -} \ No newline at end of file +} diff --git a/translations/fr.json b/translations/fr.json index 395c2a5881a6..6f5bc83315dc 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -1,5 +1,8 @@ { + "\n\n": "", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "\"'{{.minikube_addon}}' n'est pas un module minikube valide", "\"The '{{.minikube_addon}}' addon is disabled": "Le module \"{{.minikube_addon}}\" est désactivé", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\" sera obsolète dans les prochaines versions, veuillez passer à \"minikube image load\"", "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "Le contexte \"{{.context}}\" a été mis à jour pour pointer vers {{.hostname}}:{{.port}}", "\"{{.machineName}}\" does not exist, nothing to stop": "La machine \"{{.machineName}} n'existe pas, rien a arrêter", "\"{{.name}}\" profile does not exist, trying anyways.": "Le profil \"{{.name}}\" n'existe pas, tentative de suppression quand même.", @@ -8,16 +11,34 @@ "'none' driver does not support 'minikube podman-env' command": "Le pilote 'none' ne prend pas en charge la commande 'minikube podman-env'", "'none' driver does not support 'minikube ssh' command": "Le pilote 'none' ne prend pas en charge la commande 'minikube ssh'", "'none' driver does not support 'minikube ssh-host' command": "Le pilote 'none' ne prend pas en charge la commande 'minikube ssh-host'", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" pour entrer en SSH dans le nœud de minikube.\n- \"minikube docker-env\" pour pointer votre docker-cli vers le docker à l'intérieur de minikube.\n- \"minikube image\" pour créer des images sans docker.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" pour entrer en SSH dans le nœud de minikube.\n- \"minikube image\" pour créer des images sans docker.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" pour entrer en SSH dans le nœud de minikube.\n- \"minikube podman-env\" pour pointer votre podman-cli vers le podman à l'intérieur de minikube.\n- \"minikube image\" pour créer des images sans docker.", "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "- Supprimer et recréer le cluster de minikube\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}", "- Docs https://docs.docker.com/docker-for-mac/#resources": "- Documentation https://docs.docker.com/docker-for-mac/#resources", "- Docs https://docs.docker.com/docker-for-windows/#resources": "- Docs https://docs.docker.com/docker-for-windows/#resources", "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "- Assurez-vous que votre démon {{.driver_name}} a accès à suffisamment de ressources CPU/mémoire.", - "- Prune unused {{.driver_name}} images, volumes and abandoned containers.": "- Nettoyer les images {{.driver_name}} non utilisées, les volumes et les conteneurs abandonnés.", "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "- Nettoyer les images {{.driver_name}} non utilisées, les volumes, les réseaux et les conteneurs abandonnées.\n\n\t\t\t\t{{.driver_name}} system prune --volumes", "- Restart your {{.driver_name}} service": "- Redémarrer votre service {{.driver_name}}", "- {{.logPath}}": "- {{.logPath}}", + "--container-runtime must be set to \"containerd\" or \"cri-o\" for rootless": "--container-runtime doit être défini sur \"containerd\" ou \"cri-o\" pour utilisateur normal", "--kvm-numa-count range is 1-8": "la tranche de --kvm-numa-count est 1 à 8", - "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "le drapeau --network est valide uniquement avec les pilotes docker/podman et KVM, il va être ignoré", + "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "l'indicateur --network est valide uniquement avec les pilotes docker/podman et KVM, il va être ignoré", + "--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored": "L'indicateur --network n'est valide qu'avec les pilotes docker/podman, KVM et Qemu, il sera ignoré", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "L'indicateur --network n'est valide qu'avec les pilotes docker/podman, qemu, kvm et vfkit, il sera ignoré", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "--network avec QEMU doit être 'builtin' ou 'socket_vmnet'", + "--network with QEMU must be 'user' or 'socket_vmnet'": "--network avec QEMU doit être 'user' ou 'socket_vmnet'", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "--network avec vfkit doit être 'nat' ou 'vmnet-shared'", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "--static-ip n'est implémenté que sur les pilotes Docker et Podman, l'indicateur sera ignoré", + "--static-ip overrides --subnet, --subnet will be ignored": "--static-ip remplace --subnet, --subnet sera ignoré", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete {{.profile}}\n\t\t minikube start {{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start {{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Recréez le cluster avec Kubernetes {{.new}}, en exécutant :\n\t \n\t\t minikube delete {{.profile}}\n\t\t minikube start {{.profile}} - -kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Créez un deuxième cluster avec Kubernetes {{.new}}, en exécutant :\n\t \n \t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Utilisez le cluster existant à la version Kubernetes {{.old}}, en exécutant :\n\t \n\t\t minikube start {{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t \t", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Recréez le cluster avec Kubernetes {{.new}}, en exécutant :\n\t \n\t\t minikube delete {{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Créez un deuxième cluster avec Kubernetes {{.new}}, en exécutant :\n\t \n \t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Utilisez le cluster existant à la version Kubernetes {{.old}}, en exécutant :\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t \t", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Recréez le cluster avec Kubernetes {{.new}}, en exécutant :\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Créez un deuxième cluster avec Kubernetes {{.new}}, en exécutant :\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Utilisez le cluster existant à la version Kubernetes {{.old}}, en exécutant :\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Cliquez sur l'icône de menu \"Docker for Desktop\"\n\t\t\t2. Cliquez sur \"Preferences\"\n\t\t\t3. Cliquez sur \"Ressources\"\n\t\t\t4. Augmentez la barre de défilement \"CPU\" à 2 ou plus\n\t\t\t5. Cliquez sur \"Apply \u0026 Restart\"", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Cliquez sur l'icône de menu \"Docker for Desktop\"\n\t\t\t2. Cliquez sur \"Preferences\"\n\t\t\t3. Cliquez sur \"Ressources\"\n\t\t\t4. Augmentez la barre de défilement \"Memory\" à {{.recommend}} ou plus\n\t\t\t5. Cliquez sur \"Apply \u0026 Restart\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. Ouvrez le menu \"Docker Desktop\" en cliquant sur l'icône Docker dans la barre d'état système\n\t\t2. Cliquez sur \"Settings\"\n\t\t3. Cliquez sur \"Ressources\"\n\t\t4. Augmentez la barre de défilement \"CPU\" à 2 ou plus\n\t\t5. Cliquez sur \"Apply \u0026 Restart\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. Ouvrez le menu \"Docker Desktop\" en cliquant sur l'icône Docker dans la barre d'état système\n\t\t2. Cliquez sur \"Settings\"\n\t\t3. Cliquez sur \"Ressources\"\n\t\t4. Augmentez la barre de défilement \"Memory\" à {{.recommend}} ou plus\n\t\t5. Cliquez sur \"Apply \u0026 Restart\"", + "127.0.0.1": "127.0.0.1", "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "\u003ctarget file absolute path\u003e doit être un chemin absolu. Les chemins relatifs ne sont pas autorisés (exemple: \"/home/docker/copied.txt\")", "==\u003e Audit \u003c==": "==\u003e Audit \u003c==", "==\u003e Last Start \u003c==": "==\u003e Dernier démarrage \u003c==", @@ -26,21 +47,22 @@ "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "Un pare-feu interfère avec la capacité de minikube à executer des requêtes HTTPS sortantes. Vous devriez peut-être modifier la valeur de la variable d'environnement HTTPS_PROXY.", "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "Un pare-feu empêche probablement minikube d'accéder à Internet. Vous devriez peut-être configurer minikube pour utiliser un proxy.", "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Ensemble d'adresses IP apiserver qui sont utilisées dans le certificat généré pour kubernetes. Cela peut être utilisé si vous souhaitez rendre l'apiserver disponible à l'extérieur de la machine", - "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Ensemble d'adresses IP apiserver qui sont utilisées dans le certificat généré pour kubernetes. Cela peut être utilisé si vous souhaitez rendre l'apiserver disponible à l'extérieur de la machine", "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Ensemble de noms de serveur d'API utilisés dans le certificat généré pour Kubernetes. Vous pouvez les utiliser si vous souhaitez que le serveur d'API soit disponible en dehors de la machine.", - "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Ensemble de noms de serveur d'API utilisés dans le certificat généré pour Kubernetes. Vous pouvez les utiliser si vous souhaitez que le serveur d'API soit disponible en dehors de la machine.", - "A set of key=value pairs that describe configuration that may be passed to different components.\nThe key should be '.' separated, and the first part before the dot is the component to apply the configuration to.\nValid components are: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler\nValid kubeadm parameters:": "Ensemble de paires clé = valeur qui décrivent la configuration pouvant être transmise à différents composants.\nLa clé doit être séparée par le caractère \".\", la première partie placée avant le point étant le composant auquel la configuration est appliquée.\nVoici la liste des composants valides : apiserver, controller-manager, etcd, kubeadm, kubelet, proxy et scheduler.\nParamètres valides pour le composant kubeadm :", "A set of key=value pairs that describe feature gates for alpha/experimental features.": "Ensemble de paires clé = valeur qui décrivent l'entrée de configuration pour des fonctionnalités alpha ou expérimentales.", "Access the Kubernetes dashboard running within the minikube cluster": "Accéder au tableau de bord Kubernetes exécuté dans le cluster de minikube", "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "Accéder aux ports inférieurs à 1024 peut échouer sur Windows avec les clients OpenSSH antérieurs à v8.1. Pour plus d'information, voir: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission", "Add SSH identity key to SSH authentication agent": "Ajouter la clé d'identité SSH à l'agent d'authentication SSH", + "Add an image into minikube as a local cache, or delete, reload the cached images": "Ajouter une image dans minikube en tant que cache local, ou supprimer, recharger les images en cache", "Add an image to local cache.": "Ajouter une image au cache local.", "Add host key to SSH known_hosts file": "Ajouter la clé hôte au fichier SSH known_hosts", "Add image to cache for all running minikube clusters": "Ajouter l'image au cache pour tous les cluster minikube en fonctionnement", "Add machine IP to NO_PROXY environment variable": "Ajouter l'IP de la machine à la variable d'environnement NO_PROXY", "Add, delete, or push a local image into minikube": "Ajouter, supprimer ou pousser une image locale dans minikube", "Add, remove, or list additional nodes": "Ajouter, supprimer ou lister des nœuds supplémentaires", + "Adding a control-plane node is not yet supported, setting control-plane flag to false": "L'ajout d'un nœud de plan de contrôle n'est pas encore pris en charge, définition de l'indicateur control-plane à false", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "L’ajout d’un nœud de plan de contrôle à un cluster non-HA (non-plan de contrôle multiple) n’est actuellement pas pris en charge. Veuillez d'abord supprimer le cluster et utiliser « minikube start --ha » pour en créer un nouveau.", "Adding node {{.name}} to cluster {{.cluster}}": "Ajout du nœud {{.name}} au cluster {{.cluster}}", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "Ajout du nœud {{.name}} au cluster {{.cluster}} en tant que {{.roles}}", "Additional help topics": "Rubriques d'aide supplémentaires", "Additional mount options, such as cache=fscache": "Options de montage supplémentaires, telles que cache=fscache", "Adds a node to the given cluster config, and starts it.": "Ajoute un nœud à la configuration du cluster et démarre le cluster.", @@ -49,18 +71,22 @@ "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "Après que le module est activé, veuiller exécuter \"minikube tunnel\" et vos ressources ingress seront disponibles à \"127.0.0.1\"", "Aliases": "Alias", "All existing scheduled stops cancelled": "Tous les arrêts programmés existants annulés", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "Autorisez les pods à utiliser vos GPU. Les options incluent : [all,nvidia,amd] (pilote Docker avec environnement d'exécution de conteneur Docker uniquement)", "Allow user prompts for more information": "Autoriser les utilisateurs à saisir plus d'informations", - "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Autre dépôt d'images d'où extraire des images Docker. Il peut être utilisé en cas d'accès limité à gcr.io. Définissez-le sur \\\"auto\\\" pour permettre à minikube de choisir la valeur à votre place. Pour les utilisateurs situés en Chine continentale, vous pouvez utiliser des miroirs gcr.io locaux tels que registry.cn-hangzhou.aliyuncs.com/google_containers.", - "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Quantité de mémoire RAM allouée à la VM minikube (format : \u003cnombre\u003e[\u003cunité\u003e], où \"unité\" = b, k, m ou g).", - "Amount of RAM to allocate to Kubernetes (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Quantité de mémoire RAM à allouer à Kubernetes (format: \u003cnombre\u003e[\u003cunité\u003e], où unité = b, k, m ou g).", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Autre dépôt d'images d'où extraire des images Docker. Il peut être utilisé en cas d'accès limité à gcr.io. Définissez-le sur \"auto\" pour permettre à minikube de choisir la valeur à votre place. Pour les utilisateurs situés en Chine continentale, vous pouvez utiliser des miroirs gcr.io locaux tels que registry.cn-hangzhou.aliyuncs.com/google_containers.", + "Alternatively you could install one of these drivers:": "Vous pouvez également installer l'un de ces pilotes :", "Amount of time to wait for a service in seconds": "Temps d'attente pour un service en secondes", "Amount of time to wait for service in seconds": "Temps d'attente pour un service en secondes", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "Un fichier de configuration facultatif pour lire les configurations spécifiques aux modules complémentaires au lieu d'être invité à chaque fois.", "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "Un autre hyperviseur, tel que VirtualBox, est en conflit avec KVM. Veuillez arrêter l'autre hyperviseur ou utiliser --driver pour y basculer.", "Another minikube instance is downloading dependencies... ": "Une autre instance minikube télécharge des dépendances", "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "Un autre programme utilise un fichier requis par minikube. Si vous utilisez Hyper-V, essayez d'arrêter la machine virtuelle minikube à partir du gestionnaire Hyper-V", + "Another tunnel process is already running, terminate the existing instance to start a new one": "Un autre processus de tunnel est déjà en cours d'exécution, mettez fin à l'instance existante pour en démarrer une nouvelle", "At least needs control plane nodes to enable addon": "Nécessite au moins des nœuds de plan de contrôle pour activer le module", + "Auto-pause is already enabled.": "La pause automatique est déjà activée.", "Automatically selected the {{.driver}} driver": "Choix automatique du pilote {{.driver}}", "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Choix automatique du pilote {{.driver}}. Autres choix: {{.alternates}}", + "Automatically selected the {{.network}} network": "Sélection automatique du réseau {{.network}}", "Available Commands": "Commandes disponibles", "Basic Commands:": "Commandes basiques :", "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Comme vous utilisez un pilote Docker sur {{.operating_system}}, le terminal doit être ouvert pour l'exécuter.", @@ -70,12 +96,21 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "Le pont CNI est incompatible avec les clusters multi-nœuds, utilisez un autre CNI", "Build a container image in minikube": "Construire une image de conteneur dans minikube", "Build a container image, using the container runtime.": "Construire une image de conteneur à l'aide de l'environnement d'exécution du conteneur.", + "Build image on all nodes.": "Construire une image sur tous les nœuds.", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "L'allocation CGroup n'est pas disponible dans votre environnement, vous exécutez peut-être minikube dans un conteneur imbriqué. Essayez d'exécuter :\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "L'allocation CGroup n'est pas disponible dans votre environnement, vous exécutez peut-être minikube dans un conteneur imbriqué. Essayez d'exécuter :\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "Plug-in CNI à utiliser. Options valides : auto, bridge, calico, cilium, flannel, kindnet ou chemin vers un manifeste CNI (par défaut : auto)", "Cache image from docker daemon": "Cacher l'image du démon docker", "Cache image from remote registry": "Cacher l'image du registre distant", + "Cache image to docker daemon": "Cacher l'image dans le démon docker", + "Cache image to remote registry": "Cacher l'image dans le registre distant", "Cannot find directory {{.path}} for copy": "Impossible de trouver le répertoire {{.path}} pour la copie", "Cannot find directory {{.path}} for mount": "Impossible de trouver le répertoire {{.path}} pour le montage", "Cannot use both --output and --format options": "Impossible d'utiliser à la fois les options --output et --format", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "Impossible d'utiliser l'option --no-kubernetes sur le pilote {{.name}}", + "Certificate {{.certPath}} has expired. Generating a new one...": "Le certificat {{.certPath}} a expiré. Génération d'un nouveau...", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "La modification du port du serveur API d'un cluster minikube HA (plan multi-contrôle) existant n'est actuellement pas prise en charge. Veuillez d'abord supprimer le cluster.", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "La modification du mode HA (plan multi-contrôle) d'un cluster minikube existant n'est actuellement pas prise en charge. Veuillez d'abord supprimer le cluster et utiliser « minikube start --ha » pour en créer un nouveau.", "Check if you have unnecessary pods running by running 'kubectl get po -A": "Vérifiez si vous avez des pods inutiles en cours d'exécution en exécutant 'kubectl get po -A'", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "Vérifiez la sortie de 'journalctl -xeu kubelet', essayez de passer --extra-config=kubelet.cgroup-driver=systemd au démarrage de minikube", "Check that libvirt is setup properly": "Vérifiez que libvirt est correctement configuré", @@ -90,9 +125,10 @@ "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "Configurez un commutateur réseau externe en suivant la documentation officielle, puis ajoutez `--hyperv-virtual-switch=\u003cswitch-name\u003e` à `minikube start`", "Configure environment to use minikube's Docker daemon": "Configurer l'environnement pour utiliser le démon Docker de minikube", "Configure environment to use minikube's Podman service": "Configurer l'environnement pour utiliser le service Podman de minikube", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "Configurez vmnet-helper pour qu'il s'exécute sans mot de passe.\n\n\t\tVeuillez installer une règle sudoers vmnet-helper en suivant ces instructions :\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\n\t\thttps://github.com/nirs/vmnet-helper#granting-permission-to-run-vmnet-helper": "Configurez vmnet-helper pour qu'il s'exécute sans mot de passe.\n\n\t\tVeuillez installer une règle sudoers vmnet-helper en suivant ces instructions :\n\n\t\thttps://github.com/nirs/vmnet-helper#granting-permission-to-run-vmnet-helper", "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "Configure le module w/ADDON_NAME dans minikube (exemple : minikube addons configure registry-creds). Pour une liste des modules disponibles, utilisez : minikube addons list", "Configuring RBAC rules ...": "Configuration des règles RBAC ...", - "Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "Configuration de l'environment pour Kubernetes {{.k8sVersion}} sur {{.runtime}} {{.runtimeVersion}}", "Configuring local host environment ...": "Configuration de l'environnement de l'hôte local...", "Configuring {{.name}} (Container Networking Interface) ...": "Configuration de {{.name}} (Container Networking Interface)...", "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "Confirmez que vous disposez d'une connexion Internet fonctionnelle et que votre VM n'est pas à court de ressources en utilisant : 'minikube logs'", @@ -100,9 +136,11 @@ "Connect to LoadBalancer services": "Se connecter aux services LoadBalancer", "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "Envisagez de créer un cluster avec une plus grande taille de mémoire en utilisant `minikube start --memory SIZE_MB`", "Consider increasing Docker Desktop's memory size.": "Envisagez d'augmenter la taille de la mémoire de Docker Desktop.", + "Container runtime must be set to \\\"containerd\\\" for rootless": "L'environnement d'exécution du conteneur doit être défini sur \\\"containerd\\\" pour utilisateur normal", "Continuously listing/getting the status with optional interval duration.": "Répertorier/obtenir le statut en continu avec une durée d'intervalle facultative.", "Control Plane could not update, try minikube delete --all --purge": "Le plan de contrôle n'a pas pu mettre à jour, essayez minikube delete --all --purge", "Copy the specified file into minikube": "Copiez le fichier spécifié dans minikube", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "Copiez le fichier spécifié dans minikube, il sera enregistré dans le chemin \u003cchemin absolu du fichier cible\u003e dans votre minikube.\nPlan de contrôle du nœud cible par défaut et si \u003cnom du nœud source\u003e est omis, il essaiera de copier à partir de l'hôte.\n \nExemple de commande : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"", "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "Copiez le fichier spécifié dans minikube, il sera enregistré au chemin \u003ctarget file absolute path\u003e dans votre minikube.\\nExemple de commande : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n", "Could not determine a Google Cloud project, which might be ok.": "Impossible de déterminer un projet Google Cloud, ce qui peut convenir.", "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "Impossible de trouver les identifiants GCP. Exécutez `gcloud auth application-default login` ou définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS vers le chemin de votre fichier d'informations d'identification.", @@ -110,34 +148,40 @@ "Could not process errors from failed deletion": "Impossible de traiter les erreurs dues à l'échec de la suppression", "Could not resolve IP address": "Impossible de résoudre l'adresse IP", "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "Code pays du miroir d'images à utiliser. Laissez ce paramètre vide pour utiliser le miroir international. Pour les utilisateurs situés en Chine continentale, définissez sa valeur sur \"cn\".", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "Créez un cluster de plans multi-contrôles hautement disponible avec un minimum de trois nœuds de plan de contrôle qui seront également marqués pour le travail.", "Creating mount {{.name}} ...": "Création de l'installation {{.name}}…", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "Création de {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}Mo) ...", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Création de {{.machine_type}} {{.driver_name}} (CPUs={{.number_of_cpus}}, Mémoire={{.memory_size}}MB, Disque={{.disk_size}}MB)...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "Création de {{.driver_name}} {{.machine_type}} (CPU={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}Mo{{end}}) ...", "Current context is \"{{.context}}\"": "Le contexte courant est \"{{.context}}\"", "DEPRECATED, use `driver` instead.": "DÉPRÉCIÉ, utilisez plutôt `driver`.", + "DEPRECATED: Replaced by --cni": "Déprécié: remplacé par --cni", "DEPRECATED: Replaced by --cni=bridge": "DÉPRÉCIÉ : remplacé par --cni=bridge", "Default group id used for the mount": "ID de groupe par défaut utilisé pour le montage", "Default user id used for the mount": "ID utilisateur par défaut utilisé pour le montage", "Delete an image from the local cache.": "Supprimez une image du cache local.", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "Supprimez le cluster '{{.name}}' existant à l'aide de : '{{.delcommand}}', ou démarrez le cluster '{{.name}}' existant à l'aide de : '{{.command}} --driver={{.old}}'", "Deletes a local Kubernetes cluster": "Supprime un cluster Kubernetes local", "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Supprime le cluster Kubernetes local. Cette commande supprime la VM ainsi que tous les fichiers associés.", - "Deletes a local kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Supprime le cluster Kubernetes local. Cette commande supprime la VM ainsi que tous les fichiers associés.", "Deletes a node from a cluster.": "Supprime un nœud d'un cluster.", "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "Suppression de \"{{.profile_name}}\" dans {{.driver_name}}...", "Deleting container \"{{.name}}\" ...": "Suppression du conteneur \"{{.name}}\" ...", "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "Suppression du cluster existant {{.name}} avec un pilote différent {{.driver_name}} en raison de l'indicateur --delete-on-failure défini par l'utilisateur.", "Deleting node {{.name}} from cluster {{.cluster}}": "Suppression de noeuds {{.name}} de cluster {{.cluster}}", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "Répertoire à monter dans l'invité en utilisant le format '/host-path:/guest-path'.", + "Directory to output licenses to": "Répertoire de sortie des licences", "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "Désactive la vérification de la disponibilité de la virtualisation du matériel avant le démarrage de la VM (pilote virtualbox uniquement).", "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "Désactivez la mémoire dynamique dans votre gestionnaire de machine virtuelle ou transmettez une valeur --memory plus grande", "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "Désactive le module w/ADDON_NAME dans minikube (exemple : minikube addons disable dashboard). Pour une liste des addons disponibles, utilisez : minikube addons list", "Disables the filesystem mounts provided by the hypervisors": "Désactive les installations de systèmes de fichiers fournies par les hyperviseurs.", - "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Taille de disque allouée à la VM minikube (format : \u003cnombre\u003e[\u003cunité\u003e], où \"unité\" = b, k, m ou g)", "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Taille du disque alloué à la VM minikube (format : \u003cnombre\u003e[\u003cunité\u003e], où unité = b, k, m ou g).", "Display dashboard URL instead of opening a browser": "Afficher l'URL du tableau de bord au lieu d'ouvrir un navigateur", "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "Afficher l'URL des modules Kubernetes dans la CLI au lieu de l'ouvrir dans le navigateur par défaut", "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "Afficher l'URL du service Kubernetes dans la CLI au lieu de l'ouvrir dans le navigateur par défaut", "Display values currently set in the minikube config file": "Afficher les valeurs actuellement définies dans le fichier de configuration minikube", "Display values currently set in the minikube config file.": "Afficher les valeurs actuellement définies dans le fichier de configuration minikube", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "Afficher les valeurs actuellement définies dans le fichier de configuration minikube.\n\tLe format de sortie peut être personnalisé à l'aide de l'option --format, qui accepte un modèle Go.\n\tLe fichier de configuration se trouve généralement à l'emplacement \"~/.minikube/config/config.json\".", + "Display values currently set in the minikube config file. \n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "Affiche les valeurs actuellement définies dans le fichier de configuration minikube. \n\tLe format de sortie peut être personnalisé à l'aide de l'indicateur --format, qui accepte un modèle Go. \n\tLe fichier de configuration se trouve généralement dans \"~/.minikube/config/config.json\".", "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "Docker Desktop a moins de 2 processeurs configurés, mais Kubernetes nécessite au moins 2 pour être disponible", "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Docker Desktop est configuré pour les conteneurs Windows, mais les conteneurs Linux sont requis pour minikube", "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Docker Desktop n'a que {{.size}} Mio disponibles, moins que les {{.req}} Mio requis pour Kubernetes", @@ -147,14 +191,19 @@ "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "Docker à l'intérieur de la VM n'est pas disponible. Essayez d'exécuter « minikube delete » pour réinitialiser la machine virtuelle.", "Docs have been saved at - {{.path}}": "Les documents ont été enregistrés à - {{.path}}", "Documentation: {{.url}}": "Documentation: {{.url}}", - "Done! kubectl is now configured to use \"{{.name}}\"": "Terminé ! kubectl est maintenant configuré pour utiliser \"{{.name}}\".", "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "Terminé ! kubectl est maintenant configuré pour utiliser \"{{.name}}\" cluster et espace de noms \"{{.ns}}\" par défaut.", + "Done! minikube is ready without Kubernetes!": "Terminé! minikube est prêt sans Kubernetes !", "Download complete!": "Téléchargement terminé !", "Downloading Kubernetes {{.version}} preload ...": "Téléchargement du préchargement de Kubernetes {{.version}}...", "Downloading VM boot image ...": "Téléchargement de l'image de démarrage de la VM...", "Downloading driver {{.driver}}:": "Téléchargement du pilote {{.driver}} :", - "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "En raison des limitations réseau du pilote {{.driver_name}} sur {{.os_name}}, le module {{.addon_name}} n'est pas pris en charge.\nAlternativement, pour utiliser ce module, vous pouvez utiliser un pilote basé sur vm :\n\n \t'minikube start --vm=true'\n\nPour suivre la mise à jour de cette fonctionnalité en cours de travail, veuillez vérifier :\nhttps://github.com/kubernetes/minikube/issues/7332", - "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "En raison des limitations réseau du pilote {{.driver_name}}, le module {{.addon_name}} n'est pas entièrement pris en charge. Essayez d'utiliser un autre pilote.", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "En raison de problèmes DNS, votre cluster peut avoir des problèmes de démarrage et vous ne pourrez peut-être pas extraire d'images\nPlus de détails disponibles sur : https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "En raison de modifications apportées à macOS 13+, Minikube ne prend actuellement pas en charge VirtualBox. Vous pouvez utiliser d'autres pilotes tels que « vfkit », « qemu » ou « docker ».\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n Pour plus d'informations sur ce problème, consultez : https://github.com/kubernetes/minikube/issues/15274\n", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as docker or {{.driver}}.\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}/\n\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "En raison de changements dans macOS 13+, minikube ne prend actuellement pas en charge VirtualBox. Vous pouvez utiliser des pilotes alternatifs tels que docker ou {{.driver}}.\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/ docs/drivers/{{.driver}}/\n\n Pour plus de détails sur le problème, voir : https://github.com/kubernetes/minikube/issues/15274\n", + "Due to security improvements to minikube the VMware driver is currently not supported. Available workarounds are to use a different driver or downgrade minikube to v1.29.0.\n\n We are accepting community contributions to fix this, for more details on the issue see: https://github.com/kubernetes/minikube/issues/16221\n": "En raison des améliorations de sécurité apportées à minikube, le pilote VMware n'est actuellement pas pris en charge. Les solutions de contournement disponibles consistent à utiliser un pilote différent ou à rétrograder minikube vers la v1.29.0.\n\n Nous acceptons les contributions de la communauté pour résoudre ce problème, pour plus de détails sur le problème, consultez : https://github.com/kubernetes/minikube/issues /16221\n", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "Durée d'inactivité avant la mise en pause de la VM minikube (par défaut 1 m0s)", + "Duration of inactivity before the minikube VM is paused (default 1m0s). To disable, set to 0s": "Durée d'inactivité avant la mise en pause de la VM minikube (par défaut 1m0s). Pour désactiver, réglez sur 0s", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "Durée jusqu'à l'expiration du certificat minikube, par défaut à trois ans (26280h).", "ERROR creating `registry-creds-acr` secret": "ERREUR lors de la création du secret `registry-creds-acr`", "ERROR creating `registry-creds-dpr` secret": "ERREUR lors de la création du secret `registry-creds-dpr`", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "ERREUR lors de la création du secret `registry-creds-ecr` : {{.error}}", @@ -163,13 +212,12 @@ "Enable addons. see `minikube addons list` for a list of valid addon names.": "Activer les modules. Voir `minikube addons list` pour une liste de noms de modules valides.", "Enable experimental NVIDIA GPU support in minikube": "Active l'assistance expérimentale du GPU NVIDIA dans minikube.", "Enable host resolver for NAT DNS requests (virtualbox driver only)": "Active le résolveur d'hôte pour les requêtes DNS NAT (pilote VirtualBox uniquement).", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "Activez un ou plusieurs modules complémentaires, séparés par des virgules. Voir `minikube addons list` pour obtenir la liste des noms de modules complémentaires valides.", "Enable or disable a minikube addon": "Activer ou désactiver un module minikube", "Enable proxy for NAT DNS requests (virtualbox driver only)": "Active le proxy pour les requêtes DNS NAT (pilote VirtualBox uniquement).", - "Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\": "Active le plug-in CNI par défaut (/etc/cni/net.d/k8s.conf). Utilisé en association avec \\\"--network-plugin=cni\\\".", "Enabled addons: {{.addons}}": "Modules activés: {{.addons}}", "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "Active le module w/ADDON_NAME dans minikube. Pour une liste des modules disponibles, utilisez : minikube addons list", "Enabling '{{.name}}' returned an error: {{.error}}": "L'activation de '{{.name}}' a renvoyé une erreur : {{.error}}", - "Enabling addons: {{.addons}}": "Installation des modules: {{.addons}}", "Enabling dashboard ...": "Activation du tableau de bord...", "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "Assurez-vous que CRI-O est installé et en fonctionnement : exécutez 'sudo systemctl start crio' et 'journalctl -u crio'. Sinon, utilisez --container-runtime=docker", "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "Assurez-vous que Docker est installé et en fonctionnement : exécutez 'sudo systemctl start docker' et 'journalctl -u docker'. Sinon, sélectionnez une autre valeur pour --driver", @@ -182,7 +230,6 @@ "Ensure your {{.driver_name}} is running and is healthy.": "Assurez-vous que votre {{.driver_name}} est en cours d'exécution et en fonctionnement.", "Environment variables to pass to the Docker daemon. (format: key=value)": "Variables d'environment à transmettre au daemon Docker (format : clé = valeur).", "Environment variables to pass to the build. (format: key=value)": "Variables d'environnement à transmettre au build. (format : clé=valeur)", - "Error checking driver version: {{.error}}": "Erreur lors de la vérification de la version du driver : {{.error}}", "Error code docs have been saved at - {{.path}}": "Les documents de code d'erreur ont été enregistrés à - {{.path}}", "Error creating minikube directory": "Erreur lors de la création du répertoire minikube", "Error creating view template": "Erreur lors de la création du modèle de vue", @@ -193,6 +240,7 @@ "Error generating unset output": "Erreur lors de la génération unset output", "Error getting cluster bootstrapper": "Erreur lors de l'obtention du programme d'amorçage du cluster", "Error getting cluster config": "Erreur lors de l'obtention de la configuration du cluster", + "Error getting control-plane node": "Erreur lors de l'obtention du nœud du plan de contrôle", "Error getting host": "Erreur lors de l'obtention de l'hôte", "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "Erreur lors de l'obtention de la liaison de port pour le pilote '{{.driver_name}} : {{.error}}", "Error getting primary control plane": "Erreur lors de l'obtention du plan de contrôle principal", @@ -201,9 +249,7 @@ "Error getting the host IP address to use from within the VM": "Erreur lors de l'obtention de l'adresse IP de l'hôte à utiliser depuis la VM", "Error killing mount process": "Erreur lors de la suppression du processus de montage", "Error loading profile config: {{.error}}": "Erreur lors du chargement de la configuration du profil : {{.error}}", - "Error loading profile {{.name}}: {{.error}}": "Erreur lors du chargement du profil {{.name}} : {{.error}}", "Error opening service": "Erreur d'ouverture du service", - "Error parsing Driver version: {{.error}}": "Erreur lors de l'analyse de la version du pilote de la VM : {{.error}}", "Error parsing minikube version: {{.error}}": "Erreur lors de l'analyse de la version de minikube : {{.error}}", "Error parsing {{.name}}={{.value}}, {{.err}}": "Erreur lors de l'analyse de {{.name}}={{.value}}, {{.err}}", "Error reading {{.path}}: {{.error}}": "Erreur de lecture {{.path}} : {{.error}}", @@ -213,15 +259,14 @@ "Error while setting kubectl current context: {{.error}}": "Erreur lors de la définition du contexte actuel de kubectl : {{.error}}", "Error with ssh-add": "Erreur avec ssh-add", "Error writing mount pid": "Erreur lors de l'écriture du pid de montage", - "Error: You have selected Kubernetes v{{.new}}, but the existing cluster for your profile is running Kubernetes v{{.old}}. Non-destructive downgrades are not supported, but you can proceed by performing one of the following options:\n* Recreate the cluster using Kubernetes v{{.new}}: Run \"minikube delete {{.profile}}\", then \"minikube start {{.profile}} --kubernetes-version={{.new}}\"\n* Create a second cluster with Kubernetes v{{.new}}: Run \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\"\n* Reuse the existing cluster with Kubernetes v{{.old}} or newer: Run \"minikube start {{.profile}} --kubernetes-version={{.old}}": "Erreur : Vous avez sélectionné Kubernetes v{{.new}}, mais le cluster existent pour votre profil exécute Kubernetes v{{.old}}. Les rétrogradations non-destructives ne sont pas compatibles. Toutefois, vous pouvez poursuivre le processus en réalisant l'une des trois actions suivantes :\n* Créer à nouveau le cluster en utilisant Kubernetes v{{.new}} – exécutez \"minikube delete {{.profile}}\", puis \"minikube start {{.profile}} --kubernetes-version={{.new}}\".\n* Créer un second cluster avec Kubernetes v{{.new}} – exécutez \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\".\n* Réutiliser le cluster existent avec Kubernetes v{{.old}} ou version ultérieure – exécutez \"minikube start {{.profile}} --kubernetes-version={{.old}}\".", "Examples": "Exemples", "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "L'exécution de \"{{.command}}\" a pris un temps inhabituellement long : {{.duration}}", "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "Il manque de nouvelles fonctionnalités sur le disque existant ({{.error}}). Pour mettre à niveau, exécutez 'minikube delete'", - "Exiting": "Fermeture…", "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "Fermeture en raison de {{.fatal_code}} : {{.fatal_msg}}", "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "Port exposé du tableau de bord proxyfié. Réglez sur 0 pour choisir un port aléatoire.", "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "L'adaptateur externe sur lequel un commutateur externe sera créé si aucun commutateur externe n'est trouvé. (pilote hyperv uniquement)", "Fail check if container paused": "Échec de la vérification si le conteneur est en pause", + "Failed removing pid from pidfile: {{.error}}": "Échec de la suppression du pid du fichier pid : {{.error}}", "Failed runtime": "Échec de l'exécution", "Failed to build image": "Échec de la création de l'image", "Failed to cache and load images": "Échec de la mise en cache et du chargement des images", @@ -231,59 +276,74 @@ "Failed to cache kubectl": "Échec de la mise en cache de kubectl", "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Échec de la modification des autorisations pour {{.minikube_dir_path}} : {{.error}}", "Failed to check main repository and mirrors for images": "Échec de la vérification du référentiel principal et des miroirs pour les images", + "Failed to configure auto-pause {{.profile}}": "Échec de la configuration de la pause automatique {{.profile}}", "Failed to configure metallb IP {{.profile}}": "Échec de la configuration de metallb IP {{.profile}}", + "Failed to configure network plugin": "Échec de la configuration du plug-in réseau", + "Failed to configure registry-aliases {{.profile}}": "Échec de la configuration des alias de registre {{.profile}}", "Failed to create file": "La création du fichier a échoué", "Failed to create runtime": "Échec de la création de l'environnement d'exécution", "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "Échec de la suppression du cluster {{.name}}, réessayez quand même.", "Failed to delete cluster {{.name}}.": "Échec de la suppression du cluster {{.name}}.", "Failed to delete cluster: {{.error}}": "Échec de la suppression du cluster : {{.error}}", - "Failed to delete cluster: {{.error}}__1": "Échec de la suppression du cluster : {{.error}}", "Failed to delete images": "Échec de la suppression des images", "Failed to delete images from config": "Échec de la suppression des images de la configuration", + "Failed to delete profile(s): {{.error}}": "Échec de la suppression du ou des profils : {{.error}}", + "Failed to download licenses": "Échec du téléchargement des licences", "Failed to enable container runtime": "Échec de l'activation de l'environnement d'exécution du conteneur", + "Failed to extract integer in minutes to pause.": "Échec de l'extraction du nombre entier en minutes pour mettre en pause.", "Failed to get bootstrapper": "Échec de l'obtention du programme d'amorçage", "Failed to get command runner": "Impossible d'obtenir le lanceur de commandes", "Failed to get image map": "Échec de l'obtention de la carte d'image", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "Échec de l'obtention de l'URL du service - vérifiez que minikube est en cours d'exécution et que vous avez spécifié l'espace de noms correct (indicateur -n) si nécessaire : {{.error}}", "Failed to get service URL: {{.error}}": "Échec de l'obtention de l'URL du service : {{.error}}", + "Failed to get temp": "Impossible d'obtenir le répertoire temporaire", "Failed to kill mount process: {{.error}}": "Échec de l'arrêt du processus d'installation : {{.error}}", "Failed to list cached images": "Échec de l'obtention de la liste des images mises en cache", "Failed to list images": "Échec de l'obtention de la liste des images", "Failed to load image": "Échec du chargement de l'image", "Failed to persist images": "Échec de la persistance des images", "Failed to pull image": "Échec de l'extraction de l'image", + "Failed to pull images": "Échec de l'extraction des images", + "Failed to push images": "Échec de la diffusion des images", + "Failed to read temp": "Échec de la lecture du répertoire temporaire", "Failed to reload cached images": "Échec du rechargement des images mises en cache", "Failed to remove image": "Échec de la suppression de l'image", + "Failed to remove images for profile {{.pName}} {{.error}}": "Échec de la suppression des images pour le profil {{.pName}} {{.error}}", "Failed to save config {{.profile}}": "Échec de l'enregistrement de la configuration {{.profile}}", "Failed to save dir": "Échec de l'enregistrement du répertoire", + "Failed to save image": "Échec de l'enregistrement de l'image", "Failed to save stdin": "Échec de l'enregistrement de l'entrée standard", - "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}": "Échec de la définition la variable d'environnement NO_PROXY. Veuillez utiliser `export NO_PROXY=$NO_PROXY,{{.ip}}.", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "Échec de la définition de la variable d'environnement NO_PROXY. Veuillez utiliser `export NO_PROXY=$NO_PROXY,{{.ip}}`.", "Failed to setup certs": "Échec de la configuration des certificats", "Failed to start container runtime": "Échec du démarrage de l'exécution du conteneur", "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "Échec du démarrage de {{.driver}} {{.driver_type}}. L'exécution de \"{{.cmd}}\" peut résoudre le problème : {{.error}}", "Failed to stop node {{.name}}": "Échec de l'arrêt du nœud {{.name}}", + "Failed to stop node {{.name}}: {{.error}}": "Échec de l'arrêt du nœud {{.name}} : {{.error}}", + "Failed to stop ssh-agent process: {{.error}}": "Échec de l'arrêt du processus ssh-agent: {{.error}}", + "Failed to tag images": "Échec du marquage des images", "Failed to update cluster": "Échec de la mise à jour du cluster", "Failed to update config": "Échec de la mise à jour de la configuration", - "Failed to verify '{{.driver_name}} info' will try again ...": "Échec de la vérification des informations sur '{{.driver_name}}' va réessayer ...", "Failed unmount: {{.error}}": "Échec du démontage : {{.error}}", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "Échec de la connexion à {{.curlTarget}} depuis l'intérieur du minikube {{.type}}", "File permissions used for the mount": "Autorisations de fichier utilisées pour le montage", "Filter to use only VM Drivers": "Filtrer pour n'utiliser que les pilotes VM", "Flags": "Indicateurs", "Follow": "Suivre", - "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "Pour des résultats optimaux, installez kubectl à l'adresse suivante : https://kubernetes.io/docs/tasks/tools/install-kubectl/", - "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/__1": "Pour des résultats optimaux, installez kubectl à l'adresse suivante : https://kubernetes.io/docs/tasks/tools/install-kubectl/", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "Pour une meilleure expérience, il est recommandé d'utiliser Docker Engine au lieu de Docker Desktop.\nInstructions d'installation de Docker Engine : https://docs.docker.com/engine/install/#server", "For improved {{.driver}} performance, {{.fix}}": "Pour de meilleures performances {{.driver}}, {{.fix}}", "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "Pour plus d'informations, voir : https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}", - "For more information, see:": "Pour en savoir plus, consultez les pages suivantes :", "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Pour plus d'informations, voir : https://minikube.sigs.k8s.io/docs/reference/drivers/none/", "For more information, see: {{.url}}": "Pour plus d'informations, voir : {{.url}}", "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "Forcer l'environnement à être configuré pour un shell spécifié : [fish, cmd, powershell, tcsh, bash, zsh], la valeur par défaut est la détection automatique", "Force minikube to perform possibly dangerous operations": "Oblige minikube à réaliser des opérations possiblement dangereuses.", + "Format output. One of: short|table|json|yaml": "Format de sortie. L'un des suivants : short|table|json|yaml", "Format to print stdout in. Options include: [text,json]": "Format dans lequel imprimer la sortie standard. Les options incluent : [text,json]", + "Forwards all services in a namespace (defaults to \"false\")": "Transfère tous les services dans un espace de noms (par défaut à \"false\")", "Found docker, but the docker service isn't running. Try restarting the docker service.": "Docker trouvé, mais le service docker ne fonctionne pas. Essayez de redémarrer le service Docker.", "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "Pilote(s) trouvé(s) mais aucun n'était en fonctionnement. Voir ci-dessus pour des suggestions sur la façon de réparer les pilotes installés.", "Found network options:": "Options de réseau trouvées :", "Found {{.number}} invalid profile(s) ! ": "{{.number}} profil(s) invalide(s) trouvé(s) !", + "Generate command completion for PowerShell.": "Générer une complétion de commande pour PowerShell.", "Generate command completion for a shell": "Générer la complétion de commande pour un shell", "Generate command completion for bash.": "Générer la complétion de la commande pour bash.", "Generate command completion for fish .": "Générer la complétion de la commande pour fish.", @@ -297,28 +357,44 @@ "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "Obtient le statut d'un cluster Kubernetes local.\n\tLe statut de sortie contient le statut de la VM minikube, du cluster et de Kubernetes encodé sur ses bits dans cet ordre de droite à gauche.\n\tEx : 7 signifiant : 1 (pour minikube NOK) + 2 (pour le cluster NOK) + 4 (pour Kubernetes NOK)", "Gets the value of PROPERTY_NAME from the minikube config file": "Obtient la valeur de PROPERTY_NAME à partir du fichier de configuration minikube", "Global Flags": "Indicateurs globaux", - "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "Chaîne de format de modèle Go pour la sortie de la liste de cache. Le format des modèles Go peut être trouvé ici : https://golang.org/pkg/text/template/\nPour la liste des variables accessibles pour le modèle, voir les valeurs de structure ici : https://godoc.org/k8s .io/minikube/cmd/minikube/cmd#CacheListTemplate", - "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "Go chaîne de format de modèle pour la sortie de la vue de configuration. Le format des modèles Go peut être trouvé ici : https://golang.org/pkg/text/template/\nPour la liste des variables accessibles pour le modèle, voir les valeurs de structure ici : https://godoc.org/k8s .io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate", - "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "Go chaîne de format de modèle pour la sortie d'état. Le format des modèles Go peut être trouvé ici : https://golang.org/pkg/text/template/\nPour la liste des variables accessibles pour le modèle, consultez les valeurs de structure ici : https://godoc.org/k8s. io/minikube/cmd/minikube/cmd#Status", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "Chaîne de format de modèle Go pour la sortie de la liste de cache. Le format des modèles Go peut être trouvé ici : https://pkg.go.dev/text/template\nPour la liste des variables accessibles pour le modèle, voir les valeurs de structure ici : https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "Go chaîne de format de modèle pour la sortie de la vue de configuration. Le format des modèles Go peut être trouvé ici : https://pkg.go.dev/text/template\nPour la liste des variables accessibles pour le modèle, voir les valeurs de structure ici : https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "Go chaîne de format de modèle pour la sortie d'état. Le format des modèles Go peut être trouvé ici : https://pkg.go.dev/text/template\nPour la liste des variables accessibles pour le modèle, consultez les valeurs de structure ici : https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status", "Group ID: {{.groupID}}": "Identifiant du groupe: {{.groupID}}", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "Les clusters HA (plan de contrôle multiple) nécessitent au moins 3 nœuds de plan de contrôle", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Headlamp peut afficher des informations plus détaillées lorsque metrics-server est installé. Pour l'installer, exécutez :\n\n\tminikube{{.profileArg}} addons enable metrics-server\n", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\nminikube{{.profileArg}} addons enable metrics-server\t\n\n": "Headlamp peut afficher des informations plus détaillées lorsque metrics-server est installé. Pour l'installer, exécutez :\n\nminikube{{.profileArg}} addons enable metrics-server\t\n\n", "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "Masque la signature de l'hyperviseur de l'invité dans minikube (pilote kvm2 uniquement).", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "Hyper-V nécessite que la mémoire Mo soit un nombre pair, {{.memory}} Mo a été spécifié, essayez de transmettre `--memory {{.suggestMemory}}`", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "Le pilote Hyperkit sera supprimé dans la prochaine version de minikube. D'autres pilotes compatibles avec macOS sont disponibles, tels que Docker, QEMU et VFKit. Nous vous recommandons d'envisager leur utilisation. Pour plus d'informations, veuillez consulter : https://minikube.sigs.k8s.io/docs/drivers/hyperkit/", "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "Hyperkit ne fonctionne pas. Mettez à niveau vers la dernière version d'hyperkit et/ou Docker for Desktop. Alternativement, vous pouvez choisir un autre --driver", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "Le réseau Hyperkit est cassé. Essayez de désactiver le partage Internet : Préférence système \u003e Partage \u003e Partage Internet. \nVous pouvez également essayer de mettre à niveau vers la dernière version d'hyperkit ou d'utiliser un autre pilote.", "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "Le réseau Hyperkit ne fonctionne pas. Mettez à niveau vers la dernière version d'hyperkit et/ou Docker for Desktop. Alternativement, vous pouvez choisir un autre --driver", "IP Address to use to expose ports (docker and podman driver only)": "Adresse IP à utiliser pour exposer les ports (pilote docker et podman uniquement)", "IP address (ssh driver only)": "Adresse IP (pilote ssh uniquement)", "If present, writes to the provided file instead of stdout.": "S'il est présent, écrit dans le fichier fourni au lieu de la sortie standard.", + "If set, added node will be available as worker. Defaults to true.": "S’il est défini, le nœud ajouté sera disponible en tant que travailleur. La valeur par défaut est vrai.", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "S’il est défini, le nœud ajouté deviendra un plan de contrôle. La valeur par défaut est false. Actuellement uniquement pris en charge pour les clusters HA (plan de contrôle multi-contrôle) existants.", "If set, automatically updates drivers to the latest version. Defaults to true.": "Si défini, met automatiquement à jour les pilotes vers la dernière version. La valeur par défaut est true.", "If set, delete the current cluster if start fails and try again. Defaults to false.": "Si défini, supprime le cluster actuel si le démarrage échoue et réessaye. La valeur par défaut est false.", + "If set, disable CoreDNS verbose logging. Defaults to false.": "Si cette option est définie, désactivez la journalisation détaillée de CoreDNS. La valeur par défaut est false.", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "S'il est défini, désactive les rapports de métriques (utilisation du processeur et de la mémoire), cela peut améliorer l'utilisation du processeur. La valeur par défaut est false.", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "S'il est défini, désactive les optimisations définies pour Kubernetes local. Y compris la diminution des répliques CoreDNS de 2 à 1 et l'augmentation de l'intervalle de maintenance kubeadm de 10 s à 5 m. La valeur par défaut est false.", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "S'il est défini, désactive les optimisations définies pour Kubernetes local. Y compris la diminution des répliques CoreDNS de 2 à 1. La valeur par défaut est false.", "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "Si défini, télécharge l'archive tar des images préchargées si disponibles pour améliorer le temps de démarrage. La valeur par défaut est true.", "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "S'il est défini, force l'environnement d'exécution du conteneur à utiliser systemd comme gestionnaire de groupe de contrôle. La valeur par défaut est false.", "If set, install addons. Defaults to true.": "Si défini, installe les modules. La valeur par défaut est true.", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "S'il est défini, minikube VM/container démarrera sans démarrer ni configurer Kubernetes. (ne fonctionne que sur les nouveaux clusters)", "If set, pause all namespaces": "Si défini, suspend tous les espaces de noms", "If set, unpause all namespaces": "Si défini, annule la pause de tous les espaces de noms", "If the above advice does not help, please let us know:": "Si les conseils ci-dessus ne vous aident pas, veuillez nous en informer :", + "If the host has a firewall:\n\t\t\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "Si l'hôte dispose d'un pare-feu :\n\t\t\n\t\t1. Autoriser un port à traverser le pare-feu\n\t\t2. Spécifiez \"--port=\u003cport_number\u003e\" pour \"minikube mount\"", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "Si l'hôte dispose d'un pare-feu :\n\n\t\t1. Autoriser un port à traverser le pare-feu\n\t\t2. Spécifier « --port=\u003cport_number\u003e » pour \"minikube mount\"", "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "Si vrai, met en cache les images Docker pour le programme d'amorçage actuel et les charge dans la machine. Toujours faux avec --driver=none.", - "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "Si la valeur est \"true\", met les images Docker en cache pour l'amorceur actuel et les charge dans la machine. La valeur est toujours \"false\" avec --vm-driver=none.", "If true, only download and cache files for later use - don't install or start anything.": "Si la valeur est \"true\", téléchargez les fichiers et mettez-les en cache uniquement pour une utilisation future. Ne lancez pas d'installation et ne commencez aucun processus.", "If true, pods might get deleted and restarted on addon enable": "Si vrai, les pods peuvent être supprimés et redémarrés lors addon enable", + "If true, print web links to addons' documentation if using --output=list (default).": "Si vrai, affiche les liens Web vers la documentation des addons si vous utilisez --output=list (défaut).", + "If true, returns a detailed list of profiles.": "Si vrai, renvoie une liste détaillée des profils.", "If true, returns list of profiles faster by skipping validating the status of the cluster.": "Si vrai, renvoie la liste des profils plus rapidement en ignorant la validation de l'état du cluster.", "If true, the added node will be marked for work. Defaults to true.": "Si vrai, le nœud ajouté sera marqué pour le travail. La valeur par défaut est true.", "If true, the node added will also be a control plane in addition to a worker.": "Si vrai, le nœud ajouté sera également un plan de contrôle en plus d'un travailleur.", @@ -331,24 +407,34 @@ "Ignoring invalid pair entry {{.pair}}": "Ignorer l'entrée de paire non valide {{.pair}}", "Ignoring unknown custom image {{.name}}": "Ignorer l'image personnalisée inconnue {{.name}}", "Ignoring unknown custom registry {{.name}}": "Ignorer le registre personnalisé inconnu {{.name}}", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "L'image n'a pas été construite pour la version actuelle de minikube. Pour résoudre ce problème, vous pouvez supprimer et recréer votre cluster minikube en utilisant les dernières images. Version de minikube attendue : {{.imageMinikubeVersion}} -\u003e Version de minikube actuelle : {{.minikubeVersion}}", "Images Commands:": "Commandes d'images:", "Images used by this addon. Separated by commas.": "Images utilisées par ce module. Séparé par des virgules.", "In order to use the fall back image, you need to log in to the github packages registry": "Pour utiliser l'image de secours, vous devez vous connecter au registre des packages github", "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Registres Docker non sécurisés à transmettre au démon Docker. La plage CIDR de service par défaut sera automatiquement ajoutée.", - "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Registres Docker non sécurisés à transmettre au daemon Docker. La plage CIDR par défaut du service sera ajoutée automatiquement.", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "Installez VirtualBox et assurez-vous qu'il est dans le chemin, ou sélectionnez une valeur alternative pour --driver", "Install the latest hyperkit binary, and run 'minikube delete'": "Installez le dernier binaire hyperkit et exécutez 'minikube delete'", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "Exécution de conteneur non valide : \"{{.runtime}}\". Les environnements d'exécution valides sont : {{.validOptions}}", + "Installing the NVIDIA Container Toolkit...": "Installation de NVIDIA Container Toolkit...", + "Interval is an invalid duration: {{.error}}": "L'intervalle est une durée non valide : {{.error}}", + "Interval must be greater than 0s": "L'intervalle doit être supérieur à 0 s", "Invalid port": "Port invalide", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "Istio a besoin de {{.minCPUs}} processeurs -- votre configuration n'alloue que {{.cpus}} processeurs", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "Istio a besoin de {{.minMem}}Mo de mémoire -- votre configuration n'alloue que {{.memory}}Mo", "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "Il semble que vous exécutiez GCE, ce qui signifie que l'authentification devrait fonctionner sans le module GCP Auth. Si vous souhaitez toujours vous authentifier à l'aide d'un fichier d'informations d'identification, utilisez l'indicateur --force.", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "Il est fort probable que vous rencontriez un problème de connexion internet. Veuillez vous assurer que vous pouvez accéder à internet au moins via HTTP, directement ou via un proxy. Votre configuration de proxy actuelle est la suivante :", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configure is:": "Il est très probable que vous ayez un problème Internet. Veuillez vous assurer que vous pouvez accéder à Internet au moins via HTTP, directement ou avec un proxy. Actuellement, votre configuration de proxy est :", + "Kept for backward compatibility, value is ignored.": "Conservé pour des raisons de compatibilité descendante, la valeur est ignorée.", + "Kicbase images have not been deleted. To delete images run:": "Les images Kicbase n'ont pas été supprimées. Pour supprimer des images, exécutez :", "Kill the mount process spawned by minikube start": "Tuez le processus de montage généré par le démarrage de minikube", - "Kubelet network plug-in to use (default: auto)": "Plug-in réseau Kubelet à utiliser (par défaut : auto)", "Kubernetes requires at least 2 CPU's to start": "Kubernetes nécessite au moins 2 processeurs pour démarrer", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "Version Kubernetes introuvable dans la liste des versions de GitHub. Vous pouvez forcer une version de Kubernetes via l'indicateur --force", + "Kubernetes version {{.specified}} found in GitHub version list": "Version Kubernetes {{.specified}} trouvée dans la liste des versions de GitHub", + "Kubernetes version {{.specified}} found in version list": "Version Kubernetes {{.specified}} trouvée dans la liste des versions", + "Kubernetes version {{.version}} is not supported by this release of minikube": "La version Kubernetes {{.version}} n'est pas prise en charge par cette version de minikube", "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "Kubernetes {{.new}} est désormais disponible. Si vous souhaitez effectuer une mise à niveau, spécifiez : --kubernetes-version={{.prefix}}{{.new}}", "Kubernetes {{.version}} is not supported by this release of minikube": "Kubernetes {{.version}} n'est pas pris en charge par cette version de minikube", - "Launching Kubernetes ...": "Lancement de Kubernetes...", + "Kubernetes: Stopping ...": "Kubernetes: Arrêt en cours ...", + "Kubernetes: {{.status}}": "Kubernetes: {{.status}}", "Launching proxy ...": "Lancement du proxy...", "List all available images from the local cache.": "Répertoriez toutes les images disponibles à partir du cache local.", "List existing minikube nodes.": "Répertoriez les nœuds minikube existants.", @@ -364,16 +450,19 @@ "Lists all valid default values for PROPERTY_NAME": "Répertorie toutes les valeurs par défaut valides pour PROPERTY_NAME", "Lists all valid minikube profiles and detects all possible invalid profiles.": "Répertorie tous les profils minikube valides et détecte tous les profils invalides possibles.", "Lists the URLs for the services in your local cluster": "Répertorie les URL des services de votre cluster local", - "Load a image into minikube": "Charger une image dans minikube", + "Load an image into minikube": "Charger une image dans minikube", "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "Dossiers locaux à partager avec l'invité par des installations NFS (pilote hyperkit uniquement).", "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "Proxy local ignoré : ne pas passer {{.name}}={{.value}} à docker env.", "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "Emplacement du socket VPNKit exploité pour la mise en réseau. Si la valeur est vide, désactive Hyperkit VPNKitSock. Si la valeur affiche \"auto\", utilise la connexion VPNKit de Docker pour Mac. Sinon, utilise le VSock spécifié (pilote hyperkit uniquement).", - "Location of the minikube iso": "Emplacement de l'ISO minikube.", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "Emplacement à partir duquel récupérer les binaires kubectl, kubelet, \u0026 kubeadm.", "Locations to fetch the minikube ISO from.": "Emplacements à partir desquels récupérer l'ISO minikube.", "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Connectez-vous ou exécutez une commande sur une machine avec SSH ; similaire à 'docker-machine ssh'.", "Log into the minikube environment (for debugging)": "Connectez-vous à l'environnement minikube (pour le débogage)", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "Fichier de journaux créé ({{.logPath}}), n'oubliez pas de l'inclure lors du signalement de problèmes !", + "Manage cache for images": "Gérer le cache des images", "Manage images": "Gérer les images", "Message Size: {{.size}}": "Taille du message : {{.size}}", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "Version minimale de VirtualBox prise en charge : {{.vers}}, version actuelle de VirtualBox : {{.cvers}}", "Modify persistent configuration values": "Modifier les valeurs de configuration persistantes", "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "Plus d'informations: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", "Most users should use the newer 'docker' driver instead, which does not require root!": "La plupart des utilisateurs devraient plutôt utiliser le nouveau pilote 'docker', qui ne nécessite pas de root !", @@ -382,72 +471,95 @@ "Mounts the specified directory into minikube": "Monte le répertoire spécifié dans minikube", "Mounts the specified directory into minikube.": "Monte le répertoire spécifié dans minikube.", "Multiple errors deleting profiles": "Plusieurs erreurs lors de la suppression des profils", + "Multiple errors encountered:": "Plusieurs erreurs rencontrées :", "Multiple minikube profiles were found - ": "Plusieurs profils minikube ont été trouvés -", "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "Type de carte réseau utilisé pour le réseau hôte uniquement. Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM ou virtio (pilote virtualbox uniquement)", "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "Type de carte réseau utilisé pour le réseau nat. Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM ou virtio (pilote virtualbox uniquement)", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "REMARQUE : veuillez ne pas fermer ce terminal car ce processus doit rester actif pour que le tunnel soit accessible...", "NOTE: This process must stay alive for the mount to be accessible ...": "REMARQUE : ce processus doit rester actif pour que le montage soit accessible...", "Networking and Connectivity Commands:": "Commandes de mise en réseau et de connectivité :", "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "Aucune adresse IP fournie. Essayez de spécifier --ssh-ip-address, ou consultez https://minikube.sigs.k8s.io/docs/drivers/ssh/", "No changes required for the \"{{.context}}\" context": "Aucune modification requise pour le contexte \"{{.context}}\"", + "No control-plane nodes found.": "Aucun nœud de plan de contrôle trouvé.", + "No minikube profile was found.": "Aucun profil minikube n’a été trouvé.", "No minikube profile was found. ": "Aucun profil minikube n'a été trouvé.", "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Aucun pilote possible n'a été détecté. Essayez de spécifier --driver, ou consultez https://minikube.sigs.k8s.io/docs/start/", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "Aucun service n'a été trouvé dans l'espace de noms « {{.namespace}} ».\nVous pouvez sélectionner un autre espace de noms en utilisant « minikube service --all -n \u003cnamespace\u003e ».", "No such addon {{.name}}": "Aucun module de ce type {{.name}}", - "Node \"{{.node_name}}\" stopped.": "Le noeud \"{{.node_name}}\" est arrêté.", + "No valid URL found for tunnel.": "Aucune URL valide n'a été trouvée pour le tunnel.", + "No valid port found for tunnel.": "Aucun port valide trouvé pour le tunnel.", "Node {{.name}} failed to start, deleting and trying again.": "Le nœud {{.name}} n'a pas pu démarrer, suppression et réessai.", "Node {{.name}} was successfully deleted.": "Le nœud {{.name}} a été supprimé avec succès.", "Node {{.nodeName}} does not exist.": "Le nœud {{.nodeName}} n'existe pas.", "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "Aucun des référentiels connus n'est accessible. Envisagez de spécifier un référentiel d'images alternatif avec l'indicateur --image-repository", "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "Aucun dépôt connu dans votre emplacement n'est accessible. {{.image_repository_name}} est utilisé comme dépôt de remplacement.", - "None of the known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "Aucun dépôt connu n'est accessible. Pensez à spécifier un autre dépôt d'images à l'aide de l'indicateur \"--image-repository\".", "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "Vous avez remarqué que vous avez un docker-env activé sur le pilote {{.driver_name}} dans ce terminal :", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "Vous avez remarqué que vous avez un pilote podman-env activé sur {{.driver_name}} dans ce terminal :", - "Number of CPUs allocated to the minikube VM": "Nombre de processeurs alloués à la VM minikube.", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "Nombre de disques supplémentaires créés et attachés à la machine virtuelle minikube (actuellement implémenté uniquement pour le pilote hyperkit)", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "Nombre de disques supplémentaires créés et attachés à la machine virtuelle minikube (actuellement implémenté uniquement pour les pilotes hyperkit et kvm2)", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, and qemu2 drivers)": "Nombre de disques supplémentaires créés et attachés à la machine virtuelle minikube (actuellement uniquement implémenté pour les pilotes hyperkit, kvm2 et qemu2)", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, and vfkit drivers)": "Nombre de disques supplémentaires créés et attachés à la VM minikube (actuellement implémenté uniquement pour les pilotes hyperkit, kvm2, qemu2 et vfkit)", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "Nombre de disques supplémentaires créés et attachés à la VM minikube (actuellement implémenté uniquement pour les pilotes hyperkit, kvm2, qemu2, vfkit et krunkit)", "Number of lines back to go within the log": "Nombre de lignes à remonter dans le journal", "OS release is {{.pretty_name}}": "La version du système d'exploitation est {{.pretty_name}}", + "One of 'text', 'yaml' or 'json'.": "Un parmi 'text', 'yaml' ou 'json'.", "One of 'yaml' or 'json'.": "Un parmi 'yaml' ou 'json'.", "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "Seuls les caractères alphanumériques et les tirets '-' sont autorisés. Minimum 1 caractère, commençant par alphanumérique.", "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "Seuls les caractères alphanumériques et les tirets '-' sont autorisés. Minimum 2 caractères, commençant par alphanumérique.", "Open the addons URL with https instead of http": "Ouvrez l'URL des modules avec https au lieu de http", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "Ouvrez l'URL du service avec https au lieu de http (par défaut \\\"false\\\")", + "Open the service URL with https instead of http (defaults to \"false\")": "Ouvrez l'URL du service avec https au lieu de http (par défaut \"false\")", "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "Ouverture du service Kubernetes {{.namespace_name}}/{{.service_name}} dans le navigateur par défaut...", "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "Ouverture du service {{.namespace_name}}/{{.service_name}} dans le navigateur par défaut...", "Opening {{.url}} in your default browser...": "Ouverture de {{.url}} dans votre navigateur par défaut...", "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "Ouvre le module avec ADDON_NAME dans minikube (exemple : minikube addons open dashboard). Pour une liste des modules disponibles, utilisez: minikube addons list", "Operations on nodes": "Opérations sur les nœuds", "Options: {{.options}}": "Options: {{.options}}", + "Output format. Accepted values: [json, yaml]": "Format de sortie. Valeurs acceptées : [json, yaml]", "Output format. Accepted values: [json]": "Format de sortie. Valeurs acceptées : [json]", "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "Affiche la complétion du shell minikube pour le shell donné (bash, zsh ou fish)\n\n\tCela dépend du binaire bash-completion. Exemple d'instructions d'installation :\n\tOS X :\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # pour les utilisateurs bash\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # pour les utilisateurs zsh\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # pour les utilisateurs de fish\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t \t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # pour les utilisateurs bash\n\t\t$ source \u003c(minikube completion zsh) # pour les utilisateurs zsh\n\t \t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # pour les utilisateurs de fish\n\n\tDe plus, vous voudrez peut-être sortir la complétion dans un fichier et une source dans votre .bashrc\n n\tRemarque pour les utilisateurs de zsh : [1] les complétions zsh ne sont prises en charge que dans les versions de zsh \u003e= 5.2\n\tRemarque pour les utilisateurs de fish : [2] veuillez vous référer à cette documentation pour plus de détails https://fishshell.com/docs/current/#tab-completion\n", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "Génère la complétion du shell minikube pour le shell donné (bash, zsh, fish ou powershell)\n\n\tCela dépend du binaire bash-completion. Exemple d'instructions d'installation:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tDe plus, vous pouvez afficher la complétion dans un fichier et l'inclure dans votre .bashrc\n\n\tWindows:\n\t\t## Enregister le code de complétion dans un script et l'exécuter dans votre profil\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Exécuter le code de complétion dans le profil\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tRemarque pour les utilisateurs de zsh: [1] les complétions zsh ne sont prises en charge que dans les versions zsh \u003e= 5.2\n\tRemarque pour les utilisareurs de fish: [2] veuillez vous référer à cette documentation pour plus de détails https://fishshell.com/docs/current/#tab-completion\n", + "Outputs the licenses of dependencies to a directory": "Copie les licences des dépendances dans un répertoire", "Overwrite image even if same image:tag name exists": "Écraser l'image même si la même image:balise existe", + "Path to socket vmnet binary": "Chemin d'accès au binaire socket vmnet", + "Path to socket vmnet binary (QEMU driver only)": "Chemin d'accès au binaire socket vmnet (pilote QEMU uniquement)", "Path to the Dockerfile to use (optional)": "Chemin d'accès au Dockerfile à utiliser (facultatif)", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "Chemin d'accès au fichier du micrologiciel qemu. Valeurs par défaut : pour Linux, l'emplacement du micrologiciel par défaut. Pour macOS, l'emplacement d'installation de brew. Pour Windows, C:\\Program Files\\qemu\\share", + "Path to the socket vmnet client binary": "Chemin d'accès au binaire socket vmnet", + "Path to the socket vmnet client binary (QEMU driver only)": "Chemin d'accès au binaire socket vmnet (pilote QEMU uniquement)", "Pause": "Pause", "Paused {{.count}} containers": "{{.count}} conteneurs suspendus", "Paused {{.count}} containers in: {{.namespaces}}": "{{.count}} conteneurs suspendus dans : {{.namespaces}}", "Pausing node {{.name}} ... ": "Suspendre le nœud {{.name}} ...", "Permissions: {{.octalMode}} ({{.writtenMode}})": "Autorisations : {{.octalMode}} ({{.writtenMode}})", - "Please attach the following file to the GitHub issue:": "Veuillez joindre le fichier suivant au problème GitHub :", + "Please also attach the following file to the GitHub issue:": "Veuillez également joindre le fichier suivant au problème GitHub", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "Veuillez créer un cluster avec une plus grande taille de disque : `minikube start --disk SIZE_MB`", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "Veuillez vous authentifier auprès du registre ou utiliser l'indicateur --base-image pour utiliser un registre différent.", "Please enter a value:": "Entrer un nombre, SVP:", "Please free up disk or prune images.": "Veuillez libérer le disque ou élaguer les images.", + "Please increase Desktop's disk size.": "Veuillez augmenter la taille du disque de Desktop.", "Please increse Desktop's disk size.": "Veuillez augmenter la taille du disque du bureau.", "Please install the minikube hyperkit VM driver, or select an alternative --driver": "Veuillez installer le pilote minikube hyperkit VM, ou sélectionnez un --driver alternatif", "Please install the minikube kvm2 VM driver, or select an alternative --driver": "Veuillez installer le pilote minikube kvm2 VM, ou sélectionnez un --driver alternatif", "Please make sure the service you are looking for is deployed or is in the correct namespace.": "Veuillez vous assurer que le service que vous recherchez est déployé ou se trouve dans le bon espace de noms.", "Please provide a path or url to build": "Veuillez fournir un chemin ou une URL à construire", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "Veuillez fournir une image dans l'environnement d'exécution du conteneur à enregistrer à partir de minikube via \u003cminikube image save IMAGE_NAME\u003e", "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "Veuillez fournir une image dans votre démon local à charger dans minikube via \u003cminikube image load IMAGE_NAME\u003e", + "Please provide source and target image": "Veuillez fournir l'image source et cible", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "Veuillez réévaluer votre docker-env, pour vous assurer que vos variables d'environnement ont des ports mis à jour :\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "Veuillez réévaluer votre podman-env, pour vous assurer que vos variables d'environnement ont des ports mis à jour :\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "Veuillez exécuter `minikube logs --file=logs.txt` et attachez logs.txt au problème GitHub.", "Please see {{.documentation_url}} for more details": "Veuillez consulter {{.documentation_url}} pour plus de détails", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "Veuillez spécifier le répertoire à monter :\n\tminikube mount \u003crépertoire source\u003e:\u003crépertoire cible\u003e (exemple : \"/host-home:/vm-home\")", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "Veuillez spécifier le répertoire à monter : \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (exemple : \"/host-home:/vm-home\")", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "Veuillez spécifier le chemin à copier :\n\tminikube cp \u003cchemin du fichier source\u003e \u003cchemin absolu du fichier cible\u003e (exemple : \"minikube cp a/b.txt /copied.txt\")", "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "Veuillez spécifier le chemin à copier : \n\tminikube cp \u003cchemin du fichier source\u003e \u003cchemin absolu du fichier cible\u003e (exemple : \"minikube cp a/b.txt /copied.txt\")", "Please try purging minikube using `minikube delete --all --purge`": "Veuillez essayer de purger minikube en utilisant `minikube delete --all --purge`", - "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "Veuillez mettre à niveau l'exécutable \"{{.driver_executable}}\". {{.documentation_url}}", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "Veuillez consulter le lien suivant pour obtenir de la documentation à ce sujet :\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n", "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "Veuillez visiter le lien suivant pour la documentation à ce sujet : \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with -github-packages#authentiating-to-github-packages\n", "Populates the specified folder with documentation in markdown about minikube": "Remplit le dossier spécifié avec la documentation en markdown sur minikube", "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "PowerShell s'exécute en mode contraint, ce qui est incompatible avec les scripts Hyper-V.", "Powering off \"{{.profile_name}}\" via SSH ...": "Mise hors tension du profil \"{{.profile_name}}\" via SSH…", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Préparation de Kubernetes {{.k8sVersion}} sur {{.runtime}} {{.runtimeVersion}}...", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "Préparation de {{.runtime}} {{.runtimeVersion}} ...", "Print current and latest version number": "Imprimer le numéro de version actuel et le plus récent", "Print just the version number.": "Imprimez uniquement le numéro de version.", "Print the version of minikube": "Imprimer la version de minikube", @@ -461,13 +573,18 @@ "Profile name '{{.profilename}}' is not valid": "Le nom de profil '{{.profilename}}' n'est pas valide", "Profile name should be unique": "Le nom du profil doit être unique", "Provide VM UUID to restore MAC address (hyperkit driver only)": "Fournit l'identifiant unique universel (UUID) de la VM pour restaurer l'adresse MAC (pilote hyperkit uniquement).", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "Fournit des instructions pour pointer le docker-cli de votre terminal vers le moteur Docker à l'intérieur de minikube. (Utile pour créer des images docker directement dans minikube)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "Fournit des instructions pour pointer le docker-cli de votre terminal vers le moteur Docker à l'intérieur de minikube. (Utile pour créer des images docker directement dans minikube)\n\nPar exemple, vous pouvez effectuer toutes les opérations docker telles que docker build, docker run et docker ps directement sur le docker à l'intérieur de minikube.\n\nRemarque : Vous avez besoin du docker- cli à installer sur votre machine.\ndocker-cli instructions d'installation : https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps", + "Pull images": "Extraction des images", "Pull the remote image (no caching)": "Extraire l'image distante (pas de mise en cache)", "Pulling base image ...": "Extraction de l'image de base...", - "Pulling images ...": "Extraction des images... ", + "Pulling base image {{.kicVersion}} ...": "Extraction de l'image de base {{.kicVersion}}...", + "Push images": "Diffusion des images", "Push the new image (requires tag)": "Pousser la nouvelle image (nécessite une balise)", "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "Redémarrez pour terminer l'installation de VirtualBox, vérifiez que VirtualBox n'est pas bloqué par votre système et/ou utilisez un autre hyperviseur", "Rebuild libvirt with virt-network support": "Reconstruire libvirt avec le support de virt-network", "Received {{.name}} signal": "Signal {{.name}} reçu", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "Recréez le cluster en exécutant :\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}", "Registries used by this addon. Separated by commas.": "Registres utilisés par ce module. Séparé par des virgules.", "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "Le module complémentaire de registre avec le pilote {{.driver}} utilise le port {{.port}}, veuillez l'utiliser au lieu du port par défaut 5000", "Registry mirrors to pass to the Docker daemon": "Miroirs de dépôt à transmettre au daemon Docker.", @@ -475,17 +592,13 @@ "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "Réinstallez VirtualBox et vérifiez qu'il n'est pas bloqué : Préférences Système -\u003e Sécurité \u0026 Confidentialité -\u003e Général -\u003e Le chargement de certains logiciels système a été bloqué", "Related issue: {{.url}}": "Problème connexe: {{.url}}", "Related issues:": "Problème connexe:", - "Relaunching Kubernetes using {{.bootstrapper}} ...": "Redémarrage de Kubernetes à l'aide de {{.bootstrapper}}…", "Remove one or more images": "Supprimer une ou plusieurs images", "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "Supprimez l'indicateur --docker-opt ou --insecure-registry non valide s'il a été fourni", "Removed all traces of the \"{{.name}}\" cluster.": "Le cluster \"{{.name}}\" a été supprimé.", "Removing {{.directory}} ...": "Suppression du répertoire {{.directory}}…", "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "Le nombre de processeurs demandés {{.requested_cpus}} est supérieur au nombre de processeurs disponibles de {{.avail_cpus}}", "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "Le nombre de processeurs demandés {{.requested_cpus}} est inférieur au minimum autorisé de {{.minimum_cpus}}", - "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "La taille de disque demandée ({{.requested_size}}) est inférieure à la taille minimale ({{.minimum_size}}).", - "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "L'allocation de mémoire demandée ({{.memory}} Mo) est inférieure à l'allocation de mémoire par défaut ({{.default_memorysize}} Mo). Sachez que minikube pourrait ne pas fonctionner correctement ou planter de manière inattendue.", "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "L'allocation de mémoire demandée ({{.requested}} Mo) est inférieure au minimum recommandé de {{.recommend}} Mo. Les déploiements peuvent échouer.", - "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "L'allocation de mémoire demandée ({{.requested_size}}) est inférieure au minimum autorisé ({{.minimum_size}}).", "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "L'allocation de mémoire demandée {{.requested}} Mo est supérieure à la limite de votre système {{.system_limit}} Mo.", "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "L'allocation de mémoire demandée {{.requested}} Mio est inférieure au minimum utilisable de {{.minimum_memory}} Mo", "Reset Docker to factory defaults": "Réinitialiser Docker aux paramètres d'usine", @@ -503,6 +616,7 @@ "Returns a URL to connect to a service": "Renvoie une URL pour se connecter à un service", "Returns logs to debug a local Kubernetes cluster": "Renvoie les journaux pour déboguer un cluster Kubernetes local", "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "Renvoie l'URL Kubernetes d'un service de votre cluster local. Dans le cas de plusieurs URL, elles seront imprimées une à la fois.", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "Renvoie les URL Kubernetes des services de votre cluster local. Dans le cas de plusieurs URL, elles seront imprimées une par une.", "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "Renvoie la valeur de PROPERTY_NAME à partir du fichier de configuration minikube. Peut être écrasé à l'exécution par des indicateurs ou des variables d'environnement.", "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "Cliquez avec le bouton droit sur l'icône PowerShell et sélectionnez Exécuter en tant qu'administrateur pour ouvrir PowerShell en mode élevé.", "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "Exécutez 'kubectl describe pod coredns -n kube-system' et recherchez un pare-feu ou un conflit DNS", @@ -511,7 +625,8 @@ "Run a kubectl binary matching the cluster version": "Exécuter un binaire kubectl correspondant à la version du cluster", "Run minikube from the C: drive.": "Exécutez minikube à partir du lecteur C:.", "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "Exécutez le client Kubernetes, téléchargez-le si nécessaire. N'oubliez pas -- après kubectl !\n\nCela exécutera le client Kubernetes (kubectl) avec la même version que le cluster\n\nNormalement, il téléchargera un binaire correspondant au système d'exploitation et à l'architecture de l'hôte,\nmais vous pouvez également l'exécuter en option directement sur le plan de contrôle via la connexion ssh.\nCela peut être utile si vous ne pouvez pas exécuter kubectl localement pour une raison quelconque, comme un hôte non pris en charge. Veuillez noter que lors de l'utilisation de --ssh, tous les chemins s'appliqueront à la machine distante.", - "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "Exécutez : 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "Exécutez ce qui suit :\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "Exécutez : 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'", "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "Exécutez : 'kubectl delete clusterrolebinding kubernetes-dashboard'", "Run: 'minikube delete --all' to clean up all the abandoned networks.": "Exécutez : 'minikube delete --all' pour nettoyer tous les réseaux abandonnés.", "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "Exécutez : 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'", @@ -521,9 +636,13 @@ "SSH key (ssh driver only)": "Clé SSH (pilote ssh uniquement)", "SSH port (ssh driver only)": "Port SSH (pilote ssh uniquement)", "SSH user (ssh driver only)": "Utilisateur SSH (pilote ssh uniquement)", + "Save a image from minikube": "Enregistrer une image de minikube", + "Searching the internet for Kubernetes version...": "Recherche sur Internet de la version de Kubernetes...", "Select a valid value for --dnsdomain": "Sélectionnez une valeur valide pour --dnsdomain", "Send trace events. Options include: [gcp]": "Envoyer des événements de trace. Les options incluent : [gcp]", "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "Le service '{{.service}}' n'a pas été trouvé dans l'espace de noms '{{.namespace}}'.\nVous pouvez sélectionner un autre espace de noms en utilisant 'minikube service {{.service}} -n \u003cnamespace\u003e'. Ou répertoriez tous les services à l'aide de 'minikube service list'", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "Les services {{.svc_names}} ont le type \"ClusterIP\" non destiné à être exposé, cependant pour le développement local, minikube vous permet d'y accéder !", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "Définissez une adresse IP statique pour le cluster minikube, l'adresse IP doit être : privée, IPv4, et le dernier octet doit être compris entre 2 et 254, par exemple 192.168.200.200 (pilotes Docker et Podman uniquement)", "Set failed": "Échec de la définition", "Set flag to delete all profiles": "Définir un indicateur pour supprimer tous les profils", "Set flag to stop all profiles (clusters)": "Définir un indicateur pour arrêter tous les profils (clusters)", @@ -536,11 +655,15 @@ "Setting profile failed": "Échec de la définition du profil", "Show a list of global command-line options (applies to all commands).": "Affiche une liste des options de ligne de commande globales (s'applique à toutes les commandes).", "Show only log entries which point to known problems": "Afficher uniquement les entrées de journal qui pointent vers des problèmes connus", + "Show only the audit logs": "Afficher uniquement les journaux d'audit", + "Show only the last start logs.": "Afficher uniquement les derniers journaux de démarrage.", "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "Affichez uniquement les entrées de journal les plus récentes et imprimez en continu de nouvelles entrées au fur et à mesure qu'elles sont ajoutées au journal.", "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "Simulez le nombre de nœuds numa dans minikube, la plage de nombre de nœuds numa pris en charge est de 1 à 8 (pilote kvm2 uniquement)", "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Changement de contexte kubectl ignoré pour {{.profile_name}} car --keep-context a été défini.", "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "Certaines fonctionnalités du tableau de bord nécessitent le module metrics-server. Pour activer toutes les fonctionnalités, veuillez exécuter :\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Certaines fonctionnalités du tableau de bord nécessitent le module complémentaire metrics-server. Pour activer toutes les fonctionnalités, veuillez exécuter :\n\n\tminikube{{.profileArg}} addons enable metrics-server\n", "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "Désolé, Kubernetes {{.k8sVersion}} nécessite que conntrack soit installé dans le chemin de la racine", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "Désolé, Kubernetes {{.k8sVersion}} nécessite que crictl soit installé dans le chemin de la racine", "Sorry, completion support is not yet implemented for {{.name}}": "Désolé, la prise en charge de la complétion n'est pas encore implémentée pour {{.name}}", "Sorry, please set the --output flag to one of the following valid options: [text,json]": "Désolé, veuillez définir l'indicateur --output sur l'une des options valides suivantes : [text,json]", "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "Désolé, l'adresse IP fournie avec l'indicateur --listen-address n'est pas valide : {{.listenAddr}}.", @@ -550,6 +673,11 @@ "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "Désolé, {{.driver}} n'autorise pas la modification des montages après la création du conteneur (montage précédent : '{{.old}}', nouveau montage : '{{.new}})'", "Source {{.path}} can not be empty": "La source {{.path}} ne peut pas être vide", "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "La version spécifiée de Kubernetes {{.specified}} est inférieure à la plus ancienne version prise en charge : {{.oldest}}", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "La version de Kubernetes spécifiée {{.specified}} est antérieure à la version la plus ancienne prise en charge : {{.oldest}}. Utilisez `minikube config defaults kubernetes-version` pour plus de détails.", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}": "La version de Kubernetes spécifiée {{.specified}} est plus récente que la dernière version prise en charge : {{.newest}}", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "La version de Kubernetes spécifiée {{.specified}} est plus récente que la dernière version prise en charge : {{.newest}}. Utilisez `minikube config defaults kubernetes-version` pour plus de détails.", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "La version Kubernetes spécifiée {{.specified}} est introuvable dans la liste des versions de Kubernetes", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "La version majeure spécifiée de Kubernetes {{.specifiedMajor}} est plus récente que la dernière version majeure prise en charge : {{.newestMajor}}", "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "Spécifiez --kubernetes-version avec la forme v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e. exemple : 'v1.1.14'", "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "Spécifiez une autre valeur --host-only-cidr, telle que 172.16.0.1/24", "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Spécifie des indicateurs arbitraires à transmettre au daemon Docker (format : clé = valeur).", @@ -560,90 +688,106 @@ "Specify the port that the mount should be setup on, where 0 means any free port.": "Spécifiez le port sur lequel le montage doit être configuré, où 0 signifie tout port libre.", "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "La spécification de disques supplémentaires n'est actuellement prise en charge que pour les pilotes suivants : {{.supported_drivers}}. Si vous pouvez contribuer à ajouter cette fonctionnalité, veuillez créer un PR.", "StartHost failed, but will try again: {{.error}}": "StartHost a échoué, mais va réessayer : {{.error}}", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "Démarrage du nœud \"{{.node}}\" {{.role}} dans le cluster \"{{.cluster}}\"", "Starting control plane node {{.name}} in cluster {{.cluster}}": "Démarrage du noeud de plan de contrôle {{.name}} dans le cluster {{.cluster}}", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "Démarrage de minikube sans Kubernetes dans le cluster {{.cluster}}", + "Starting minikube without Kubernetes {{.name}} in cluster {{.cluster}}": "Démarrage de minikube sans Kubernetes {{.name}} dans le cluster {{.cluster}}", "Starting node {{.name}} in cluster {{.cluster}}": "Démarrage du noeud {{.name}} dans le cluster {{.cluster}}", "Starting tunnel for service {{.service}}.": "Tunnel de démarrage pour le service {{.service}}.", + "Starting worker node {{.name}} in cluster {{.cluster}}": "Démarrage du nœud de travail {{.name}} dans le cluster {{.cluster}}", "Starts a local Kubernetes cluster": "Démarre un cluster Kubernetes local", - "Starts a local kubernetes cluster": "Démarre un cluster Kubernetes local.", "Starts a node.": "Démarre un nœud.", "Starts an existing stopped node in a cluster.": "Démarre un nœud arrêté existant dans un cluster.", "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "Échec du démarrage avec le pilote {{.old_driver}}, essai avec un autre pilote {{.new_driver}} : {{.error}}", - "Stopping \"{{.profile_name}}\" in {{.driver_name}} ...": "Arrêt de \"{{.profile_name}}\" sur {{.driver_name}}...", - "Stopping node \"{{.name}}\" ...": "Nœud d'arrêt \"{{.name}}\" ...", + "Stopped tunnel for service {{.service}}.": "Tunnel arrêté pour le service {{.service}}.", + "Stopping node \"{{.name}}\" ...": "Arrêt du nœud \"{{.name}}\" ...", "Stopping tunnel for service {{.service}}.": "Tunnel d'arrêt pour le service {{.service}}.", "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "Arrête un cluster Kubernetes local. Cette commande arrête la VM ou le conteneur sous-jacent, mais conserve les données utilisateur intactes. Le cluster peut être redémarré avec la commande \"start\".", "Stops a node in a cluster.": "Arrête un nœud dans un cluster.", "Stops a running local Kubernetes cluster": "Arrête un cluster Kubernetes local en cours d'exécution", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "Sous-réseau à utiliser sur le cluster kic. Si laissé vide, minikube choisira l'adresse de sous-réseau, en commençant par 192.168.49.0. (pilote docker et podman uniquement)", "Successfully added {{.name}} to {{.cluster}}!": "{{.name}} a été ajouté avec succès à {{.cluster}} !", "Successfully deleted all profiles": "Tous les profils ont été supprimés avec succès", "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "{{.sourcePath}} monté avec succès sur {{.destinationPath}}", "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "Répertoire minikube purgé avec succès situé à - [{{.minikubeDirectory}}]", "Successfully started node {{.name}}!": "Nœud {{.name}} démarré avec succès !", "Successfully stopped node {{.name}}": "Nœud {{.name}} arrêté avec succès", + "Successfully unblocked bootpd process from firewall, retrying": "Déblocage réussi du processus bootpd du pare-feu, nouvelle tentative", "Suggestion: {{.advice}}": "Suggestion : {{.advice}}", "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Le système n'a que {{.size}} Mio disponibles, moins que les {{.req}} Mio requis pour Kubernetes", + "Tag images": "Marquer des images", "Tag to apply to the new image (optional)": "Tag à appliquer à la nouvelle image (facultatif)", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "Le chemin du fichier cible \u003cremote\u003e doit être un chemin absolu. Le chemin relatif n'est pas autorisé (exemple : \"minikube:/home/docker/copied.txt\")", "Target directory {{.path}} must be an absolute path": "Le répertoire cible {{.path}} doit être un chemin absolu", "Target {{.path}} can not be empty": "La cible {{.path}} ne peut pas être vide", "Test docs have been saved at - {{.path}}": "Les documents de test ont été enregistrés à - {{.path}}", - "The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo minikube --vm-driver={{.driver_name}}": "Le pilote \"{{.driver_name}}\" nécessite de disposer de droits racine. Veuillez exécuter minikube à l'aide de \"sudo minikube --vm-driver={{.driver_name}}\".", "The \"{{.driver_name}}\" driver should not be used with root privileges.": "Le pilote \"{{.driver_name}}\" ne doit pas être utilisé avec les privilèges root.", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "Le pilote \"{{.driver_name}}\" ne doit pas être utilisé avec les privilèges root. Si vous souhaitez continuer en tant que root, utilisez --force.", + "The \"{{.name}}\" container runtime requires CNI": "L'environnement d'exécution du conteneur \"{{.name}}\" nécessite CNI", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "Le pilote « hyperkit » est obsolète et sera supprimé dans une prochaine version.\n Vous pouvez utiliser des pilotes alternatifs tels que « vfkit », « qemu » ou « docker ».\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t", "The 'none' driver is designed for experts who need to integrate with an existing VM": "Le pilote 'none' est conçu pour les experts qui doivent s'intégrer à une machine virtuelle existante", - "The 'none' driver provides limited isolation and may reduce system security and reliability.": "L'isolation fournie par le pilote \"none\" (aucun) est limitée, ce qui peut diminuer la sécurité et la fiabilité du système.", "The '{{.addonName}}' addon is enabled": "Le module '{{.addonName}}' est activé", - "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "Le pilote '{{.driver}}' nécessite des autorisations élevées. Les commandes suivantes seront exécutées :\\n\\n{{ .example }}\\n", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "Le pilote '{{.driver}}' nécessite des autorisations élevées. Les commandes suivantes seront exécutées :\n\n{{ .example }}\n", "The '{{.driver}}' provider was not found: {{.error}}": "Le fournisseur '{{.driver}}' n'a pas été trouvé : {{.error}}", "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Le pilote '{{.name}}' ne prend pas en charge plusieurs profils : https://minikube.sigs.k8s.io/docs/reference/drivers/none/", "The '{{.name}}' driver does not respect the --cpus flag": "Le pilote '{{.name}}' ne respecte pas l'indicateur --cpus", "The '{{.name}}' driver does not respect the --memory flag": "Le pilote '{{.name}}' ne respecte pas l'indicateur --memory", - "The --image-repository flag your provided contains Scheme: {{.scheme}}, it will be as a domian, removed automatically": "L'indicateur --image-repository que vous avez fourni contient le schéma : {{.scheme}}, ce sera en tant que domaine, supprimé automatiquement", + "The '{{.name}}' driver does not support --cpus=no-limit": "Le pilote '{{.name}}' ne prend pas en charge --cpus=no-limit", + "The '{{.name}}' driver does not support --memory=no-limit": "Le pilote '{{.name}}' ne prend pas en charge --memory=no-limit", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "L'indicateur --image-repository que vous avez fourni contient le schéma : {{.scheme}}, qui sera automatiquement supprimé", "The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically": "L'indicateur --image-repository que vous avez fourni contient le schéma: {{.scheme}}, qui sera automatiquement supprimé", "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "L'indicateur --image-repository que vous avez fourni s'est terminé par un / qui pourrait provoquer un conflit dans kubernetes, supprimé automatiquement", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "L'indicateur --image-repository que vous avez fourni se terminait par un / qui pourrait provoquer un conflit dans kubernetes, supprimé automatiquement", "The CIDR to be used for service cluster IPs.": "Méthode CIDR à exploiter pour les adresses IP des clusters du service.", "The CIDR to be used for the minikube VM (virtualbox driver only)": "Méthode CIDR à exploiter pour la VM minikube (pilote virtualbox uniquement).", "The KVM QEMU connection URI. (kvm2 driver only)": "URI de connexion QEMU de la KVM (pilote kvm2 uniquement).", "The KVM default network name. (kvm2 driver only)": "Le nom de réseau par défaut de KVM. (pilote kvm2 uniquement)", "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "Le pilote KVM est incapable de ressusciter cette ancienne VM. Veuillez exécuter `minikube delete` pour la supprimer et réessayer.", - "The KVM network name. (kvm2 driver only)": "Nom du réseau de la KVM (pilote kvm2 uniquement).", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "L'addon OLM a cessé de fonctionner, pour plus de détails, visitez : https://github.com/operator-framework/operator-lifecycle-manager/issues/2534", "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "Le pilote VM s'est écrasé. Exécutez 'minikube start --alsologtostderr -v=8' pour voir le message d'erreur du pilote VM", "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "Le pilote VM s'est terminé avec une erreur et est peut-être corrompu. Exécutez 'minikube start' avec --alsologtostderr -v=8 pour voir l'erreur", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "La machine virtuelle pour laquelle minikube est configuré n'existe plus. Exécutez 'minikube delete'", - "The \\\"{{.name}}\\\" container runtime requires CNI": "L'environnement d'exécution du conteneur \\\"{{.name}}\\\" nécessite CNI", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "Le module Ambassador a cessé de fonctionner à partir de la v1.23.0, pour plus de détails, visitez : https://github.com/datawire/ambassador-operator/issues/73", "The apiserver listening port": "Port d'écoute du serveur d'API.", - "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Nom du serveur d'API utilisé dans le certificat généré pour Kubernetes. Vous pouvez l'utiliser si vous souhaitez que le serveur d'API soit disponible en dehors de la machine.", - "The argument to pass the minikube mount command on start": "Argument à transmettre à la commande d'installation de minikube au démarrage.", "The argument to pass the minikube mount command on start.": "L'argument pour passer la commande de montage minikube au démarrage.", "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "Le nom d'hôte apiserver faisant autorité pour les certificats apiserver et la connectivité. Cela peut être utilisé si vous souhaitez rendre l'apiserver disponible depuis l'extérieur de la machine", "The base image to use for docker/podman drivers. Intended for local development.": "L'image de base à utiliser pour les pilotes docker/podman. Destiné au développement local.", "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "Le nom d'hôte du certificat fourni semble être invalide (peut être un bogue minikube, essayez 'minikube delete')", "The cluster dns domain name used in the Kubernetes cluster": "Le nom de domaine DNS du cluster utilisé dans le cluster Kubernetes", - "The cluster dns domain name used in the kubernetes cluster": "Nom du domaine DNS du cluster utilisé dans le cluster Kubernetes.", "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "Le cluster {{.cluster}} existe déjà, ce qui signifie que le paramètre --nodes sera ignoré. Utilisez \"minikube node add\" pour ajouter des nœuds à un cluster existant.", - "The container runtime to be used (docker, crio, containerd)": "environment d'exécution du conteneur à utiliser (docker, crio, containerd).", "The control plane for \"{{.name}}\" is paused!": "Le plan de contrôle pour \"{{.name}}\" est en pause !", "The control plane node \"{{.name}}\" does not exist.": "Le nœud du plan de contrôle \"{{.name}}\" n'existe pas.", "The control plane node is not running (state={{.state}})": "Le nœud du plan de contrôle n'est pas en cours d'exécution (state={{.state}})", "The control plane node must be running for this command": "Le nœud du plan de contrôle doit être en cours d'exécution pour cette commande", - "The cri socket path to be used": "Chemin d'accès au socket CRI à utiliser.", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "Le nœud du plan de contrôle {{.name}} apiserver n'est pas en cours d'exécution (en essaiera d'autres) : (state={{.state}})", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "Le nœud du plan de contrôle {{.name}} apiserver n'est pas en cours d'exécution : (state={{.state}})", + "The control-plane node {{.name}} apiserver is paused": "Le serveur API du nœud du plan de contrôle {{.name}} est en pause", + "The control-plane node {{.name}} apiserver is paused (will try others)": "Le nœud du plan de contrôle {{.name}} apiserver est en pause (en essaiera d'autres)", + "The control-plane node {{.name}} host does not exist": "L'hôte du nœud du plan de contrôle {{.name}} n'existe pas", + "The control-plane node {{.name}} host does not exist (will try others)": "L'hôte du nœud du plan de contrôle {{.name}} n'existe pas (j'en essaierai d'autres)", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "L'hôte du nœud du plan de contrôle {{.name}} n'est pas en cours d'exécution (il en essaiera d'autres) : state={{.state}}", + "The control-plane node {{.name}} host is not running: state={{.state}}": "L'hôte du nœud du plan de contrôle {{.name}} n'est pas en cours d'exécution : state={{.state}}", "The cri socket path to be used.": "Le chemin de socket cri à utiliser.", + "The default network for QEMU will change from 'user' to 'socket_vmnet' in a future release": "Le réseau par défaut pour QEMU passera de 'user' à 'socket_vmnet' dans une version future", "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "La commande docker-env est incompatible avec les clusters multi-nœuds. Utilisez le module 'registry' : https://minikube.sigs.k8s.io/docs/handbook/registry/", "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "La commande docker-env n'est compatible qu'avec le runtime \"docker\", mais ce cluster a été configuré pour utiliser le runtime \"{{.runtime}}\".", "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Le pilote \"{{.driver}}\" n'est pas compatible avec {{.os}}/{{.arch}}.", "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "Le cluster \"{{.name}}\" existant a été créé à l'aide du pilote \"{{.old}}\", qui est incompatible avec le pilote \"{{.new}}\" demandé.", "The existing node configuration appears to be corrupt. Run 'minikube delete'": "La configuration de nœud existante semble être corrompue. Exécutez 'minikube delete'", "The heapster addon is depreciated. please try to disable metrics-server instead": "Le module heapster est déprécié. s'il vous plaît essayez de désactiver metrics-server à la place", + "The host does not support filesystem 9p.": "L'hôte ne prend pas en charge le système de fichiers 9p.", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "Nom du commutateur virtuel hyperv. La valeur par défaut affiche le premier commutateur trouvé (pilote hyperv uniquement).", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "L'hyperviseur ne semble pas être configuré correctement. Exécutez 'minikube start --alsologtostderr -v=1' et inspectez le code d'erreur", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "L'image '{{.imageName}}' ne correspond pas à l'architecture de l'environnement d'exécution du conteneur, utilisez plutôt une image multi-architecture", "The image '{{.imageName}}' was not found; unable to add it to cache.": "L'image '{{.imageName}}' n'a pas été trouvée ; impossible de l'ajouter au cache.", "The initial time interval for each check that wait performs in seconds": "L'intervalle de temps initial pour chaque vérification effectuée en secondes", "The kubeadm binary within the Docker container is not executable": "Le binaire kubeadm dans le conteneur Docker n'est pas exécutable", - "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "Version de Kubernetes qu'utilisera la VM minikube (exemple : v1.2.3).", "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "Le pilote de machine spécifié ne démarre pas. Essayez d'exécuter 'docker-machine-driver-\u003ctype\u003e version'", "The minikube VM is offline. Please run 'minikube start' to start it again.": "La machine virtuelle minikube est hors ligne. Veuillez exécuter 'minikube start' pour le redémarrer.", "The minikube {{.driver_name}} container exited unexpectedly.": "Le conteneur minikube {{.driver_name}} s'est fermé de manière inattendue.", "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "La version minimale requise pour podman est \"{{.minVersion}}\". votre version est \"{{.currentVersion}}\". minikube pourrait ne pas fonctionner. À utiliser à vos risques et périls. Pour installer la dernière version, veuillez consulter https://podman.io/getting-started/installation.html", - "The name of the network plugin": "Nom du plug-in réseau.", "The named space to activate after start": "L'espace nommé à activer après le démarrage", + "The node to build on. Defaults to the primary control plane.": "Le nœud sur lequel construire. La valeur par défaut est le plan de contrôle principal.", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "Le nœud pour lequel vérifier l'état. La valeur par défaut est le plan de contrôle. Laissez vide avec le format par défaut pour l'état sur tous les nœuds.", "The node to get IP. Defaults to the primary control plane.": "Le nœud pour obtenir l'IP. La valeur par défaut est le plan de contrôle principal.", "The node to get logs from. Defaults to the primary control plane.": "Le nœud à partir duquel obtenir les journaux. La valeur par défaut est le plan de contrôle principal.", @@ -654,44 +798,59 @@ "The node {{.name}} has ran out of memory.": "Le nœud {{.name}} est à court de mémoire.", "The node {{.name}} network is not available. Please verify network settings.": "Le réseau du nœud {{.name}} n'est pas disponible. Veuillez vérifier les paramètres réseau.", "The none driver is not compatible with multi-node clusters.": "Le pilote none n'est pas compatible avec les clusters multi-nœuds.", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Le pilote none avec Kubernetes v1.24+ et l'environnement d'exécution du conteneur docker nécessitent cri-dockerd.\n\t\t\n\t\tVeuillez installer cri-dockerd en suivant ces instructions :\n\n\t\thttps://github.com/Mirantis/cri-dockerd", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Le pilote none avec Kubernetes v1.24+ et le conteneur runtime Docker nécessitent cri-dockerd.\n\n\t\tVeuillez installer cri-dockerd en suivant ces instructions :\n\n\t\thttps://github.com/Mirantis/cri-dockerd", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Le pilote none avec Kubernetes v1.24+ et l'environnement d'exécution du conteneur docker nécessitent dockerd.\n\t\t\n\t\tVeuillez installer dockerd en suivant ces instructions :\n\n\t\thttps://docs.docker.com/engine/install/", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Le pilote none avec Kubernetes v1.24+ et le conteneur runtime Docker nécessitent dockerd.\n\n\t\tVeuillez installer dockerd en suivant ces instructions :\n\n\t\thttps://docs.docker.com/engine/install/", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "Le pilote none avec Kubernetes v1.24+ nécessite containernetworking-plugins.\n\n\t\tVeuillez installer containernetworking-plugins en suivant ces instructions :\n\n\t\thttps://minikube.sigs.k8s.io/docs /faq/#how-do-i-install-containernetworking-plugins-for-none-driver", "The number of bytes to use for 9p packet payload": "Le nombre d'octets à utiliser pour la charge utile du paquet 9p", "The number of nodes to spin up. Defaults to 1.": "Le nombre de nœuds à faire tourner. La valeur par défaut est 1.", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "Le module complémentaire nvidia-gpu-device-plugin est obsolète et ses fonctionnalités sont fusionnées dans le module complémentaire nvidia-device-plugin. Il sera supprimé dans une prochaine version. Veuillez plutôt utiliser le module complémentaire nvidia-device-plugin. Pour plus de détails, visitez : https://github.com/kubernetes/minikube/issues/19114.", "The output format. One of 'json', 'table'": "Le format de sortie. 'json' ou 'table'", "The path on the file system where the docs in markdown need to be saved": "Le chemin sur le système de fichiers où les documents en markdown doivent être enregistrés", "The path on the file system where the error code docs in markdown need to be saved": "Le chemin sur le système de fichiers où les documents code d'erreur en markdown doivent être enregistrés", "The path on the file system where the testing docs in markdown need to be saved": "Le chemin sur le système de fichiers où les documents de test en markdown doivent être enregistrés", "The podman service within '{{.cluster}}' is not active": "Le service podman dans '{{.cluster}}' n'est pas actif", "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "La commande podman-env est incompatible avec les clusters multi-nœuds. Utilisez le module 'registry' : https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "La commande podman-env n'est compatible qu'avec le runtime \"crio\", mais ce cluster a été configuré pour utiliser le runtime \"{{.runtime}}\".", "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "L'allocation de mémoire demandée de {{.requested}}MiB ne laisse pas de place pour la surcharge système (mémoire système totale : {{.system_limit}}MiB). Vous pouvez rencontrer des problèmes de stabilité.", "The service namespace": "L'espace de nom du service", - "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "Le service {{.service}} nécessite l'exposition des ports privilégiés : {{.ports}}", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "Le service/ingress {{.resource}} nécessite l'exposition des ports privilégiés : {{.ports}}", "The services namespace": "L'espace de noms des services", + "The socket_vmnet network is only supported on macOS": "Le réseau socket_vmnet n'est pris en charge que sur macOS", "The time interval for each check that wait performs in seconds": "L'intervalle de temps pour chaque contrôle que wait effectue en secondes", + "The total number of nodes to spin up. Defaults to 1.": "Le nombre total de nœuds à faire tourner. La valeur par défaut est 1.", "The value passed to --format is invalid": "La valeur passée à --format n'est pas valide", "The value passed to --format is invalid: {{.error}}": "La valeur passée à --format n'est pas valide : {{.error}}", - "The {{.driver_name}} driver should not be used with root privileges.": "Le pilote {{.driver_name}} ne doit pas être utilisé avec des droits racine.", - "There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "Une nouvelle version de \"{{.driver_executable}}\" est disponible. Pensez à effectuer la mise à niveau. {{.documentation_url}}", + "The vfkit driver is only supported on macOS": "Le pilote vfkit n'est pris en charge que sur macOS", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "Le module complémentaire {{.addon}} n'est pris en charge qu'avec le pilote KVM.\n\nPour les instructions de configuration du GPU, consultez : https://minikube.sigs.k8s.io/docs/tutorials/nvidia/", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "Il existe plusieurs manières d'activer le partage de fichiers requis :\n1. Activez \"Utiliser le moteur basé sur WSL 2\" dans Docker Desktop\nou\n2. Activer le partage de fichiers dans Docker Desktop pour le répertoire %s%s", "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "Ces paramètres --extra-config ne sont pas valides : {{.invalid_extra_opts}}", "These changes will take effect upon a minikube delete and then a minikube start": "Ces modifications prendront effet lors d'une suppression de minikube, puis d'un démarrage de minikube", + "Things to try without Kubernetes ...": "Choses à essayer sans Kubernetes ...", "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "Ce module n'a pas de point de terminaison défini pour la commande 'addons open'.\nVous pouvez en ajouter un en annotant un service avec le libellé {{.labelName}} :{{.addonName}}", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "Cette opération peut également être réalisée en définissant la variable d'environment \"CHANGE_MINIKUBE_NONE_USER=true\".", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "Ce cluster a été créé avant minikube v1.26.0 et n'a pas installé cri-docker. Veuillez exécuter 'minikube delete' puis redémarrer minikube", "This control plane is not running! (state={{.state}})": "Ce plan de contrôle ne fonctionne pas ! (état={{.state}})", "This driver does not yet work on your architecture. Maybe try --driver=none": "Ce pilote ne fonctionne pas encore sur votre architecture. Essayez peut-être --driver=none", + "This flag is currently unsupported.": "Cet indicateur n'est actuellement pas pris en charge.", "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "Il s'agit d'un problème connu avec le pilote de stockage BTRFS, il existe une solution de contournement, veuillez vérifier le problème sur GitHub", "This is unusual - you may want to investigate using \"{{.command}}\"": "C'est inhabituel - vous voudrez peut-être investiguer en utilisant \"{{.command}}\"", "This will keep the existing kubectl context and will create a minikube context.": "Cela permet de conserver le contexte kubectl existent et de créer un contexte minikube.", - "This will start the mount daemon and automatically mount files into minikube": "Cela permet de lancer le daemon d'installation et d'installer automatiquement les fichiers dans minikube.", "This will start the mount daemon and automatically mount files into minikube.": "Cela démarrera le démon de montage et montera automatiquement les fichiers dans minikube.", "This {{.type}} is having trouble accessing https://{{.repository}}": "Ce {{.type}} rencontre des difficultés pour accéder à https://{{.repository}}", "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "Astuce : Pour supprimer ce cluster appartenant à la racine, exécutez : sudo {{.cmd}}", - "Tip: To remove this root owned cluster, run: sudo {{.cmd}} delete": "Conseil : Pour supprimer ce cluster appartenant à la racine, exécutez la commande \"sudo {{.cmd}} delete\".", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "Pour accéder à Headlamp, utilisez la commande suivante :\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n", + "To access Headlamp, use the following command:\nminikube service headlamp -n headlamp\n\n": "Pour accéder à Headlamp, utilisez la commande suivante :\nminikube service headlamp -n headlamp\n\n", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "Pour accéder à YAKD - Kubernetes Dashboard, attendez que le Pod soit prêt et exécutez la commande suivante :\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n\n": "Pour accéder à YAKD - Kubernetes Dashboard, attendez que le Pod soit prêt et exécutez la commande suivante :\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n\n", + "To authenticate in Headlamp, fetch the Authentication Token using the following command:\n\nexport SECRET=$(kubectl get secrets --namespace headlamp -o custom-columns=\":metadata.name\" | grep \"headlamp-token\")\nkubectl get secret $SECRET --namespace headlamp --template=\\{\\{.data.token\\}\\} | base64 --decode\n\t\t\t\n": "Pour vous authentifier dans Headlamp, récupérez le jeton d'authentification à l'aide de la commande suivante :\n\nexport SECRET=$(kubectl get secrets --namespace headlamp -o custom-columns=\":metadata.name\" | grep \"headlamp-token \")\nkubectl get secret $SECRET --namespace headlamp --template=\\{\\{.data.token\\}\\} | base64 --decode\n\t\t\t\n", + "To configure vment-helper to run without a password, please check the documentation:": "Pour configurer vment-helper pour qu'il s'exécute sans mot de passe, veuillez consulter la documentation :", "To connect to this cluster, use: --context={{.name}}": "Pour vous connecter à ce cluster, utilisez : --context={{.name}}", - "To connect to this cluster, use: kubectl --context={{.name}}": "Pour vous connecter à ce cluster, utilisez la commande \"kubectl --context={{.name}}\".", - "To connect to this cluster, use: kubectl --context={{.name}}__1": "Pour vous connecter à ce cluster, utilisez la commande \"kubectl --context={{.name}}\".", "To connect to this cluster, use: kubectl --context={{.profile_name}}": "Pour vous connecter à ce cluster, utilisez : kubectl --context={{.profile_name}}", "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "Pour désactiver les notifications bêta, exécutez : 'minikube config set WantBetaUpdateNotification false'", - "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "Pour désactiver cette notification, exécutez : 'minikube config set WantUpdateNotification false'\\n", - "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "Pour désactiver les notifications de mise à jour en général, exécutez : 'minikube config set WantUpdateNotification false'\\n", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "Pour désactiver cette notification, exécutez : 'minikube config set WantUpdateNotification false'\n", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "Pour désactiver les notifications de mise à jour en général, exécutez : 'minikube config set WantUpdateNotification false'\n", "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "Pour extraire de nouvelles images externes, vous devrez peut-être configurer un proxy : https://minikube.sigs.k8s.io/docs/reference/networking/proxy/", "To see addons list for other profiles use: `minikube addons -p name list`": "Pour voir la liste des modules pour d'autres profils, utilisez: `minikube addons -p name list`", "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "Pour définir votre projet Google Cloud, exécutez :\n\n\t\tgcloud config set project \u003cproject name\u003e\n\n\n définissez la variable d'environnement GOOGLE_CLOUD_PROJECT.", @@ -701,38 +860,57 @@ "Troubleshooting Commands:": "Commandes de dépannage :", "Try 'minikube delete' to force new SSL certificates to be installed": "Essayez 'minikube delete' pour forcer l'installation de nouveaux certificats SSL", "Try 'minikube delete', and disable any conflicting VPN or firewall software": "Essayez 'minikube delete' et désactivez tout logiciel VPN ou pare-feu en conflit", + "Try one or more of the following to free up space on the device:\n\t\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Essayez une ou plusieurs des solutions suivantes pour libérer de l'espace sur l'appareil :\n\t\n\t\t\t1. Exécutez \"docker system prune\" pour supprimer les données Docker inutilisées (éventuellement avec \"-a\")\n\t\t\t2. Augmentez le stockage alloué à Docker for Desktop en cliquant sur :\n\t\t\t\tIcône Docker \u003e Settings \u003e Ressources \u003e Disk Image Size\n\t\t\t3. Exécutez \"minikube ssh -- docker system prune\" si vous utilisez l'environnement d'exécution du conteneur Docker", + "Try one or more of the following to free up space on the device:\n\t\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Settings \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Essayez une ou plusieurs des solutions suivantes pour libérer de l'espace sur l'appareil :\n\t\n\t\t\t1. Exécutez \"docker system prune\" pour supprimer les données Docker inutilisées (éventuellement avec \"-a\")\n\t\t\t2. Augmentez le stockage alloué à Docker for Desktop en cliquant sur :\n\t\t\t\tIcône Docker \u003e Préférences \u003e Ressources \u003e Taille de l'image disque\n\t\t\t3. Exécutez \"minikube ssh -- docker system prune\" si vous utilisez l'environnement d'exécution du conteneur Docker", + "Try one or more of the following to free up space on the device:\n\t\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Essayez une ou plusieurs des solutions suivantes pour libérer de l'espace sur l'appareil :\n\t\n\t\t\t1. Exécutez \"sudo podman system prune\" pour supprimer les données podman inutilisées\n\t\t\t2. Exécutez \"minikube ssh -- docker system prune\" si vous utilisez l'environnement d'exécution du conteneur Docker", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Essayez une ou plusieurs des solutions suivantes pour libérer de l'espace sur l'appareil :\n\n\t\t\t1. Exécutez « docker system prune » pour supprimer les données Docker inutilisées (éventuellement avec « -a »).\n\t\t\t2. Augmentez l'espace de stockage alloué à Docker for Desktop en cliquant sur :\n\t\t\t\tIcône Docker \u003e Préférences \u003e Ressources \u003e Taille de l'image disque\n\t\t\t3. Exécutez « minikube ssh -- docker system prune » si vous utilisez l'environnement d'exécution de conteneur Docker.", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Essayez une ou plusieurs des solutions suivantes pour libérer de l'espace sur l'appareil :\n\n\t\t\t1. Exécutez « sudo podman system prune » pour supprimer les données podman inutilisées.\n\t\t\t2. Exécutez « minikube ssh -- docker system prune » si vous utilisez l'environnement d'exécution de conteneur Docker.", "Trying to delete invalid profile {{.profile}}": "Tentative de suppression du profil non valide {{.profile}}", - "Unable to bind flags": "Impossible de lier les drapeaux", + "Tunnel successfully started": "Tunnel démarré avec succès", + "Unable to bind flags": "Impossible de lier les indicateurs", "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "Impossible de créer un réseau dédié, cela peut entraîner une modification de l'adresse IP du cluster après le redémarrage : {{.error}}", + "Unable to delete profile(s): {{.error}}": "Impossible de supprimer le ou les profils : {{.error}}", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "Impossible de détecter la dernière version du correctif pour la version major.minor spécifiée v{{.majorminor}}", "Unable to enable dashboard": "Impossible d'activer le tableau de bord", "Unable to fetch latest version info": "Impossible de récupérer les informations sur la dernière version", + "Unable to find any control-plane nodes": "Impossible de trouver des nœuds de plan de contrôle", "Unable to find control plane": "Impossible de trouver le plan de contrôle", "Unable to generate docs": "Impossible de générer des documents", "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "Impossible de générer la documentation. Veuillez vous assurer que le chemin spécifié est un répertoire, existe \u0026 vous avez la permission d'y écrire.", "Unable to get CPU info: {{.err}}": "Impossible d'obtenir les informations sur le processeur : {{.err}}", - "Unable to get bootstrapper: {{.error}}": "Impossible d'obtenir l'amorceur : {{.error}}", "Unable to get command runner": "Impossible d'obtenir le lanceur de commandes", "Unable to get control plane status: {{.error}}": "Impossible d'obtenir l'état du plan de contrôle : {{.error}}", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "Impossible d'obtenir l'état du serveur API du nœud du plan de contrôle {{.name}} (j'en essaierai d'autres) : {{.error}}", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "Impossible d'obtenir l'état du serveur API du nœud du plan de contrôle {{.name}} : {{.error}}", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "Impossible d'obtenir le point de terminaison du nœud du plan de contrôle {{.name}} (j'en essaierai d'autres) : {{.err}}", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "Impossible d'obtenir le point de terminaison du nœud du plan de contrôle {{.name}} : {{.err}}", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "Impossible d'obtenir le nœud du plan de contrôle {{.name}} exécuteur de commande hôte (j'en essaierai d'autres) : {{.err}}", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "Impossible d'obtenir le nœud de plan de contrôle {{.name}} exécuteur de commande hôte : {{.err}}", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "Impossible d'obtenir l'état de l'hôte du nœud du plan de contrôle {{.name}} (j'en essaierai d'autres) : {{.err}}", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "Impossible d'obtenir l'état de l'hôte du nœud du plan de contrôle {{.name}} : {{.err}}", "Unable to get current user": "Impossible d'obtenir l'utilisateur actuel", "Unable to get forwarded endpoint": "Impossible d'obtenir le point de terminaison transféré", "Unable to get machine status": "Impossible d'obtenir l'état de la machine", "Unable to get runtime": "Impossible d'obtenir l'environnement d'exécution", "Unable to kill mount process: {{.error}}": "Impossible d'arrêter le processus de montage : {{.error}}", "Unable to list profiles: {{.error}}": "Impossible de répertorier les profils : {{.error}}", - "Unable to load cached images from config file.": "Impossible de charger les images mises en cache depuis le fichier de configuration.", "Unable to load cached images: {{.error}}": "Impossible de charger les images mises en cache : {{.error}}", "Unable to load config: {{.error}}": "Impossible de charger la configuration : {{.error}}", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "Impossible de charger l'hôte du nœud du plan de contrôle {{.name}} (j'en essaierai d'autres) : {{.err}}", + "Unable to load control-plane node {{.name}} host: {{.err}}": "Impossible de charger le nœud du plan de contrôle {{.name}} hôte : {{.err}}", "Unable to load host": "Impossible de charger l'hôte", "Unable to load profile: {{.error}}": "Impossible de charger le profil : {{.error}}", "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "Impossible d'analyser la version \"{{.kubernetes_version}}\" : {{.error}}", "Unable to parse default Kubernetes version from constants: {{.error}}": "Impossible d'analyser la version Kubernetes par défaut à partir des constantes : {{.error}}", "Unable to parse memory '{{.memory}}': {{.error}}": "Impossible d'analyser la mémoire '{{.memory}}' : {{.error}}", "Unable to parse oldest Kubernetes version from constants: {{.error}}": "Impossible d'analyser la version la plus ancienne de Kubernetes à partir des constantes : {{.error}}", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "Impossible d'analyser version.json : {{.error}}, json : {{.json}}", "Unable to pick a default driver. Here is what was considered, in preference order:": "Impossible de choisir un pilote par défaut. Voici ce qui a été considéré, par ordre de préférence :", - "Unable to pull images, which may be OK: {{.error}}": "Impossible d'extraire des images, qui sont peut-être au bon format : {{.error}}", "Unable to push cached images: {{.error}}": "Impossible de pousser les images mises en cache : {{.error}}", "Unable to remove machine directory": "Impossible de supprimer le répertoire de la machine", "Unable to restart cluster, will reset it: {{.error}}": "Impossible de redémarrer le cluster, va être réinitialisé : {{.error}}", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "Impossible de redémarrer le(s) nœud(s) du plan de contrôle, le cluster sera réinitialisé : {{.error}}", + "Unable to run vmnet-helper without a password": "Impossible d'exécuter vmnet-helper sans mot de passe", "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "Impossible de rétrograder en toute sécurité le cluster Kubernetes v{{.old}} existant vers v{{.new}}", "Unable to stop VM": "Impossible d'arrêter la VM", "Unable to update {{.driver}} driver: {{.error}}": "Impossible de mettre à jour le pilote {{.driver}} : {{.error}}", @@ -750,7 +928,6 @@ "Update server returned an empty list": "Le serveur de mise à jour a renvoyé une liste vide", "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "Mise à jour du {{.machine_type}} {{.driver_name}} en marche \"{{.cluster}}\" ...", "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "Mettez à niveau vers QEMU v3.1.0+, exécutez 'virt-host-validate' ou assurez-vous que vous n'exécutez pas dans un environnement VM imbriqué.", - "Upgrading from Kubernetes {{.old}} to {{.new}}": "Mise à niveau de Kubernetes de la version {{.old}} à la version {{.new}}…", "Usage": "Usage", "Usage: minikube completion SHELL": "Utilisation : minikube completion SHELL", "Usage: minikube delete": "Utilisation: minikube delete", @@ -761,7 +938,7 @@ "Usage: minikube node start [name]": "Utilisation: minikube node start [name]", "Usage: minikube node stop [name]": "Utilisation: minikube node stop [name]", "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "Utilisez \"{{.CommandPath}} [commande] --help\" pour plus d'informations sur une commande.", - "Use 'kubect get po -A' to find the correct and namespace name": "Utilisez 'kubect get po -A' pour trouver le nom correct et l'espace de noms", + "Use 'kubectl get po -A' to find the correct and namespace name": "Utilisez 'kubectl get po -A' pour trouver le nom correct et l'espace de noms", "Use -A to specify all namespaces": "Utilisez -A pour spécifier tous les espaces de noms", "Use SSH connection instead of HTTPS (port 2376)": "Utiliser la connexion SSH au lieu de HTTPS (port 2376)", "Use SSH for running kubernetes client on the node": "Utiliser SSH pour exécuter le client kubernetes sur le nœud", @@ -772,22 +949,29 @@ "User name must be 60 chars or less.": "Le nom d'utilisateur doit comporter 60 caractères ou moins.", "Userspace file server is shutdown": "Le serveur de fichiers de l'espace utilisateur est arrêté", "Userspace file server: ": "Serveur de fichiers de l'espace utilisateur :", + "Using GPUs with the Docker driver is experimental, if you experience any issues please report them at: https://github.com/kubernetes/minikube/issues/new/choose": "L'utilisation de GPU avec le pilote Docker est expérimentale. Si vous rencontrez des problèmes, veuillez les signaler à : https://github.com/kubernetes/minikube/issues/new/choose", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "L'utilisation de Kubernetes v1.24+ avec le runtime Docker nécessite l'installation de cri-docker", + "Using Kubernetes {{.version}} since patch version was unspecified": "Utilisation de Kubernetes {{.version}} car la version du correctif n'a pas été spécifiée", "Using image repository {{.name}}": "Utilisation du dépôt d'images {{.name}}…", "Using image {{.registry}}{{.image}}": "Utilisation de l'image {{.registry}}{{.image}}", "Using image {{.registry}}{{.image}} (global image repository)": "Utilisation de l'image {{.registry}}{{.image}} (référentiel d'images global)", + "Using qemu with 'socket_vmnet' network is experimental": "L'utilisation de qemu avec le réseau 'socket_vmnet' est expérimentale", + "Using qemu with --network=socket for 'socket_vmnet' is experimental": "L'utilisation de qemu avec --network=socket pour 'socket_vmnet' est expérimentale", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "L'utilisation du pilote Docker sans root était nécessaire, mais le Docker actuel ne semble pas sans root. Essayez 'docker context use rootless' .", + "Using rootless driver was required, but the current driver does not seem rootless": "L'utilisation d'un pilote sans root était nécessaire, mais le pilote actuel ne semble pas sans root", + "Using rootless {{.driver_name}} driver": "Utilisation du pilote {{.driver_name}} sans root", "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "L'utilisation du runtime '{{.runtime}}' avec le pilote 'none' est une configuration non testée !", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "L'utilisation de la commande docker-env avec le runtime containerd est une fonctionnalité hautement expérimentale, veuillez fournir des commentaires ou contribuer à l'améliorer", "Using the {{.driver}} driver based on existing profile": "Utilisation du pilote {{.driver}} basé sur le profil existant", "Using the {{.driver}} driver based on user configuration": "Utilisation du pilote {{.driver}} basé sur la configuration de l'utilisateur", - "VM driver is one of: %v": "Le pilote de la VM appartient à : %v", + "Using {{.driver_name}} driver with root privileges": "Utilisation du pilote {{.driver_name}} avec le privilège root", "Valid components are: {{.valid_extra_opts}}": "Les composants valides sont : {{.valid_extra_opts}}", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "Validez vos réseaux KVM. Exécutez : virt-host-validate puis virsh net-list --all", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "La validation n'a pas pu analyser la taille du disque '{{.diskSize}}' : {{.error}}", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "Vérifiez que vos variables d'environnement HTTP_PROXY et HTTPS_PROXY sont correctement définies.", "Verifying Kubernetes components...": "Vérification des composants Kubernetes...", "Verifying dashboard health ...": "Vérification de l'état du tableau de bord...", "Verifying proxy health ...": "Vérification de l'état du proxy...", "Verifying {{.addon_name}} addon...": "Vérification du module {{.addon_name}}...", - "Verifying:": "Vérification :", "Version: {{.version}}": "Version : {{.version}}", "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "VirtualBox et Hyper-V ont un conflit. Utilisez '--driver=hyperv' ou désactivez Hyper-V en utilisant : 'bcdedit /set hypervisorlaunchtype off'", "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "VirtualBox ne peut pas créer de réseau, probablement parce qu'il entre en conflit avec un réseau existant que minikube ne connaît plus. Essayez d'exécuter 'minikube delete'", @@ -796,51 +980,66 @@ "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "VirtualBox est incapable de trouver son interface réseau. Essayez de mettre à niveau vers la dernière version et de redémarrer.", "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "La prise en charge de la virtualisation est désactivée sur votre ordinateur. Si vous exécutez minikube dans une machine virtuelle, essayez '--driver=docker'. Sinon, consultez le manuel du BIOS de votre système pour savoir comment activer la virtualisation.", "Wait failed: {{.error}}": "Échec de l'attente : {{.error}}", - "Wait until Kubernetes core services are healthy before exiting": "Avant de quitter, veuillez patienter jusqu'à ce que les principaux services Kubernetes soient opérationnels.", - "Waiting for SSH access ...": "En attente de l'accès SSH...", - "Waiting for:": "En attente de :", "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "Vous voulez kubectl {{.version}} ? Essayez 'minikube kubectl -- get pods -A'", "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "Emplacement permettant d'accéder aux partages NFS en mode root, la valeur par défaut affichant /nfsshares (pilote hyperkit uniquement).", "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "S'il faut utiliser le commutateur externe sur le commutateur par défaut si le commutateur virtuel n'est pas explicitement spécifié. (pilote hyperv uniquement)", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "Avec --network-plugin=cni, vous devrez fournir votre propre CNI. Voir --cni flag comme alternative conviviale", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "Vous semblez utiliser un proxy, mais votre environnement NO_PROXY n'inclut pas l'IP minikube ({{.ip_address}}).", - "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see {{.documentation_url}} for more details": "Il semble que vous utilisiez un proxy, mais votre environment NO_PROXY n'inclut pas l'adresse IP ({{.ip_address}}) de minikube. Consultez la documentation à l'adresse {{.documentation_url}} pour en savoir plus.", "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "Vous essayez d'exécuter un binaire Windows .exe dans WSL. Pour une meilleure intégration, veuillez utiliser un binaire Linux à la place (Télécharger sur https://minikube.sigs.k8s.io/docs/start/.). Sinon, si vous voulez toujours le faire, vous pouvez le faire en utilisant --force", "You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "Vous essayez d'exécuter le binaire amd64 sur le système M1. Veuillez utiliser le binaire darwin/arm64 à la place (télécharger sur {{.url}}.)", - "You are trying to run windows .exe binary inside WSL, for better integration please use Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "Vous essayez d'exécuter le binaire Windows .exe dans WSL. Pour une meilleure intégration, veuillez utiliser le binaire Linux à la place (Télécharger sur https://minikube.sigs.k8s.io/docs/start/.). Sinon, si vous voulez toujours le faire, vous pouvez le faire en utilisant --force", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "Vous essayez d'exécuter le binaire amd64 sur un système M1.\nVeuillez envisager d'exécuter le binaire darwin/arm64 à la place.\nTéléchargez sur {{.url}}", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "Vous utilisez le pilote QEMU sans réseau dédié, qui ne prend pas en charge les commandes `minikube service` \u0026 `minikube tunnel`.", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.\nTo try the experimental dedicated network see: https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking": "Vous utilisez le pilote QEMU sans réseau dédié, qui ne prend pas en charge les commandes `minikube service` \u0026 `minikube tunnel`.\nPour essayer le réseau dédié expérimental, voir : https://minikube.sigs.k8s.io/docs /drivers/qemu/#networking", + "You can create one using 'minikube start'.\n\t\t": "Vous pouvez en créer un en utilisant 'minikube start'.\n\t\t", "You can delete them using the following command(s): ": "Vous pouvez les supprimer à l'aide de la ou des commandes suivantes :", "You can force an unsupported Kubernetes version via the --force flag": "Vous pouvez forcer une version Kubernetes non prise en charge via l'indicateur --force", "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas ajouter ou supprimer des disques supplémentaires pour un cluster minikube existant. Veuillez d'abord supprimer le cluster.", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier les processeurs d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier la taille du disque pour un cluster minikube existant. Veuillez d'abord supprimer le cluster.", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier la taille de la mémoire d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.", - "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "Vous avez choisi de désactiver le CNI mais le runtime du conteneur \\\"{{.name}}\\\" nécessite CNI", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "Vous ne pouvez pas modifier le nombre de nœuds pour un cluster minikube existant. Veuillez utiliser « minikube node add » pour ajouter des nœuds à un cluster existant.", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "Vous ne pouvez pas modifier l'adresse IP statique d'un cluster minikube existant. Veuillez d'abord supprimer le cluster.", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "Vous ne pouvez pas activer les addons sur un cluster sans Kubernetes, pour activer Kubernetes sur votre cluster, exécutez : minikube start --kubernetes-version=stable", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de fichier JSON associé. Le module complémentaire GCP Auth nécessite des informations d'identification avec un fichier JSON pour continuer.", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue. The image pull secret has been imported.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de fichier JSON associé. Le module complémentaire GCP Auth nécessite des informations d'identification avec un fichier JSON pour continuer. Le secret d'extraction d'image a été importé.", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file in order to continue. The image pull secret has been imported.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de fichier JSON associé. L'authentification GCP nécessite des informations d'identification avec un fichier JSON pour continuer. Le secret d'extraction d'image a été importé.", + "You have authenticated with a service account that does not have an associated JSON. The GCP Auth requires credentials with a JSON file to in order to continue. The image pull secret has been imported.": "Vous vous êtes authentifié avec un compte de service qui n'a pas de fichier JSON associé. L'authentification GCP nécessite des informations d'identification avec un fichier JSON pour continuer. Le secret d'extraction d'image a été importé.", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "Vous avez choisi de désactiver le CNI mais le runtime du conteneur \"{{.name}}\" nécessite CNI", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "Vous avez sélectionné le pilote \"virtualbox\", mais il existe de meilleures options !\nPour de meilleures performances et une meilleure assistance, envisagez d'utiliser un autre pilote: {{.drivers}}\n\nPour désactiver cet avertissement, exécutez :\n\n\t $ minikube config set WantVirtualBoxDriverWarning false\n\n\nPour en savoir plus sur les pilotes minikube, consultez https://minikube.sigs.k8s.io/docs/drivers/\nPour voir les benchmarks, consultez https://minikube.sigs.k8s. io/docs/benchmarks/cpuusage/\n\n", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Vous devrez peut-être supprimer la VM \"{{.name}}\" manuellement de votre hyperviseur.", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "Vous devrez peut-être arrêter le gestionnaire Hyper-V et exécuter à nouveau 'minikube delete'.", - "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "Vous utilisez peut-être une version amd64 de minikube sur un Mac M1, utilisez plutôt la version arm64 de minikube", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "Vous utilisez peut-être une version amd64 de minikube sur un Mac avec puce Apple, utilisez plutôt la version arm64 de minikube", "You must specify a service name": "Vous devez spécifier un nom de service", + "You must specify service name(s) or --all": "Vous devez spécifier le(s) nom(s) de service ou --all", "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "Vos identifiants GCP seront désormais installés dans chaque pod créé dans le cluster {{.name}}.", "Your cgroup does not allow setting memory.": "Votre groupe de contrôle ne permet pas de définir la mémoire.", + "Your firewall is blocking bootpd which is required for socket_vmnet. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "Votre pare-feu bloque bootpd qui est requis pour socket_vmnet. Les commandes suivantes seront exécutées pour débloquer bootpd :\n\n{{.commands}}\n", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "Votre pare-feu bloque bootpd qui est nécessaire pour cette configuration. Les commandes suivantes seront exécutées pour débloquer bootpd :\n\n{{.commands}}\n", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "Votre pare-feu bloque probablement bootpd, pour le débloquer, exécutez :\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr /libexec/bootpd", "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "Votre hébergeur ne prend pas en charge la virtualisation KVM. Assurez-vous que qemu-kvm est installé et exécutez 'virt-host-validate' pour déboguer le problème", "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "Votre hébergeur ne prend pas en charge la virtualisation. Si vous exécutez minikube dans une machine virtuelle, essayez '--driver=docker'. Sinon, activez la virtualisation dans votre BIOS", "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "Votre hôte ne parvient pas à acheminer les paquets vers la machine virtuelle minikube. Si vous disposez d'un logiciel VPN, essayez de le désactiver ou de le configurer afin qu'il ne réachemine pas le trafic vers l'adresse IP de la VM. Sinon, vérifiez les options de routage de votre environnement de machine virtuelle.", "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "Votre configuration minikube fait référence à un pilote non pris en charge. Effacez ~/.minikube et réessayez.", "Your minikube vm is not running, try minikube start.": "Votre minikube vm ne fonctionne pas, essayez de démarrer minikube.", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "Votre utilisateur n'a pas d'autorisations sur le répertoire de profil minikube. Exécutez : 'sudo chown -R $USER $HOME/.minikube ; chmod -R u+wrx $HOME/.minikube' pour corriger", "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "[AVERTISSEMENT] Pour une fonctionnalité complète, le module 'csi-hostpath-driver' nécessite que le module 'volumesnapshots' soit activé.\n\nVous pouvez activer le module 'volumesnapshots' en exécutant : 'minikube addons enable volumesnapshots'\n", - "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "\\\"minikube cache\\\" sera obsolète dans les prochaines versions, veuillez passer à \\\"minikube image load\\\"", "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "Le module '{{.name}}' n'est actuellement pas activé.\nPour activer ce module, exécutez :\nminikube addons enable {{.name}}", "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "Le module '{{.name}}' n'est pas un module valide fourni avec minikube.\nPour voir la liste des modules disponibles, exécutez :\nminikube addons list", "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "addons modifie les fichiers de modules minikube à l'aide de sous-commandes telles que \"minikube addons enable dashboard\"", + "arm64 VM drivers do not currently support containerd or crio container runtimes. See https://github.com/kubernetes/minikube/issues/14146 for details.": "Les pilotes de machine virtuelle arm64 ne prennent actuellement pas en charge les runtimes de conteneur containerd ou crio. Voir https://github.com/kubernetes/minikube/issues/14146 pour plus de détails.", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "Les pilotes de machine virtuelle arm64 ne prennent actuellement pas en charge l'environnement d'exécution du conteneur crio. Voir https://github.com/kubernetes/minikube/issues/14146 pour plus de détails.", "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "Le module auto-pause est une fonctionnalité alpha et encore en développement précoce. Veuillez signaler les problèmes pour nous aider à l'améliorer.", - "auto-pause currently is only supported on docker runtime. Track progress of others here: https://github.com/kubernetes/minikube/issues/10601": "la pause automatique n'est actuellement prise en charge que sur le runtime docker. Suivez les progrès des autres ici : https://github.com/kubernetes/minikube/issues/10601", "bash completion failed": "échec de la complétion bash", "bash completion.": "complétion bash", "call with cleanup=true to remove old tunnels": "appelez avec cleanup=true pour supprimer les anciens tunnels", "cancel any existing scheduled stop requests": "annuler toutes les demandes d'arrêt programmées existantes", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "config modifie les fichiers de configuration de minikube à l'aide de sous-commandes telles que \"minikube config set driver kvm2\"\nChamps configurables : \\n\\n", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "impossible de spécifier --kubernetes-version avec --no-kubernetes,\npour désactiver une configuration globale, exécutez :\n\n$ minikube config unset kubernetes-version", + "config file does not exist": "le fichier de configuration n'existe pas", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "config modifie les fichiers de configuration de minikube à l'aide de sous-commandes telles que \"minikube config set driver kvm2\"\nChamps configurables : \n\n", "config view failed": "échec de la vue de configuration", "containers paused status: {{.paused}}": "état des conteneurs en pause : {{.paused}}", + "dashboard": "tableau de bord", "dashboard service is not running: {{.error}}": "le service de tableau de bord ne fonctionne pas : {{.error}}", "delete ctx": "supprimer ctx", "deleting node": "suppression d'un nœud", @@ -848,47 +1047,74 @@ "dry-run mode. Validates configuration, but does not mutate system state": "mode simulation. Valide la configuration, mais ne modifie pas l'état du système", "dry-run validation complete!": "validation de la simulation terminée !", "enable failed": "échec de l'activation", + "enabled failed": "activation échouée", "error creating clientset": "erreur lors de la création de l'ensemble de clients", + "error creating urls": "erreur lors de la création d'urls", + "error fetching Kubernetes version list from GitHub": "erreur lors de la récupération de la liste des versions de Kubernetes à partir de GitHub", + "error getting control-plane node": "erreur lors de l'obtention du nœud du plan de contrôle", + "error getting defaults: {{.error}}": "erreur lors de l'obtention des valeurs par défaut : {{.error}}", "error getting primary control plane": "erreur lors de l'obtention du plan de contrôle principal", "error getting ssh port": "erreur lors de l'obtention du port ssh", "error initializing tracing: {{.Error}}": "erreur d'initialisation du traçage : {{.Error}}", "error parsing the input ip address for mount": "erreur lors de l'analyse de l'adresse IP d'entrée pour le montage", "error provisioning guest": "erreur lors de l'approvisionnement de l'invité", - "error provisioning host": "erreur lors de l'approvisionnement de l'hôte", "error starting tunnel": "erreur de démarrage du tunnel", "error stopping tunnel": "erreur d'arrêt du tunnel", + "error: --output must be 'text', 'yaml' or 'json'": "erreur : --output doit être 'text', 'yaml' ou 'json'", "error: --output must be 'yaml' or 'json'": "erreur : --output doit être 'yaml' ou 'json'", "experimental": "expérimental", + "extra waiting: {{.error}}": "attente supplémentaire : {{.error}}", + "failed to acquire lock due to unexpected error": "échec de l'acquisition du verrou en raison d'une erreur inattendue", "failed to add node": "échec de l'ajout du nœud", + "failed to load profile: {{.error}}": "échec du chargement du profil : {{.error}}", "failed to open browser: {{.error}}": "échec de l'ouverture du navigateur : {{.error}}", + "failed to restart auto-pause: {{.error}}": "échec du redémarrage de la pause automatique : {{.error}}", "failed to save config": "échec de l'enregistrement de la configuration", + "failed to set cloud shell kubelet config options": "échec de la définition des options de configuration cloud shell kubelet", + "failed to set extra option": "impossible de définir une option supplémentaire", "failed to start node": "échec du démarrage du nœud", + "failed to validate {{.network}} network: {{.reason}}": "échec de validation du réseau {{.network}} : {{.reason}}", + "false": "faux", "fish completion failed": "la complétion fish a échoué", "fish completion.": "complétion fish.", "if true, will embed the certs in kubeconfig.": "si vrai, intégrera les certificats dans kubeconfig.", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "si vous voulez créer un profil vous pouvez par cette commande : minikube start -p {{.profile_name}}", "initialization failed, will try again: {{.error}}": "l'initialisation a échoué, va réessayer : {{.error}}", "invalid kubernetes version": "version kubernetes invalide", + "ip not found": "adresse IP introuvable", + "json encoding failure": "échec de l'encodage json", "keep the kube-context active after cluster is stopped. Defaults to false.": "garder le kube-context actif après l'arrêt du cluster. La valeur par défaut est false.", + "kubeadm certificates have expired. Generating new ones...": "Les certificats kubeadm ont expiré. Générer de nouveaux...", "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm a détecté un conflit de port TCP avec un autre processus : probablement une autre installation locale de Kubernetes. Exécutez lsof -p\u003cport\u003e pour trouver le processus et le tuer", "kubectl and minikube configuration will be stored in {{.home_folder}}": "Les configurations kubectl et minikube seront stockées dans le dossier {{.home_folder}}.", "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl introuvable. Si vous en avez besoin, essayez : 'minikube kubectl -- get pods -A'", "kubectl proxy": "proxy kubectl", "libmachine failed": "libmachine a échoué", - "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "la liste affiche tous les paramètres par défaut valides pour PROPERTY_NAME\nChamps acceptables : \\n\\n", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "la liste affiche tous les paramètres par défaut valides pour PROPERTY_NAME\nChamps acceptables : \n\n", "list versions of all components included with minikube. (the cluster must be running)": "répertorier les versions de tous les composants inclus avec minikube. (le cluster doit être en cours d'exécution)", "loading profile": "profil de chargement", "max time to wait per Kubernetes or host to be healthy.": "temps d'attente maximal par Kubernetes ou hôte pour être en bonne santé.", - "minikube addons list --output OUTPUT. json, list": "liste des modules minikube --output OUTPUT. json, liste", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", + "minikube addons list --output OUTPUT. json, list": "", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "minikube ne peut pas extraire l'image kicbase d'un registre Docker et essaie de télécharger l'archive tar kicbase à partir de la page de version de github via HTTP.", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "minikube ne prend pas encore en charge le pilote de stockage BTRFS, il existe une solution de contournement, ajoutez l'indicateur suivant à votre commande de démarrage `--feature-gates=\"LocalStorageCapacityIsolation=false\"`", "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "minikube manque des fichiers relatifs à votre environnement invité. Cela peut être corrigé en exécutant 'minikube delete'", "minikube is not meant for production use. You are opening non-local traffic": "minikube n'est pas destiné à une utilisation en production. Vous ouvrez du trafic non local", "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "minikube ne peut pas accéder à Google Container Registry. Vous devrez peut-être le configurer pour utiliser un proxy HTTP.", "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "minikube ne parvient pas à se connecter à la VM : {{.error}}\n\n\tCela est probablement dû à l'une des deux raisons suivantes :\n\n\t- Interférence VPN ou pare-feu\n\t- {{.hypervisor}} problème de configuration réseau\n\n\tSolutions suggérées :\n\n\t- Désactivez votre logiciel VPN ou pare-feu local\n\t- Configurez votre VPN ou pare-feu local pour autoriser l'accès à {{.ip}}\n \t- Redémarrez ou réinstallez {{.hypervisor}}\n\t- Utilisez un autre --vm-driver\n\t- Utilisez --force pour annuler cette vérification de connectivité\n\t", + "minikube mount is not currently implemented with the builtin network on QEMU": "Le montage minikube n'est pas actuellement implémenté avec le réseau intégré sur QEMU", + "minikube mount is not currently implemented with the user network on QEMU": "Le montage minikube n'est pas actuellement implémenté avec le réseau utilisateur sur QEMU", "minikube profile was successfully set to {{.profile_name}}": "Le profil de minikube a été défini avec succès sur {{.profile_name}}", "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube provisionne et gère des clusters Kubernetes locaux optimisés pour les workflows de développement.", "minikube quickly sets up a local Kubernetes cluster": "minikube configure rapidement un cluster Kubernetes local", + "minikube service is not currently implemented with the builtin network on QEMU": "Le service minikube n'est pas actuellement implémenté avec le réseau intégré sur QEMU", + "minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "Le service minikube n'est actuellement pas implémenté avec le pilote qemu2. Voir https://github.com/kubernetes/minikube/issues/14146 pour plus de détails.", + "minikube service is not currently implemented with the user network on QEMU": "Le service minikube n'est pas actuellement implémenté avec le réseau utilisateur sur QEMU", "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "minikube ignore diverses validations lorsque --force est fourni ; cela peut conduire à un comportement inattendu", "minikube status --output OUTPUT. json, text": "état minikube --sortie SORTIE. json, texte", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "Le tunnel minikube n'est pas actuellement implémenté avec le réseau intégré sur QEMU", + "minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "Le tunnel minikube n'est actuellement pas implémenté avec le pilote qemu2. Voir https://github.com/kubernetes/minikube/issues/14146 pour plus de détails.", + "minikube tunnel is not currently implemented with the user network on QEMU": "Le tunnel minikube n'est pas actuellement implémenté avec le réseau utilisateur sur QEMU", "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} est disponible ! Téléchargez-le ici : {{.url}}", "mkcmp is used to compare performance of two minikube binaries": "mkcmp est utilisé pour comparer les performances de deux binaires minikube", "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "argument de montage \"{{.value}}\" doit être de la forme : \u003cdossier source\u003e:\u003cdossier de destination\u003e", @@ -897,28 +1123,35 @@ "namespaces to pause": "espaces de noms à mettre en pause", "namespaces to unpause": "espaces de noms à réactiver", "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "réseau avec lequel exécuter minikube. Maintenant, il est utilisé par les pilotes docker/podman et KVM. Si laissé vide, minikube créera un nouveau réseau.", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "Réseau pour exécuter Minikube. Utilisé par les pilotes Docker/Podman, Qemu, KVM et VfKit. Si ce champ est vide, Minikube crée un nouveau réseau.", "none driver does not support multi-node clusters": "aucun pilote ne prend pas en charge les clusters multi-nœuds", - "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "pas assez d'arguments ({{.ArgCount}}).\\nusage : minikube config set PROPERTY_NAME PROPERTY_VALUE", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "pas assez d'arguments ({{.ArgCount}}).\nusage : minikube config set PROPERTY_NAME PROPERTY_VALUE", "numa node is only supported on k8s v1.18 and later": "le nœud numa n'est pris en charge que sur k8s v1.18 et versions ultérieures", "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "format de sortie (EXPERIMENTAL, JSON uniquement) : 'nodes' ou 'cluster'", "pause Kubernetes": "met Kubernetes en pause", - "preload extraction failed: \\\"No space left on device\\\"": "échec de l'extraction du préchargement : \\\"Pas d'espace disponible sur l'appareil\\\"", + "powershell completion failed": "La complétion powershell a échoué", + "powershell completion.": "Complétion powershell.", + "preload extraction failed: \"No space left on device\"": "échec de l'extraction du préchargement : \"Pas d'espace disponible sur l'appareil\"", "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "profile définit le profil courrant de minikube, ou obtient le profil actuel si aucun argument n'est fourni. Ceci est utilisé pour exécuter et gérer plusieurs instances de minikube. Vous pouvez revenir au profil par défaut du minikube en exécutant `minikube profile default`", "provisioning host for node": "provisionne un hôte pour le nœud", "reload cached images.": "recharge les cache des images.", "reloads images previously added using the 'cache add' subcommand": "recharge les images précédemment ajoutées à l'aide de la sous-commande 'cache add'", "retrieving node": "récupération du nœud", "scheduled stop is not supported on the none driver, skipping scheduling": "l'arrêt programmé n'est pas pris en charge sur le pilote none, programmation non prise en compte", + "service not available": "service non disponible", "service {{.namespace_name}}/{{.service_name}} has no node port": "le service {{.namespace_name}}/{{.service_name}} n'a pas de port de nœud", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "définit l'adresse de liaison du tunnel, vide ou '*' indique que le tunnel doit être disponible pour toutes les interfaces", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "socket_vmnet a été installé avec un groupe incorrect, supprimez ce cluster 'minikube delete' et mettez à jour le groupe 'sudo chown root:$(id -ng) /var/run/socket_vmnet' et réessayez.", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "socket_vmnet n'a pas été trouvé sur le système, résolvez le par :\n\n\t\tOption 1) Installation de socket_vmnet :\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/ #networking\n\n\t\tOption 2) Utilisation du réseau utilisateur :\n\n\t\t minikube start{{.profile}} --driver qemu --network user", "stat failed": "stat en échec", "status json failure": "état du JSON en échec", "status text failure": "état du texte en échec", - "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "toom tous les arguments ({{.ArgCount}}).\\nusage : jeu de configuration de minikube PROPERTY_NAME PROPERTY_VALUE", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "trop d'arguments ({{.ArgCount}}).\nusage : jeu de configuration de minikube PROPERTY_NAME PROPERTY_VALUE", + "true": "vrai", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "le tunnel crée une route vers les services déployés avec le type LoadBalancer et définit leur Ingress sur leur ClusterIP. Pour un exemple détaillé, voir https://minikube.sigs.k8s.io/docs/tasks/loadbalancer", "unable to bind flags": "impossible de lier les configurations", "unable to daemonize: {{.err}}": "impossible de démoniser : {{.err}}", "unable to delete minikube config folder": "impossible de supprimer le dossier de configuration de minikube", - "unable to set logtostderr": "impossible de définir logtostderr", "unpause Kubernetes": "réactive Kubernetes", "unset failed": "échec de la déconfiguration", "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "déconfigure PROPERTY_NAME du fichier de configuration de minikube. Peut-être écrasé par des arguments ou variables d'environnement", @@ -931,35 +1164,51 @@ "usage: minikube addons images ADDON_NAME": "utilisation: minikube addons images ADDON_NAME", "usage: minikube addons list": "utilisation : minikube addons list", "usage: minikube addons open ADDON_NAME": "utilisation : minikube addons open ADDON_NAME", + "usage: minikube config list PROPERTY_NAME": "utilisation : minikube config list PROPERTY_NAME", "usage: minikube config unset PROPERTY_NAME": "utilisation : minikube config unset PROPERTY_NAME", "usage: minikube delete": "utilisation : minikube delete", "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "utilisation : minikube profile [MINIKUBE_PROFILE_NAME]", "using metrics-server addon, heapster is deprecated": "utilisation du module metrics-server, heapster est obsolète", "version json failure": "échec de la version du JSON", "version yaml failure": "échec de la version du YAML", + "vmnet-helper was not found on the system, resolve by:\n\n\t\tOption 1) Installing vmnet-helper:\n\n\t\t https://github.com/nirs/vmnet-helper#installation\n\n\t\tOption 2) Using the nat network:\n\n\t\t minikube start{{.profile}} --driver vfkit --network nat": "vmnet-helper n'a pas été trouvé sur le système, résolvez le problème par :\n\n\t\tOption 1) Installation de vmnet-helper :\n\n\t\t https://github.com/nirs/vmnet-helper#installation\n\n\t\tOption 2) Utilisation du réseau NAT :\n\n\t\t minikube start{{.profile}} --driver vfkit --network nat", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "vmnet-helper est introuvable sur le système.\n\n\t\tVeuillez installer vmnet-helper en suivant ces instructions :\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\thttps://github.com/nirs/vmnet-helper#installation": "vmnet-helper est introuvable sur le système.\n\n\t\tVeuillez installer vmnet-helper en suivant ces instructions :\n\n\t\thttps://github.com/nirs/vmnet-helper#installation", + "yaml encoding failure": "échec de l'encodage yaml", "zsh completion failed": "complétion de zsh en échec", "zsh completion.": "complétion zsh.", "{{ .name }}: Suggestion: {{ .suggestion}}": "{{ .name }}: Suggestion: {{ .suggestion}}", "{{ .name }}: {{ .rejection }}": "{{ .name }} : {{ .rejection }}", "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "{{.Driver}} utilise actuellement le pilote de stockage {{.StorageDriver}}, envisagez de passer à overlay2 pour de meilleures performances", - "{{.count}} nodes stopped.": "{{.count}} nœud(s) arrêté(s).", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "{{.Driver}} utilise actuellement le pilote de stockage {{.StorageDriver}}, définition de preload=false", + "{{.addon}} does not currently have an associated maintainer.": "{{.addon}} n'a actuellement pas de mainteneur associé.", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "{{.addon}} est un module complémentaire tiers et non maintenu ou vérifié par les mainteneurs de minikube, activez-le à vos risques et périls.", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "{{.addon}} est un addon maintenu par {{.maintainer}}. Pour toute question, contactez minikube sur GitHub.\nVous pouvez consulter la liste des mainteneurs de minikube sur : https://github.com/kubernetes/minikube/blob/master/OWNERS", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "{{.addon}} est maintenu par {{.maintainer}} pour tout problème, contactez {{.verifiedMaintainer}} sur GitHub.", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "{{.count}} nœud{{if gt .count 1}}s{{end}} arrêté{{if gt .count 1}}s{{end}}.", "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} est manquant, il va être recréé.", "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "{{.driver_name}} n'a pas pu continuer car le service {{.driver_name}} n'est pas fonctionnel.", "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "{{.driver_name}} dispose de moins de 2 processeurs disponibles, mais Kubernetes nécessite au moins 2 procésseurs pour fonctionner", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "{{.driver_name}} ne dispose que de {{.container_limit}}Mo de mémoire, mais vous avez spécifié {{.specified_memory}}Mo", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "{{.driver}} ne dispose que de {{.size}}Mio disponible, moins que les {{.req}}Mio requis pour Kubernetes", + "{{.env}}={{.value}}": "", + "{{.err}}": "{{.err}}", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "{{.extra_option_component_name}}.{{.key}}={{.value}}", "{{.name}} doesn't have images.": "{{.name}} n'a pas d'images.", "{{.name}} has following images:": "{{.name}} a les images suivantes :", "{{.name}} has no available configuration options": "{{.name}} n'a pas d'options de configuration disponible", + "{{.name}} has the following images:": "{{.name}} a les images suivantes :", "{{.name}} is already running": "{{.name}} est déjà en cours d'exécution", "{{.name}} was successfully configured": "{{.name}} a été configuré avec succès", "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "{{.n}} manque presque d'espace disque, ce qui peut entraîner l'échec des déploiements ! ({{.p}} % de la capacité)", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} est presque à court d'espace disque, ce qui peut entraîner l'échec des déploiements ! ({{.p}} % de la capacité). Vous pouvez passer '--force' pour ignorer cette vérification.", "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "{{.n}} n'a plus d'espace disque ! (/var est à {{.p}} % de capacité)", - "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} prend un temps anormalement long pour répondre, pensez à redémarrer {{.ocibin}}", - "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "{{.path}} est la version {{.client_version}}, qui peut comporter des incompatibilités avec Kubernetes {{.cluster_version}}.", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} n'a plus d'espace disque ! (/var est à {{.p}} % de la capacité). Vous pouvez passer '--force' pour ignorer cette vérification.", + "{{.ociBin}} rmi {{.images}}": "{{.ociBin}} rmi {{.images}}", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} prend un temps anormalement long pour répondre, pensez à redémarrer {{.ocibin}}", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "{{.path}} est la version {{.client_version}}, qui peut comporter des incompatibilités avec Kubernetes {{.cluster_version}}.", "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} sur {{.platform}}", "{{.profile}} profile is not valid: {{.err}}": "Le profil {{.profile}} n'est pas valide : {{.err}}", "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} n'est pas encore un système de fichiers pris en charge. Nous essaierons quand même !", "{{.url}} is not accessible: {{.error}}": "{{.url}} n'est pas accessible : {{.error}}" -} \ No newline at end of file +} diff --git a/translations/id.json b/translations/id.json new file mode 100644 index 000000000000..84ddd9adeb2e --- /dev/null +++ b/translations/id.json @@ -0,0 +1,1094 @@ +{ + "\n\n": "", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "\"'{{.minikube_addon}}' bukan add-on minikube yang valid", + "\"The '{{.minikube_addon}}' addon is disabled": "\"'{{.minikube_addon}}' add-on dinonaktifkan", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"", + "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "\"{{.context}}\" konteks telah diperbarui untuk merujuk ke {{.hostname}}:{{.port}}", + "\"{{.machineName}}\" does not exist, nothing to stop": "\"{{.machineName}}\" tidak ada, tidak ada yang bisa dihentikan", + "\"{{.name}}\" profile does not exist, trying anyways.": "\"{{.name}}\" profil tidak ada, tetap mencoba.", + "'none' driver does not support 'minikube docker-env' command": "'none' driver tidak mendukung perintah 'minikube docker-env'", + "'none' driver does not support 'minikube mount' command": "'none' driver tidak mendukung perintah 'minikube mount'", + "'none' driver does not support 'minikube podman-env' command": "'none' driver tidak mendukung perintah 'minikube podman-env'", + "'none' driver does not support 'minikube ssh' command": "'none' driver tidak mendukung perintah 'minikube ssh'", + "'none' driver does not support 'minikube ssh-host' command": "'none' driver tidak mendukung perintah 'minikube ssh-host'", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" untuk SSH ke dalam node minikube.\n- \"minikube docker-env\" untuk mengarahkan docker-cli anda ke docker di dalam minikube.\n- \"minikube image\" untuk membuat image tanpa menggunakan docker.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" untuk SSH ke dalam node minikube.\n- \"minikube image\" untuk membuat image tanpa docker.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" untuk SSH ke dalam node minikube..\n- \"minikube podman-env\" untuk mengarahkan podman-cli anda ke podman di dalam minikube.\n- \"minikube image\" untuk membuat image tanpa menggunakan docker.", + "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "- Hapus dan buat ulang minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}", + "- Docs https://docs.docker.com/docker-for-mac/#resources": "- Dokumentasi https://docs.docker.com/docker-for-mac/#resources", + "- Docs https://docs.docker.com/docker-for-windows/#resources": "- Dokumentasi https://docs.docker.com/docker-for-windows/#resources", + "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "- Pastikan daemon {{.driver_name}} anda memiliki akses ke sumber daya CPU/memori yang cukup.", + "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "- Bersihkan image, volume, jaringan, dan container yang tidak terpakai untuk {{.driver_name}}.\n\n\t\t\t\tGunakan perintah: {{.driver_name}} system prune --volumes", + "- Restart your {{.driver_name}} service": "- Mulai ulang layanan {{.driver_name}} anda", + "--kvm-numa-count range is 1-8": "--kvm-numa-count berkisar di 1-8", + "--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored": "--network flag hanya valid dengan driver docker/podman, KVM dan Qemu, maka akan diabaikan", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "--network dengan QEMU harus 'builtin' atau 'socket_vmnet'", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "--static-ip hanya diterapkan pada driver Docker dan Podman, flag akan diabaikan", + "--static-ip overrides --subnet, --subnet will be ignored": "--static-ip menimpa --subnet, --subnet akan diabaikan", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Buat kembali klaster dengan Kubernetes {{.new}}, dengan menjalankan:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Buat klaster kedua dengan Kubernetes {{.new}}, dengan menjalankan:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Gunakan klaster yang ada pada versi Kubernetes {{.old}}, dengan menjalankan:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Klik ikon menu \"Docker untuk Desktop\"\n\t\t\t2. Klik \"Preferensi\"\n\t\t\t3. Klik \"Sumber Daya\"\n\t\t\t4. Tingkatkan bilah penggeser \"CPU\" ke 2 atau lebih tinggi\n\t\t\t5. Klik \"Terapkan \u0026 Mulai Ulang\"", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Klik ikon menu \"Docker untuk Desktop\"\n\t\t\t2. Klik \"Preferensi\"\n\t\t\t3. Klik \"Sumber Daya\"\n\t\t\t4. Tingkatkan bilah penggeser \"Memori\" ke {{.recommend}} atau lebih tinggi\n\t\t\t5. Klik \"Terapkan \u0026 Mulai Ulang\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. Buka menu \"Docker Desktop\" dengan mengklik ikon Docker di baki sistem\n\t\t2. Klik \"Pengaturan\"\n\t\t3. Klik \"Sumber Daya\"\n\t\t4. Tingkatkan bilah penggeser \"CPU\" ke 2 atau lebih tinggi\n\t\t5. Klik \"Terapkan \u0026 Mulai Ulang\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. Buka menu \"Docker Desktop\" dengan mengklik ikon Docker di baki sistem\n\t\t2. Klik \"Pengaturan\"\n\t\t3. Klik \"Sumber Daya\"\n\t\t4. Tingkatkan bilah penggeser \"Memori\" ke {{.recommend}} atau lebih tinggi\n\t\t5. Klik \"Terapkan \u0026 Mulai Ulang\"", + "==\u003e Audit \u003c==": "==\u003e Audit \u003c==", + "==\u003e Last Start \u003c==": "==\u003e Terakhir kali berjalan \u003c==", + "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "VPN atau firewall mengganggu akses HTTP ke VM minikube. Alternatifnya, coba driver VM lain: https://minikube.sigs.k8s.io/docs/start/", + "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "Firewall memblokir Docker, VM minikube, agar tidak mencapai repositori image. Anda mungkin perlu memilih --image-repository, atau menggunakan proxy.", + "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "Firewall mengganggu kemampuan minikube untuk membuat permintaan HTTPS keluar. Anda mungkin perlu mengubah nilai environment variabel HTTPS_PROXY.", + "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "Firewall kemungkinan memblokir minikube untuk menjangkau internet. Anda mungkin perlu mengkonfigurasi minikube untuk menggunakan proxy.", + "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "A set of key=value pairs that describe feature gates for alpha/experimental features.": "Sekumpulan pasangan key=value yang menjelaskan gerbang fitur untuk fitur alpha/experimental.", + "Access the Kubernetes dashboard running within the minikube cluster": "Akses dasbor Kubernetes yang berjalan di dalam klaster minikube", + "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "Akses ke port di bawah 1024 mungkin gagal di Windows dengan klien OpenSSH yang lebih lama dari v8.1. Untuk informasi lebih lanjut, lihat: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission", + "Add SSH identity key to SSH authentication agent": "Tambahkan kunci identitas SSH ke agen autentikasi SSH", + "Add an image into minikube as a local cache, or delete, reload the cached images": "Tambahkan image ke minikube sebagai cache lokal, atau hapus, muat ulang image yang di-cache", + "Add an image to local cache.": "Tambahkan sebuah image untuk cache lokal.", + "Add host key to SSH known_hosts file": "Tambahkan host key untuk file SSH known_hosts", + "Add image to cache for all running minikube clusters": "Tambahkan image ke cache untuk semua cluster minikube yang berjalan", + "Add machine IP to NO_PROXY environment variable": "Tambahkan IP mesin ke environment variable NO_PROXY", + "Add, remove, or list additional nodes": "Tambahkan, hapus, atau daftarkan node tambahan", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "Menambahkan node control plane ke klaster non-HA (bidang non-multi-kontrol) saat ini tidak didukung. Harap hapus klaster terlebih dahulu dan gunakan 'minikube start --ha' untuk membuat yang baru.", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "Tambahkan node {{.name}} ke klaster {{.cluster}} sebagai {{.roles}}", + "Additional help topics": "Topik bantuan tambahan", + "Adds a node to the given cluster config, and starts it.": "Menambahkan node ke konfigurasi klaster yang diberikan, dan memulainya.", + "Adds a node to the given cluster.": "Menambahkan node ke klaster yang diberikan.", + "Advanced Commands:": "Perintah Lanjutan", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "Setelah addon diaktifkan, jalankan \"minikube tunnel\" dan sumber ingress resources anda akan tersedia di \"127.0.0.1\"", + "Aliases": "Alias", + "All existing scheduled stops cancelled": "Semua jadwal yang ada dibatalkan", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "Izinkan pod menggunakan GPU anda. Opsinya meliputi: [all,nvidia,amd] (driver Docker dengan runtime container Docker saja)", + "Allow user prompts for more information": "Izinkan prompts pengguna untuk informasi lebih lanjut", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Repositori image alternatif untuk mengambil image docker. Ini dapat digunakan ketika anda memiliki akses terbatas ke gcr.io. Setel ke \"auto\" agar minikube dapat memutuskannya untuk anda. Untuk pengguna daratan Tiongkok, Anda dapat menggunakan mirror gcr.io lokal seperti registry.cn-hangzhou.aliyuncs.com/google_containers", + "Alternatively you could install one of these drivers:": "Alternatifnya, anda dapat menginstal salah satu driver ini", + "Amount of time to wait for a service in seconds": "Jumlah waktu menunggu layanan dalam hitungan detik", + "Amount of time to wait for service in seconds": "Jumlah waktu menunggu layanan dalam hitungan detik", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "Hypervisor lain, seperti VirtualBox, bertentangan dengan KVM. Harap hentikan hypervisor lainnya, atau gunakan --driver untuk beralih ke hypervisor tersebut.", + "Another minikube instance is downloading dependencies... ": "Instance minikube yang lain sedang mengunduh dependensi...", + "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "Program lain menggunakan file yang dibutuhkan oleh minikube. Jika anda menggunakan Hyper-V, coba hentikan VM minikube dari dalam manajer Hyper-V", + "Another tunnel process is already running, terminate the existing instance to start a new one": "Tunnel lainnya sudah berjalan, hentikan instance yang ada untuk memulai yang baru", + "At least needs control plane nodes to enable addon": "Setidaknya memerlukan node control plane untuk mengaktifkan addon", + "Automatically selected the {{.driver}} driver": "Otomatis memilih driver {{.driver}}", + "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Otomatis memilih driver {{.driver}}. Pilihan lain: {{.alternates}}", + "Automatically selected the {{.network}} network": "Otomatis memilih jaringan {{.network}}", + "Available Commands": "Perintah yang Tersedia", + "Basic Commands:": "Perintah Dasar", + "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Karena anda menggunakan driver Docker di {{.operating_system}}, terminal harus terbuka untuk menjalankannya.", + "Bind Address: {{.Address}}": "Bind ke alamat: {{.Address}}", + "Booting up control plane ...": "Mem-boot control plane ...", + "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "Driver={{.driver}} dan vm-driver={{.vmd}} telah disetel.\n\n Karena vm-driver tidak digunakan lagi, minikube akan default ke driver={{.driver}}.\n\n Jika vm-driver disetel di konfigurasi global, jalankan \"minikube config unset vm-driver\" untuk mengatasi peringatan ini.\n\t\t\t", + "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "Bridge CNI tidak kompatibel dengan klaster multi-node, gunakan CNI yang berbeda", + "Build a container image in minikube": "Buat sebuah container image di minikube", + "Build a container image, using the container runtime.": "Buat sebuah container image, menggunakan container runtime.", + "Build image on all nodes.": "Buat image di semua node.", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "Alokasi CGroup tidak tersedia di lingkungan anda, anda mungkin menjalankan minikube dalam container bertingkat. Coba jalankan:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "Alokasi CGroup tidak tersedia di lingkungan anda. anda mungkin menjalankan minikube dalam container bertingkat. Coba jalankan:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "Plugin CNI untuk digunakan. Opsi yang valid: otomatis, bridge, calico, cilium, flannel, kindnet, atau jalur ke manifes CNI (default: otomatis)", + "Cache image from docker daemon": "Cache image dari docker daemon", + "Cache image from remote registry": "Cache image dari registri jarak jauh", + "Cache image to docker daemon": "Cache image ke docker daemon", + "Cache image to remote registry": "Cache image ke registri jarak jauh", + "Cannot find directory {{.path}} for copy": "Tidak dapat menemukan direktori {{.path}} untuk disalin", + "Cannot find directory {{.path}} for mount": "Tidak dapat menemukan direktori {{.path}} untuk di-mounting", + "Cannot use both --output and --format options": "Tidak dapat menggunakan opsi --output dan --format", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "Tidak dapat menggunakan opsi --no-kubernetes pada driver {{.name}}", + "Certificate {{.certPath}} has expired. Generating a new one...": "Sertifikat {{.certPath}} telah kedaluwarsa. Menghasilkan yang baru...", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "Mengubah port server API dari klaster minikube HA (multi-control plane) yang ada saat ini tidak didukung. Harap hapus klasternya terlebih dahulu.", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "Mengubah mode HA (multi-control plane) pada klaster minikube yang ada saat ini tidak didukung. Harap hapus klaster terlebih dahulu dan gunakan 'minikube start --ha' untuk membuat yang baru.", + "Check if you have unnecessary pods running by running 'kubectl get po -A": "Periksa apakah anda menjalankan pod yang tidak diperlukan dengan menjalankan 'kubectl get po -A", + "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "Periksa output 'journalctl -xeu kubelet', coba tambahkan --extra-config=kubelet.cgroup-driver=systemd pada perintah minikube start", + "Check that libvirt is setup properly": "Periksa apakah libvirt sudah diatur dengan benar", + "Check that the provided apiserver flags are valid, and that SELinux is disabled": "Periksa apakah flag apiserver yang diberikan valid atau tidak, dan SELinux sudah dinonaktifkan", + "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "Periksa aturan firewall anda untuk kemungkinan gangguan, dan jalankan 'virt-host-validate' untuk memeriksa masalah konfigurasi KVM. Jika anda menjalankan minikube di dalam VM, pertimbangkan untuk menggunakan --driver=none.", + "Choose a smaller value for --memory, such as 2000": "Pilih nilai yang lebih kecil untuk --memory, misalnya 2000", + "ChromeOS is missing the kernel support necessary for running Kubernetes": "ChromeOS tidak memiliki kernel yang mendukung untuk menjalankan Kubernetes", + "Cluster was created without any CNI, adding a node to it might cause broken networking.": "Cluster dibuat tanpa CNI apa pun, menambahkan node ke dalamnya mungkin menyebabkan jaringan rusak.", + "Configuration and Management Commands:": "Konfigurasi dan Perintah:", + "Configure a default route on this Linux host, or use another --driver that does not require it": "Konfigurasikan rute default pada host Linux ini, atau gunakan --driver lain yang tidak memerlukannya", + "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "Konfigurasikan external network switch dengan mengikuti dokumentasi resmi, lalu tambahkan argumen `--hyperv-virtual-switch=\u003cswitch-name\u003e` ke `minikube start`", + "Configure environment to use minikube's Podman service": "Konfigurasikan environment untuk menggunakan layanan Podman minikube", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "Mengonfigurasi add-on dengan ADDON_NAME dalam minikube (contoh: minikube addons configure registry-creds). Untuk daftar add-on yang tersedia, gunakan: minikube addons list", + "Configuring RBAC rules ...": "Konfigurasi aturan RBAC...", + "Configuring local host environment ...": "Mengonfigurasi environment host lokal ...", + "Configuring {{.name}} (Container Networking Interface) ...": "Mengonfigurasi {{.name}} (Container Networking Interface (CNI)) ...", + "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "Konfirmasi bahwa anda memiliki koneksi internet yang berfungsi dan VM anda tidak kehabisan sumber daya dengan menggunakan: 'minikube logs'", + "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "Konfirmasi bahwa anda telah memberikan nilai yang benar ke --hyperv-virtual-switch menggunakan perintah 'Get-VMSwitch'", + "Connect to LoadBalancer services": "Konek ke servis LoadBalancer", + "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "Pertimbangkan untuk membuat klaster dengan ukuran memori yang lebih besar dengan menggunakan perintah `minikube start --memory SIZE_MB`", + "Consider increasing Docker Desktop's memory size.": "Pertimbakan untuk meningkatkan ukuran memori dari Docker Desktop.", + "Continuously listing/getting the status with optional interval duration.": "Terus mendaftar/mendapatkan status dengan durasi interval opsional.", + "Control Plane could not update, try minikube delete --all --purge": "Control Plane tidak bisa ter-update, coba gunakan minikube delete --all --purge", + "Copy the specified file into minikube": "Salin spesifik file ke dalam minikube", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "Salin file yang ditentukan ke minikube, itu akan disimpan di path \u003ctarget file absolute path\u003e di minikube anda.\nDefault target node controlplane dan Jika \u003csource node name\u003e dihilangkan, ia akan mencoba menyalin dari host.\n\nContoh Perintah : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"", + "Could not determine a Google Cloud project, which might be ok.": "Tidak dapat menentukan proyek Google Cloud, dan mungkin tidak masalah.", + "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "Tidak dapat menemukan kredensial GCP apa pun. Jalankan `gcloud auth application-default login` atau setel environtment variabel GOOGLE_APPLICATION_CREDENTIALS ke path file kredensial anda.", + "Could not process error from failed deletion": "Tidak dapat memproses kesalahan akibat penghapusan yang gagal", + "Could not process errors from failed deletion": "Tidak dapat memproses kesalahan akibat penghapusan yang gagal", + "Could not resolve IP address": "Tidak dapat menyelesaikan alamat IP", + "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "Kode negara mirror image yang akan digunakan. Biarkan kosong untuk menggunakan yang global. Untuk pengguna daratan Tiongkok, setel ke cn.", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "Buat Highly Available Multi-Control Plane Cluster dengan minimum tiga node contorl-plane yang juga akan ditandai untuk berfungsi.", + "Creating mount {{.name}} ...": "Membuat mount {{.name}} ...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Membuat {{.driver_name}} {{.machine_type}} (CPU={{.number_of_cpus}}, Memori={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "Membuat {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...", + "Current context is \"{{.context}}\"": "Konteks saat ini adalah \"{{.context}}\"", + "DEPRECATED, use `driver` instead.": "DEPRECATED, gunakan `driver` sebagai gantinya.", + "DEPRECATED: Replaced by --cni": "DEPRECATED: ganti dengan --cni", + "DEPRECATED: Replaced by --cni=bridge": "DEPRECATED: ganti dengan --cni=bridge", + "Delete an image from the local cache.": "Hapus image dari local cache", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "Hapus cluster '{{.name}}' yang ada menggunakan: '{{.delcommand}}', atau mulai klaster '{{.name}}' yang ada menggunakan: '{{.command}} --driver={{.old}}'", + "Deletes a local Kubernetes cluster": "Menghapus klaster Kubernetes lokal", + "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Menghapus klaster Kubernetes lokal. Perintah ini menghapus VM, dan menghapus semua\nfile terkait.", + "Deletes a node from a cluster.": "Hapus node dari klaster", + "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "Menghapus \"{{.profile_name}}\" di {{.driver_name}} ...", + "Deleting container \"{{.name}}\" ...": "Menghapus container \"{{.name}}\" ...", + "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "Menghapus cluster yang ada {{.name}} dengan driver yang berbeda {{.driver_name}} karena flag --delete-on-failure yang disetel oleh pengguna.", + "Deleting node {{.name}} from cluster {{.cluster}}": "Menghapus node {{.name}} dari klaster {{.cluster}}", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "", + "Directory to output licenses to": "Direktori untuk mengeluarkan lisensi ke", + "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "Nonaktifkan pemeriksaan ketersediaan virtualisasi perangkat keras sebelum vm dimulai (khusus driver virtualbox)", + "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "Nonaktifkan memori dinamis di manajer VM anda, atau teruskan dengan nilai --memory yang lebih besar", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "Menonaktifkan addon w/ADDON_NAME dalam minikube (contoh: minikube addons disable dashboard). Untuk daftar add-on yang tersedia, gunakan: minikube addons list", + "Disables the filesystem mounts provided by the hypervisors": "Menonaktifkan pemasangan filesystem yang disediakan oleh hypervisor", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Ukuran disk yang dialokasikan ke VM minikube (format: \u003cnumber\u003e[\u003cunit\u003e], di mana unit = b, k, m atau g)", + "Display dashboard URL instead of opening a browser": "Tampilkan URL dasbor alih-alih membuka browser", + "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "Tampilkan URL tambahan Kubernetes di CLI alih-alih membukanya di browser default", + "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "Tampilkan URL layanan Kubernetes di CLI alih-alih membukanya di browser default", + "Display values currently set in the minikube config file": "Nilai tampilan yang saat ini disetel di file konfigurasi minikube", + "Display values currently set in the minikube config file.": "Nilai tampilan yang saat ini disetel di file konfigurasi minikube", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", + "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "Docker Desktop memiliki kurang dari 2 CPU yang dikonfigurasi, tetapi Kubernetes memerlukan setidaknya 2 CPU agar tersedia", + "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Docker Desktop dikonfigurasi untuk Windows container, tapi Linux container diperlukan untuk minikube", + "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Docker Desktop hanya memiliki {{.size}}MiB tersedia, kurang dari {{.req}}MiB yang diperlukan untuk Kubernetes", + "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "Docker Desktop hanya memiliki {{.size}}MiB yang tersedia, anda mungkin mengalami kegagalan deployment aplikasi.", + "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "Docker container keluar sebelum waktunya setelah dibuat, pertimbangkan untuk menyelidiki kinerja/health Docker.", + "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "Docker memiliki kurang dari 2 CPU yang dikonfigurasi, tetapi Kubernetes memerlukan setidaknya 2 CPU agar tersedia", + "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "Docker di dalam VM tidak tersedia. Coba jalankan 'minikube delete' untuk reset VM-nya", + "Docs have been saved at - {{.path}}": "Dokumentasi telah tersimpan di - {{.path}}", + "Documentation: {{.url}}": "Dokumentasi: {{.url}}", + "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "Selesai! kubectl sudah dikonfigurasi menggunakan \"{{.name}}\" klaster dan \"{{.ns}}\" namespace secara defaul", + "Done! minikube is ready without Kubernetes!": "Selesai! minikube telah siap tanpa Kubernetes!", + "Download complete!": "Download selesai!", + "Downloading Kubernetes {{.version}} preload ...": "Download Kubernetes {{.version}} preload...", + "Downloading VM boot image ...": "Mengunduh boot image VM ...", + "Downloading driver {{.driver}}:": "Mengunduh driver {{.driver}}", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "Karena masalah DNS, klaster anda mungkin mengalami kesulitan saat memulai dan tidak dapat pull image. Detail lebih lanjut tersedia di: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as docker or {{.driver}}.\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}/\n\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "Karena perubahan pada macOS 13+, minikube saat ini tidak mendukung VirtualBox. Anda dapat menggunakan driver alternatif seperti Docker atau {{.driver}}.\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}/\n\n Untuk detail selengkapnya tentang masalah ini, lihat: https://github.com/kubernetes/minikube/issues/15274\n", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "Durasi tidak aktif sebelum VM minikube dijeda (default 1m0s)", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "Durasi hingga masa berlaku sertifikat minikube, defaultnya adalah tiga tahun (26280 jam).", + "ERROR creating `registry-creds-acr` secret": "ERROR membuat `registry-creds-acr` secret", + "ERROR creating `registry-creds-dpr` secret": "ERROR membuat `registry-creds-dpr` secret", + "ERROR creating `registry-creds-ecr` secret: {{.error}}": "ERROR membuat `registry-creds-ecr` secret: {{.error}}", + "ERROR creating `registry-creds-gcr` secret: {{.error}}": "ERROR membuat `registry-creds-gcr` secret: {{.error}}", + "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "Mungkin systemctl tidak diinstal, atau Docker rusak. Jalankan 'sudo systemctl start docker' dan 'journalctl -u docker'", + "Enable addons. see `minikube addons list` for a list of valid addon names.": "Aktifkan addons. gunakan `minikube addons list` untuk melihat daftar addon yang valid", + "Enable experimental NVIDIA GPU support in minikube": "Aktifkan dukungan GPU NVIDIA eksperimental di minikube", + "Enable host resolver for NAT DNS requests (virtualbox driver only)": "Aktifkan host resolver untuk permintaan DNS NAT (khusus driver virtualbox)", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "", + "Enable or disable a minikube addon": "Aktfikan atau nonaktifkan minikube addon", + "Enable proxy for NAT DNS requests (virtualbox driver only)": "Aktifkan proxy untuk permintaan DNS NAT (khusus driver virtualbox)", + "Enabled addons: {{.addons}}": "Aktifkan addons: {{.addons}}", + "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "Mengaktifkan addon dengan ADDON_NAME dalam minikube. Untuk daftar add-on yang tersedia, gunakan: minikube addons list", + "Enabling '{{.name}}' returned an error: {{.error}}": "Mengaktifkan '{{.name}}' mendapat error: {{.error}}", + "Enabling dashboard ...": "Mengaktifkan dashboard ...", + "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "Pastikan CRI-O terinstal dan siap digunakan: Jalankan 'sudo systemctl start crio' dan 'journalctl -u crio'. Alternatifnya, gunakan --container-runtime=docker", + "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "Pastikan Docker terinstal dan siap digunakan: Jalankan 'sudo systemctl start docker' dan 'journalctl -u docker'. Alternatifnya, pilih value lain untuk --driver", + "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "Pastikan cgroup 'pids' yang diperlukan diaktifkan di host anda: grep pids /proc/cgroups", + "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "Pastikan pengguna yang terdaftar di /etc/libvirt/qemu.conf memiliki akses ke direktori home anda", + "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "Pastikan anda adalah anggota grup libvirt yang sesuai (ingatlah untuk masuk kembali(relogin) agar perubahan grup diterapkan!)", + "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "Pastikan value yang anda set untuk HTTPS_PROXY mengarah ke proksi HTTPS, bukan proksi HTTP", + "Ensure the tmp directory path is writable to the current user.": "Pastikan path direktori tmp dapat ditulis (writeable) ke pengguna saat ini.", + "Ensure you have at least 20GB of free disk space.": "Pastikan anda memiliki setidaknya 20GB space disk kosong.", + "Ensure your {{.driver_name}} is running and is healthy.": "Pastikan {{.driver_name}} anda berjalan dan siap digunakan.", + "Environment variables to pass to the Docker daemon. (format: key=value)": "Environment variabel untuk diteruskan ke Docker Daemon. (format: key=value)", + "Environment variables to pass to the build. (format: key=value)": "Environment variabel untuk diteruskan ke build. (format: key=value)", + "Error code docs have been saved at - {{.path}}": "", + "Error creating minikube directory": "Error ketika membuat direktori minikube", + "Error creating view template": "Error ketika membuat view template", + "Error detecting shell": "Error mendeteksi shell", + "Error executing view template": "Error mengeksekusi view template", + "Error finding port for mount": "Error menemukan port untuk di-mount", + "Error generating set output": "Error ketika menghasilkan output yang diset", + "Error generating unset output": "Error ketika menghasilkan output yang tidak diset", + "Error getting cluster bootstrapper": "Error ketika mendapatkan bootstrapper cluster", + "Error getting cluster config": "Error saat mendapatkan konfigurasi cluster", + "Error getting control-plane node": "Error saat mendapatkan control-plane", + "Error getting host": "Error saat mendapatkan informasi host", + "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "Terjadi error saat mendapatkan binding port untuk driver '{{.driver_name}}': {{.error}}", + "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "Terjadi error saat mendapatkan layanan dengan namespace '{{.namespace}}' dan label '{{.labelName}}:{{.addonName}}': {{.error}}", + "Error getting ssh client": "Error saat mendapatkan klien SSH", + "Error getting the host IP address to use from within the VM": "Error saat mendapatkan alamat IP host untuk digunakan di dalam VM", + "Error killing mount process": "Error saat menghentikan proses mount", + "Error loading profile config: {{.error}}": "Error saat memuat konfigurasi profil: {{.error}}", + "Error opening service": "Error saat membuka layanan", + "Error parsing minikube version: {{.error}}": "Error saat mengurai (parsing) versi Minikube: {{.error}}", + "Error parsing {{.name}}={{.value}}, {{.err}}": "Error saat mengurai (parsing) {{.name}}={{.value}}, {{.err}}", + "Error reading {{.path}}: {{.error}}": "Error saat membaca {{.path}}: {{.error}}", + "Error starting cluster": "Error saat memulai cluster", + "Error starting mount": "Error saat memulai proses mount", + "Error while setting kubectl current context : {{.error}}": "Error saat mengatur konteks kubectl saat ini: {{.error}}", + "Error while setting kubectl current context: {{.error}}": "Error saat mengatur konteks kubectl saat ini: {{.error}}", + "Error with ssh-add": "Error pada ssh-add", + "Error writing mount pid": "Error saat menulis (writing) PID proses mount", + "Examples": "Contoh", + "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "Eksekusi \"{{.command}}\" memerlukan waktu lebih lama dari biasanya: {{.duration}}", + "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "Disk yang ada tidak memiliki fitur baru ({{.error}}). Untuk memperbarui, jalankan 'minikube delete'", + "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "Keluar karena {{.fatal_code}}: {{.fatal_msg}}", + "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "Port yang diekspos untuk dashboard yang diproksikan. Atur ke 0 untuk memilih port secara acak.", + "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "Adaptor eksternal tempat switch eksternal akan dibuat jika tidak ditemukan switch eksternal. (hanya untuk driver Hyper-V)", + "Fail check if container paused": "Gagal memeriksa apakah kontainer dalam keadaan berhenti", + "Failed removing pid from pidfile: {{.error}}": "Gagal menghapus pid dari pidfile: {{.error}}", + "Failed runtime": "Gagal menjalankan runtime", + "Failed to build image": "Gagal membuat image", + "Failed to cache and load images": "Gagal menyimpan cache dan memuat image", + "Failed to cache binaries": "Gagal menyimpan cache biner", + "Failed to cache images to tar": "Gagal menyimpan cache image ke tar", + "Failed to cache kubectl": "Gagal menyimpan cache kubectl", + "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Gagal mengubah izin untuk {{.minikube_dir_path}}: {{.error}}", + "Failed to check main repository and mirrors for images": "Gagal memeriksa main repository dan mirror untuk image", + "Failed to configure auto-pause {{.profile}}": "Gagal mengonfigurasi auto-pause untuk {{.profile}}", + "Failed to configure metallb IP {{.profile}}": "Gagal mengonfigurasi metallb IP untuk {{.profile}} ", + "Failed to configure registry-aliases {{.profile}}": "Gagal mengonfigurasi registry-aliases untuk {{.profile}}", + "Failed to create file": "Gagal membuat file", + "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "Gagal menghapus klaster {{.name}}, tapi akan dicoba ulang.", + "Failed to delete cluster {{.name}}.": "Gagal menghapus klaster {{.name}}.", + "Failed to delete cluster: {{.error}}": "Gagal menghapus klaster: {{.error}} ", + "Failed to delete images": "Gagal menghapus image", + "Failed to delete images from config": "Gagal menghapus image dari konfigurasi", + "Failed to delete profile(s): {{.error}}": "Gagal menghapus profil: {{.error}}", + "Failed to download licenses": "Gagal untuk mengunduh lisensi", + "Failed to enable container runtime": "Gagal untuk mengaktifkan container runtime", + "Failed to get bootstrapper": "Gagal untuk mendapatkan bootstrapper", + "Failed to get command runner": "Gagal untuk mendapatkan command runner", + "Failed to get image map": "Gagal untuk mendapatkan image map", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "Gagal mendapatkan URL layanan - pastikan minikube sedang berjalan dan bahwa anda telah menentukan namespace yang benar (gunakan flag -n jika diperlukan): {{.error}}", + "Failed to get temp": "Gagal mendapatkan file sementara (temporary)", + "Failed to kill mount process: {{.error}}": "Gagal menghentikan proses mount: {{.error}}", + "Failed to list cached images": "Gagal menampilkan daftar image yang di-cache", + "Failed to list images": "Gagal menampilkan daftar images", + "Failed to load image": "Gagal memuat image", + "Failed to persist images": "Gagal menyimpan image secara permanen", + "Failed to pull image": "Gagal untuk mengunduh (pull) image", + "Failed to pull images": "Gagal untuk mengunduh (pull) images", + "Failed to push images": "Gagal untuk mengunggah (push) images", + "Failed to read temp": "Gagal membaca file sementara (temporary)", + "Failed to reload cached images": "Gagal memuat images yang di-cache", + "Failed to remove image": "Gagal menghapus image", + "Failed to remove images for profile {{.pName}} {{.error}}": "Gagal menghapus images untuk profile {{.pName}} {{.error}}", + "Failed to save config {{.profile}}": "Gagal menyimpan konfigurasi {{.profile}}", + "Failed to save dir": "Gagal menyimpan direktori", + "Failed to save image": "gagal menyimpan image", + "Failed to save stdin": "Gagal menyimpan input stdin", + "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "Gagal mengatur environment variable NO_PROXY. Silakan gunakan `export NO_PROXY=$NO_PROXY,{{.ip}}`.", + "Failed to setup certs": "Gagal mengatur sertifikat", + "Failed to start container runtime": "Gagal menjalankan container runtime", + "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "Gagal menjalankan {{.driver}} {{.driver_type}}. Jalankan \"{{.cmd}}\" mungkin bisa memperbaiki: {{.error}}", + "Failed to stop node {{.name}}: {{.error}}": "Gagal menghentikan node {{.name}}: {{.error}}", + "Failed to stop ssh-agent process: {{.error}}": "Gagal menghentikan proses ssh-agent: {{.error}}", + "Failed to tag images": "Gagal menandai (tag) image", + "Failed to update cluster": "Gagal memperbaharui klaster", + "Failed to update config": "Gagal memperbaharui konfigurasi", + "Failed unmount: {{.error}}": "Gagal unmount: {{.error}}", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "Gagal konek ke {{.curlTarget}} dari dalam minikube {{.type}}", + "Filter to use only VM Drivers": "Filter untuk menggunakan hanya VM Driver", + "Flags": "Flags", + "Follow": "Ikuti", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "Untuk pengalaman yang lebih baik, disarankan menggunakan Docker Engine daripada Docker Desktop.\nInstruksi instalasi Docker Engine: https://docs.docker.com/engine/install/#server", + "For improved {{.driver}} performance, {{.fix}}": "Untuk meningkatkan performa {{.driver}}, {{.fix}}", + "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "Untuk informasi lebih lanjut, lihat: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}", + "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Untuk informasi lebih lanjut, lihat: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "For more information, see: {{.url}}": "Untuk informasi lebih lanjut, kunjungi: {{.url}}", + "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "Paksa konfigurasi lingkungan untuk shell tertentu: [fish, cmd, powershell, tcsh, bash, zsh], default adalah deteksi otomatis.", + "Force minikube to perform possibly dangerous operations": "Paksa Minikube untuk menjalankan operasi yang mungkin berbahaya.", + "Format output. One of: short|table|json|yaml": "Format keluaran. Pilihan: short|table|json|yaml.", + "Format to print stdout in. Options include: [text,json]": "Format untuk mencetak keluaran stdout. Pilihan: [text,json].", + "Forwards all services in a namespace (defaults to \"false\")": "Meneruskan semua layanan dalam namespace (default: \"false\")", + "Found docker, but the docker service isn't running. Try restarting the docker service.": "Docker ditemukan, tetapi layanan Docker tidak berjalan. Coba restart service Docker.", + "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "Ditemukan driver, tetapi tidak ada yang dalam kondisi baik. Lihat di atas untuk saran perbaikan driver yang terpasang.", + "Found network options:": "Opsi jaringan yang ditemukan:", + "Found {{.number}} invalid profile(s) ! ": "Ditemukan {{.number}} profil tidak valid!", + "Generate command completion for PowerShell.": "Generate perintah auto completion untuk PowerShell.", + "Generate command completion for a shell": "Generate perintah auto completion untuk shell.", + "Generate command completion for bash.": "Generate perintah auto completion untuk bash.", + "Generate command completion for fish .": "Generate perintah auto completion untuk fish.", + "Generate command completion for zsh.": "Generate perintah auto completion untuk zsh.", + "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "Gagal mengurai ukuran disk '{{.diskSize}}': {{.error}}", + "Generate unable to parse memory '{{.memory}}': {{.error}}": "Gagal mengurai ukuran memori '{{.memory}}': {{.error}}", + "Generating certificates and keys ...": "Menghasilkan sertifikat dan kunci ...", + "Get or list the current profiles (clusters)": "Dapatkan atau daftar profil (klaster) saat ini.", + "Gets the logs of the running instance, used for debugging minikube, not user code.": "Mengambil log dari instance yang berjalan, digunakan untuk debugging Minikube, bukan kode pengguna.", + "Gets the status of a local Kubernetes cluster": "Mengambil status klaster Kubernetes lokal.", + "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "Mengambil status klaster Kubernetes lokal.\n\tKode keluar mencerminkan status VM Minikube, klaster, dan Kubernetes dalam bentuk bit dari kanan ke kiri.\n\tMisalnya: 7 berarti 1 (Minikube NOK) + 2 (Klaster NOK) + 4 (Kubernetes NOK).", + "Gets the value of PROPERTY_NAME from the minikube config file": "Mengambil nilai dari PROPERTY_NAME dalam file konfigurasi Minikube.", + "Global Flags": "Flag Global", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "String format template Go untuk output daftar cache. Format untuk template Go dapat ditemukan di sini: https://pkg.go.dev/text/template\nUntuk daftar variabel yang dapat diakses dalam template, lihat nilai struct di sini: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "String format template Go untuk output tampilan konfigurasi. Format untuk template Go dapat ditemukan di sini: https://pkg.go.dev/text/template\nUntuk daftar variabel yang dapat diakses dalam template, lihat nilai struct di sini: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "String format template Go untuk output status. Format untuk template Go dapat ditemukan di sini: https://pkg.go.dev/text/template\nUntuk daftar variabel yang dapat diakses dalam template, lihat nilai struct di sini: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status", + "Group ID: {{.groupID}}": "Group ID: {{.groupID}}", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "Klaster HA (multi-control plane) memerlukan 3 atau lebih node control-plane.", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Headlamp dapat menampilkan informasi lebih detail saat metrics-server terinstal. Untuk menginstalnya, jalankan:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n", + "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "Sembunyikan hypervisor signature dari guest di Minikube (hanya untuk driver kvm2)", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "Hyper-V memerlukan jumlah memori dalam MB berupa angka genap. Anda telah menentukan {{.memory}}MB, coba gunakan --memory {{.suggestMemory}}", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", + "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "Hyperkit mengalami masalah. Perbarui ke versi hyperkit terbaru dan/atau Docker for Desktop. Sebagai alternatif, anda bisa memilih driver lain menggunakan --driver", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "Jaringan Hyperkit mengalami masalah. Cobalah menonaktifkan Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nSebagai alternatif, anda bisa mencoba memperbarui hyperkit ke versi terbaru atau menggunakan driver lain", + "IP Address to use to expose ports (docker and podman driver only)": "Alamat IP yang digunakan untuk mengekspos port (hanya untuk driver docker dan podman)", + "IP address (ssh driver only)": "Alamat IP (hanya untuk driver SSH)", + "If present, writes to the provided file instead of stdout.": "Jika ada, tulis ke file yang disediakan, bukan ke stdout.", + "If set, added node will be available as worker. Defaults to true.": "Jika diatur, node yang ditambahkan akan tersedia sebagai worker. Nilai default adalah true.", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "Jika diatur, node yang ditambahkan akan menjadi control-plane. Nilai default adalah false. Saat ini hanya didukung untuk klaster HA (multi-control plane) yang sudah ada.", + "If set, automatically updates drivers to the latest version. Defaults to true.": "Jika diatur, secara otomatis memperbarui driver ke versi terbaru. Nilai default adalah true.", + "If set, delete the current cluster if start fails and try again. Defaults to false.": "Jika diatur, hapus klaster saat ini jika proses start gagal, lalu coba lagi. Nilai default adalah false.", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "Jika diatur, menonaktifkan pelaporan metrik (penggunaan CPU dan memori), ini dapat mengurangi penggunaan CPU. Nilai default adalah false.", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "Jika diatur, menonaktifkan optimasi yang diatur untuk Kubernetes lokal, termasuk mengurangi replika CoreDNS dari 2 menjadi 1. Nilai default adalah false.", + "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "Jika diatur, unduh tarball dari preloaded images jika tersedia untuk mempercepat waktu mulai. Nilai default adalah true.", + "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "Jika diatur, paksa container runtime untuk menggunakan systemd sebagai cgroup manager. Nilai default adalah false.", + "If set, install addons. Defaults to true.": "Jika diatur, instal addons. Nilai default adalah true.", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "Jika diatur, VM/container minikube akan mulai tanpa memulai atau mengkonfigurasi Kubernetes. (hanya berlaku untuk klaster baru)", + "If set, pause all namespaces": "Jika diatur, jeda semua namespace", + "If set, unpause all namespaces": "Jika diatur, lanjutkan semua namespace", + "If the above advice does not help, please let us know:": "Jika saran di atas tidak membantu, beri tahu kami:", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "Jika true, cache image docker untuk bootstrapper saat ini dan muat ke dalam mesin. Selalu false dengan --driver=none.", + "If true, only download and cache files for later use - don't install or start anything.": "Jika true, hanya mengunduh dan menyimpan file untuk digunakan nanti - tidak menginstal atau memulai apa pun.", + "If true, pods might get deleted and restarted on addon enable": "Jika true, pod mungkin akan dihapus dan dimulai ulang saat addon diaktifkan.", + "If true, print web links to addons' documentation if using --output=list (default).": "Jika true, tampilkan tautan dokumentasi addons jika menggunakan --output=list (default).", + "If true, returns a detailed list of profiles.": "", + "If true, returns list of profiles faster by skipping validating the status of the cluster.": "Jika true, mengembalikan daftar profil lebih cepat dengan melewati validasi status klaster.", + "If true, will perform potentially dangerous operations. Use with discretion.": "Jika true, akan melakukan operasi yang berpotensi berbahaya. Gunakan dengan bijak.", + "If you are running minikube within a VM, consider using --driver=none:": "Jika anda menjalankan minikube di dalam VM, pertimbangkan untuk menggunakan --driver=none:", + "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "Jika anda masih tertarik untuk membuat driver {{.driver_name}} berfungsi, saran berikut mungkin membantu anda melewati masalah ini:", + "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "Jika anda tidak ingin kredensial anda dipasang di pod tertentu, tambahkan label dengan kunci gcp-auth-skip-secret ke konfigurasi pod anda.", + "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "Jika anda ingin pod yang sudah ada dipasang dengan kredensial, buat ulang pod tersebut atau jalankan kembali addons enable dengan --refresh.", + "Ignoring empty custom image {{.name}}": "Mengabaikan custom image kosong {{.name}}", + "Ignoring invalid pair entry {{.pair}}": "Mengabaikan entri pasangan tidak valid {{.pair}}", + "Ignoring unknown custom image {{.name}}": "Mengabaikan custom image yang tidak dikenal {{.name}}", + "Ignoring unknown custom registry {{.name}}": "Mengabaikan custom registry yang tidak dikenal {{.name}}.", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "Image tidak dibuat untuk versi minikube saat ini. Untuk mengatasinya, anda dapat menghapus dan membuat ulang klaster minikube menggunakan image terbaru. Versi minikube yang diharapkan: {{.imageMinikubeVersion}} -\u003e Versi minikube saat ini: {{.minikubeVersion}}.", + "Images Commands:": "Perintah Image:", + "Images used by this addon. Separated by commas.": "Image yang digunakan oleh addon ini. Dipisahkan dengan koma.", + "In order to use the fall back image, you need to log in to the github packages registry": "Untuk menggunakan fallback image, anda perlu masuk ke registry paket github.", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Registry Docker yang tidak aman untuk diteruskan ke daemon Docker. Rentang CIDR layanan default akan ditambahkan secara otomatis.", + "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "Instal VirtualBox dan pastikan ada di path, atau pilih nilai alternatif untuk --driver.", + "Install the latest hyperkit binary, and run 'minikube delete'": "Instal biner hyperkit terbaru, dan jalankan 'minikube delete'", + "Interval is an invalid duration: {{.error}}": "Interval adalah durasi tidak valid: {{.error}}", + "Interval must be greater than 0s": "Interval harus lebih besar dari 0 detik", + "Invalid port": "Port tidak valid", + "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "Istio memerlukan {{.minCPUs}} CPU -- konfigurasi anda hanya mengalokasikan {{.cpus}} CPU", + "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "Istio membutuhkan {{.minMem}}MB memori -- konfigurasi anda hanya mengalokasikan {{.memory}}MB", + "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "Sepertinya anda menjalankan di GCE, yang berarti autentikasi seharusnya berfungsi tanpa addon GCP Auth. Jika anda tetap ingin melakukan autentikasi menggunakan file kredensial, gunakan flag --force.", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configure is:": "Kemungkinan besar anda mengalami masalah internet. Pastikan anda dapat mengakses internet setidaknya melalui HTTP, baik secara langsung maupun dengan proxy. Konfigurasi proxy anda saat ini adalah:", + "Kept for backward compatibility, value is ignored.": "", + "Kicbase images have not been deleted. To delete images run:": "Image Kicbase belum dihapus. Untuk menghapus image, jalankan:", + "Kill the mount process spawned by minikube start": "Hentikan proses mount yang dijalankan oleh minikube start", + "Kubernetes requires at least 2 CPU's to start": "Kubernetes membutuhkan minimal 2 CPU untuk memulai", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "Versi Kubernetes tidak ditemukan dalam daftar versi GitHub. Anda dapat memaksakan versi Kubernetes menggunakan flag --force", + "Kubernetes version {{.specified}} found in GitHub version list": "Versi Kubernetes {{.specified}} ditemukan dalam daftar versi GitHub", + "Kubernetes version {{.specified}} found in version list": "Versi Kubernetes {{.specified}} ditemukan dalam daftar versi", + "Kubernetes version {{.version}} is not supported by this release of minikube": "Versi Kubernetes {{.version}} tidak didukung oleh rilis minikube ini", + "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "Kubernetes {{.new}} sekarang tersedia. Jika anda ingin memperbarui, tentukan: --kubernetes-version={{.prefix}}{{.new}}", + "Kubernetes {{.version}} is not supported by this release of minikube": "Versi Kubernetes {{.version}} tidak didukung oleh rilis minikube ini", + "Kubernetes: Stopping ...": "Kubernetes: Menghentikan ...", + "Kubernetes: {{.status}}": "Kubernetes: {{.status}}", + "Launching proxy ...": "Memulai proxy ...", + "List all available images from the local cache.": "Daftar semua image yang tersedia dari cache lokal.", + "List existing minikube nodes.": "Daftar node minikube yang ada.", + "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "Daftar nama image yang digunakan oleh addon w/ADDON_NAME. Untuk daftar addon yang tersedia gunakan: minikube addons list", + "List images": "Daftar image", + "List nodes.": "Daftar node.", + "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "Daftar port VSock tamu yang harus diekspos sebagai socket di host (hanya untuk driver hyperkit)", + "List of ports that should be exposed (docker and podman driver only)": "Daftar port yang harus diekspos (hanya untuk driver docker dan podman)", + "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "Listen pada 0.0.0.0 di host docker eksternal {{.host}}. Harap diperhatikan.", + "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "Lsiten pada {{.listenAddr}}. Ini tidak disarankan dan dapat menyebabkan kerentanan keamanan. Gunakan dengan risiko anda sendiri.", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "Menampilkan semua addon minikube yang tersedia beserta statusnya saat ini (aktif/nonaktif)", + "Lists all minikube profiles.": "Menampilkan semua profil minikube.", + "Lists all valid default values for PROPERTY_NAME": "Menampilkan semua nilai default yang valid untuk PROPERTY_NAME", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "Menampilkan semua profil minikube yang valid dan mendeteksi semua profil yang mungkin tidak valid.", + "Lists the URLs for the services in your local cluster": "Menampilkan URL untuk layanan di klaster lokal anda", + "Load an image into minikube": "Muat sebuah image ke dalam minikube", + "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "Folder lokal untuk dibagikan dengan Guest melalui mount NFS (hanya untuk driver hyperkit)", + "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "Proxy lokal diabaikan: tidak meneruskan {{.name}}={{.value}} ke env docker.", + "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "Lokasi soket VPNKit yang digunakan untuk jaringan. Jika kosong, Hyperkit VPNKitSock akan dinonaktifkan; jika 'auto', akan menggunakan koneksi VPNKit Docker for Mac; jika tidak, menggunakan VSock yang ditentukan (hanya untuk driver hyperkit)", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "Lokasi untuk mengambil file biner kubectl, kubelet, dan kubeadm.", + "Locations to fetch the minikube ISO from.": "Lokasi untuk mengambil file ISO minikube.", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Masuk atau jalankan perintah pada mesin menggunakan SSH; mirip dengan 'docker-machine ssh'", + "Log into the minikube environment (for debugging)": "Masuk ke lingkungan minikube (untuk debugging)", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "File log dibuat ({{.logPath}}), ingat untuk menyertakannya saat melaporkan masalah!", + "Manage cache for images": "Kelola cache untuk image", + "Manage images": "Kelola image", + "Message Size: {{.size}}": "Ukuran Pesan: {{.size}}", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "Versi minimum VirtualBox yang didukung: {{.vers}}, versi VirtualBox saat ini: {{.cvers}}", + "Modify persistent configuration values": "Ubah nilai konfigurasi yang bersifat permanen", + "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "Informasi lebih lanjut: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", + "Most users should use the newer 'docker' driver instead, which does not require root!": "Sebagian besar pengguna sebaiknya menggunakan driver 'docker' yang lebih baru, yang tidak memerlukan akses root!", + "Mount type: {{.name}}": "Tipe mount: {{.name}}", + "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "Memasang jalur host {{.sourcePath}} ke dalam VM sebagai {{.destinationPath}} ...", + "Mounts the specified directory into minikube": "Memasang direktori yang ditentukan ke dalam minikube", + "Mounts the specified directory into minikube.": "Memasang direktori yang ditentukan ke dalam minikube.", + "Multiple errors deleting profiles": "Beberapa kesalahan saat menghapus profil", + "Multiple errors encountered:": "Beberapa kesalahan ditemukan:", + "Multiple minikube profiles were found - ": "Beberapa profil minikube ditemukan -", + "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "enis NIC yang digunakan untuk jaringan host-only. Salah satu dari Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, atau virtio (hanya untuk driver virtualbox)", + "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "Jenis NIC yang digunakan untuk jaringan NAT. Salah satu dari Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, atau virtio (hanya untuk driver virtualbox).", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "CATATAN: Jangan tutup terminal ini karena proses ini harus tetap berjalan agar tunnel dapat diakses ...", + "NOTE: This process must stay alive for the mount to be accessible ...": "CATATAN: Proses ini harus tetap berjalan agar mount dapat diakses ...", + "Networking and Connectivity Commands:": "Perintah Jaringan dan Konektivitas:", + "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "Tidak ada alamat IP yang diberikan. Coba tentukan dengan --ssh-ip-address, atau lihat https://minikube.sigs.k8s.io/docs/drivers/ssh/", + "No changes required for the \"{{.context}}\" context": "Tidak ada perubahan yang diperlukan untuk konteks \"{{.context}}\".", + "No control-plane nodes found.": "Tidak ditemukan node control-plane.", + "No minikube profile was found.": "Tidak ditemukan profil minikube.", + "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Tidak ada driver yang terdeteksi. Coba tentukan dengan --driver, atau lihat https://minikube.sigs.k8s.io/docs/start/", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "Tidak ditemukan layanan di namespace '{{.namespace}}'.\nAnda dapat memilih namespace lain dengan menggunakan 'minikube service --all -n \u003cnamespace\u003e'.", + "No such addon {{.name}}": "Addon {{.name}} tidak ditemukan.", + "No valid URL found for tunnel.": "Tidak ditemukan URL valid untuk tunnel.", + "No valid port found for tunnel.": "Tidak ditemukan port valid untuk tunnel.", + "Node {{.name}} failed to start, deleting and trying again.": "Node {{.name}} gagal memulai, menghapus dan mencoba lagi.", + "Node {{.name}} was successfully deleted.": "Node {{.name}} berhasil dihapus.", + "Node {{.nodeName}} does not exist.": "Node {{.nodeName}} tidak ada.", + "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "Tidak ada repositori yang dikenal yang dapat diakses. Pertimbangkan untuk menentukan repositori image alternatif dengan flag --image-repository", + "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "Tidak ada repositori yang dikenal di lokasi anda yang dapat diakses. Menggunakan {{.image_repository_name}} sebagai cadangan.", + "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "Terlihat anda memiliki lingkungan docker-env yang aktif pada driver {{.driver_name}} di terminal ini:", + "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "Terlihat anda memiliki lingkungan podman-env yang aktif pada driver {{.driver_name}} di terminal ini:", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, and qemu2 drivers)": "Jumlah disk tambahan yang dibuat dan dipasang ke VM minikube (saat ini hanya diimplementasikan untuk driver hyperkit, kvm2, dan qemu2)", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "", + "Number of lines back to go within the log": "Jumlah baris mundur dalam log", + "OS release is {{.pretty_name}}": "Rilis OS adalah {{.pretty_name}}", + "One of 'text', 'yaml' or 'json'.": "Salah satu dari 'text', 'yaml', atau 'json'.", + "One of 'yaml' or 'json'.": "Salah satu dari 'yaml' atau 'json'.", + "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "Hanya karakter alfanumerik dan tanda hubung '-' yang diizinkan. Minimal 1 karakter, dimulai dengan karakter alfanumerik.", + "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "Hanya karakter alfanumerik dan tanda hubung '-' yang diperbolehkan. Minimal 2 karakter, diawali dengan karakter alfanumerik.", + "Open the addons URL with https instead of http": "Buka URL addons dengan https, bukan http", + "Open the service URL with https instead of http (defaults to \"false\")": "Buka URL layanan dengan https, bukan http (default: \"false\")", + "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "Membuka layanan Kubernetes {{.namespace_name}}/{{.service_name}} di browser default...", + "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "Membuka layanan {{.namespace_name}}/{{.service_name}} di browser default...", + "Opening {{.url}} in your default browser...": "Membuka {{.url}} di browser default anda...", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "Membuka addon dengan NAMA_ADDON di dalam minikube (contoh: minikube addons open dashboard). Untuk melihat daftar addon yang tersedia gunakan: minikube addons list", + "Operations on nodes": "Operasi pada node", + "Options: {{.options}}": "Opsi: {{.options}}", + "Output format. Accepted values: [json, yaml]": "Format keluaran. Nilai yang diterima: [json, yaml]", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "Menghasilkan penyelesaian shell minikube untuk shell tertentu (bash, zsh, fish atau powershell)\n\n\tIni bergantung pada biner bash-completion. Contoh instruksi instalasi:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube penyelesaian bash \u003e ~/.minikube-completion # untuk pengguna bash\n\t\t$ penyelesaian minikube zsh \u003e ~/.minikube-completion # untuk zsh pengguna\n\t\t$ sumber ~/.minikube-completion\n\t\t$ fish penyelesaian minikube \u003e ~/.config/fish/completions/minikube.fish # untuk pengguna fish\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(penyelesaian minikube bash) # untuk pengguna bash\n\t\t$ source \u003c(penyelesaian minikube zsh) # untuk pengguna zsh\n\t\t$ ikan penyelesaian minikube \u003e ~/.config/fish/completions/minikube.fish # untuk pengguna ikan\n\n\tSelain itu, anda mungkin ingin menampilkan penyelesaian ke file dan sumber di .bashrc\n\n\tWindows:\n\t\t## Simpan penyelesaian kode ke skrip dan jalankan di profil\n\t\tPS\u003e minikube penyelesaian powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Tambahkan-Konten $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Jalankan kode penyelesaian di profil\n\t\tPS\u003e Tambahkan-Konten $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube penyelesaian powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tCatatan untuk pengguna zsh: [1] penyelesaian zsh hanya didukung di versi zsh \u003e= 5.2\n\tCatatan untuk pengguna fish: [2] silakan lihat dokumen ini untuk detail lebih lanjut https://fishshell.com/docs/current/#tab-completion\n", + "Outputs the licenses of dependencies to a directory": "Mengeluarkan lisensi dependensi ke dalam sebuah direktori", + "Overwrite image even if same image:tag name exists": "Timpa image meskipun nama image:tag yang sama sudah ada.", + "Path to socket vmnet binary (QEMU driver only)": "Jalur ke file biner socket vmnet (hanya untuk driver QEMU)", + "Path to the Dockerfile to use (optional)": "Jalur ke Dockerfile yang akan digunakan (opsional).", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "Jalur ke file firmware QEMU. Default: Untuk Linux, lokasi firmware default. Untuk macOS, lokasi instalasi brew. Untuk Windows, C:\\Program Files\\qemu\\share", + "Path to the socket vmnet client binary (QEMU driver only)": "Jalur ke file biner klien socket vmnet (hanya untuk driver QEMU)", + "Pause": "Jeda", + "Paused {{.count}} containers": "{{.count}} kontainer dijeda", + "Paused {{.count}} containers in: {{.namespaces}}": "{{.count}} kontainer dijeda di: {{.namespaces}}", + "Pausing node {{.name}} ... ": "Menjeda node {{.name}} ...", + "Please also attach the following file to the GitHub issue:": "Harap lampirkan juga file berikut ke masalah GitHub:", + "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "Harap buat klaster dengan ukuran disk yang lebih besar: minikube start --disk SIZE_MB", + "Please either authenticate to the registry or use --base-image flag to use a different registry.": "Harap lakukan autentikasi ke registry atau gunakan flag --base-image untuk menggunakan registry yang berbeda.", + "Please enter a value:": "Harap masukkan sebuah nilai:", + "Please free up disk or prune images.": "Harap kosongkan ruang disk atau prune image.", + "Please increase Desktop's disk size.": "Harap tingkatkan ukuran disk Desktop.", + "Please install the minikube hyperkit VM driver, or select an alternative --driver": "Harap instal driver VM hyperkit minikube, atau pilih --driver alternatif", + "Please install the minikube kvm2 VM driver, or select an alternative --driver": "Harap instal driver VM kvm2 minikube, atau pilih --driver alternatif", + "Please make sure the service you are looking for is deployed or is in the correct namespace.": "Harap pastikan layanan yang anda cari sudah ter-deploy atau berada di namespace yang benar.", + "Please provide a path or url to build": "Harap berikan jalur atau URL untuk membangun", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "Harap sediakan image di runtime kontainer untuk disimpan dari minikube melalui \u003cminikube image save IMAGE_NAME\u003e.", + "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "Harap sediakan image di daemon lokal anda untuk dimuat ke minikube melalui \u003cminikube image load IMAGE_NAME\u003e", + "Please provide source and target image": "arap sediakan image sumber dan target.", + "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "Harap evaluasi ulang docker-env anda, untuk memastikan environment variable anda telah memperbarui port:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t", + "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "Harap evaluasi ulang podman-env anda, untuk memastikan environment variable anda telah memperbarui port:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "Harap jalankan minikube logs --file=logs.txt dan lampirkan logs.txt ke GitHub Issue.", + "Please see {{.documentation_url}} for more details": "Harap lihat {{.documentation_url}} untuk detail lebih lanjut", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", + "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "Harap tentukan direktori yang akan dipasang: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (contoh: \"/host-home:/vm-home\")", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "Harap tentukan jalur untuk menyalin: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (contoh: \"minikube cp a/b.txt /copied.txt\")", + "Please try purging minikube using `minikube delete --all --purge`": "coba bersihkan minikube menggunakan `minikube delete --all --purge`", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "Harap kunjungi tautan berikut untuk dokumentasi terkait:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages", + "Populates the specified folder with documentation in markdown about minikube": "Mengisi folder yang ditentukan dengan dokumentasi dalam format markdown tentang minikube", + "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "PowerShell berjalan dalam mode terbatas, yang tidak kompatibel dengan skrip Hyper-V.", + "Powering off \"{{.profile_name}}\" via SSH ...": "Mematikan \"{{.profile_name}}\" melalui SSH ...", + "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Menyiapkan Kubernetes {{.k8sVersion}} di {{.runtime}} {{.runtimeVersion}} ...", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "Menyiapkan {{.runtime}} {{.runtimeVersion}} ...", + "Print current and latest version number": "Cetak nomor versi saat ini dan terbaru", + "Print just the version number.": "Cetak hanya nomor versi.", + "Print the version of minikube": "Cetak versi minikube", + "Print the version of minikube.": "Cetak versi minikube.", + "Problems detected in {{.entry}}:": "asalah terdeteksi di {{.entry}}:", + "Problems detected in {{.name}}:": "Masalah terdeteksi di {{.name}}:", + "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "Profil \"{{.cluster}}\" tidak ditemukan. Jalankan \"minikube profile list\" untuk melihat semua profil.", + "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "Nama profil \"{{.profilename}}\" adalah kata kunci yang dicadangkan. Untuk menghapus profil ini, jalankan: \"{{.cmd}}\"", + "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "Nama profil '{{.name}}' duplikat dengan nama mesin '{{.machine}}' di profil '{{.profile}}", + "Profile name '{{.name}}' is not valid": "Nama profil '{{.name}}' tidak valid", + "Profile name '{{.profilename}}' is not valid": "Nama profil '{{.profilename}}' tidak valid", + "Profile name should be unique": "Nama profil harus unik", + "Provide VM UUID to restore MAC address (hyperkit driver only)": "Berikan UUID VM untuk memulihkan alamat MAC (hanya untuk driver hyperkit)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "Memberikan instruksi untuk mengarahkan docker-cli terminal anda ke Docker Engine di dalam minikube. (Berguna untuk membangun image docker langsung di dalam minikube)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "Memberikan instruksi untuk mengarahkan docker-cli terminal anda ke Docker Engine di dalam minikube. (Berguna untuk membangun image docker langsung di dalam minikube)\n\nContohnya, anda dapat melakukan semua operasi docker seperti docker build, docker run, dan docker ps langsung di dalam minikube.\n\nCatatan: anda perlu menginstal docker-cli di mesin anda. Instruksi instalasi \ndocker-cli: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps", + "Pull images": "Mengunduh image", + "Pull the remote image (no caching)": "Mengunduh image (tanpa cache)", + "Pulling base image {{.kicVersion}} ...": "Mengunduh image dasar {{.kicVersion}} ...", + "Push images": "Kirim image", + "Push the new image (requires tag)": "Kirim image baru (memerlukan tag)", + "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "Reboot untuk menyelesaikan instalasi VirtualBox, pastikan VirtualBox tidak diblokir oleh sistem anda, dan/atau gunakan hypervisor lain.", + "Rebuild libvirt with virt-network support": "Bangun ulang libvirt dengan dukungan virt-network", + "Received {{.name}} signal": "Menerima sinyal {{.name}}", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "Buat ulang klaster dengan menjalankan:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}", + "Registries used by this addon. Separated by commas.": "Registry yang digunakan oleh addon ini. Dipisahkan dengan koma.", + "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "ddon registry dengan driver {{.driver}} menggunakan port {{.port}}, harap gunakan itu sebagai pengganti port default 5000", + "Registry mirrors to pass to the Docker daemon": "Mirror registry untuk diteruskan ke daemon Docker", + "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "nstal ulang VirtualBox dan nyalakan ulang. Sebagai alternatif, coba driver kvm2: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/", + "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "Instal ulang VirtualBox dan pastikan tidak diblokir: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading", + "Related issue: {{.url}}": "Masalah terkait: {{.url}}", + "Related issues:": "Masalah terkait:", + "Remove one or more images": "Hapus satu atau lebih image", + "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "Hapus flag --docker-opt atau --insecure-registry yang tidak valid jika ada yang disediakan", + "Removed all traces of the \"{{.name}}\" cluster.": "Menghapus semua jejak klaster \"{{.name}}\"", + "Removing {{.directory}} ...": "Menghapus {{.directory}} ...", + "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "Jumlah CPU yang diminta {{.requested_cpus}} lebih besar dari jumlah CPU yang tersedia {{.avail_cpus}}", + "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "Jumlah CPU yang diminta {{.requested_cpus}} kurang dari minimum yang diizinkan yaitu {{.minimum_cpus}}", + "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "Alokasi memori yang diminta ({{.requested}}MB) kurang dari minimum yang direkomendasikan yaitu {{.recommend}}MB. Deploymen mungkin gagal.", + "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "Alokasi memori yang diminta {{.requested}}MB melebihi batas sistem anda yaitu {{.system_limit}}MB.", + "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "Alokasi memori yang diminta {{.requested}}MiB kurang dari minimum yang dapat digunakan yaitu {{.minimum_memory}}MB.", + "Reset Docker to factory defaults": "Atur ulang Docker ke pengaturan pabrik.", + "Restart Docker": "Mulai ulang Docker", + "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "Mulai ulang Docker, pastikan Docker berjalan, lalu jalankan: 'minikube delete' dan kemudian 'minikube start' lagi", + "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "Memulai ulang {{.driver_name}} {{.machine_type}} yang ada untuk \"{{.cluster}}\" ...", + "Restarting the {{.name}} service may improve performance.": "Memulai ulang layanan {{.name}} dapat meningkatkan performa.", + "Retrieve the ssh host key of the specified node": "Ambil ssh host key dari node yang ditentukan", + "Retrieve the ssh host key of the specified node.": "Ambil ssh host key dari node yang ditentukan", + "Retrieve the ssh identity key path of the specified node": "Ambil ssh identity key dari node yang ditentukan", + "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "Ambil ssh identity key path dari node yang ditentukan, dan tuliskan ke STDOUT.", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "Mengambil alamat IP dari klaster yang berjalan, memeriksanya dengan IP di kubeconfig, dan memperbaiki kubeconfig jika salah.", + "Retrieves the IP address of the specified node": "Mengambil alamat IP dari node yang ditentukan", + "Retrieves the IP address of the specified node, and writes it to STDOUT.": "Mengambil alamat IP dari node yang ditentukan, dan menuliskannya ke STDOUT.", + "Returns a URL to connect to a service": "Mengembalikan URL untuk terhubung ke layanan.", + "Returns logs to debug a local Kubernetes cluster": "Mengembalikan log untuk debug klaster Kubernetes lokal.", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "Mengembalikan URL Kubernetes untuk layanan di klaster lokal anda. Jika terdapat beberapa URL, akan dicetak satu per satu.", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "Mengembalikan nilai dari PROPERTY_NAME dari file konfigurasi minikube. Dapat ditimpa saat runtime dengan flag atau environment variable.", + "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "Klik kanan ikon PowerShell dan pilih Jalankan sebagai Administrator untuk membuka PowerShell dalam mode tingkat lanjut.", + "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "Jalankan 'kubectl describe pod coredns -n kube-system' dan periksa apakah ada konflik firewall atau DNS.", + "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "Jalankan 'minikube delete' untuk menghapus VM yang tidak aktif, dan pastikan minikube dijalankan oleh pengguna yang sama dengan yang menjalankan perintah ini.", + "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "Jalankan 'sudo sysctl fs.protected_regular=0', atau coba driver yang tidak memerlukan akses root, seperti '--driver=docker'.", + "Run a kubectl binary matching the cluster version": "Jalankan file biner kubectl yang sesuai dengan versi klaster.", + "Run minikube from the C: drive.": "Jalankan minikube dari drive C:.", + "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "Jalankan klien Kubernetes, unduh jika diperlukan. Ingat -- setelah kubectl! Ini akan menjalankan klien Kubernetes (kubectl) dengan versi yang sama dengan klaster. Biasanya, ini akan mengunduh file biner yang sesuai dengan sistem operasi dan arsitektur host, tetapi anda juga dapat menjalankannya langsung di control plane melalui koneksi SSH. Ini berguna jika anda tidak dapat menjalankan kubectl secara lokal karena alasan tertentu, seperti host yang tidak didukung. Harap diperhatikan bahwa saat menggunakan --ssh, semua jalur akan berlaku pada mesin jarak jauh.", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "Jalankan perintah berikut:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "Jalankan: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'", + "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "Jalankan: 'kubectl delete clusterrolebinding kubernetes-dashboard'", + "Run: 'minikube delete --all' to clean up all the abandoned networks.": "Jalankan: 'minikube delete --all' untuk membersihkan semua jaringan yang terbengkalai.", + "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "Jalankan: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'", + "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "Jalankan: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'", + "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Berjalan di localhost (CPU={{.number_of_cpus}}, Memori={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", + "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Berjalan dari jarak jauh (CPU={{.number_of_cpus}}, Memori={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", + "SSH key (ssh driver only)": "SSH key (hanya untuk driver ssh)", + "SSH port (ssh driver only)": "Port SSH (hanya untuk driver ssh)", + "SSH user (ssh driver only)": "Pengguna SSH (hanya untuk driver ssh)", + "Save a image from minikube": "Simpan image dari minikube", + "Searching the internet for Kubernetes version...": "Mencari versi Kubernetes di internet...", + "Select a valid value for --dnsdomain": "Pilih value yang valid untuk --dnsdomain", + "Send trace events. Options include: [gcp]": "Kirim event pelacakan. Opsi yang tersedia: [gcp]", + "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "Layanan '{{.service}}' tidak ditemukan di namespace '{{.namespace}}'. Anda dapat memilih namespace lain dengan menggunakan 'minikube service {{.service}} -n \u003cnamespace\u003e'. Atau tampilkan semua layanan dengan 'minikube service list'.", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "Layanan {{.svc_names}} memiliki tipe \"ClusterIP\" yang tidak dimaksudkan untuk diekspos, namun untuk pengembangan lokal minikube memungkinkan anda mengaksesnya!", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "Atur IP statis untuk klaster minikube, IP harus: privat, IPv4, dan oktet terakhir harus antara 2 dan 254, misalnya 192.168.200.200 (hanya untuk driver Docker dan Podman)", + "Set failed": "Pengaturan gagal", + "Set flag to delete all profiles": "Atur flag untuk menghapus semua profil", + "Set flag to stop all profiles (clusters)": "Atur flag untuk menghentikan semua profil (klaster)", + "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "Atur flag untuk menghentikan klaster setelah waktu tertentu (contoh: --schedule=5m)", + "Set this flag to delete the '.minikube' folder from your user directory.": "Atur flag ini untuk menghapus folder '.minikube' dari direktori pengguna anda.", + "Sets an individual value in a minikube config file": "Mengatur nilai individu dalam file konfigurasi minikube", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "Mengatur nilai konfigurasi PROPERTY_NAME menjadi PROPERTY_VALUE\n\t. Nilai ini dapat ditimpa oleh flag atau variabel lingkungan saat runtime.", + "Sets up podman env variables; similar to '$(podman-machine env)'.": "Menyiapkan env variable podman; mirip dengan '$(podman-machine env)'.", + "Setting profile failed": "Pengaturan profil gagal", + "Show a list of global command-line options (applies to all commands).": "Tampilkan daftar opsi command-line global (berlaku untuk semua perintah).", + "Show only log entries which point to known problems": "Tampilkan hanya entri log yang mengarah ke masalah yang diketahui", + "Show only the audit logs": "Tampilkan hanya log audit", + "Show only the last start logs.": "Tampilkan hanya log mulai terakhir.", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "Tampilkan hanya entri jurnal terbaru, dan terus mencetak entri baru saat ditambahkan ke jurnal.", + "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "Simulasikan jumlah node numa di minikube, rentang jumlah node numa yang didukung adalah 1-8 (hanya untuk driver kvm2)", + "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Melewati penggantian konteks kubectl untuk {{.profile_name}} karena --keep-context telah diatur.", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Beberapa fitur dasbor memerlukan addon metrics-server. Untuk mengaktifkan semua fitur, jalankan: \n\n\tminikube{{.profileArg}} addons enable metrics-server\n", + "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "Maaf, Kubernetes {{.k8sVersion}} memerlukan conntrack yang terinstal di path root", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "Maaf, Kubernetes {{.k8sVersion}} memerlukan crictl yang terinstal di path root", + "Sorry, completion support is not yet implemented for {{.name}}": "Maaf, dukungan penyelesaian belum diimplementasikan untuk {{.name}}", + "Sorry, please set the --output flag to one of the following valid options: [text,json]": "Maaf, harap atur flag --output ke salah satu opsi yang valid berikut: [text,json]", + "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "Maaf, IP yang diberikan dengan flag --listen-address tidak valid: {{.listenAddr}}.", + "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "Maaf, alamat yang diberikan dengan flag --insecure-registry tidak valid: {{.addr}}. Format yang diharapkan adalah: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] atau \u003cnetwork\u003e/\u003cnetmask\u003e", + "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "Maaf, parameter kubeadm.{{.parameter_name}} saat ini tidak didukung oleh --extra-config", + "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "Maaf, URL yang diberikan dengan flag --registry-mirror tidak valid: {{.url}}", + "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "Maaf, {{.driver}} tidak mengizinkan perubahan mount setelah pembuatan container (mount sebelumnya: '{{.old}}', mount baru: '{{.new}}')", + "Source {{.path}} can not be empty": "Sumber {{.path}} tidak boleh kosong", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "Versi Kubernetes yang ditentukan {{.specified}} lebih lama dari versi tertua yang didukung: {{.oldest}}. Gunakan minikube config defaults kubernetes-version untuk detail lebih lanjut.", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "Versi Kubernetes yang ditentukan {{.specified}} lebih baru dari versi terbaru yang didukung: {{.newest}}. Gunakan minikube config defaults kubernetes-version untuk detail lebih lanjut.", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "Versi Kubernetes yang ditentukan {{.specified}} tidak ditemukan dalam daftar versi Kubernetes", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "Versi utama Kubernetes yang ditentukan {{.specifiedMajor}} lebih baru dari versi utama terbaru yang didukung: {{.newestMajor}}", + "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "Tentukan --kubernetes-version dalam format v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'", + "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "Tentukan nilai --host-only-cidr yang lain, seperti 172.16.0.1/24", + "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Tentukan flag tambahan untuk diteruskan ke Docker daemon. (format: key=value)", + "Specify arbitrary flags to pass to the build. (format: key=value)": "Tentukan flag tambahan untuk diteruskan ke Docker daemon. (format: key=value)", + "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "Penambahan disk tambahan saat ini hanya didukung untuk driver berikut: {{.supported_drivers}}. Jika mau anda dapat berkontribusi menambahkan fitur ini, silakan buat Pull Request.", + "StartHost failed, but will try again: {{.error}}": "Gagal memulai host, tetapi akan mencoba lagi: {{.error}}", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "Memulai node \"{{.node}}\" dengan peran {{.role}} dalam klaster \"{{.cluster}}\"", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "Memulai minikube tanpa Kubernetes dalam klaster {{.cluster}}", + "Starting tunnel for service {{.service}}.": "Memulai tunnel untuk layanan {{.service}}", + "Starts a local Kubernetes cluster": "Memulai klaster Kubernetes lokal", + "Starts a node.": "Memulai sebuah node.", + "Starts an existing stopped node in a cluster.": "Memulai kembali node yang sudah ada dan dihentikan dalam klaster.", + "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "Gagal memulai dengan driver {{.old_driver}}, mencoba dengan driver alternatif {{.new_driver}}: {{.error}}", + "Stopped tunnel for service {{.service}}.": "Tunnel untuk layanan {{.service}} telah dihentikan.", + "Stopping node \"{{.name}}\" ...": "Menghentikan node \"{{.name}}\" ...", + "Stopping tunnel for service {{.service}}.": "Menghentikan tunnel untuk layanan {{.service}}.", + "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "Menghentikan klaster Kubernetes lokal. Perintah ini akan menghentikan VM atau container yang mendasarinya, tetapi data pengguna tetap utuh. Klaster dapat dijalankan kembali dengan perintah \"start\".", + "Stops a node in a cluster.": "Menghentikan sebuah node dalam klaster.", + "Stops a running local Kubernetes cluster": "Menghentikan klaster Kubernetes lokal yang sedang berjalan", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "Subnet yang akan digunakan pada klaster KIC. Jika dibiarkan kosong, minikube akan memilih alamat subnet, dimulai dari 192.168.49.0. (hanya untuk driver Docker dan Podman)", + "Successfully added {{.name}} to {{.cluster}}!": "Berhasil menambahkan {{.name}} ke dalam klaster {{.cluster}}!", + "Successfully deleted all profiles": "Berhasil menghapus semua profil", + "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "Berhasil melakukan mount dari {{.sourcePath}} ke {{.destinationPath}}", + "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "Berhasil membersihkan direktori minikube yang terletak di - [{{.minikubeDirectory}}]", + "Successfully started node {{.name}}!": "Berhasil menjalankan node {{.name}}!", + "Successfully stopped node {{.name}}": "Berhasil menghentikan node {{.name}}", + "Successfully unblocked bootpd process from firewall, retrying": "Berhasil membuka blokir proses bootpd dari firewall, mencoba kembali", + "Suggestion: {{.advice}}": "Saran: {{.advice}}", + "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Sistem hanya memiliki {{.size}}MiB yang tersedia, kurang dari {{.req}}MiB yang dibutuhkan untuk Kubernetes", + "Tag images": "Memberi tag pada image", + "Tag to apply to the new image (optional)": "Tag yang akan diterapkan pada image baru (opsional)", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "Target \u003cjalur file remote\u003e harus berupa jalur absolut. Jalur relatif tidak diperbolehkan (contoh: \"minikube:/home/docker/copied.txt\")", + "Target directory {{.path}} must be an absolute path": "Direktori target {{.path}} harus berupa path absolute.", + "Target {{.path}} can not be empty": "Target {{.path}} tidak boleh kosong", + "Test docs have been saved at - {{.path}}": "Dokumen uji telah disimpan di - {{.path}}", + "The \"{{.driver_name}}\" driver should not be used with root privileges.": "Driver \"{{.driver_name}}\" sebaiknya tidak digunakan dengan hak akses root.", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "Driver \"{{.driver_name}}\" sebaiknya tidak digunakan dengan hak akses root. Jika ingin melanjutkan sebagai root, gunakan --force.", + "The \"{{.name}}\" container runtime requires CNI": "Runtime container \"{{.name}}\" memerlukan CNI", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "", + "The 'none' driver is designed for experts who need to integrate with an existing VM": "Driver 'none' dirancang untuk para ahli yang perlu mengintegrasikan dengan VM yang sudah ada", + "The '{{.addonName}}' addon is enabled": "Addon '{{.addonName}}' telah diaktifkan", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "Driver '{{.driver}}' memerlukan izin tingkat tinggi. Perintah berikut akan dijalankan:\n\n{{ .example }}\n", + "The '{{.driver}}' provider was not found: {{.error}}": "Penyedia '{{.driver}}' tidak ditemukan: {{.error}}", + "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Driver '{{.name}}' tidak mendukung beberapa profil: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "The '{{.name}}' driver does not respect the --cpus flag": "Driver '{{.name}}' tidak memperhitungkan flag --cpus", + "The '{{.name}}' driver does not respect the --memory flag": "Driver '{{.name}}' tidak memperhitungkan flag --memory", + "The '{{.name}}' driver does not support --cpus=no-limit": "Driver '{{.name}}' tidak mendukung --cpus=no-limit", + "The '{{.name}}' driver does not support --memory=no-limit": "Driver '{{.name}}' tidak mendukung --memory=no-limit", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "Flag --image-repository yang anda berikan mengandung skema: {{.scheme}}, yang akan dihapus secara otomatis", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "Flag --image-repository yang anda berikan memiliki garis miring (/) di akhir yang dapat menyebabkan konflik di Kubernetes, sehingga dihapus secara otomatis", + "The CIDR to be used for service cluster IPs.": "CIDR yang akan digunakan untuk alamat IP klaster layanan", + "The CIDR to be used for the minikube VM (virtualbox driver only)": "CIDR yang akan digunakan untuk VM Minikube (hanya untuk driver VirtualBox)", + "The KVM QEMU connection URI. (kvm2 driver only)": "URI koneksi KVM QEMU. (hanya untuk driver kvm2)", + "The KVM default network name. (kvm2 driver only)": "Nama jaringan default untuk KVM. (hanya untuk driver kvm2)", + "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "Driver KVM tidak dapat menghidupkan kembali VM lama ini. Jalankan `minikube delete` untuk menghapusnya dan coba lagi", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "Addon OLM tidak berfungsi, untuk detail lebih lanjut kunjungi: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534", + "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "Driver VM mengalami crash. Jalankan 'minikube start --alsologtostderr -v=8' untuk melihat pesan kesalahan driver VM", + "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "Driver VM keluar dengan kesalahan dan mungkin rusak. Jalankan 'minikube start --alsologtostderr -v=8' untuk melihat kesalahannya", + "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "VM yang dikonfigurasi untuk Minikube tidak lagi ada. Jalankan 'minikube delete'", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "Addon Ambassador telah dihentikan sejak versi 1.23.0. Detail lebih lanjut: https://github.com/datawire/ambassador-operator/issues/73", + "The apiserver listening port": "Port tempat apiserver mendengarkan koneksi", + "The argument to pass the minikube mount command on start.": "Argumen yang akan diteruskan ke perintah minikube mount saat dijalankan.", + "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "Nama host resmi apiserver untuk sertifikat apiserver dan konektivitas. Bisa digunakan untuk membuat apiserver tersedia dari luar mesin", + "The base image to use for docker/podman drivers. Intended for local development.": "Image dasar yang digunakan untuk driver Docker/Podman. Ditujukan untuk pengembangan lokal", + "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "Nama host yang diberikan untuk sertifikat tampaknya tidak valid (mungkin bug Minikube, coba jalankan 'minikube delete')", + "The cluster dns domain name used in the Kubernetes cluster": "Nama domain DNS klaster yang digunakan dalam klaster Kubernetes", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "Control Plane (control-plane) '{{.name}}' apiserver tidak berjalan (akan mencoba node lain): (status={{.state}})", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "Control Plane '{{.name}}' apiserver tidak berjalan: (status={{.state}})", + "The control-plane node {{.name}} apiserver is paused": "Control Plane '{{.name}}' apiserver dalam keadaan ditangguhkan (paused)", + "The control-plane node {{.name}} apiserver is paused (will try others)": "Control Plane '{{.name}}' apiserver dalam keadaan ditangguhkan (paused)", + "The control-plane node {{.name}} host does not exist": "Control Plane '{{.name}}' host tidak ada (akan mencoba node lain)", + "The control-plane node {{.name}} host does not exist (will try others)": "Host node Control Plane {{.name}} tidak ada (akan mencoba yang lain)", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "Control Plane '{{.name}}' host tidak berjalan: (status={{.state}})", + "The control-plane node {{.name}} host is not running: state={{.state}}": "Control Plane '{{.name}}' host tidak berjalan: state={{.state}}", + "The cri socket path to be used.": "Jalur soket CRI yang akan digunakan", + "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "Perintah docker-env tidak kompatibel dengan klaster multi-node. Gunakan addon 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Driver '{{.driver}}' tidak didukung pada sistem operasi {{.os}}/{{.arch}}", + "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "Klaster \"{{.name}}\" yang sudah ada dibuat dengan driver lama \"{{.old}}\", yang tidak kompatibel dengan driver baru \"{{.new}}\"", + "The existing node configuration appears to be corrupt. Run 'minikube delete'": "Konfigurasi node yang ada tampaknya rusak. Jalankan 'minikube delete'", + "The heapster addon is depreciated. please try to disable metrics-server instead": "Addon Heapster telah dihentikan. Coba nonaktifkan metrics-server sebagai gantinya", + "The host does not support filesystem 9p.": "Host tidak mendukung filesystem 9p", + "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "Nama virtual switch Hyper-V. Secara default akan menggunakan yang pertama ditemukan. (hanya untuk driver Hyper-V)", + "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "Hypervisor tampaknya tidak dikonfigurasi dengan benar. Jalankan 'minikube start --alsologtostderr -v=1' dan periksa kode kesalahan", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "Image '{{.imageName}}' tidak cocok dengan arsitektur runtime kontainer. Gunakan imaage multi-arsitektur sebagai gantinya", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "Image '{{.imageName}}' tidak ditemukan; tidak dapat menambahkannya ke cache.", + "The initial time interval for each check that wait performs in seconds": "Interval awal waktu untuk setiap pemeriksaan yang dilakukan oleh perintah wait dalam hitungan detik", + "The kubeadm binary within the Docker container is not executable": "Binary kubeadm dalam kontainer Docker tidak dapat dieksekusi", + "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "Driver mesin yang ditentukan gagal memulai. Coba jalankan 'docker-machine-driver-\u003ctype\u003e version'", + "The minikube VM is offline. Please run 'minikube start' to start it again.": "VM Minikube sedang offline. Jalankan 'minikube start' untuk menyalakannya kembali", + "The minikube {{.driver_name}} container exited unexpectedly.": "Kontainer Minikube '{{.driver_name}}' berhenti secara tak terduga", + "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "Versi minimal yang diperlukan untuk Podman adalah \"{{.minVersion}}\". Versi anda saat ini adalah \"{{.currentVersion}}\". Minikube mungkin tidak berfungsi dengan baik. Gunakan dengan risiko anda sendiri. Untuk menginstal versi terbaru, lihat: https://podman.io/getting-started/installation.html", + "The named space to activate after start": "Ruang bernama yang akan diaktifkan setelah Minikube dijalankan", + "The node to build on. Defaults to the primary control plane.": "Node tempat build akan dilakukan. Secara default menggunakan node control plane.", + "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "Node untuk memeriksa status. Secara default menggunakan control plane. Biarkan kosong untuk menampilkan status semua node.", + "The node to get IP. Defaults to the primary control plane.": "Node untuk mendapatkan IP. Secara default menggunakan node control plane.", + "The node to get logs from. Defaults to the primary control plane.": "Node untuk mengambil log. Secara default menggunakan node control plane.", + "The node to get ssh-key path. Defaults to the primary control plane.": "Node untuk mendapatkan path ssh-key. Secara default menggunakan node control plane.", + "The node to ssh into. Defaults to the primary control plane.": "Node untuk melakukan SSH. Secara default menggunakan node control plane.", + "The node {{.name}} has ran out of available PIDs.": "Node {{.name}} kehabisan PID yang tersedia.", + "The node {{.name}} has ran out of disk space.": "Node {{.name}} kehabisan ruang penyimpanan.", + "The node {{.name}} has ran out of memory.": "Node {{.name}} kehabisan memori.", + "The node {{.name}} network is not available. Please verify network settings.": "Jaringan pada node {{.name}} tidak tersedia. Harap periksa pengaturan jaringan.", + "The none driver is not compatible with multi-node clusters.": "Driver none tidak kompatibel dengan klaster multi-node.", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Driver none dengan Kubernetes v1.24+ dan runtime container Docker memerlukan cri-dockerd.\n\t\t\n\t\tSilakan instal cri-dockerd dengan mengikuti petunjuk berikut:\n\n\t\thttps://github.com/Mirantis/cri-dockerd", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Driver none dengan Kubernetes v1.24+ dan runtime container Docker memerlukan dockerd.\n\t\t\n\t\tSilakan instal dockerd dengan mengikuti petunjuk berikut:\n\n\t\thttps://docs.docker.com/engine/install/", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "Driver none dengan Kubernetes v1.24+ memerlukan containernetworking-plugins.\n\n\t\tSilakan instal containernetworking-plugins dengan mengikuti petunjuk berikut:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "Addon nvidia-gpu-device-plugin sudah tidak digunakan lagi dan fungsinya telah digabungkan ke dalam addon nvidia-device-plugin. Addon ini akan dihapus pada rilis mendatang. Silakan gunakan addon nvidia-device-plugin sebagai gantinya. Untuk informasi lebih lanjut, kunjungi: https://github.com/kubernetes/minikube/issues/19114.", + "The output format. One of 'json', 'table'": "Format keluaran. Salah satu dari 'json' atau 'table'", + "The path on the file system where the docs in markdown need to be saved": "Path pada sistem file tempat dokumen dalam format Markdown akan disimpan", + "The path on the file system where the error code docs in markdown need to be saved": "Path pada sistem file tempat dokumen kode error dalam format Markdown akan disimpan", + "The path on the file system where the testing docs in markdown need to be saved": "Path pada sistem file tempat dokumen pengujian dalam format Markdown akan disimpan", + "The podman service within '{{.cluster}}' is not active": "Layanan podman dalam '{{.cluster}}' tidak aktif", + "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "Perintah podman-env tidak kompatibel dengan klaster multi-node. Gunakan add-on 'registry': https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "Perintah podman-env hanya kompatibel dengan runtime \"crio\", tetapi klaster ini dikonfigurasi untuk menggunakan runtime \"{{.runtime}}\".", + "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "Alokasi memori yang diminta sebesar {{.requested}}MiB tidak menyisakan ruang untuk overhead sistem (total memori sistem: {{.system_limit}}MiB). Anda mungkin akan menghadapi masalah stabilitas.", + "The service namespace": "Namespace layanan", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "Layanan/Ingress {{.resource}} memerlukan port khusus untuk diekspos: {{.ports}}", + "The services namespace": "Namespace layanan", + "The socket_vmnet network is only supported on macOS": "Jaringan socket_vmnet hanya didukung di macOS", + "The time interval for each check that wait performs in seconds": "Interval waktu untuk setiap pemeriksaan yang dilakukan oleh wait (dalam detik)", + "The total number of nodes to spin up. Defaults to 1.": "Jumlah total node yang akan dijalankan. Secara default adalah 1.", + "The value passed to --format is invalid": "Nilai yang diberikan ke --format tidak valid", + "The value passed to --format is invalid: {{.error}}": "Nilai yang diberikan ke --format tidak valid: {{.error}}", + "The vfkit driver is only supported on macOS": "", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "Addon {{.addon}} hanya didukung dengan driver KVM.\n\nUntuk panduan pengaturan GPU, lihat: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "Ada beberapa cara untuk mengaktifkan berbagi file yang diperlukan:\n1. Aktifkan \"Use the WSL 2 based engine\" di Docker Desktop\natau\n2. Aktifkan berbagi file di Docker Desktop untuk direktori %s%s.", + "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "Parameter --extra-config berikut tidak valid: {{.invalid_extra_opts}}.", + "These changes will take effect upon a minikube delete and then a minikube start": "Perubahan ini akan berlaku setelah menjalankan 'minikube delete' lalu 'minikube start'.", + "Things to try without Kubernetes ...": "Hal-hal yang bisa dicoba tanpa Kubernetes ...", + "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "Addon ini tidak memiliki endpoint yang ditentukan untuk perintah 'addons open'.\nAnda dapat menambahkannya dengan memberi anotasi pada layanan menggunakan label {{.labelName}}:{{.addonName}}.", + "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "Ini juga dapat dilakukan secara otomatis dengan mengatur variabel lingkungan CHANGE_MINIKUBE_NONE_USER=true.", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "Klaster ini dibuat sebelum minikube v1.26.0 dan tidak memiliki cri-docker terinstal. Silakan jalankan 'minikube delete' lalu mulai minikube kembali.", + "This driver does not yet work on your architecture. Maybe try --driver=none": "Driver ini belum berfungsi di arsitektur anda. Coba gunakan --driver=none.", + "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "Ini adalah masalah yang diketahui dengan driver penyimpanan BTRFS, ada solusi yang tersedia, silakan cek isu ini di GitHub.", + "This will keep the existing kubectl context and will create a minikube context.": "Ini akan mempertahankan konteks kubectl yang ada dan membuat konteks minikube.", + "This will start the mount daemon and automatically mount files into minikube.": "Ini akan memulai daemon mount dan secara otomatis memasang file ke dalam minikube.", + "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "Tip: Untuk menghapus klaster yang dimiliki oleh root ini, jalankan: sudo {{.cmd}}.", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "Untuk mengakses Headlamp, gunakan perintah berikut:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "Untuk mengakses YAKD - Kubernetes Dashboard, tunggu hingga Pod siap dan jalankan perintah berikut:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n", + "To configure vment-helper to run without a password, please check the documentation:": "", + "To connect to this cluster, use: --context={{.name}}": "Untuk terhubung ke klaster ini, gunakan: --context={{.name}}.", + "To connect to this cluster, use: kubectl --context={{.profile_name}}": "Untuk terhubung ke klaster ini, gunakan: kubectl --context={{.profile_name}}.", + "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "Untuk menonaktifkan pemberitahuan beta, jalankan: 'minikube config set WantBetaUpdateNotification false'.", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "Untuk menonaktifkan pemberitahuan ini, jalankan: 'minikube config set WantUpdateNotification false'.", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "Untuk menonaktifkan semua pemberitahuan pembaruan, jalankan: 'minikube config set WantUpdateNotification false'.", + "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "Untuk pull image eksternal baru, Anda mungkin perlu mengonfigurasi proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/.", + "To see addons list for other profiles use: `minikube addons -p name list`": "Untuk melihat daftar addon untuk profil lain, gunakan: `minikube addons -p name list`.", + "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "Untuk mengatur proyek Google Cloud Anda, jalankan:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\natau atur variabel lingkungan GOOGLE_CLOUD_PROJECT.", + "To start a cluster, run: \"{{.command}}\"": "Untuk memulai klaster, jalankan: \"{{.command}}\".", + "To start minikube with Hyper-V, Powershell must be in your PATH`": "Untuk menjalankan Minikube dengan Hyper-V, Powershell harus ada dalam PATH.", + "To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "Untuk menggunakan perintah kubectl atau minikube sebagai pengguna Anda sendiri, Anda mungkin perlu memindahkannya. Misalnya, untuk menimpa pengaturan Anda sendiri, jalankan:", + "Troubleshooting Commands:": "Perintah Pemecahan Masalah:", + "Try 'minikube delete' to force new SSL certificates to be installed": "Coba jalankan 'minikube delete' untuk memaksa pemasangan ulang sertifikat SSL baru.", + "Try 'minikube delete', and disable any conflicting VPN or firewall software": "Coba jalankan 'minikube delete', dan nonaktifkan VPN atau firewall yang mungkin menyebabkan konflik.", + "Try one or more of the following to free up space on the device:\n\t\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Coba salah satu atau lebih langkah berikut untuk mengosongkan ruang di perangkat:\n\t\n\t\t\t1. Jalankan \"docker system prune\" untuk menghapus data Docker yang tidak digunakan (opsional dengan \"-a\").\n\t\t\t2. Tambahkan alokasi penyimpanan untuk Docker for Desktop melalui:\n\t\t\t\tIkon Docker \u003e Preferences \u003e Resources \u003e Disk Image Size.\n\t\t\t3. Jalankan \"minikube ssh -- docker system prune\" jika menggunakan runtime kontainer Docker.", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Trying to delete invalid profile {{.profile}}": "Mencoba menghapus profil tidak valid {{.profile}}.", + "Tunnel successfully started": "Tunnel berhasil dijalankan.", + "Unable to bind flags": "Tidak dapat mengikat flag.", + "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "Tidak dapat membuat jaringan khusus, ini mungkin menyebabkan perubahan IP klaster setelah restart: {{.error}}.", + "Unable to delete profile(s): {{.error}}": "Tidak dapat menghapus profil: {{.error}}.", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "Tidak dapat mendeteksi rilis patch terbaru untuk versi mayor.minor v{{.majorminor}}.", + "Unable to enable dashboard": "Tidak dapat mengaktifkan dashboard.", + "Unable to fetch latest version info": "Tidak dapat mengambil informasi versi terbaru.", + "Unable to find any control-plane nodes": "Tidak dapat menemukan node control-plane.", + "Unable to generate docs": "Tidak dapat menghasilkan dokumentasi.", + "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", + "Unable to get CPU info: {{.err}}": "", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "", + "Unable to get current user": "", + "Unable to get runtime": "", + "Unable to kill mount process: {{.error}}": "", + "Unable to list profiles: {{.error}}": "", + "Unable to load cached images: {{.error}}": "", + "Unable to load config: {{.error}}": "", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "", + "Unable to load control-plane node {{.name}} host: {{.err}}": "", + "Unable to load profile: {{.error}}": "", + "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "", + "Unable to parse memory '{{.memory}}': {{.error}}": "", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "", + "Unable to pick a default driver. Here is what was considered, in preference order:": "", + "Unable to push cached images: {{.error}}": "", + "Unable to remove machine directory": "", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "", + "Unable to run vmnet-helper without a password": "", + "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "Tidak dapat menurunkan versi Kubernetes dari v{{.old}} ke v{{.new}} secara aman.", + "Unable to stop VM": "Tidak dapat menghentikan VM.", + "Unable to update {{.driver}} driver: {{.error}}": "Tidak dapat memperbarui driver {{.driver}}: {{.error}}.", + "Unfortunately, could not download the base image {{.image_name}} ": "", + "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "", + "Unmounting {{.path}} ...": "Melepas pemasangan {{.path}} ...", + "Unpause": "Lanjutkan", + "Unpaused {{.count}} containers": "{{.count}} kontainer telah dilanjutkan.", + "Unpaused {{.count}} containers in: {{.namespaces}}": "{{.count}} kontainer telah dilanjutkan di: {{.namespaces}}.", + "Unpausing node {{.name}} ... ": "Melanjutkan node {{.name}} ...", + "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "Hapus variabel lingkungan KUBECONFIG, atau pastikan tidak mengarah ke jalur kosong atau tidak valid.", + "Unset variables instead of setting them": "Hapus variabel alih-alih menetapkannya.", + "Update Docker to the latest minor version, this version is unsupported": "Perbarui Docker ke versi minor terbaru, versi ini tidak didukung.", + "Update kubeconfig in case of an IP or port change": "Perbarui kubeconfig jika terjadi perubahan IP atau port.", + "Update server returned an empty list": "Server pembaruan mengembalikan daftar kosong.", + "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "Memperbarui {{.driver_name}} yang sedang berjalan \"{{.cluster}}\" {{.machine_type}} ...", + "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "Tingkatkan ke QEMU v3.1.0+, jalankan 'virt-host-validate', atau pastikan Anda tidak menjalankan dalam lingkungan VM bertingkat.", + "Usage": "Penggunaan", + "Usage: minikube completion SHELL": "Penggunaan: minikube completion SHELL", + "Usage: minikube delete": "Penggunaan: minikube delete", + "Usage: minikube delete --all --purge": "Penggunaan: minikube delete --all --purge", + "Usage: minikube node [add|start|stop|delete|list]": "Penggunaan: minikube node [add|start|stop|delete|list]", + "Usage: minikube node delete [name]": "Penggunaan: minikube node delete [name]", + "Usage: minikube node list": "Penggunaan: minikube node list", + "Usage: minikube node start [name]": "Penggunaan: minikube node start [name]", + "Usage: minikube node stop [name]": "Penggunaan: minikube node stop [name]", + "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "Gunakan \"{{.CommandPath}} [command] --help\" untuk informasi lebih lanjut tentang perintah.", + "Use 'kubectl get po -A' to find the correct and namespace name": "Gunakan 'kubectl get po -A' untuk menemukan nama namespace yang benar.", + "Use -A to specify all namespaces": "Gunakan -A untuk menentukan semua namespace.", + "Use SSH connection instead of HTTPS (port 2376)": "Gunakan koneksi SSH alih-alih HTTPS (port 2376).", + "Use SSH for running kubernetes client on the node": "Gunakan SSH untuk menjalankan klien Kubernetes pada node.", + "Use VirtualBox to remove the conflicting VM and/or network interfaces": "Gunakan VirtualBox untuk menghapus VM dan/atau antarmuka jaringan yang konflik.", + "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "Gunakan klien SSH Golang bawaan (default true). Atur ke 'false' untuk menggunakan perintah 'ssh' dari command line saat mengakses mesin Docker. Berguna untuk driver mesin yang tidak bisa memulai dengan 'Waiting for SSH'.", + "User ID: {{.userID}}": "ID Pengguna: {{.userID}}", + "User name '{{.username}}' is not valid": "Nama pengguna '{{.username}}' tidak valid.", + "User name must be 60 chars or less.": "Nama pengguna harus terdiri dari 60 karakter atau kurang.", + "Userspace file server is shutdown": "Server file ruang pengguna telah dimatikan.", + "Userspace file server: ": "Server file ruang pengguna: ", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "Menggunakan Kubernetes v1.24+ dengan runtime Docker memerlukan instalasi cri-docker.", + "Using Kubernetes {{.version}} since patch version was unspecified": "Menggunakan Kubernetes {{.version}} karena versi patch tidak ditentukan.", + "Using image repository {{.name}}": "Menggunakan repositori image {{.name}}.", + "Using image {{.registry}}{{.image}}": "Menggunakan image {{.registry}}{{.image}}.", + "Using image {{.registry}}{{.image}} (global image repository)": "Menggunakan image {{.registry}}{{.image}} (repositori image global).", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "Diperlukan driver Docker tanpa root, tetapi Docker saat ini tampaknya tidak dalam mode rootless. Coba jalankan 'docker context use rootless'.", + "Using rootless driver was required, but the current driver does not seem rootless": "Diperlukan driver tanpa root, tetapi driver saat ini tampaknya tidak dalam mode rootless.", + "Using rootless {{.driver_name}} driver": "Menggunakan driver {{.driver_name}} tanpa root.", + "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "Menggunakan runtime '{{.runtime}}' dengan driver 'none' adalah konfigurasi yang belum diuji!", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "Menggunakan perintah docker-env dengan runtime containerd masih merupakan fitur eksperimental. Harap berikan masukan atau kontribusi untuk meningkatkannya.", + "Using the {{.driver}} driver based on existing profile": "Menggunakan driver {{.driver}} berdasarkan profil yang ada.", + "Using the {{.driver}} driver based on user configuration": "Menggunakan driver {{.driver}} berdasarkan konfigurasi pengguna.", + "Using {{.driver_name}} driver with root privileges": "Menggunakan driver {{.driver_name}} dengan hak akses root.", + "Valid components are: {{.valid_extra_opts}}": "Komponen yang valid: {{.valid_extra_opts}}.", + "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "Validasi jaringan KVM Anda. Jalankan: virt-host-validate lalu virsh net-list --all.", + "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "Verifikasi bahwa variabel lingkungan HTTP_PROXY dan HTTPS_PROXY Anda telah diatur dengan benar.", + "Verifying Kubernetes components...": "Memverifikasi komponen Kubernetes...", + "Verifying dashboard health ...": "Memverifikasi kesehatan dashboard ...", + "Verifying proxy health ...": "Memverifikasi kesehatan proxy ...", + "Verifying {{.addon_name}} addon...": "Memverifikasi addon {{.addon_name}}...", + "Version: {{.version}}": "Versi: {{.version}}", + "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "VirtualBox dan Hyper-V mengalami konflik. Gunakan '--driver=hyperv' atau nonaktifkan Hyper-V dengan: 'bcdedit /set hypervisorlaunchtype off'.", + "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "VirtualBox tidak dapat membuat jaringan, kemungkinan karena konflik dengan jaringan yang sudah ada dan tidak lagi dikenali oleh Minikube. Coba jalankan 'minikube delete'.", + "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "VirtualBox bermasalah. Nonaktifkan perangkat lunak antivirus real-time, reboot, dan instal ulang VirtualBox jika masalah berlanjut.", + "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "VirtualBox bermasalah. Instal ulang VirtualBox, reboot, dan jalankan 'minikube delete'.", + "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "VirtualBox tidak dapat menemukan antarmuka jaringannya. Coba tingkatkan ke versi terbaru dan reboot.", + "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "Dukungan virtualisasi dinonaktifkan pada komputer Anda. Jika Anda menjalankan Minikube dalam VM, coba '--driver=docker'. Jika tidak, periksa manual BIOS sistem Anda untuk mengaktifkan virtualisasi.", + "Wait failed: {{.error}}": "Gagal menunggu: {{.error}}", + "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "Ingin menggunakan kubectl {{.version}}? Coba 'minikube kubectl -- get pods -A'.", + "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "Lokasi root untuk berbagi NFS, default ke /nfsshares (hanya untuk driver hyperkit).", + "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "Apakah akan menggunakan switch eksternal dibandingkan Default Switch jika switch virtual tidak ditentukan secara eksplisit. (hanya untuk driver Hyper-V).", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", + "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "Dengan --network-plugin=cni, anda perlu menyediakan CNI sendiri. Lihat opsi --cni sebagai alternatif yang lebih mudah digunakan.", + "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "Tampaknya anda menggunakan proxy, tetapi variabel lingkungan NO_PROXY Anda tidak mencakup IP Minikube ({{.ip_address}}).", + "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "Anda mencoba menjalankan file biner Windows .exe di dalam WSL. Untuk integrasi yang lebih baik, gunakan biner Linux sebagai gantinya (Unduh di https://minikube.sigs.k8s.io/docs/start/). Jika Anda tetap ingin melanjutkan, gunakan opsi --force.", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "Anda mencoba menjalankan biner amd64 pada sistem M1.\nSilakan gunakan biner darwin/arm64 sebagai gantinya.\nUnduh di {{.url}}.", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "Anda menggunakan driver QEMU tanpa jaringan khusus, yang tidak mendukung perintah `minikube service` \u0026 `minikube tunnel`.", + "You can create one using 'minikube start'.\n\t\t": "Anda dapat membuatnya dengan menjalankan 'minikube start'.\n\t\t", + "You can delete them using the following command(s): ": "Anda dapat menghapusnya dengan perintah berikut:", + "You can force an unsupported Kubernetes version via the --force flag": "Anda dapat memaksa versi Kubernetes yang tidak didukung menggunakan flag --force.", + "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "Anda tidak dapat menambahkan atau menghapus disk tambahan untuk klaster minikube yang sudah ada. Silakan hapus klaster terlebih dahulu.", + "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "Anda tidak dapat mengubah jumlah CPU untuk klaster minikube yang sudah ada. Silakan hapus klaster terlebih dahulu.", + "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "Anda tidak dapat mengubah ukuran disk untuk klaster minikube yang sudah ada. Silakan hapus klaster terlebih dahulu.", + "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "Anda tidak dapat mengubah ukuran memori untuk klaster minikube yang sudah ada. Silakan hapus klaster terlebih dahulu.", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "Anda tidak dapat mengubah jumlah node untuk klaster minikube yang sudah ada. Gunakan 'minikube node add' untuk menambahkan node ke klaster yang sudah ada.", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "Anda tidak dapat mengubah IP statis dari klaster minikube yang sudah ada. Silakan hapus klaster terlebih dahulu.", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "Anda tidak dapat mengaktifkan addon pada klaster tanpa Kubernetes. Untuk mengaktifkan Kubernetes pada klaster Anda, jalankan: minikube start --kubernetes-version=stable.", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "Anda telah melakukan autentikasi dengan akun layanan yang tidak memiliki file JSON terkait. Addon GCP Auth memerlukan kredensial dengan file JSON untuk melanjutkan.", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "Anda telah memilih untuk menonaktifkan CNI, tetapi runtime kontainer \"{{.name}}\" memerlukan CNI.", + "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "Anda telah memilih driver \"virtualbox\", tetapi ada opsi yang lebih baik!\nUntuk performa dan dukungan yang lebih baik, pertimbangkan menggunakan driver lain: {{.drivers}}\n\nUntuk menonaktifkan peringatan ini, jalankan:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nUntuk mempelajari lebih lanjut tentang driver minikube, kunjungi https://minikube.sigs.k8s.io/docs/drivers/\nUntuk melihat perbandingan performa, kunjungi https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n", + "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Anda mungkin perlu menghapus VM \"{{.name}}\" secara manual dari hypervisor Anda.", + "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "Anda mungkin perlu menghentikan Hyper-V Manager dan menjalankan `minikube delete` lagi.", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "Anda mungkin menggunakan versi amd64 dari minikube pada Mac dengan Apple Silicon. Gunakan versi arm64 dari minikube sebagai gantinya.", + "You must specify service name(s) or --all": "Anda harus menentukan nama layanan atau menggunakan --all.", + "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "Kredensial GCP Anda sekarang akan dimasukkan ke setiap pod yang dibuat dalam klaster {{.name}}.", + "Your cgroup does not allow setting memory.": "cgroup Anda tidak mengizinkan pengaturan memori.", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "Firewall Anda memblokir bootpd yang diperlukan untuk konfigurasi ini. Perintah berikut akan dijalankan untuk membuka blokir bootpd:\n\n{{.commands}}\n", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "Firewall Anda kemungkinan memblokir bootpd. Untuk membuka blokirnya, jalankan:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd", + "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "Host Anda tidak mendukung virtualisasi KVM. Pastikan qemu-kvm terinstal dan jalankan 'virt-host-validate' untuk mendiagnosis masalahnya.", + "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "Host Anda tidak mendukung virtualisasi. Jika Anda menjalankan minikube di dalam VM, coba gunakan '--driver=docker'. Jika tidak, aktifkan virtualisasi di BIOS anda.", + "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", + "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "Konfigurasi minikube Anda merujuk pada driver yang tidak didukung. Hapus ~/.minikube dan coba lagi.", + "Your minikube vm is not running, try minikube start.": "VM minikube Anda tidak berjalan, coba jalankan 'minikube start'.", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "Pengguna Anda tidak memiliki izin ke direktori profil minikube. Jalankan: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' untuk memperbaikinya.", + "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "[PERINGATAN] Untuk fungsionalitas penuh, addon 'csi-hostpath-driver' memerlukan addon 'volumesnapshots' untuk diaktifkan.\n\nAnda dapat mengaktifkan addon 'volumesnapshots' dengan menjalankan: 'minikube addons enable volumesnapshots'\n", + "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "Addon '{{.name}}' saat ini tidak diaktifkan.\nUntuk mengaktifkan addon ini, jalankan:\nminikube addons enable {{.name}}", + "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "Addon '{{.name}}' bukan addon yang valid dalam paket minikube.\nUntuk melihat daftar addon yang tersedia, jalankan:\nminikube addons list", + "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "Addons mengubah file addon minikube menggunakan subperintah seperti \"minikube addons enable dashboard\"", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "Driver VM arm64 saat ini tidak mendukung runtime kontainer crio. Lihat https://github.com/kubernetes/minikube/issues/14146 untuk detailnya.", + "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "Addon auto-pause adalah fitur alpha dan masih dalam tahap pengembangan awal. Silakan laporkan masalah untuk membantu kami meningkatkannya.", + "bash completion failed": "bash completion gagal", + "bash completion.": "bash completion.", + "call with cleanup=true to remove old tunnels": "Panggil dengan cleanup=true untuk menghapus tunnel lama", + "cancel any existing scheduled stop requests": "Batalkan semua permintaan penghentian yang telah dijadwalkan", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "Tidak dapat menentukan --kubernetes-version dengan --no-kubernetes,\nuntuk menghapus konfigurasi global, jalankan:\n\n$ minikube config unset kubernetes-version", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "Config mengubah file konfigurasi minikube menggunakan subperintah seperti \"minikube config set driver kvm2\"\nBidang yang dapat dikonfigurasi: \n\n", + "config view failed": "Gagal menampilkan konfigurasi", + "dashboard": "Dasbor.", + "dashboard service is not running: {{.error}}": "Layanan dasbor tidak berjalan: {{.error}}", + "delete ctx": "Hapus ctx", + "deleting node": "Menghapus node.", + "disable failed": "Gagal menonaktifkan", + "dry-run mode. Validates configuration, but does not mutate system state": "Mode dry-run. Memvalidasi konfigurasi, tetapi tidak mengubah status sistem", + "dry-run validation complete!": "Validasi dry-run selesai!", + "enable failed": "Gagal mengaktifkan", + "enabled failed": "Gagal diaktifkan", + "error creating clientset": "Kesalahan saat membuat clientset", + "error creating urls": "Kesalahan saat membuat URL.", + "error fetching Kubernetes version list from GitHub": "Kesalahan saat mengambil daftar versi Kubernetes dari GitHub", + "error getting control-plane node": "Kesalahan saat mendapatkan node control-plane.", + "error getting defaults: {{.error}}": "Kesalahan saat mendapatkan nilai default: {{.error}}", + "error getting ssh port": "Kesalahan saat mendapatkan port SSH.", + "error initializing tracing: {{.Error}}": "Kesalahan saat menginisialisasi tracing: {{.Error}}", + "error parsing the input ip address for mount": "Kesalahan saat mengurai alamat IP input untuk mount", + "error provisioning guest": "Kesalahan saat provisioning guest", + "error starting tunnel": "Kesalahan saat memulai tunnel", + "error: --output must be 'text', 'yaml' or 'json'": "Kesalahan: --output harus berupa 'text', 'yaml', atau 'json'", + "error: --output must be 'yaml' or 'json'": "Kesalahan: --output harus berupa 'yaml' atau 'json'", + "experimental": "Eksperimental.", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "Gagal mendapatkan kunci karena kesalahan tak terduga", + "failed to add node": "Gagal menambahkan node", + "failed to load profile: {{.error}}": "Gagal memuat profil: {{.error}}", + "failed to open browser: {{.error}}": "Gagal membuka peramban: {{.error}}", + "failed to restart auto-pause: {{.error}}": "Gagal memulai ulang auto-pause: {{.error}}", + "failed to save config": "Gagal menyimpan konfigurasi", + "failed to set extra option": "Gagal menetapkan opsi tambahan", + "failed to start node": "Gagal memulai node.", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "Salah.", + "fish completion failed": "fish completion gagal", + "fish completion.": "fish completion.", + "if true, will embed the certs in kubeconfig.": "Jika benar, sertifikat akan disematkan dalam kubeconfig.", + "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "Jika anda ingin membuat profil, anda dapat menggunakan perintah ini: minikube start -p {{.profile_name}}", + "initialization failed, will try again: {{.error}}": "Inisialisasi gagal, akan mencoba lagi: {{.error}}", + "invalid kubernetes version": "Versi Kubernetes tidak valid.", + "ip not found": "IP tidak ditemukan.", + "json encoding failure": "Gagal mengenkode JSON.", + "keep the kube-context active after cluster is stopped. Defaults to false.": "Tetap menjaga kube-context aktif setelah klaster dihentikan. Secara default adalah false.", + "kubeadm certificates have expired. Generating new ones...": "Sertifikat kubeadm telah kedaluwarsa. Membuat yang baru...", + "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "Kubeadm mendeteksi konflik port TCP dengan proses lain: kemungkinan instalasi Kubernetes lokal lainnya. Jalankan 'lsof -p \u003cport\u003e' untuk menemukan proses dan menghentikannya.", + "kubectl and minikube configuration will be stored in {{.home_folder}}": "Konfigurasi kubectl dan minikube akan disimpan di {{.home_folder}}.", + "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl tidak ditemukan. Jika Anda membutuhkannya, coba jalankan: 'minikube kubectl -- get pods -A'.", + "kubectl proxy": "Proksi kubectl.", + "libmachine failed": "libmachine gagal.", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "Daftar menampilkan semua pengaturan default yang valid untuk PROPERTY_NAME\nBidang yang dapat diterima: \n\n", + "list versions of all components included with minikube. (the cluster must be running)": "Daftar versi semua komponen yang disertakan dengan minikube. (klaster harus dalam keadaan berjalan).", + "loading profile": "Memuat profil", + "max time to wait per Kubernetes or host to be healthy.": "Waktu maksimum yang ditunggu agar Kubernetes atau host menjadi sehat.", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "minikube addons images ADDON_NAME --output OUTPUT. table, json", + "minikube addons list --output OUTPUT. json, list": "minikube addons list --output OUTPUT. json, list.", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "minikube tidak dapat menarik (pull) image kicbase dari registry Docker mana pun, dan sedang mencoba mengunduh file tar kicbase dari halaman rilis GitHub melalui HTTP.", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "minikube belum mendukung driver penyimpanan BTRFS, tetapi ada solusi, tambahkan flag berikut ke perintah mulai anda: `--feature-gates=\"LocalStorageCapacityIsolation=false\"`.", + "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "minikube kehilangan file yang terkait dengan lingkungan guest anda. Ini dapat diperbaiki dengan menjalankan 'minikube delete'.", + "minikube is not meant for production use. You are opening non-local traffic": "minikube tidak dimaksudkan untuk penggunaan produksi. Anda membuka lalu lintas non-lokal.", + "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "minikube tidak dapat mengakses Google Container Registry. Anda mungkin perlu mengonfigurasinya untuk menggunakan proxy HTTP.", + "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "minikube tidak dapat terhubung ke VM: {{.error}}\n\n\tKemungkinan disebabkan oleh salah satu dari dua alasan berikut:\n\n\t- Gangguan dari VPN atau firewall\n\t- Masalah konfigurasi jaringan pada {{.hypervisor}}\n\n\tSolusi yang disarankan:\n\n\t- Nonaktifkan VPN atau firewall lokal Anda\n\t- Konfigurasikan VPN atau firewall untuk mengizinkan akses ke {{.ip}}\n\t- Restart atau instal ulang {{.hypervisor}}\n\t- Gunakan --vm-driver alternatif\n\t- Gunakan --force untuk mengabaikan pemeriksaan konektivitas ini", + "minikube mount is not currently implemented with the builtin network on QEMU": "minikube mount saat ini belum diimplementasikan dengan jaringan bawaan pada QEMU", + "minikube profile was successfully set to {{.profile_name}}": "Profil minikube berhasil diatur ke {{.profile_name}}", + "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube menyediakan dan mengelola klaster Kubernetes lokal yang dioptimalkan untuk alur kerja pengembangan", + "minikube quickly sets up a local Kubernetes cluster": "minikube dengan cepat menyiapkan klaster Kubernetes lokal", + "minikube service is not currently implemented with the builtin network on QEMU": "Layanan minikube saat ini belum diimplementasikan dengan jaringan bawaan pada QEMU", + "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "minikube melewati berbagai validasi saat --force digunakan; ini dapat menyebabkan perilaku yang tidak terduga", + "minikube status --output OUTPUT. json, text": "minikube status --output OUTPUT. json, text", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "minikube tunnel saat ini belum diimplementasikan dengan jaringan bawaan pada QEMU", + "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} tersedia! Unduh di: {{.url}}", + "mkcmp is used to compare performance of two minikube binaries": "mkcmp digunakan untuk membandingkan kinerja dua binary minikube", + "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "Argumen mount \"{{.value}}\" harus dalam bentuk: \u003csource directory\u003e:\u003ctarget directory\u003e", + "mount could not connect": "Mount tidak dapat terhubung", + "mount failed": "Mount gagal", + "namespaces to pause": "Namespace yang akan dijeda", + "namespaces to unpause": "Namespace yang akan dilanjutka.", + "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "Jaringan untuk menjalankan minikube. Saat ini digunakan oleh driver docker/podman dan KVM. Jika dikosongkan, minikube akan membuat jaringan baru.", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", + "none driver does not support multi-node clusters": "Driver 'none' tidak mendukung klaster multi-node.", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "Argumen tidak cukup ({{.ArgCount}}).\nPenggunaan: minikube config set PROPERTY_NAME PROPERTY_VALUE.", + "numa node is only supported on k8s v1.18 and later": "Numa node hanya didukung pada Kubernetes v1.18 dan versi lebih baru.", + "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "Tata letak keluaran (EKSPERIMENTAL, hanya JSON): 'nodes' atau 'cluster'.", + "pause Kubernetes": "Menjeda Kubernetes.", + "powershell completion failed": "powershell completion gagal.", + "powershell completion.": "powershell completion.", + "preload extraction failed: \"No space left on device\"": "Ekstraksi preload gagal: \"Tidak ada ruang tersisa di perangkat.\"", + "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "Profil menetapkan profil minikube saat ini, atau mendapatkan profil saat ini jika tidak ada argumen yang diberikan. Ini digunakan untuk menjalankan dan mengelola beberapa instance minikube. Anda dapat kembali ke profil minikube default dengan menjalankan `minikube profile default`", + "provisioning host for node": "Mempersiapkan host untuk node", + "reload cached images.": "Muat ulang image yang di-cache.", + "reloads images previously added using the 'cache add' subcommand": "Memuat ulang image yang sebelumnya ditambahkan menggunakan subperintah 'cache add'", + "retrieving node": "Mengambil node", + "scheduled stop is not supported on the none driver, skipping scheduling": "Penghentian terjadwal tidak didukung pada driver 'none', melewati penjadwalan", + "service not available": "Layanan tidak tersedia", + "service {{.namespace_name}}/{{.service_name}} has no node port": "Layanan {{.namespace_name}}/{{.service_name}} tidak memiliki node port", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "Tetapkan alamat bind tunnel, kosong atau '*' menunjukkan bahwa tunnel harus tersedia untuk semua antarmuka", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "socket_vmnet diinstal dengan grup yang salah, hapus klaster ini dengan 'minikube delete' dan perbarui grup dengan 'sudo chown root:$(id -ng) /var/run/socket_vmnet', lalu coba lagi", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "socket_vmnet tidak ditemukan di sistem, selesaikan dengan:\n\n\t\tOpsi 1) Menginstal socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOpsi 2) Menggunakan jaringan pengguna:\n\n\t\t minikube start{{.profile}} --driver qemu --network user", + "stat failed": "Stat gagal", + "status json failure": "Gagal mendapatkan status dalam format JSON", + "status text failure": "Gagal mendapatkan status dalam format teks", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "Terlalu banyak argumen ({{.ArgCount}})\nPenggunaan: minikube config set PROPERTY_NAME PROPERTY_VALUE", + "true": "benar", + "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "Tunnel membuat rute ke layanan yang diterapkan dengan tipe LoadBalancer dan menetapkan Ingress ke ClusterIP mereka. Untuk contoh detail, lihat https://minikube.sigs.k8s.io/docs/tasks/loadbalancer", + "unable to bind flags": "Tidak dapat mengikat flag", + "unable to daemonize: {{.err}}": "Tidak dapat menjalankan sebagai daemon: {{.err}}", + "unable to delete minikube config folder": "Tidak dapat menghapus folder konfigurasi minikube", + "unpause Kubernetes": "Melanjutkan Kubernetes", + "unset failed": "Gagal membatalkan pengaturan", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "Menghapus PROPERTY_NAME dari file konfigurasi minikube. Dapat ditimpa oleh flag atau variabel lingkungan", + "unsets an individual value in a minikube config file": "Menghapus individual value dalam file konfigurasi minikube", + "unsupported or missing driver: {{.name}}": "Driver tidak didukung atau tidak ditemukan: {{.name}}", + "update config": "Perbarui konfigurasi", + "usage: minikube addons configure ADDON_NAME": "Penggunaan: minikube addons configure ADDON_NAME", + "usage: minikube addons disable ADDON_NAME": "Penggunaan: minikube addons disable ADDON_NAME", + "usage: minikube addons enable ADDON_NAME": "Penggunaan: minikube addons enable ADDON_NAME", + "usage: minikube addons images ADDON_NAME": "Penggunaan: minikube addons images ADDON_NAME", + "usage: minikube addons list": "Penggunaan: minikube addons list", + "usage: minikube addons open ADDON_NAME": "Penggunaan: minikube addons open ADDON_NAME", + "usage: minikube config list PROPERTY_NAME": "Penggunaan: minikube config list PROPERTY_NAME", + "usage: minikube config unset PROPERTY_NAME": "Penggunaan: minikube config unset PROPERTY_NAME", + "usage: minikube delete": "Penggunaan: minikube delete", + "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "Penggunaan: minikube profile [MINIKUBE_PROFILE_NAME]", + "version json failure": "Gagal mendapatkan versi dalam format JSON", + "version yaml failure": "Gagal mendapatkan versi dalam format YAML", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "Gagal melakukan encoding YAML", + "zsh completion failed": "zsh completion gagal", + "zsh completion.": "zsh completio", + "{{ .name }}: Suggestion: {{ .suggestion}}": "{{ .name }}: Saran: {{ .suggestion }}", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "{{.Driver}} saat ini menggunakan driver penyimpanan {{.StorageDriver}}, mengatur preload=false", + "{{.addon}} does not currently have an associated maintainer.": "{{.addon}} saat ini tidak memiliki pemelihara yang terkait", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "{{.addon}} adalah addon pihak ketiga dan tidak dipelihara atau diverifikasi oleh pemelihara minikube, aktifkan dengan risiko Anda sendiri", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "{{.addon}} adalah addon yang dipelihara oleh {{.maintainer}}. Untuk masalah apa pun, hubungi minikube di GitHub.\nAnda dapat melihat daftar pemelihara minikube di: https://github.com/kubernetes/minikube/blob/master/OWNERS", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "{{.addon}} dipelihara oleh {{.maintainer}}, untuk masalah apa pun hubungi {{.verifiedMaintainer}} di GitHub", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "{{.count}} node{{if gt .count 1}}s{{end}} dihentikan", + "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} hilang, akan dibuat ulang", + "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "{{.driver_name}} tidak dapat melanjutkan karena layanan {{.driver_name}} tidak sehat", + "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "{{.driver_name}} memiliki kurang dari 2 CPU yang tersedia, tetapi Kubernetes memerlukan setidaknya 2", + "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "{{.driver_name}} hanya memiliki {{.container_limit}}MB memori tetapi Anda menentukan {{.specified_memory}}MB", + "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "{{.driver}} hanya memiliki {{.size}}MiB tersedia, kurang dari {{.req}}MiB yang diperlukan untuk Kubernetes", + "{{.env}}={{.value}}": "{{.env}}={{.value}}", + "{{.name}} doesn't have images.": "{{.name}} tidak memiliki image", + "{{.name}} has no available configuration options": "{{.name}} tidak memiliki opsi konfigurasi yang tersedia", + "{{.name}} has the following images:": "{{.name}} memiliki image berikut:", + "{{.name}} is already running": "{{.name}} sudah berjalan", + "{{.name}} was successfully configured": "{{.name}} berhasil dikonfigurasi", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} hampir kehabisan ruang disk, yang dapat menyebabkan kegagalan deployment! ({{.p}}% dari kapasitas). Anda dapat menggunakan '--force' untuk melewati pemeriksaan ini", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} kehabisan ruang disk! (/var sudah mencapai {{.p}}% kapasitas). Anda dapat menggunakan '--force' untuk melewati pemeriksaan ini", + "{{.ociBin}} rmi {{.images}}": "{{.ociBin}} rmi {{.images}}", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} membutuhkan waktu lama untuk merespons, pertimbangkan untuk memulai ulang {{.ocibin}}", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "{{.path}} menggunakan versi {{.client_version}}, yang mungkin tidak kompatibel dengan Kubernetes {{.cluster_version}}", + "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} di {{.platform}}", + "{{.profile}} profile is not valid: {{.err}}": "Profil {{.profile}} tidak valid: {{.err}}", + "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} belum menjadi sistem file yang didukung. Kami akan tetap mencoba!", + "{{.url}} is not accessible: {{.error}}": "{{.url}} tidak dapat diakses: {{.error}}" +} diff --git a/translations/ja.json b/translations/ja.json index c2439c79af18..c35827b49643 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -1,975 +1,1149 @@ { - "\"The '{{.minikube_addon}}' addon is disabled": "「{{.minikube_addon}}」アドオンは無効化されています", - "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "", - "\"{{.machineName}}\" does not exist, nothing to stop": "「{{.machineName}}」は存在しません。停止すべき対象がありません", - "\"{{.name}}\" profile does not exist, trying anyways.": "「{{.name}}」というプロファイルは存在しません", - "'none' driver does not support 'minikube docker-env' command": "「none」ドライバーは「minikube docker-env」コマンドをサポートしていません", - "'none' driver does not support 'minikube mount' command": "「none」ドライバーは「minikube mount」コマンドをサポートしていません", - "'none' driver does not support 'minikube podman-env' command": "「none」ドライバーは「minikube podman-env」コマンドをサポートしていません", - "'none' driver does not support 'minikube ssh' command": "「none」ドライバーは「minikube ssh」コマンドをサポートしていません", - "'none' driver does not support 'minikube ssh-host' command": "", - "'{{.driver}}' driver reported a issue that could affect the performance.": "「{{.driver}}」ドライバーがパフォーマンスに影響しうる問題を報告しました。", - "'{{.driver}}' driver reported an issue: {{.error}}": "「{{.driver}}」ドライバーがエラーを報告しました: {{.error}}", - "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "", - "- Docs https://docs.docker.com/docker-for-mac/#resources": "", - "- Docs https://docs.docker.com/docker-for-windows/#resources": "", - "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "", - "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "", - "- Restart your {{.driver_name}} service": "", - "- {{.logPath}}": "", - "--kvm-numa-count range is 1-8": "", - "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", - "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", - "==\u003e Audit \u003c==": "", - "==\u003e Last Start \u003c==": "", - "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "VPN、あるいはファイアウォールによって、minkube VM への HTTP アクセスが干渉されています。他の手段として、別の VM を試してみてください: https://minikube.sigs.k8s.io/docs/start/", - "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "", - "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "ファイアウォールによって、minikube は外側への HTTPS リクエストをすることができません。HTTPS_PROXY 環境変数の値を変える必要があるかもしれません", - "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "ファイアウォールによって、minikube がインターネットに繋がることができてない可能性があります。minikube がプロキシーを使うように設定する必要があるかもしれません", - "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Kubernetes 用に生成された証明書で使用されている一連の APIサーバーの IP アドレスのセット。 マシンの外部から API サーバーを利用できるようにする場合に使用します", + "\n\n": "", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "'{{.minikube_addon}}' は有効な minikube アドオンではありません", + "\"The '{{.minikube_addon}}' addon is disabled": "'{{.minikube_addon}}' アドオンが無効です", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "「minikube cache」は今後のバージョンで廃止予定になりますので、「minikube image load」に切り替えてください", + "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "「{{.context}}」コンテキストが更新されて、{{.hostname}}:{{.port}} を指すようになりました", + "\"{{.machineName}}\" does not exist, nothing to stop": "「{{.machineName}}」は存在しません。停止対象がありません", + "\"{{.name}}\" profile does not exist, trying anyways.": "「{{.name}}」プロファイルは存在しませんが、それでも続行します。", + "'none' driver does not support 'minikube docker-env' command": "'none' ドライバーは 'minikube docker-env' コマンドをサポートしていません", + "'none' driver does not support 'minikube mount' command": "'none' ドライバーは 'minikube mount' コマンドをサポートしていません", + "'none' driver does not support 'minikube podman-env' command": "'none' ドライバーは 'minikube podman-env' コマンドをサポートしていません", + "'none' driver does not support 'minikube ssh' command": "'none' ドライバーは 'minikube ssh' コマンドをサポートしていません", + "'none' driver does not support 'minikube ssh-host' command": "'none' ドライバーは 'minikube ssh-host' コマンドをサポートしていません", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "- 「minikube ssh」で minikube ノードに SSH 接続します。\n- 「minikube docker-env」で docker-cli を minikube 内の docker 用に設定します。\n- 「minikube image」で docker を使わずにイメージをビルドします。", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "- 「minikube ssh」で minikube ノードに SSH 接続します。\n- 「minikube image」で docker を使わずにイメージをビルドします。", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "- 「minikube ssh」で minikube ノードに SSH 接続します。\n- 「minikube podman-env」で podman-cli を minikube 内の podman 用に設定します。\n- 「minikube image」で docker を使わずにイメージをビルドします。", + "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "- minikube クラスターの削除と再作成をしてください\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}", + "- Docs https://docs.docker.com/docker-for-mac/#resources": "- ドキュメント https://docs.docker.com/docker-for-mac/#resources", + "- Docs https://docs.docker.com/docker-for-windows/#resources": "- ドキュメント https://docs.docker.com/docker-for-windows/#resources", + "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "- {{.driver_name}} デーモンが十分な CPU/メモリーリソースを利用できることを確認してください。", + "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "- 使用していない {{.driver_name}} イメージ、ボリューム、ネットワーク、コンテナーを削除してください。\n\n\t\t\t\t{{.driver_name}} system prune --volumes", + "- Restart your {{.driver_name}} service": "{{.driver_name}} サービスを再起動してください", + "--container-runtime must be set to \"containerd\" or \"cri-o\" for rootless": "rootless のために、--container-runtime に「containerd」または「cri-o」を設定しなければなりません。", + "--kvm-numa-count range is 1-8": "--kvm-numa-count の範囲は 1~8 です", + "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "--network フラグは、docker/podman および KVM ドライバーでのみ有効であるため、無視されます", + "--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored": "--network フラグは、docker/podman, KVM および Qemu ドライバーでのみ有効であるため、無視されます", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "QEMU を用いる場合、--network は、'builtin' か 'socket_vmnet' でなければなりません", + "--network with QEMU must be 'user' or 'socket_vmnet'": "QEMU を用いる場合、--network は、'user' か 'socket_vmnet' でなければなりません", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "--static-ip フラグは、Docker および Podman ドライバー上でのみ実装されているため、無視されます", + "--static-ip overrides --subnet, --subnet will be ignored": "--static-ip は --subnet をオーバーライドし、--subnet は無視されます", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) 次のコマンドで Kubernetes {{.new}} によるクラスターを再構築します:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) 次のコマンドで Kubernetes {{.new}} による第 2 のクラスターを作成します:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) 次のコマンドで Kubernetes {{.old}} による既存クラスターを使用します:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. 「Docker for Desktop」メニューアイコンをクリックします\n\t\t\t2. 「Preferences」をクリックします\n\t\t\t3. 「Resources」をクリックします\n\t\t\t4. 「CPUs」スライドバーを 2 以上に増やします\n\t\t\t5. 「Apply \u0026 Restart」をクリックします", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. 「Docker for Desktop」メニューアイコンをクリックします\n\t\t\t2. 「Preferences」をクリックします\n\t\t\t3. 「Resources」をクリックします\n\t\t\t4. 「Memory」スライドバーを {{.recommend}} 以上に増やします\n\t\t\t5. 「Apply \u0026 Restart」をクリックします", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. システムトレイ中の Docker アイコンをクリックして「Docker Desktop」メニューを開きます\n\t\t\t2. 「Settings」をクリックします\n\t\t\t3. 「Resources」をクリックします\n\t\t\t4. 「CPUs」スライドバーを 2 以上に増やします\n\t\t\t5. 「Apply \u0026 Restart」をクリックします", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. システムトレイ中の Docker アイコンをクリックして「Docker Desktop」メニューを開きます\n\t\t\t2. 「Settings」をクリックします\n\t\t\t3. 「Resources」をクリックします\n\t\t\t4. 「Memory」スライドバーを {{.recommend}} 以上に増やします\n\t\t\t5. 「Apply \u0026 Restart」をクリックします", + "==\u003e Audit \u003c==": "==\u003e Audit \u003c==", + "==\u003e Last Start \u003c==": "==\u003e Last Start \u003c==", + "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "VPN、あるいはファイアウォールによって、minkube VM への HTTP アクセスが干渉されています。他の手段として、別の VM ドライバーを試してみてください: https://minikube.sigs.k8s.io/docs/start/", + "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "Docker の minikube VM がイメージリポジトリーに到達するのを、ファイアウォールがブロックしています。--image-repository を指定するか、プロキシーを使用する必要があるかもしれません。", + "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "ファイアウォールによって、minikube は外側への HTTPS リクエストをすることができません。HTTPS_PROXY 環境変数の値を変える必要があるかもしれません。", + "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "ファイアウォールによって、minikube がインターネットに接続できていない可能性があります。minikube がプロキシーを使用するように設定する必要があるかもしれません。", + "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Kubernetes 用に生成された証明書で使用される一連の API サーバーの IP アドレス。マシンの外部から API サーバーを利用できるようにする場合に使用します", "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Kubernetes 用に生成された証明書で使用される一連の API サーバー名。マシンの外部から API サーバーを利用できるようにする場合に使用します", - "A set of key=value pairs that describe feature gates for alpha/experimental features.": "アルファ版または試験運用版の機能のフィーチャーゲートを記述する一連の key=value ペアです", - "Access the Kubernetes dashboard running within the minikube cluster": "minikube クラスタ内で動いている Kubernetes のダッシュボードにアクセスします", - "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", - "Add SSH identity key to SSH authentication agent": "", - "Add an image to local cache.": "イメージをローカルキャッシュに追加します", - "Add host key to SSH known_hosts file": "", - "Add image to cache for all running minikube clusters": "", - "Add machine IP to NO_PROXY environment variable": "マシーンの IP アドレスをNO_PROXY 環境変数に追加します", - "Add, delete, or push a local image into minikube": "ローカルイメージをminikubeに追加、削除、またはプッシュします", + "A set of key=value pairs that describe feature gates for alpha/experimental features.": "アルファ版または試験運用版の機能のフィーチャーゲートを記述する一連の key=value ペアです。", + "Access the Kubernetes dashboard running within the minikube cluster": "minikube クラスター内で動いている Kubernetes のダッシュボードにアクセスします", + "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "Windows で v8.1 より古い OpenSSH クライアントを使用している場合、1024 未満のポートへのアクセスに失敗することがあります。詳細はこちら: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission", + "Add SSH identity key to SSH authentication agent": "SSH 認証エージェントに SSH 鍵を追加します", + "Add an image into minikube as a local cache, or delete, reload the cached images": "ローカルキャッシュとして minikube にイメージを追加するか、キャッシュイメージを削除または再登録します", + "Add an image to local cache.": "イメージをローカルキャッシュに追加します。", + "Add host key to SSH known_hosts file": "SSH known_hosts ファイルにホストキーを追加します", + "Add image to cache for all running minikube clusters": "実行中のすべての minikube クラスターのキャッシュに、イメージを追加します", + "Add machine IP to NO_PROXY environment variable": "マシンの IP アドレスを NO_PROXY 環境変数に追加します", "Add, remove, or list additional nodes": "追加のノードを追加、削除またはリストアップします", - "Adding node {{.name}} to cluster {{.cluster}}": "「{{.name}}」というノードを「{{.cluster}}」というクラスタに追加します", + "Adding a control-plane node is not yet supported, setting control-plane flag to false": "コントロールプレーンノードの追加はサポートされていません。control-plane フラグを false に設定します", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", + "Adding node {{.name}} to cluster {{.cluster}}": "{{.name}} ノードを {{.cluster}} クラスターに追加します", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "", "Additional help topics": "追加のトピック", - "Additional mount options, such as cache=fscache": "cache=fscache などの追加のマウントオプション", - "Adds a node to the given cluster config, and starts it.": "ノードをクラスタの設定に追加して、起動します", - "Adds a node to the given cluster.": "ノードをクラスタに追加します", + "Adds a node to the given cluster config, and starts it.": "ノードをクラスターの設定に追加して、起動します。", + "Adds a node to the given cluster.": "ノードをクラスターに追加します。", "Advanced Commands:": "高度なコマンド:", - "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "アドオンを有効にした後、「minikube tunnel」を実行することで、ingress リソースが「127.0.0.1」で利用可能になります", "Aliases": "エイリアス", - "All existing scheduled stops cancelled": "", - "Allow user prompts for more information": "", - "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Docker イメージの pull 元の代替イメージ リポジトリ。これは、gcr.io へのアクセスが制限されている場合に使用できます。これを \\\"auto\\\" に設定すると、minikube によって自動的に指定されるようになります。中国本土のユーザーの場合、registry.cn-hangzhou.aliyuncs.com/google_containers などのローカル gcr.io ミラーを使用できます", - "Amount of RAM to allocate to Kubernetes (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Kubernetesに割り当てられた RAM 容量(形式: \u003cnumber\u003e[\u003cunit\u003e]、unit = b、k、m、g)", - "Amount of time to wait for a service in seconds": "", - "Amount of time to wait for service in seconds": "", - "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "", - "Another minikube instance is downloading dependencies... ": "", - "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "", - "At least needs control plane nodes to enable addon": "", - "Automatically selected the {{.driver}} driver": "{{.driver}}ドライバーが自動的に選択されました", - "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "{{.driver}}ドライバーが自動的に選択されました。他の選択肢: {{.alternates}}", - "Available Commands": "", - "Available Commands:": "利用可能なコマンド:", + "All existing scheduled stops cancelled": "既存のスケジュールされていたすべての停止がキャンセルされました", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "", + "Allow user prompts for more information": "ユーザーによる詳細情報の入力をできるようにします", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Docker イメージを取得するための代替イメージリポジトリー。これは、gcr.io へのアクセスが制限されている場合に使用できます。これを「auto」に設定すると、minikube によって自動的に指定されるようになります。中国本土のユーザーの場合、registry.cn-hangzhou.aliyuncs.com/google_containers などのローカル gcr.io ミラーを使用できます", + "Alternatively you could install one of these drivers:": "代わりに、これらのドライバーのいずれかをインストールすることもできます:", + "Amount of time to wait for a service in seconds": "サービスを待機する時間 (秒)", + "Amount of time to wait for service in seconds": "サービスを待機する時間 (秒)", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "VirtualBox などの別のハイパーバイザーが、KVM と競合しています。他のハイパーバイザーを停止するか、--driver を使用して切り替えてください。", + "Another minikube instance is downloading dependencies... ": "別の minikube のインスタンスが、依存関係をダウンロードしています... ", + "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "別のプログラムが、minikube に必要なファイルを使用しています。Hyper-V を使用している場合は、Hyper-V マネージャー内から minikube VM を停止してみてください", + "Another tunnel process is already running, terminate the existing instance to start a new one": "別のトンネル プロセスが既に実行中です。既存のインスタンスを終了して新しいインスタンスを開始してください", + "At least needs control plane nodes to enable addon": "アドオンを有効にするには、少なくともコントロールプレーンノードが必要です", + "Auto-pause is already enabled.": "自動一時停止は既に有効になっています。", + "Automatically selected the {{.driver}} driver": "{{.driver}} ドライバーが自動的に選択されました", + "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "{{.driver}} ドライバーが自動的に選択されました。他の選択肢: {{.alternates}}", + "Automatically selected the {{.network}} network": "{{.network}} ネットワークが自動的に選択されました", + "Available Commands": "利用可能なコマンド", "Basic Commands:": "基本的なコマンド:", - "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Dockerドライバーを{{.operating_system}}上で動かしているため、実行するにはターミナルを開く必要があります。", - "Bind Address: {{.Address}}": "アドレスをバインドします: {{.Address}}", - "Booting up control plane ...": "Control Plane を起動しています...", - "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "", - "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", - "Build a container image in minikube": "", - "Build a container image, using the container runtime.": "", - "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", - "Cache image from docker daemon": "", - "Cache image from remote registry": "", - "Cannot find directory {{.path}} for copy": "", - "Cannot find directory {{.path}} for mount": "マウントのためのディレクトリ{{.path}}が見つかりません", - "Cannot use both --output and --format options": "", - "Check if you have unnecessary pods running by running 'kubectl get po -A": "", - "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", - "Check that libvirt is setup properly": "", - "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", - "Check that the provided apiserver flags are valid, and that SELinux is disabled": "", - "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "", - "Choose a smaller value for --memory, such as 2000": "", - "ChromeOS is missing the kernel support necessary for running Kubernetes": "", - "Cluster was created without any CNI, adding a node to it might cause broken networking.": "", - "Configuration and Management Commands:": "設定及び管理コマンド:", - "Configure a default route on this Linux host, or use another --driver that does not require it": "", - "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", - "Configure environment to use minikube's Docker daemon": "minikube の Docker デーモンを使うように環境を設定します", - "Configure environment to use minikube's Podman service": "minikube の Podman サービスを使うように環境を設定します", - "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "", + "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Docker ドライバーを {{.operating_system}} 上で使用しているため、実行するにはターミナルを開く必要があります。", + "Bind Address: {{.Address}}": "バインドするアドレス: {{.Address}}", + "Booting up control plane ...": "コントロールプレーンを起動しています...", + "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "driver={{.driver}} と vm-driver={{.vmd}} の両方が設定されています。\n\n vm-driver は非推奨のため、minikube は driver={{.driver}} をデフォルトとします。\n\n グローバル設定で vm-driver が設定されている場合は、「minikube config unset vm-driver」を実行して、この警告を解消してください。\n\t\t\t", + "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "ブリッジ CNI はマルチノードクラスターと互換性がないため、別の CNI を使用してください", + "Build a container image in minikube": "minikube でコンテナーイメージをビルドします", + "Build a container image, using the container runtime.": "コンテナーランタイムを使用して、コンテナーイメージをビルドします。", + "Build image on all nodes.": "すべてのノードでイメージをビルドします。", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "この環境では CGroup の割り当てができません。ネストされたコンテナーで minikube を実行している可能性があります。以下を実行してみてください:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "この環境では CGroup の割り当てができません。ネストされたコンテナーで minikube を実行している可能性があります。以下を実行してみてください:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "使用する CNI プラグイン。有効なオプション: auto、bridge、calico、cilium、flannel、kindnet、または CNI マニフェストへのパス (デフォルト: auto)", + "Cache image from docker daemon": "Docker デーモンからイメージをキャッシュします", + "Cache image from remote registry": "リモートレジストリーからイメージをキャッシュします", + "Cache image to docker daemon": "Docker デーモンへイメージをキャッシュします", + "Cache image to remote registry": "リモートレジストリーへイメージをキャッシュします", + "Cannot find directory {{.path}} for copy": "コピーするためのディレクトリー {{.path}} が見つかりません", + "Cannot find directory {{.path}} for mount": "マウントするためのディレクトリー {{.path}} が見つかりません", + "Cannot use both --output and --format options": "--output と --format オプションの両方を使用することはできません", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "{{.name}} ドライバーでは、オプション --no-kubernetes は使用できません", + "Certificate {{.certPath}} has expired. Generating a new one...": "証明書 {{.certPath}} の有効期限が切れています。新しい証明書を生成しています...", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", + "Check if you have unnecessary pods running by running 'kubectl get po -A": "不要な Pod が実行されていないかどうか、'kubectl get po -A' を実行して確認してください", + "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "'journalctl -xeu kubelet' の出力を確認し、minikube start に --extra-config=kubelet.cgroup-driver=systemd を指定してみてください", + "Check that libvirt is setup properly": "libvirt が正しくセットアップされていることを確認してください", + "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "minikube が実行されていること、および必要に応じて正しい名前空間 (-n フラグ) が指定されていることを確認してください。", + "Check that the provided apiserver flags are valid, and that SELinux is disabled": "指定された apiserver フラグが有効であること、および SELinux が無効になっていることを確認してください", + "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "ファイアウォールのルールに干渉がないことの確認と、'virt-host-validate' を実行して KVM 設定に問題がないことの確認をしてください。もし minikube を VM 内で実行しているのであれば、--driver=none の使用を検討してください", + "Choose a smaller value for --memory, such as 2000": "--memory には、2000 のような小さい値を指定してください", + "ChromeOS is missing the kernel support necessary for running Kubernetes": "ChromeOS には、Kubernetes の実行に必要なカーネルサポートがありません", + "Cluster was created without any CNI, adding a node to it might cause broken networking.": "クラスターが CNI なしで作成されたため、ノードを追加するとネットワークが破損する可能性があります。", + "Configuration and Management Commands:": "設定および管理コマンド:", + "Configure a default route on this Linux host, or use another --driver that does not require it": "この Linux ホスト上でデフォルトルートの設定をするか、それを必要としない別の --driver を使用してください", + "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "公式ドキュメントに従って、外部ネットワークスイッチを設定し、`minikube start` に `--hyperv-virtual-switch=\u003cswitch-name\u003e` を追加してください", + "Configure environment to use minikube's Docker daemon": "minikube の Docker デーモンを使用するように環境を設定します", + "Configure environment to use minikube's Podman service": "minikube の Podman サービスを使用するように環境を設定します", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "minikube 内の ADDON_NAME のアドオンを設定します (例: minikube addons configure registry-creds)。利用可能なアドオンのリストは、minikube addons list を使用してください", "Configuring RBAC rules ...": "RBAC のルールを設定中です...", - "Configuring local host environment ...": "", - "Configuring {{.name}} (Container Networking Interface) ...": "", - "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "", - "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "", + "Configuring local host environment ...": "ローカルホスト環境を設定中です...", + "Configuring {{.name}} (Container Networking Interface) ...": "{{.name}} (コンテナーネットワークインターフェース) を設定中です...", + "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "'minikube logs' を使用して、インターネットに接続されていること、および VM のリソースが不足していないことを確認してください", + "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "'Get-VMSwitch' コマンドを使用して、--hyperv-virtual-switch に正しい値が入っていることを確認してください", "Connect to LoadBalancer services": "LoadBalancer サービスに接続します", - "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", - "Consider increasing Docker Desktop's memory size.": "", - "Continuously listing/getting the status with optional interval duration.": "", - "Control Plane could not update, try minikube delete --all --purge": "", - "Copy the specified file into minikube": "", - "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "", - "Could not determine a Google Cloud project, which might be ok.": "", - "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "", - "Could not process error from failed deletion": "", - "Could not process errors from failed deletion": "", - "Could not resolve IP address": "", - "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "使用するイメージミラーの国コード。グローバルのものを使用する場合は空のままにします。中国本土のユーザーの場合は、「cn」に設定します", + "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "`minikube start --memory SIZE_MB` を使用して、より大きなメモリーサイズのクラスターを作成することを検討してください", + "Consider increasing Docker Desktop's memory size.": "Docker Desktop のメモリーサイズを増やすことを検討してください。", + "Continuously listing/getting the status with optional interval duration.": "任意のインターバル時間で、継続的にステータスをリストアップ/取得します。", + "Control Plane could not update, try minikube delete --all --purge": "コントロールプレーンがアップデートできません。minikube delete --all --purge を試してください", + "Copy the specified file into minikube": "指定したファイルを minikube にコピーします", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "指定したファイルを minikube にコピーします。ファイルは minikube 内の \u003c対象ファイルの絶対パス\u003e に保存されます。\nデフォルトターゲットノードコントロールプレーンと \u003cソースノード名\u003e が省略された場合、ホストからのファイルコピーを試みます。\n\nコマンド例 : 「minikube cp a.txt /home/docker/b.txt」 +\n 「minikube cp a.txt minikube-m02:/home/docker/b.txt」\n 「minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt」", + "Could not determine a Google Cloud project, which might be ok.": "Google Cloud プロジェクトを特定できませんでしたが、問題はないかもしれません。", + "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "GCP の認証情報が見つかりませんでした。`gcloud auth application-default login` を実行するか、環境変数 GOOGLE_APPLICATION_CREDENTIALS に認証情報ファイルのパスを設定してください。", + "Could not process error from failed deletion": "削除の失敗によるエラーを処理できませんでした", + "Could not process errors from failed deletion": "削除の失敗によるエラーを処理できませんでした", + "Could not resolve IP address": "IP アドレスの解決ができませんでした", + "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "使用するイメージミラーの国コード。グローバルのものを使用する場合は空のままにします。中国本土のユーザーの場合は、cn に設定します。", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "", "Creating mount {{.name}} ...": "マウント {{.name}} を作成しています...", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "{{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) を作成しています...", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "{{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) を作成しています...", - "Current context is \"{{.context}}\"": "", - "DEPRECATED, use `driver` instead.": "非推奨。代わりに driver を使ってください", - "DEPRECATED: Replaced by --cni=bridge": "", - "Default group id used for the mount": "マウント時のデフォルトのグループ ID", - "Default user id used for the mount": "マウント時のデフォルトのユーザー ID", - "Delete an image from the local cache.": "ローカルのキャッシュからイメージを削除します", - "Deletes a local Kubernetes cluster": "ローカルの Kubernetes クラスタを削除します", - "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "ローカルの Kubernetes クラスタを削除します。このコマンドによって、VM とそれに関連付けられているすべてのファイルが削除されます", - "Deletes a node from a cluster.": "ノードをクラスタから削除します", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "", + "Current context is \"{{.context}}\"": "現在のコンテキストは「{{.context}}」です", + "DEPRECATED, use `driver` instead.": "非推奨。代わりに `driver` を使用してください。", + "DEPRECATED: Replaced by --cni": "非推奨: --cniに置き換えられました", + "DEPRECATED: Replaced by --cni=bridge": "非推奨: --cni=bridge に置き換えられました", + "Delete an image from the local cache.": "ローカルのキャッシュからイメージを削除します。", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "'{{.delcommand}}' を使って既存の '{{.name}}' クラスターを削除するか、'{{.command}} --driver={{.old}}' を使って既存の '{{.name}}' クラスターを起動してください", + "Deletes a local Kubernetes cluster": "ローカルの Kubernetes クラスターを削除します", + "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "ローカルの Kubernetes クラスターを削除します。このコマンドによって、VM とそれに関連付けられているすべてのファイルが削除されます。", + "Deletes a node from a cluster.": "クラスターからノードを削除します。", "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "{{.driver_name}} の「{{.profile_name}}」を削除しています...", - "Deleting container \"{{.name}}\" ...": "コンテナ \"{{.name}}\" を削除しています...", - "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", - "Deleting node {{.name}} from cluster {{.cluster}}": "{{.cluster}} クラスタから {{.name}} ノードを削除しています", - "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "VM が起動する前にハードウェアの仮想化の可用性チェックを無効にします(virtualbox ドライバのみ)", - "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", - "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", - "Disables the filesystem mounts provided by the hypervisors": "ハイパーバイザによって指定されているファイル システム マウントを無効にします", - "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "minikube VM に割り当てられたディスクサイズ(形式: \u003cnumber\u003e[\u003cunit\u003e]、unit = b、k、m、g)です。", - "Display dashboard URL instead of opening a browser": "ブラウザで開く代わりにダッシュボードの URL を表示します", - "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "", - "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "", + "Deleting container \"{{.name}}\" ...": "コンテナー「{{.name}}」を削除しています...", + "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "ユーザーが設定した --delete-on-failure フラグにより、異なるドライバー {{.driver_name}} を持つ既存のクラスター {{.name}} を削除しています。", + "Deleting node {{.name}} from cluster {{.cluster}}": "クラスター {{.cluster}} から、ノード {{.name}} を削除しています", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "", + "Directory to output licenses to": "ライセンスを出力するディレクトリー", + "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "VM が起動する前にハードウェアの仮想化の可用性チェックを無効にします (virtualbox ドライバーのみ)", + "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "VM マネージャーで動的メモリーを無効にするか、より大きな --memory の値を指定してください", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "minikube 内の ADDON_NAME のアドオンを無効にします (例: minikube addons disable dashboard)。利用可能なアドオンのリストは、minikube addons list を使用してください", + "Disables the filesystem mounts provided by the hypervisors": "ハイパーバイザーによって提供されているファイルシステムのマウントを無効にします", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "minikube VM に割り当てられたディスクサイズ (形式: \u003cnumber\u003e[\u003cunit\u003e]、unit = b、k、m、g)。", + "Display dashboard URL instead of opening a browser": "ブラウザーで開く代わりにダッシュボードの URL を表示します", + "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "Kubernetes のアドオンの URL を、デフォルトのブラウザーで開く代わりに CLI で表示します", + "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "Kubernetes のサービスの URL を、デフォルトのブラウザーで開く代わりに CLI で表示します", "Display values currently set in the minikube config file": "現在の minikube の設定ファイルにセットされている値を表示します", - "Display values currently set in the minikube config file.": "", - "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "", - "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "", - "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "", - "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "", - "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", - "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", - "Docs have been saved at - {{.path}}": "ドキュメントは以下のパスに保存されました。{{.path}}", + "Display values currently set in the minikube config file.": "現在の minikube の設定ファイルにセットされている値を表示します。", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", + "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "Docker Desktop では 2 つ未満の CPU が設定されていますが、Kubernetes では少なくとも 2 つ必要です", + "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Docker Desktop は Windows コンテナー用に設定されていますが、minikube には Linux コンテナーが必要です", + "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Docker Desktop では {{.size}}MiB しか利用できず、Kubernetes に必要な {{.req}}MiB より少ないです", + "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "Docker Desktop では {{.size}}MiB しか利用できないため、アプリケーションのデプロイに失敗することがあります。", + "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "Docker コンテナーは、作成後に途中で終了しました。Docker の動作や状態の調査を検討してください。", + "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "Docker は 2 つ未満の CPU で利用可能ですが、Kubernetes では少なくとも 2 つ必要です", + "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "VM 内の Docker が利用できません。'minikube delete' を実行して、VM を初期化してみてください。", + "Docs have been saved at - {{.path}}": "ドキュメントは次のパスに保存されました - {{.path}}", "Documentation: {{.url}}": "ドキュメント: {{.url}}", - "Done! kubectl is now configured to use \"{{.name}}\"": "完了しました! kubectl が「\"{{.name}}\"」を使用するよう構成されました", - "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "完了しました! kubectl が「\"{{.name}}\"」クラスタと「\"{{.ns}}\"」ネームスペースを使用するよう構成されました", - "Download complete!": "ダウンロードが完了しました", - "Downloading Kubernetes {{.version}} preload ...": "Kubernetes {{.version}} のダウンロードの準備をしています", + "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "終了しました!kubectl がデフォルトで「{{.name}}」クラスターと「{{.ns}}」ネームスペースを使用するよう設定されました", + "Done! minikube is ready without Kubernetes!": "終了しました!minikube は Kubernetes なしで準備完了しました!", + "Download complete!": "ダウンロードが完了しました!", + "Downloading Kubernetes {{.version}} preload ...": "ロード済み Kubernetes {{.version}} をダウンロードしています...", "Downloading VM boot image ...": "VM ブートイメージをダウンロードしています...", - "Downloading driver {{.driver}}:": "{{.driver}} ドライバをダウンロードしています:", - "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "", - "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Downloading driver {{.driver}}:": "{{.driver}} ドライバーをダウンロードしています:", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "DNS の問題により、クラスターの起動に問題が発生し、イメージを取得できない場合があります\n詳細については、https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues を参照してください", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "minikube 証明書の有効期限。デフォルトは 3 年間 (26280h)。", "ERROR creating `registry-creds-acr` secret": "`registry-creds-acr` シークレット作成中にエラーが発生しました", "ERROR creating `registry-creds-dpr` secret": "`registry-creds-dpr` シークレット作成中にエラーが発生しました", - "ERROR creating `registry-creds-ecr` secret: {{.error}}": "`registry-creds-ecr` シークレット作成中にエラーが発生しました。{{.error}}", - "ERROR creating `registry-creds-gcr` secret: {{.error}}": "`registry-creds-gcr` シークレット作成中にエラーが発生しました。{{.error}}", - "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "", - "Enable addons. see `minikube addons list` for a list of valid addon names.": "", - "Enable experimental NVIDIA GPU support in minikube": "minikube での試験運用版 NVIDIA GPU の対応を有効にします", - "Enable host resolver for NAT DNS requests (virtualbox driver only)": "NAT DNS リクエスト用のホストリゾルバを有効にします(virtualbox ドライバのみ)", + "ERROR creating `registry-creds-ecr` secret: {{.error}}": "`registry-creds-ecr` シークレット作成中にエラーが発生しました: {{.error}}", + "ERROR creating `registry-creds-gcr` secret: {{.error}}": "`registry-creds-gcr` シークレット作成中にエラーが発生しました: {{.error}}", + "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "systemctl がインストールされていないか、Docker が故障しています。'sudo systemctl start docker' と 'journalctl -u docker' を実行してください", + "Enable addons. see `minikube addons list` for a list of valid addon names.": "アドオンを有効化します。`minikube addons list` を実行し、有効なアドオン名の一覧を参照してください。", + "Enable experimental NVIDIA GPU support in minikube": "minikube では実験段階の NVIDIA GPU 対応を有効にします", + "Enable host resolver for NAT DNS requests (virtualbox driver only)": "NAT DNS リクエスト用のホストリゾルバーを有効にします (virtualbox ドライバーのみ)", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "", "Enable or disable a minikube addon": "minikube のアドオンを有効化または無効化します", - "Enable proxy for NAT DNS requests (virtualbox driver only)": "NAT DNS リクエスト用のプロキシを有効にします(virtualbox ドライバのみ)", + "Enable proxy for NAT DNS requests (virtualbox driver only)": "NAT DNS リクエスト用のプロキシーを有効にします (virtualbox ドライバーのみ)", "Enabled addons: {{.addons}}": "有効なアドオン: {{.addons}}", - "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "", - "Enabling '{{.name}}' returned an error: {{.error}}": "'{{.name}}' を有効にする際にエラーが発生しました。{{.error}}", + "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "minikube 内で ADDON_NAME アドオンを有効化します。利用可能なアドオン一覧は、minikube addons list を使用してください", + "Enabling '{{.name}}' returned an error: {{.error}}": "'{{.name}}' 有効化がエラーを返しました: {{.error}}", "Enabling dashboard ...": "ダッシュボードを有効化しています...", - "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "", - "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "", - "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "", - "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "", - "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "", - "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "", - "Ensure the tmp directory path is writable to the current user.": "", - "Ensure you have at least 20GB of free disk space.": "", - "Ensure your {{.driver_name}} is running and is healthy.": "", - "Environment variables to pass to the Docker daemon. (format: key=value)": "Docker デーモンに渡す環境変数(形式: Key=Value)", - "Environment variables to pass to the build. (format: key=value)": "", - "Error code docs have been saved at - {{.path}}": "", - "Error creating minikube directory": "minikube のディレクトリ作成中にエラーが発生しました", + "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "CRI-O がインストール済みで正常であることを確認してください: 'sudo systemctl start crio' と 'journalctl -u crio' を実行してください。または、--container-runtime=docker を使用してください", + "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "Docker がインストール済みで正常であることを確認してください: 'sudo systemctl start docker' と 'journalctl -u docker' を実行してください。または、--driver に別の値を選択してください", + "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "必要な 'pids' cgroup がこのホスト上で有効であることを確認してください: grep pids /proc/cgroups", + "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "/etc/libvirt/qemu.conf にリストされたユーザーがあなたのホームディレクトリーにアクセス可能であることを確認してください", + "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "あなたが適切な libvirt グループメンバーの 1 人であることを確認してください (グループ変更を有効にするには再ログインをお忘れなく!)", + "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "HTTPS_PROXY の値が HTTP プロキシーではなく HTTPS プロキシーを指定していることを確認してください", + "Ensure the tmp directory path is writable to the current user.": "現在のユーザーで tmp ディレクトリーパスが書き込み可能であることを確認してください。", + "Ensure you have at least 20GB of free disk space.": "少なくとも 20GB のディスク空き容量があることを確認してください。", + "Ensure your {{.driver_name}} is running and is healthy.": "{{.driver_name}} が実行中で正常であることを確認してください。", + "Environment variables to pass to the Docker daemon. (format: key=value)": "Docker デーモンに渡す環境変数。 (形式: key=value)", + "Environment variables to pass to the build. (format: key=value)": "build に渡す環境変数。 (形式: key=value)", + "Error code docs have been saved at - {{.path}}": "エラーコードのドキュメントは {{.path}} に保存されています", + "Error creating minikube directory": "minikube ディレクトリー作成中にエラーが発生しました", "Error creating view template": "表示用のテンプレートを作成中にエラーが発生しました", - "Error detecting shell": "シェルの確認中にエラーが発生しました", - "Error executing view template": "表示用のテンプレートを実行中にエラーが発生しました", - "Error finding port for mount": "マウント用のポートを確認中にエラーが発生しました", + "Error detecting shell": "シェルの検出中にエラーが発生しました", + "Error executing view template": "ビューテンプレートを実行中にエラーが発生しました", + "Error finding port for mount": "マウント用のポートを検知中にエラーが発生しました", "Error generating set output": "set の出力を生成中にエラーが発生しました", "Error generating unset output": "unset の出力を生成中にエラーが発生しました", - "Error getting cluster bootstrapper": "クラスタのブートストラッパを取得中にエラーが発生しました", - "Error getting cluster config": "クラスタの設定を取得中にエラーが発生しました", + "Error getting cluster bootstrapper": "クラスターのブートストラッパーを取得中にエラーが発生しました", + "Error getting cluster config": "クラスターの設定を取得中にエラーが発生しました", + "Error getting control-plane node": "", "Error getting host": "ホストを取得中にエラーが発生しました", - "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "「{{.driver_name}}」ドライバー用のポートをバインディング中にエラーが発生しました: {{.error}}", - "Error getting primary control plane": "コントロールプレーンを取得中にエラーが発生しました", - "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "", + "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "'{{.driver_name}}' ドライバー用のポートをバインディング中にエラーが発生しました: {{.error}}", + "Error getting primary control plane": "最初のコントロールプレーンを取得中にエラーが発生しました", + "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "次の名前空間でサービスを取得中にエラーが発生しました: {{.namespace}} とラベル {{.labelName}}:{{.addonName}}: {{.error}}", "Error getting ssh client": "SSH クライアントを取得中にエラーが発生しました", - "Error getting the host IP address to use from within the VM": "", - "Error killing mount process": "マウントプロセスを Kill 中にエラーが発生しました", - "Error loading profile config: {{.error}}": "プロフィールの設定を読み込み中にエラーが発生しました。{{.error}}", + "Error getting the host IP address to use from within the VM": "VM 内から使用するホスト IP の取得中にエラーが発生しました", + "Error killing mount process": "マウントプロセスを強制終了中にエラーが発生しました", + "Error loading profile config: {{.error}}": "プロファイルの設定を読み込み中にエラーが発生しました: {{.error}}", "Error opening service": "サービスを公開中にエラーが発生しました", - "Error parsing minikube version: {{.error}}": "minikube バージョンの解析中にエラーが発生しました。{{.error}}", - "Error parsing {{.name}}={{.value}}, {{.err}}": "", - "Error reading {{.path}}: {{.error}}": "{{.path}} を読み込み中にエラーが発生しました。{{.error}}", - "Error starting cluster": "クラスタを起動中にエラーが発生しました", + "Error parsing minikube version: {{.error}}": "minikube バージョンの解析中にエラーが発生しました: {{.error}}", + "Error parsing {{.name}}={{.value}}, {{.err}}": "{{.name}}={{.value}} の解析中にエラーが発生しました: {{.err}}", + "Error reading {{.path}}: {{.error}}": "{{.path}} を読み込み中にエラーが発生しました: {{.error}}", + "Error starting cluster": "クラスターを起動中にエラーが発生しました", "Error starting mount": "マウントを開始中にエラーが発生しました", - "Error while setting kubectl current context : {{.error}}": "", - "Error while setting kubectl current context: {{.error}}": "", - "Error with ssh-add": "", + "Error while setting kubectl current context : {{.error}}": "kubectl の現在のコンテキストの設定中にエラーが発生しました : {{.error}}", + "Error while setting kubectl current context: {{.error}}": "kubectl の現在のコンテキストの設定中にエラーが発生しました: {{.error}}", + "Error with ssh-add": "ssh-add でエラーが発生しました", "Error writing mount pid": "マウントした pid を書き込み中にエラーが発生しました", "Examples": "例", - "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "", - "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "", - "Exiting": "終了しています", - "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "", - "Exiting.": "終了しています", - "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "", - "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "", - "Fail check if container paused": "", - "Failed runtime": "", - "Failed to build image": "", - "Failed to cache and load images": "", - "Failed to cache binaries": "", - "Failed to cache images": "", - "Failed to cache images to tar": "", - "Failed to cache kubectl": "", - "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "{{.minikube_dir_path}} に対する権限を変更できませんでした。{{.error}}", - "Failed to check main repository and mirrors for images": "", - "Failed to configure metallb IP {{.profile}}": "", - "Failed to create file": "", - "Failed to create runtime": "", - "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "クラスタ {{.name}} を削除できませんでしたが、処理を続行します。", - "Failed to delete cluster {{.name}}.": "", - "Failed to delete cluster: {{.error}}": "", - "Failed to delete cluster: {{.error}}__1": "クラスタを削除できませんでした。{{.error}}", + "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "「{{.command}}」の実行が異常に長い時間かかりました: {{.duration}}", + "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "既存のディスクに新しい機能がありません ({{.error}})。アップグレードするには、'minikube delete' を実行してください", + "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "{{.fatal_code}} が原因で終了します: {{.fatal_msg}}", + "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "プロキシー化されたダッシュボードの公開ポート。0 に設定すると、ランダムなポートが選ばれます。", + "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "外部スイッチが見つからない場合に、外部スイッチが作成される外部アダプター (hyperv ドライバーのみ)。", + "Fail check if container paused": "コンテナーが一時停止しているかどうかのチェックに失敗しました", + "Failed removing pid from pidfile: {{.error}}": "", + "Failed runtime": "ランタイムが失敗しました", + "Failed to build image": "イメージのビルドに失敗しました", + "Failed to cache and load images": "イメージのキャッシュとロードに失敗しました", + "Failed to cache binaries": "バイナリーのキャシュに失敗しました", + "Failed to cache images": "イメージのキャッシュに失敗しました", + "Failed to cache images to tar": "tar へのイメージのキャッシュに失敗しました", + "Failed to cache kubectl": "kubectl のキャッシュに失敗しました", + "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "{{.minikube_dir_path}} に対する権限の変更に失敗しました: {{.error}}", + "Failed to check main repository and mirrors for images": "メインリポジトリーとミラーのイメージのチェックに失敗しました", + "Failed to configure auto-pause {{.profile}}": "", + "Failed to configure metallb IP {{.profile}}": "metallb IP {{.profile}} の設定に失敗しました", + "Failed to configure network plugin": "ネットワークプラグインの設定に失敗しました", + "Failed to configure registry-aliases {{.profile}}": "registry-aliases {{.profile}} の設定に失敗しました", + "Failed to create file": "ファイルの作成に失敗しました", + "Failed to create runtime": "ランタイムの作成に失敗しました", + "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "{{.name}} クラスターを削除できませんでしたが、処理を続行します。", + "Failed to delete cluster {{.name}}.": "{{.name}} クラスターの削除に失敗しました。", + "Failed to delete cluster: {{.error}}": "クラスターの削除に失敗しました: {{.error}}", "Failed to delete images": "イメージの削除に失敗しました", - "Failed to delete images from config": "コンフィグからイメージを削除するのに失敗しました", - "Failed to enable container runtime": "コンテナランタイムの有効蟹失敗しました", - "Failed to get API Server URL": "APIサーバーのURL取得に失敗しました", - "Failed to get bootstrapper": "", - "Failed to get command runner": "", - "Failed to get image map": "", - "Failed to get service URL: {{.error}}": "", - "Failed to kill mount process: {{.error}}": "マウント プロセスを強制終了できませんでした。{{.error}}", - "Failed to list cached images": "", - "Failed to list images": "", - "Failed to load image": "", - "Failed to persist images": "", - "Failed to pull image": "", - "Failed to reload cached images": "", - "Failed to remove image": "", - "Failed to save config {{.profile}}": "", - "Failed to save dir": "", - "Failed to save stdin": "", - "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "NO_PROXY 環境変数を設定できませんでした。「export NO_PROXY=$NO_PROXY,{{.ip}}」を使用してください。", - "Failed to setup certs": "", - "Failed to start container runtime": "", - "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "", - "Failed to stop node {{.name}}": "", - "Failed to update cluster": "", - "Failed to update config": "", - "Failed unmount: {{.error}}": "", - "File permissions used for the mount": "", - "Filter to use only VM Drivers": "", + "Failed to delete images from config": "設定ファイル中のイメージの削除に失敗しました", + "Failed to delete profile(s): {{.error}}": "", + "Failed to download licenses": "ライセンスのダウンロードに失敗しました", + "Failed to enable container runtime": "コンテナーランタイムの有効化に失敗しました", + "Failed to get bootstrapper": "ブートストラッパーの取得に失敗しました", + "Failed to get command runner": "コマンドランナーの取得に失敗しました", + "Failed to get image map": "イメージマップの取得に失敗しました", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "", + "Failed to get service URL: {{.error}}": "サービス URL の取得に失敗しました: {{.error}}", + "Failed to get temp": "一時ファイルの作成に失敗しました", + "Failed to kill mount process: {{.error}}": "マウントプロセスの強制終了に失敗しました: {{.error}}", + "Failed to list cached images": "キャッシュイメージの一覧表示に失敗しました", + "Failed to list images": "イメージの一覧表示に失敗しました", + "Failed to load image": "イメージの読み込みに失敗しました", + "Failed to persist images": "イメージの永続化に失敗しました", + "Failed to pull image": "イメージの取得に失敗しました", + "Failed to pull images": "イメージの取得に失敗しました", + "Failed to push images": "イメージの登録に失敗しました", + "Failed to read temp": "一時ファイルの読み込みに失敗しました", + "Failed to reload cached images": "キャッシュイメージのリロードに失敗しました", + "Failed to remove image": "イメージの削除に失敗しました", + "Failed to remove images for profile {{.pName}} {{.error}}": "{{.pName}} プロファイル用イメージの削除に失敗しました: {{.error}}", + "Failed to save config {{.profile}}": "設定 {{.profile}} の保存に失敗しました", + "Failed to save dir": "ディレクトリーの保存に失敗しました", + "Failed to save image": "イメージの保存に失敗しました", + "Failed to save stdin": "標準入力の保存に失敗しました", + "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "NO_PROXY 環境変数の設定に失敗しました。`export NO_PROXY=$NO_PROXY,{{.ip}}` を使用してください。", + "Failed to setup certs": "証明書セットアップに失敗しました", + "Failed to start container runtime": "コンテナーランタイムの起動に失敗しました", + "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "{{.driver}} {{.driver_type}} の開始に失敗しました。「{{.cmd}}」実行で解決するかも知れません: {{.error}}", + "Failed to stop node {{.name}}": "{{.name}} ノードの停止に失敗しました", + "Failed to stop node {{.name}}: {{.error}}": "", + "Failed to stop ssh-agent process: {{.error}}": "", + "Failed to tag images": "イメージのタグ付与に失敗しました", + "Failed to update cluster": "クラスター更新に失敗しました", + "Failed to update config": "設定更新に失敗しました", + "Failed unmount: {{.error}}": "アンマウントに失敗しました: {{.error}}", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "", + "Filter to use only VM Drivers": "VM ドライバーのみ使用するためのフィルタ", "Flags": "フラグ", - "Follow": "たどる", - "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "最適な結果を得るには、kubectl を次のサイト https://kubernetes.io/docs/tasks/tools/install-kubectl/ からインストールしてください", - "For improved {{.driver}} performance, {{.fix}}": "", - "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "", - "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", - "For more information, see: {{.url}}": "", - "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", - "Force minikube to perform possibly dangerous operations": "minikube で危険な可能性のある操作を強制的に実行します", - "Format to print stdout in. Options include: [text,json]": "", - "Found docker, but the docker service isn't running. Try restarting the docker service.": "", - "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "", - "Found network options:": "ネットワーク オプションが見つかりました", - "Found {{.number}} invalid profile(s) ! ": "", + "Follow": "フォロー", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "エクスペリエンスを向上させるには、Docker Desktop の代わりに Docker Engine を使用することをお勧めします。\nDocker Engine のインストール手順: https://docs.docker.com/engine/install/#server", + "For improved {{.driver}} performance, {{.fix}}": "{{.driver}} の性能向上のため、{{.fix}}", + "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "追加の詳細情報はこちらを参照してください: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}", + "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "追加の詳細情報はこちらを参照してください: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "For more information, see: {{.url}}": "追加の詳細情報はこちらを参照してください: {{.url}}", + "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "指定されたシェル用の環境設定を強制的に行います: [fish, cmd, powershell, tcsh, bash, zsh] (デフォルトは auto-detect)", + "Force minikube to perform possibly dangerous operations": "minikube で危険性のある操作を強制的に実行します", + "Format output. One of: short|table|json|yaml": "出力フォーマット。short|table|json|yaml のいずれか", + "Format to print stdout in. Options include: [text,json]": "標準出力のフォーマット。選択肢: [text,json]", + "Forwards all services in a namespace (defaults to \"false\")": "ネームスペース中の全サービスをフォワードします (既定値:「false」)", + "Found docker, but the docker service isn't running. Try restarting the docker service.": "docker が見つかりましたが、docker サービスが稼働していません。docker サービスを再起動してみてください。", + "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "ドライバーが見つかりましたが、健全なものがありません。上記のインストール済みドライバーの修正方法の提示を参照してください。", + "Found network options:": "ネットワークオプションが見つかりました:", + "Found {{.number}} invalid profile(s) ! ": "{{.number}} 個の無効なプロファイルが見つかりました!", + "Generate command completion for PowerShell.": "", "Generate command completion for a shell": "シェルのコマンド補完コードを生成します", - "Generate command completion for bash.": "", - "Generate command completion for fish .": "", - "Generate command completion for zsh.": "", - "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", - "Generate unable to parse memory '{{.memory}}': {{.error}}": "", + "Generate command completion for bash.": "bash 用のコマンド補完コードを生成します。", + "Generate command completion for fish .": "fish 用のコマンド補完コードを生成します。", + "Generate command completion for zsh.": "zsh 用のコマンド補完コードを生成します。", + "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "ディスクサイズ '{{.diskSize}}' が解析できません: {{.error}}", + "Generate unable to parse memory '{{.memory}}': {{.error}}": "メモリー '{{.memory}}' が解析できません: {{.error}}", "Generating certificates and keys ...": "証明書と鍵を作成しています...", - "Get or list the current profiles (clusters)": "現在指定しているクラスタプロファイルを取得、またはリストアップします", - "Gets the logs of the running instance, used for debugging minikube, not user code.": "", - "Gets the status of a local Kubernetes cluster": "ローカル Kubernetes クラスタの状態を取得します", - "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "", - "Gets the value of PROPERTY_NAME from the minikube config file": "", + "Get or list the current profiles (clusters)": "現在のプロファイル (クラスター) を取得または一覧表示します", + "Gets the logs of the running instance, used for debugging minikube, not user code.": "実行中のインスタンスのログを取得します (ユーザーコードではなく minikube デバッグに使用)。", + "Gets the status of a local Kubernetes cluster": "ローカル Kubernetes クラスターの状態を取得します", + "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "ローカル Kubernetes クラスターの状態を取得します。\n\t終了ステータスは minikube の VM、クラスター、Kubernetes の状態を順に右→左のビット列でエンコードしたものを含みます。\n\t例: 7 = 1 (minikube 異常) + 2 (クラスター異常) + 4 (Kubernetes 異常)", + "Gets the value of PROPERTY_NAME from the minikube config file": "minikube 設定ファイル中の PROPERTY_NAME の値を取得します", "Global Flags": "グローバルなフラグ", - "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", - "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", - "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "キャッシュ一覧出力用の Go テンプレートフォーマット文字列。Go テンプレートのフォーマットはこちら: https://pkg.go.dev/text/template\nテンプレートでアクセス可能な変数の一覧は、こちらの構造化変数を参照してください: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "設定ビュー出力用の Go テンプレートフォーマット文字列。Go テンプレートのフォーマットはこちら: https://pkg.go.dev/text/template\nテンプレートでアクセス可能な変数の一覧は、こちらの構造化変数を参照してください: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "状態出力用の Go テンプレートフォーマット文字列。Go テンプレートのフォーマットはこちら: https://pkg.go.dev/text/template\nテンプレートでアクセス可能な変数の一覧は、こちらの構造化変数を参照してください: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status", "Group ID: {{.groupID}}": "グループ ID: {{.groupID}}", - "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "minikube でゲストに対し、ハイパーバイザ署名を非表示にします(kvm2 ドライバのみ)", - "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "IP Address to use to expose ports (docker and podman driver only)": "", - "IP address (ssh driver only)": "", - "If present, writes to the provided file instead of stdout.": "", - "If set, automatically updates drivers to the latest version. Defaults to true.": "", - "If set, delete the current cluster if start fails and try again. Defaults to false.": "", - "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "", - "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "", - "If set, install addons. Defaults to true.": "", - "If set, pause all namespaces": "", - "If set, unpause all namespaces": "", - "If the above advice does not help, please let us know:": "", - "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "", - "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "true の場合、現在のブートストラッパの Docker イメージをキャッシュに保存して、マシンに読み込みます。--vm-driver=none の場合は常に false です", - "If true, only download and cache files for later use - don't install or start anything.": "true の場合、後で使用できるようにファイルのダウンロードとキャッシュ保存だけが行われます。インストールも起動も行われません", - "If true, pods might get deleted and restarted on addon enable": "", - "If true, returns list of profiles faster by skipping validating the status of the cluster.": "", - "If true, the added node will be marked for work. Defaults to true.": "", - "If true, the node added will also be a control plane in addition to a worker.": "", - "If true, will perform potentially dangerous operations. Use with discretion.": "", - "If you are running minikube within a VM, consider using --driver=none:": "", - "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "", - "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "", - "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "", - "Ignoring empty custom image {{.name}}": "", - "Ignoring invalid pair entry {{.pair}}": "", - "Ignoring unknown custom image {{.name}}": "", - "Ignoring unknown custom registry {{.name}}": "", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\nminikube{{.profileArg}} addons enable metrics-server\t\n\n": "metrics-server がインストールされていると、Headlamp はより詳細な情報を表示できます。インストールするには、次のコマンドを実行します:\n\nminikube{{.profileArg}} addons enable metrics-server\t\n\n", + "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "minikube 中のゲストに対してハイパーバイザー署名を非表示にします (kvm2 ドライバーのみ)", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", + "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "Hyperkit は故障しています。最新バージョンの Hyperkit と Docker for Desktop にアップグレードしてください。あるいは、別の --driver を選択することもできます。", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "Hyperkit ネットワーキングは故障しています。インターネット共有の無効化を試してください: システム環境設定 \u003e 共有 \u003e インターネット共有。\nあるいは、最新の Hyperkit バージョンへのアップグレードか、別のドライバー使用を試すこともできます。", + "IP Address to use to expose ports (docker and podman driver only)": "ポートの expose に使用する IP アドレス (docker, podman ドライバーのみ)", + "IP address (ssh driver only)": "IP アドレス (SSH ドライバーのみ)", + "If present, writes to the provided file instead of stdout.": "指定すると、標準出力の代わりに指定されたファイルに出力します。", + "If set, added node will be available as worker. Defaults to true.": "", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "", + "If set, automatically updates drivers to the latest version. Defaults to true.": "設定すると、自動的にドライバーを最新バージョンに更新します。デフォルトは true です。", + "If set, delete the current cluster if start fails and try again. Defaults to false.": "設定すると、現在のクラスターの起動に失敗した場合はクラスターを削除して再度試行します。デフォルトは false です。", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "設定すると、メトリクス報告 (CPU とメモリー使用量) を無効化します。これは CPU 使用量を改善できます。デフォルト値は false です。", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "設定すると、ローカルの Kubernetes 用に設定された最適化を無効化します。CoreDNS レプリカ数を 2 から 1 に減らすことを含みます。デフォルトは false です。", + "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "設定すると、開始時間を改善するため、利用可能であれば、プレロードイメージの tar ボールをダウンロードします。デフォルトは false です。", + "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "設定すると、cgroup マネージャーとして systemd を使うようコンテナーランタイムに強制します。デフォルトは false です。", + "If set, install addons. Defaults to true.": "設定すると、アドオンをインストールします。デフォルトは true です。", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "設定すると、Kubernetes の起動や設定なしに minikube VM/コンテナーが起動します (新しいクラスターの際にのみ機能します)。", + "If set, pause all namespaces": "設定すると、全ネームスペースを一旦停止します", + "If set, unpause all namespaces": "設定すると、全ネームスペースを一旦停止解除します", + "If the above advice does not help, please let us know:": "上記アドバイスが参考にならない場合は、我々に教えてください:", + "If the host has a firewall:\n\t\t\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "ホストにファイアウォールがある場合:\n\t\t\n\t\t1. ファイアウォールを通過するポートを許可する\n\t\t2. 「minikube mount」用の「--port=\u003cポート番号\u003e」を指定する", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "true の場合、現在のブートストラッパーの Docker イメージをキャッシュに保存して、マシンに読み込みます。--driver=none の場合は常に false です。", + "If true, only download and cache files for later use - don't install or start anything.": "true の場合、後の使用のためのファイルのダウンロードとキャッシュ保存のみ行われます。インストールも起動も行いません", + "If true, pods might get deleted and restarted on addon enable": "true の場合、有効なアドオンの Pod は削除され、再起動されます", + "If true, print web links to addons' documentation if using --output=list (default).": "true の場合、--output=list (default) を利用することでアドオンのドキュメントへの web リンクを表示します", + "If true, returns a detailed list of profiles.": "", + "If true, returns list of profiles faster by skipping validating the status of the cluster.": "true の場合、クラスター状態の検証を省略することにより高速にプロファイル一覧を返します。", + "If true, the added node will be marked for work. Defaults to true.": "true の場合、追加されたノードはワーカー用としてマークされます。デフォルトは true です。", + "If true, will perform potentially dangerous operations. Use with discretion.": "true の場合、潜在的に危険な操作を行うことになります。慎重に使用してください。", + "If you are running minikube within a VM, consider using --driver=none:": "VM 内で minikube を実行している場合、--driver=none の使用を検討してください:", + "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "{{.driver_name}} ドライバーを機能させることに引き続き興味がある場合。次の提案がこの問題を通過する手助けになるかもしれません:", + "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "あなたのクレデンシャルを特定の Pod にマウントしたくない場合、Pod の設定に `gcp-auth-skip-secret` キーのラベルを付与してください。", + "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "既存 Pod でクレデンシャルをマウントしたい場合、Pod を再作成するか --refresh 付きでアドオンを再実行するかどちらかを行ってください。", + "Ignoring empty custom image {{.name}}": "空のカスタムイメージ {{.name}} を無視しています", + "Ignoring invalid pair entry {{.pair}}": "無効なペアエントリー {{.pair}} を無視しています", + "Ignoring unknown custom image {{.name}}": "未知のカスタムイメージ {{.name}} を無視しています", + "Ignoring unknown custom registry {{.name}}": "未知のカスタムレジストリー {{.name}} を無視しています", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "イメージが現在の minikube バージョンでビルドされていません。minikube クラスターを削除後、最新のイメージを使用してクラスターを再作成することでこの問題を解決することができます。想定された minikube のバージョン: {{.imageMinikubeVersion}} -\u003e 実際の minikube のバージョン: {{.minikubeVersion}}", "Images Commands:": "イメージ用コマンド:", - "Images used by this addon. Separated by commas.": "", - "In order to use the fall back image, you need to log in to the github packages registry": "", - "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", - "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Docker デーモンに渡す Docker レジストリが安全ではありません。デフォルトのサービス CIDR 範囲が自動的に追加されます", - "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", - "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", - "Invalid port": "", - "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", - "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", - "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "", - "Kill the mount process spawned by minikube start": "", - "Kubelet network plug-in to use (default: auto)": "", - "Kubernetes requires at least 2 CPU's to start": "", - "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "", - "Kubernetes {{.version}} is not supported by this release of minikube": "", - "Launching Kubernetes ...": "Kubernetes を起動しています...", - "Launching proxy ...": "プロキシを起動しています...", - "List all available images from the local cache.": "", - "List existing minikube nodes.": "", - "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "", - "List images": "", - "List nodes.": "", - "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "ホストでソケットとして公開する必要のあるゲスト VSock ポートのリスト(hyperkit ドライバのみ)", - "List of ports that should be exposed (docker and podman driver only)": "", - "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "", - "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "", - "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "", - "Lists all minikube profiles.": "すべてのminikubeのプロフィールを一覧で表示します", - "Lists all valid default values for PROPERTY_NAME": "", - "Lists all valid minikube profiles and detects all possible invalid profiles.": "", - "Lists the URLs for the services in your local cluster": "", - "Load a image into minikube": "", - "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "NFS マウントを介してゲストと共有するローカル フォルダ(hyperkit ドライバのみ)", - "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", - "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "ネットワーキングに使用する VPNKit ソケットのロケーション。空の場合、Hyperkit VPNKitSock が無効になり、「auto」の場合、Mac VPNKit 接続に Docker が使用され、それ以外の場合、指定された VSock が使用されます(hyperkit ドライバのみ)", - "Location of the minikube iso": "minikube iso のロケーション", - "Locations to fetch the minikube ISO from.": "", - "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", - "Log into the minikube environment (for debugging)": "minikube の環境にログインします(デバッグ用)", - "Manage images": "", + "Images used by this addon. Separated by commas.": "このアドオンで使用するイメージ。複数の場合、カンマで区切ります。", + "In order to use the fall back image, you need to log in to the github packages registry": "予備イメージを使用するために、GitHub のパッケージレジストリーにログインする必要があります", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Docker デーモンに渡す安全でない Docker レジストリー。デフォルトのサービス CIDR 範囲が自動的に追加されます。", + "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "VritualBox をインストールして、VirtualBox がパス中にあることを確認するか、--driver に別の値を指定してください", + "Install the latest hyperkit binary, and run 'minikube delete'": "最新の hyperkit バイナリーをインストールして、'minikube delete' を実行してください", + "Interval is an invalid duration: {{.error}}": "", + "Interval must be greater than 0s": "", + "Invalid port": "無効なポート", + "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "Istio は {{.minCPUs}} 個の CPU を必要とします -- あなたの設定では {{.cpus}} 個の CPU しか割り当てていません", + "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "Istio は {{.minMem}}MB のメモリーを必要とします -- あなたの設定では、{{.memory}}MB しか割り当てていません", + "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "GCE 上で実行しているようですが、これは GCP Auth アドオンなしに認証が機能すべきであることになります。それでもクレデンシャルファイルを使用した認証を希望するのであれば、--force フラグを使用してください。", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "Kept for backward compatibility, value is ignored.": "", + "Kicbase images have not been deleted. To delete images run:": "Kicbase イメージが削除されていません。次のコマンドでイメージを削除します:", + "Kill the mount process spawned by minikube start": "minikube start によって実行されたマウントプロセスを強制停止します", + "Kubernetes requires at least 2 CPU's to start": "Kubernetes は起動に少なくとも 2 個の CPU が必要です", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "", + "Kubernetes version {{.specified}} found in GitHub version list": "", + "Kubernetes version {{.specified}} found in version list": "", + "Kubernetes version {{.version}} is not supported by this release of minikube": "", + "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "Kubernetes {{.new}} が利用可能です。アップグレードしたい場合、--kubernetes-version={{.prefix}}{{.new}} を指定してください", + "Kubernetes {{.version}} is not supported by this release of minikube": "この minikube リリースは Kubernetes {{.version}} をサポートしていません", + "Kubernetes: Stopping ...": "Kubernetes: 停止しています...", + "Kubernetes: {{.status}}": "Kubernetes: {{.status}}", + "Launching proxy ...": "プロキシーを起動しています...", + "List all available images from the local cache.": "ローカルキャッシュから利用可能な全イメージを一覧表示します。", + "List existing minikube nodes.": "既存の minikube ノードを一覧表示します。", + "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "ADDON_NAME アドオンが使用しているイメージ名を一覧表示します。利用可能なアドオンの一覧表示は、次のコマンドを実行してください: minikube addons list", + "List images": "イメージを一覧表示します", + "List nodes.": "ノードを一覧表示します。", + "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "ホスト上でソケットとして公開する必要のあるゲスト VSock ポートの一覧 (hyperkit ドライバーのみ)", + "List of ports that should be exposed (docker and podman driver only)": "公開する必要のあるポートの一覧 (docker、podman ドライバーのみ)", + "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "外部 Docker ホスト {{.host}} 上で 0.0.0.0 をリッスンしています。ご承知おきください", + "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "{{.listenAddr}} をリッスンしています。これは推奨されず、セキュリティー脆弱性になる可能性があります。自己責任で使用してください", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "利用可能な minikube アドオンとその現在の状態 (有効 / 無効) を一覧表示します", + "Lists all minikube profiles.": "minikube プロファイルを一覧表示します。", + "Lists all valid default values for PROPERTY_NAME": "PROPERTY_NAME 用の有効な minikube プロファイルを一覧表示します", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "有効な minikube プロファイルを一覧表示し、無効の可能性のあるプロファイルを全て検知します。", + "Lists the URLs for the services in your local cluster": "ローカルクラスターのサービス用 URL を一覧表示します", + "Load an image into minikube": "minikube にイメージを読み込ませます", + "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "NFS マウントを介してゲストと共有するローカルフォルダー (hyperkit ドライバーのみ)", + "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "ローカルプロキシーは無視されました: docker env に {{.name}}={{.value}} は渡されません。", + "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "ネットワーキングに使用する VPNKit ソケットのロケーション。空の場合、Hyperkit VPNKitSock が無効になり、'auto' の場合、Docker for Mac の VPNKit 接続が使用され、それ以外の場合、指定された VSock が使用されます (hyperkit ドライバーのみ)", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "kubectl、kubelet、kubeadm バイナリーの取得元。", + "Locations to fetch the minikube ISO from.": "minikube ISO の取得元。", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "SSH を使ってマシンにログインしたりコマンドを実行します ('docker-machine ssh' と同様です)。", + "Log into the minikube environment (for debugging)": "minikube の環境にログインします (デバッグ用)", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "", + "Manage cache for images": "イメージキャッシュを管理します", + "Manage images": "イメージを管理します", "Message Size: {{.size}}": "メッセージのサイズ: {{.size}}", - "Modify minikube config": "minikube の設定を修正しています", - "Modify minikube's kubernetes addons": "minikube の Kubernetes アドオンを修正しています", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "サポートされた最小の VirtualBox バージョン: {{.vers}}、現在の VirtualBox バージョン: {{.cvers}}", "Modify persistent configuration values": "永続的な設定値を変更します", - "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "", - "Most users should use the newer 'docker' driver instead, which does not require root!": "", + "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "追加情報: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", + "Most users should use the newer 'docker' driver instead, which does not require root!": "多くのユーザーはより新しい 'docker' ドライバーを代わりに使用すべきです (root 権限が必要ありません!)", "Mount type: {{.name}}": "マウントタイプ: {{.name}}", - "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", - "Mounts the specified directory into minikube": "minikube に指定されたディレクトリをマウントします", - "Mounts the specified directory into minikube.": "", - "Multiple errors deleting profiles": "プロフィールを削除中に複数のエラーが発生しました", - "Multiple minikube profiles were found -": "複数の minikube のプロフィールが見つかりました", - "Multiple minikube profiles were found - ": "", - "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", - "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", - "NOTE: This process must stay alive for the mount to be accessible ...": "", - "Networking and Connectivity Commands:": "ネットワーキング及び接続性コマンド:", - "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "", - "No changes required for the \"{{.context}}\" context": "", - "No minikube profile was found. ": "", - "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "", - "No such addon {{.name}}": "", - "Node \"{{.node_name}}\" stopped.": "「{{.node_name}}」ノードが停止しました。", - "Node operations": "ノードの運用", - "Node {{.name}} failed to start, deleting and trying again.": "", - "Node {{.name}} was successfully deleted.": "{{.name}} ノードは削除されました。", + "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "ホストパス {{.sourcePath}} を {{.destinationPath}} として VM 中にマウントしています ...", + "Mounts the specified directory into minikube": "minikube に指定されたディレクトリーをマウントします", + "Mounts the specified directory into minikube.": "minikube に指定されたディレクトリーをマウントします。", + "Multiple errors deleting profiles": "プロファイル削除中に複数のエラーが発生しました", + "Multiple errors encountered:": "", + "Multiple minikube profiles were found - ": "複数の minikube プロファイルが見つかりました - ", + "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "ホストオンリーネットワークに使用する NIC タイプ。Am79C970A、Am79C973、82540EM、82543GC、82545EM、virtio のいずれか (virtualbox ドライバーのみ)", + "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "NAT ネットワークに使用する NIC タイプ。Am79C970A、Am79C973、82540EM、82543GC、82545EM、virtio のいずれか (virtualbox ドライバーのみ)", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "注意: トンネルにアクセスするにはこのプロセスが存続しなければならないため、このターミナルはクローズしないでください ...", + "NOTE: This process must stay alive for the mount to be accessible ...": "注意: マウントにアクセスするにはこのプロセスが存続しなければなりません ...", + "Networking and Connectivity Commands:": "ネットワーキングおよび接続性コマンド:", + "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "IP アドレスが提供されていません。--ssh-ip-address 指定を試すか、https://minikube.sigs.k8s.io/docs/drivers/ssh/ を参照してください", + "No changes required for the \"{{.context}}\" context": "「{{.context}}」コンテキストに必要な変更がありません", + "No control-plane nodes found.": "", + "No minikube profile was found.": "", + "No minikube profile was found. ": "minikube プロファイルが見つかりませんでした。", + "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "利用可能なドライバーが検出されませんでした。--driver 指定を試すか、https://minikube.sigs.k8s.io/docs/start/ を参照してください", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "", + "No such addon {{.name}}": "{{.name}} というアドオンはありません", + "No valid URL found for tunnel.": "トンネル用の有効な URL が見つかりません。", + "No valid port found for tunnel.": "トンネル用の有効なポートが見つかりません。", + "Node {{.name}} failed to start, deleting and trying again.": "{{.name}} ノードは起動に失敗しました (削除、再試行します)。", + "Node {{.name}} was successfully deleted.": "{{.name}} ノードは正常に削除されました。", "Node {{.nodeName}} does not exist.": "{{.nodeName}} ノードは存在しません。", - "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "", - "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "使用しているロケーション内で既知のいずれのリポジトリにもアクセスできません。フォールバックとして {{.image_repository_name}} を使用します", - "None of the known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "既知のいずれのリポジトリにもアクセスできません。--image-repository フラグとともに代替のイメージ リポジトリを指定することを検討してください", - "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", - "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", - "Number of CPUs allocated to the minikube VM": "minikube VM に割り当てられた CPU の数", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", - "Number of lines back to go within the log": "", - "OS release is {{.pretty_name}}": "OS は {{.pretty_name}} です。", - "One of 'yaml' or 'json'.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "", - "Open the addons URL with https instead of http": "", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "", - "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", - "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "", - "Opening {{.url}} in your default browser...": "", - "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", - "Operations on nodes": "", - "Options: {{.options}}": "", - "Output format. Accepted values: [json]": "", - "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", - "Overwrite image even if same image:tag name exists": "", - "Path to the Dockerfile to use (optional)": "", - "Pause": "", - "Paused {{.count}} containers": "", - "Paused {{.count}} containers in: {{.namespaces}}": "次のnamespaceに存在する {{.count}} 個のコンテナを停止しました: {{.namespaces}}", - "Pausing node {{.name}} ...": "ノード {{.name}} を一時停止しています ...", - "Pausing node {{.name}} ... ": "", - "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", - "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", - "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", - "Please enter a value:": "", - "Please free up disk or prune images.": "", - "Please increse Desktop's disk size.": "", - "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", - "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", - "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", - "Please provide a path or url to build": "", - "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", - "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", - "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", - "Please see {{.documentation_url}} for more details": "", - "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", - "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", - "Please try purging minikube using `minikube delete --all --purge`": "", - "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "「{{.driver_executable}}」をアップグレードしてください。{{.documentation_url}}", - "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", - "Populates the specified folder with documentation in markdown about minikube": "", - "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", + "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "アクセス可能な既知リポジトリーはありません。--image-repository フラグを用いた代替イメージリポジトリー指定を検討してください", + "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "ロケーション内でアクセス可能な既知リポジトリーはありません。フォールバックとして {{.image_repository_name}} を使用します。", + "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "通知: このターミナルでは、{{.driver_name}} ドライバーの docker-env が有効になっています:", + "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "通知: このターミナルでは、{{.driver_name}} ドライバーの podman-env が有効になっています:", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "作成して minikube VM に接続する追加ディスク数 (現在、hyperkit と kvm2 ドライバーでのみ実装されています)", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "", + "Number of lines back to go within the log": "ログ中で遡る行数", + "OS release is {{.pretty_name}}": "OS リリースは {{.pretty_name}} です", + "One of 'text', 'yaml' or 'json'.": "'text'、'yaml'、'json' のいずれか。", + "One of 'yaml' or 'json'.": "'yaml'、'json' のいずれか。", + "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "アルファベット、数字、ハイフン (-) のみ利用可能です。最小 1 文字、最初の文字はアルファベットか数字です。", + "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "アルファベット、数字、ハイフン (-) のみ利用可能です。最小 2 文字、最初の文字はアルファベットか数字です。", + "Open the addons URL with https instead of http": "HTTP の代わりに HTTPS のアドオン URL を開く", + "Open the service URL with https instead of http (defaults to \"false\")": "HTTP の代わりに HTTPS のサービス URL を開く (デフォルトは「false」)", + "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "デフォルトブラウザーで {{.namespace_name}}/{{.service_name}} Kubernetes サービスを開いています...", + "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "デフォルトブラウザーで {{.namespace_name}}/{{.service_name}} サービスを開いています...", + "Opening {{.url}} in your default browser...": "デフォルトブラウザーで {{.url}} を開いています...", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "minikube 中で ADDON_NAME アドオンを開きます (例: minikube addons open dashboard)。利用可能なアドオンの一覧表示: minikube addons list ", + "Operations on nodes": "ノードの操作", + "Options: {{.options}}": "オプション: {{.options}}", + "Output format. Accepted values: [json, yaml]": "出力フォーマット。許容値: [json, yaml]", + "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "指定されたシェル用の minikube シェル補完コマンドを出力 (bash、zsh、fish)\n\n\tbash-completion バイナリーに依存しています。インストールコマンドの例:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # bash ユーザー用\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # zsh ユーザー用\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # fish ユーザー用\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # bash ユーザー用\n\t\t$ source \u003c(minikube completion zsh) # zsh ユーザー用\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # fish ユーザー用\n\n\tさらに、補完コマンドをファイルに出力して .bashrc 内で source を実行するとよいでしょう\n\n\t注意 (zsh ユーザー): [1] zsh 補完コマンドは zsh バージョン \u003e= 5.2 でのみサポートしています\n\t注意 (fish ユーザー): [2] 詳細はこちらのドキュメントを参照してください https://fishshell.com/docs/current/#tab-completion\n", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Outputs the licenses of dependencies to a directory": "依存関係のライセンスをディレクトリーに出力します", + "Overwrite image even if same image:tag name exists": "同じ image:tag 名が存在していてもイメージを上書きします", + "Path to socket vmnet binary": "socket vmnet バイナリーへのパス", + "Path to socket vmnet binary (QEMU driver only)": "socket vmnet バイナリーへのパス (QEMU ドライバーのみ)", + "Path to the Dockerfile to use (optional)": "使用する Dockerfile へのパス (任意)", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "qemu ファームウェアファイルへのパス。デフォルト: Linux の場合、デフォルトのファームウェアの場所。macOS の場合、brew のインストール場所。Windows の場合、C:\\Program Files\\qemu\\share", + "Path to the socket vmnet client binary": "socket vmnet クライアントバイナリーへのパス", + "Path to the socket vmnet client binary (QEMU driver only)": "socket vmnet クライアントバイナリーへのパス (QEMU ドライバーのみ)", + "Pause": "一時停止", + "Paused {{.count}} containers": "{{.count}} 個のコンテナーを一時停止しました", + "Paused {{.count}} containers in: {{.namespaces}}": "{{.namespaces}} に存在する {{.count}} 個のコンテナーを一時停止しました", + "Pausing node {{.name}} ... ": "{{.name}} ノードを一時停止しています ... ", + "Please also attach the following file to the GitHub issue:": "GitHub issue に次のファイルも添付してください:", + "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "より大きなディスクサイズでクラスターを作ってください: `minikube start --disk SIZE_MB` ", + "Please either authenticate to the registry or use --base-image flag to use a different registry.": "レジストリーに認証するか、--base-image フラグで別のレジストリーを指定するかどちらを行ってください。", + "Please enter a value:": "値を入力してください:", + "Please free up disk or prune images.": "ディスクを解放するか、イメージを削除してください。", + "Please increase Desktop's disk size.": "Desktop のディスクサイズを増やしてください。", + "Please install the minikube hyperkit VM driver, or select an alternative --driver": "minikube hyperkit VM ドライバーをインストールするか、--driver で別のドライバーを選択してください", + "Please install the minikube kvm2 VM driver, or select an alternative --driver": "minikube kvm2 VM ドライバーをインストールするか、--driver で別のドライバーを選択してください", + "Please make sure the service you are looking for is deployed or is in the correct namespace.": "探しているサービスがデプロイされている、あるいは正しいネームスペース中にあることを確認してください。", + "Please provide a path or url to build": "ビルドするパスまたは URL を指定してください", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "\u003cminikube image save IMAGE_NAME\u003e で minikube からセーブする、コンテナーランタイム中のイメージを指定してください", + "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "\u003cminikube image load IMAGE_NAME\u003e で minikube 中にロードする、ローカルデーモンの中のイメージを指定してください", + "Please provide source and target image": "ソースイメージとターゲットイメージを指定してください", + "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "環境変数が更新されたポート番号を持つことを確実にするために docker-env を再適用してください:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t", + "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "環境変数が更新されたポート番号を持つことを確実にするために podman-env を再適用してください:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "`minikube logs --file=logs.txt` を実行して、GitHub イシューに logs.txt を添付してください。", + "Please see {{.documentation_url}} for more details": "詳細は {{.documentation_url}} を参照してください", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", + "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "マウントするディレクトリーを指定してください: \n\tminikube mount \u003cソースディレクトリー\u003e:\u003cターゲットディレクトリー\u003e (例:「/host-home:/vm-home」)", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "コピーするパスを指定してください: \n\tminikube cp \u003cソースファイルのパス\u003e \u003cターゲットファイルの絶対パス\u003e (例:「minikube cp a/b.txt /copied.txt」)", + "Please try purging minikube using `minikube delete --all --purge`": "`minikube delete --all --purge` を使用して minikube の削除を試してください", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "関連するドキュメントへの次のリンクを参照してください: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n", + "Populates the specified folder with documentation in markdown about minikube": "指定されたフォルダーに、minikube に関するマークダウンのドキュメントを生成します", + "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "PowerShell は制約付きモードで実行されています (Hyper-V スクリプティングと互換性がありません)。", "Powering off \"{{.profile_name}}\" via SSH ...": "SSH 経由で「{{.profile_name}}」の電源をオフにしています...", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "{{.runtime}} {{.runtimeVersion}} で Kubernetes {{.k8sVersion}} を準備しています...", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "{{.runtime}} {{.runtimeVersion}} を準備しています...", "Print current and latest version number": "使用中および最新の minikube バージョン番号を表示します", - "Print just the version number.": "", - "Print the version of minikube": "使用中の minikube バージョン番号を表示します", - "Print the version of minikube.": "", - "Problems detected in {{.entry}}:": "", - "Problems detected in {{.name}}:": "", - "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "", - "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "", - "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "", - "Profile name '{{.name}}' is not valid": "", - "Profile name '{{.profilename}}' is not valid": "", - "Profile name should be unique": "", - "Provide VM UUID to restore MAC address (hyperkit driver only)": "MAC アドレスを復元するための VM UUID を指定します(hyperkit ドライバのみ)", - "Pull the remote image (no caching)": "", - "Pulling base image ...": "イメージを Pull しています...", - "Push the new image (requires tag)": "", - "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "", - "Rebuild libvirt with virt-network support": "", - "Received {{.name}} signal": "", - "Registries used by this addon. Separated by commas.": "", - "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "", - "Registry mirrors to pass to the Docker daemon": "Docker デーモンに渡すレジストリ ミラー", - "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "", - "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", - "Related issue: {{.url}}": "", - "Related issues:": "", - "Relaunching Kubernetes using {{.bootstrapper}} ...": "{{.bootstrapper}} を使用して Kubernetes を再起動しています...", - "Remove one or more images": "", - "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "", - "Removed all traces of the \"{{.name}}\" cluster.": "クラスタ \"{{.name}}\" の全てのトレースを削除しました。", + "Print just the version number.": "バージョン番号だけ表示します。", + "Print the version of minikube": "minikube バージョンを表示します", + "Print the version of minikube.": "minikube のバージョンを表示します。", + "Problems detected in {{.entry}}:": "{{.entry}} で問題を検出しました:", + "Problems detected in {{.name}}:": "{{.name}} で問題を検出しました:", + "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "「{{.cluster}}」プロファイルが見つかりません。全プロファイルを表示するために「minikube profile list」を実行してください。", + "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "プロファイル名「{{.profilename}}」は予約語です。このプロファイルを削除するためには、「{{.cmd}}」を実行します", + "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "プロファイル名 '{{.name}}' は '{{.profile}}' プロファイル中のマシン名 '{{.machine}}' と重複しています", + "Profile name '{{.name}}' is not valid": "プロファイル名 '{{.name}}' は無効です", + "Profile name '{{.profilename}}' is not valid": "プロファイル名 '{{.profilename}}' は無効です", + "Profile name should be unique": "プロファイル名は単一でなければなりません", + "Provide VM UUID to restore MAC address (hyperkit driver only)": "MAC アドレスを復元するための VM UUID を指定します (hyperkit ドライバーのみ)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "端末の docker-cli を minikube 内の Docker エンジンに指定する手順を提供します。(minikube 内で直接 Docker イメージを構築するのに便利です)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "端末の docker-cli を minikube 内の Docker エンジンに指定する手順を提供します。(minikube 内で直接 Docker イメージを構築するのに便利です)\n\n例えば、docker build, docker run, docker ps などの全ての docker 操作を minikube 内の docker で直接実行できます。\n\n注意: docker-cli をマシンにインストールする必要があります。\ndocker-cli のインストール手順: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps", + "Pull images": "イメージを取得します", + "Pull the remote image (no caching)": "リモートイメージを取得します (キャッシュなし)", + "Pulling base image ...": "ベースイメージを取得しています...", + "Pulling base image {{.kicVersion}} ...": "", + "Push images": "イメージを登録します", + "Push the new image (requires tag)": "新イメージを登録します (タグが必要)", + "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "VirtualBox インストールを完了させるために再起動し、VirtualBox がシステムや別のハイパーバイザーにブロックされていないことを検証してください", + "Rebuild libvirt with virt-network support": "virt-network サポート付きで libvirt を再構築してください", + "Received {{.name}} signal": "{{.name}} シグナルを受信しました。", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "次のコマンドを実行してクラスターを再作成してください:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}", + "Registries used by this addon. Separated by commas.": "このアドオンで使用するレジストリー。カンマで区切ります。", + "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "{{.driver}} ドライバーを使うレジストリーアドオンは {{.port}} 番ポートを使用します。デフォルトの 5000 番ポートの代わりにこちらのポートを使用してください", + "Registry mirrors to pass to the Docker daemon": "Docker デーモンに渡すミラーレジストリー", + "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "VirtualBox を再インストールして再起動してください。あるいは、kvm2 ドライバーを試してください: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/", + "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "VirtualBox を再インストールして、ブロックされていないことを検証してください: システム環境設定 -\u003e セキュリティーとプライバシー -\u003e 一般 -\u003e いくつかのシステムソフトウェアの読み込みがブロックされました", + "Related issue: {{.url}}": "関連イシュー: {{.url}}", + "Related issues:": "関連イシュー:", + "Remove one or more images": "1 つまたは複数のイメージを削除します", + "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "無効な --docker-opt または --insecure-registry フラグを指定している場合、これを削除してください", + "Removed all traces of the \"{{.name}}\" cluster.": "クラスター「{{.name}}」の全てのトレースを削除しました。", "Removing {{.directory}} ...": "{{.directory}} を削除しています...", - "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", - "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "", - "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "リクエストされたディスクサイズ {{.requested_size}} が最小値 {{.minimum_size}} 未満です", - "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "リクエストされたメモリ割り当て({{.memory}} MB)がデフォルトのメモリ割り当て {{.default_memorysize}} MB 未満です。minikube が正常に動作しないか、予期せずクラッシュする可能性があることに注意してください", - "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", - "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "リクエストされたメモリ割り当て {{.requested_size}} が許可される最小値 {{.minimum_size}} 未満です", - "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", - "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", - "Reset Docker to factory defaults": "", - "Restart Docker": "", - "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "", - "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "既存の {{.driver_name}} {{.machine_type}} を \"{{.cluster}}\" のために再起動しています...", - "Restarting the {{.name}} service may improve performance.": "", - "Retrieve the ssh host key of the specified node": "", - "Retrieve the ssh host key of the specified node.": "", - "Retrieve the ssh identity key path of the specified cluster": "指定されたクラスタの SSH 鍵のパスを取得します", - "Retrieve the ssh identity key path of the specified node": "", - "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "", - "Retrieves the IP address of the running cluster": "実行中のクラスタの IP アドレスを取得します", - "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "", - "Retrieves the IP address of the specified node": "", - "Retrieves the IP address of the specified node, and writes it to STDOUT.": "", + "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "要求された CPU 数 {{.requested_cpus}} は利用可能な CPU 数 {{.avail_cpus}} より大きいです", + "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "要求された CPU 数 {{.requested_cpus}} が許可される最小 CPU 数 {{.minimum_cpus}} 未満です", + "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "要求されたメモリー割り当て ({{.requested}}MB) が推奨の最小値 {{.recommend}}MB 未満です。デプロイは失敗するかもしれません。", + "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "要求されたメモリー割り当て {{.requested}}MB がシステム制限 {{.system_limit}}MB より大きいです。", + "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "要求されたメモリー割り当て {{.requested}}MiB が実用最小値 {{.minimum_memory}}MB 未満です", + "Reset Docker to factory defaults": "Docker を出荷既定値にリセットしてください", + "Restart Docker": "Docker を再起動してください", + "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "Docker を再起動し、docker が実行中であることを確認した後、'minikube delete' を実行してから再度 'minikube start' を実行してください", + "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "「{{.cluster}}」のために既存の {{.driver_name}} {{.machine_type}} を再起動しています...", + "Restarting the {{.name}} service may improve performance.": "{{.name}} サービス再起動で性能が改善するかもしれません。", + "Retrieve the ssh host key of the specified node": "指定したノードの SSH ホスト鍵を取得します", + "Retrieve the ssh host key of the specified node.": "指定したノードの SSH ホスト鍵を取得します。", + "Retrieve the ssh identity key path of the specified node": "指定したノードの SSH 鍵のパスを取得します", + "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "指定したノードの SSH 鍵のパスを取得し、標準出力に書き出します。", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "実行中のクラスターの IP アドレスを取得し、kubeconfig 中の IP アドレスを用いてチェックします\n\t\t\t正しくない場合は kubeconfig を修正します。", + "Retrieves the IP address of the specified node": "指定したノードの IP アドレスを取得します", + "Retrieves the IP address of the specified node, and writes it to STDOUT.": "指定したノードの IP アドレスを取得し、標準出力に書き出します。", "Returns a URL to connect to a service": "サービスに接続するための URL を返します", - "Returns logs to debug a local Kubernetes cluster": "ローカル Kubernetes クラスタをデバッグするためのログを返します", - "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", - "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", - "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", - "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", - "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "", - "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "", - "Run a kubectl binary matching the cluster version": "クラスタのバージョンに適合する kubectl のバイナリを実行します", - "Run minikube from the C: drive.": "", - "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "", - "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "", - "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", - "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", - "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", - "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "", - "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "SSH key (ssh driver only)": "", - "SSH port (ssh driver only)": "", - "SSH user (ssh driver only)": "", - "Select a valid value for --dnsdomain": "", - "Send trace events. Options include: [gcp]": "", - "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "", - "Set failed": "", - "Set flag to delete all profiles": "", - "Set flag to stop all profiles (clusters)": "", - "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "", - "Set this flag to delete the '.minikube' folder from your user directory.": "", - "Sets an individual value in a minikube config file": "", - "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", - "Sets up docker env variables; similar to '$(docker-machine env)'.": "", - "Sets up podman env variables; similar to '$(podman-machine env)'.": "", - "Setting profile failed": "", - "Show a list of global command-line options (applies to all commands).": "", - "Show only log entries which point to known problems": "", - "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", - "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "", - "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "", - "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "", - "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "", - "Sorry, completion support is not yet implemented for {{.name}}": "", - "Sorry, please set the --output flag to one of the following valid options: [text,json]": "", - "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "", - "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "", - "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "申し訳ありません。現在、kubeadm.{{.parameter_name}} パラメータは --extra-config でサポートされていません", - "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "申し訳ありません。--registry-mirror フラグとともに指定された URL は無効です。{{.url}}", - "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "", - "Source {{.path}} can not be empty": "", - "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "", - "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", - "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", - "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Docker デーモンに渡す任意のフラグを指定します(形式: key=value)", - "Specify arbitrary flags to pass to the build. (format: key=value)": "", - "Specify the 9p version that the mount should use": "", - "Specify the ip that the mount should be setup on": "", - "Specify the mount filesystem type (supported types: 9p)": "", - "Specify the port that the mount should be setup on, where 0 means any free port.": "", - "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "", - "StartHost failed, but will try again: {{.error}}": "", - "Starting control plane node {{.name}} in cluster {{.cluster}}": "コントロールプレーンのノード {{.name}} を {{.cluster}} 上で起動しています", - "Starting node {{.name}} in cluster {{.cluster}}": "", - "Starting tunnel for service {{.service}}.": "", - "Starts a local Kubernetes cluster": "ローカル Kubernetes クラスタを起動します", - "Starts a local kubernetes cluster": "ローカル Kubernetes クラスタを起動します", - "Starts a node.": "", - "Starts an existing stopped node in a cluster.": "", - "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "", - "Stopping node \"{{.name}}\" ...": "ノード \"{{.name}}\" を停止しています...", - "Stopping tunnel for service {{.service}}.": "サービス {{.service}} のトンネルを停止しています。", - "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "", - "Stops a node in a cluster.": "", - "Stops a running local Kubernetes cluster": "ローカル Kubernetes クラスタを停止します", - "Successfully added {{.name}} to {{.cluster}}!": "", + "Returns logs to debug a local Kubernetes cluster": "ローカルの Kubernetes クラスターをデバッグするためのログを返します", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "ローカルクラスター中のサービス用 Kubernetes URL を返します。複数 URL の場合、それらは一度に出力されます。", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "minikube 設定ファイル中の PROPERTY_NAME の値を返します。実行時にフラグか環境変数を用いて上書きできます。", + "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "PowerShell を特権モードで開くために、PowerShell アイコンを右クリックし、管理者として実行を選択してください。", + "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "'kubectl describe pod coredns -n kube-system' を実行し、ファイアウォールか DNS 衝突を確認してください", + "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "古い VM を削除するため、'minikube delete' を実行するか、このコマンドを実行した時と同じユーザーで minikube を実行していることを確認してください", + "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "'sudo sysctl fs.protected_regular=0' を実行するか、'--driver=docker' のような root を必要としないドライバーを試してください", + "Run a kubectl binary matching the cluster version": "クラスターのバージョンに一致する kubectl バイナリーを実行します", + "Run minikube from the C: drive.": "C: ドライブから minikube を実行してください。", + "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "Kubernetes クライアントを実行します (必要であればクライアントをダウンロードします)。kubectl の後に -- を忘れないでください!\n\nこれは、クラスターと同じバージョンの Kubernetes クライアント (kubectl) を実行します\n\n通常、ホスト OS とアーキテクチャに一致するバイナリーをダウンロードしますが、\nそのほかに SSH 接続経由でコントロールプレーン上で kubectl を直接実行することもできます。\nこれは、未サポートホストなど、いくつかの理由によりローカルで kubectl を実行できない場合に便利です。\n--ssh を使用する場合、全パスがリモートマシンに適用されることに注意してください。", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All' を実行してください", + "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "'kubectl delete clusterrolebinding kubernetes-dashboard' を実行してください", + "Run: 'minikube delete --all' to clean up all the abandoned networks.": "破棄された全ネットワークを一掃するため、'minikube delete --all' を実行してください。", + "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config' を実行してください", + "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd' を実行してください", + "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "localhost (CPU={{.number_of_cpus}}、メモリー={{.memory_size}}MB、ディスク={{.disk_size}}MB) 上で実行しています...", + "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "リモート (CPU={{.number_of_cpus}}、メモリー={{.memory_size}}MB、ディスク={{.disk_size}}MB) 上で実行しています...", + "SSH key (ssh driver only)": "SSH 鍵 (ssh ドライバーのみ)", + "SSH port (ssh driver only)": "SSH ポート (ssh ドライバーのみ)", + "SSH user (ssh driver only)": "SSH ユーザー (ssh ドライバーのみ)", + "Save a image from minikube": "minikube からイメージを保存します", + "Searching the internet for Kubernetes version...": "", + "Select a valid value for --dnsdomain": "--dnsdomain に有効な値を選択してください", + "Send trace events. Options include: [gcp]": "トレースイベントを送信します。含まれるオプション: [gcp]", + "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "'{{.namespace}}' ネームスペース中に '{{.service}}' サービスが見つかりませんでした。\n'minikube service {{.service}} -n \u003cnamespace\u003e' を使って別のネームスペースを選択できます。または、'minikube service list' を使って全サービスを一覧表示してください", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "minikube クラスターの静的 IP を設定します。IP はプライベート、IPv4 である必要があり、最後のオクテットは 2 から 254 の間である必要があります (例: 192.168.200.200) (Docker および Podman ドライバーのみ)", + "Set failed": "設定に失敗しました", + "Set flag to delete all profiles": "全プロファイルを削除します", + "Set flag to stop all profiles (clusters)": "全プロファイル (クラスター) を停止します", + "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "設定時間後にクラスターを停止します (例: --schedule=5m)", + "Set this flag to delete the '.minikube' folder from your user directory.": "あなたのユーザーディレクトリー中の '.minikube' フォルダーを削除します。", + "Sets an individual value in a minikube config file": "minikube 設定ファイルの個別の値を設定します", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "PROPERTY_NAME の設定値を PROPERTY_VALUE に設定します\n\tこれらの値はランタイムのフラグまたは環境変数で上書きできます。", + "Sets up docker env variables; similar to '$(docker-machine env)'.": "docker 環境変数を設定します。'$(docker-machine env)' と同様です。", + "Sets up podman env variables; similar to '$(podman-machine env)'.": "podman 環境変数を設定します。'$(podman-machine env)' と同様です。", + "Setting profile failed": "プロファイルの設定に失敗しました", + "Show a list of global command-line options (applies to all commands).": "(全コマンドに適用される) グローバルコマンドラインオプションの一覧を表示します。", + "Show only log entries which point to known problems": "既知の問題を示すログエントリーのみ表示します", + "Show only the audit logs": "監査ログのみ表示します", + "Show only the last start logs.": "最後の起動ログのみ表示します。", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "直近のジャーナルエントリーのみ表示し、ジャーナルに追加された新しいエントリーを連続して表示します。", + "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "minikube 中の NUMA ノードカウントをシミュレートします (対応 NUMA ノードカウント範囲は 1~8 (kvm2 ドライバーのみ))", + "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "--keep-context が設定されたので、{{.profile_name}} 用 kubectl コンテキストの切替をスキップしました。", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "いくつかのダッシュボード機能は metrics-server アドオンを必要とします。全機能を有効にするためには、次のコマンドを実行します:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", + "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "申し訳ありませんが、Kubernetes {{.k8sVersion}} は root アカウントのパス中にインストールされた conntrack が必要です", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "申し訳ありませんが、Kubernetes {{.k8sVersion}} は root アカウントのパス中にインストールされた crictl が必要です", + "Sorry, completion support is not yet implemented for {{.name}}": "申し訳ありませんが、{{.name}} 用のコマンド補完は未実装です", + "Sorry, please set the --output flag to one of the following valid options: [text,json]": "申し訳ありませんが、--output フラグで次の有効な選択肢の 1 つを設定してください: [text,json]", + "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "申し訳ありませんが、--listen-address フラグで指定された IP アドレスは無効です: {{.listenAddr}}", + "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "申し訳ありませんが、--insecure-registry で指定されたアドレス {{.addr}} は無効です。想定された形式: \u003cIP\u003e[:\u003cポート\u003e]、\u003cホスト名\u003e[:\u003cポート\u003e]、\u003cネットワーク\u003e/\u003cネットマスク\u003e", + "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "申し訳ありませんが、kubeadm.{{.parameter_name}} パラメーターは現在 --extra-config で未対応です", + "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "申し訳ありませんが、--registry-mirror フラグとともに指定された URL は無効です: {{.url}}", + "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "申し訳ありませんが、{{.driver}} はコンテナーの生成後にマウントを変更できません (旧マウント: '{{.old}}'、新マウント: '{{.new}})'", + "Source {{.path}} can not be empty": "ソース {{.path}} は空にできません", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "指定された Kubernetes バージョン {{.specified}} はサポートされた最古バージョン {{.oldest}} より古いです。詳細は `minikube config defaults kubernetes-version` を使用してください。", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "指定された Kubernetes バージョン {{.specified}} はサポートされた最新バージョン {{.newest}} より新しいです。詳細は `minikube config defaults kubernetes-version` を使用してください。", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "指定された Kubernetes {{.specifiedMajor}} メジャーバージョンはサポートされた最新バージョン {{.newestMajor}} より新しいです", + "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "v\u003cメジャー\u003e.\u003cマイナー.\u003cビルド\u003e 形式で --kubernetes-version 値を指定します。例: 'v1.1.14'", + "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "代わりの --host-only-cidr 値を指定します (172.16.0.1/24 など)", + "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Docker デーモンに渡す任意のフラグを指定します (形式: key=value)。", + "Specify arbitrary flags to pass to the build. (format: key=value)": "ビルドに渡す任意のフラグを指定します (形式: key=value)。", + "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "追加ディスク指定は現在 {{.supported_drivers}} ドライバーのみ対応しています。本機能の追加に貢献可能な場合、PR を作成してください。", + "StartHost failed, but will try again: {{.error}}": "StartHost に失敗しましたが、再度試してみます: {{.error}}", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "", + "Starting control plane node {{.name}} in cluster {{.cluster}}": "{{.cluster}} クラスター中のコントロールプレーンの {{.name}} ノードを起動しています", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "{{.cluster}} クラスター中の Kubernetes なしで minikube を起動しています", + "Starting minikube without Kubernetes {{.name}} in cluster {{.cluster}}": "{{.cluster}} クラスター中の Kubernetes なしで minikube {{.name}} を起動しています", + "Starting tunnel for service {{.service}}.": "{{.service}} サービス用のトンネルを起動しています。", + "Starting worker node {{.name}} in cluster {{.cluster}}": "{{.cluster}} クラスター中の {{.name}} ワーカーノードを起動しています", + "Starts a local Kubernetes cluster": "ローカルの Kubernetes クラスターを起動します", + "Starts a node.": "ノードを起動します。", + "Starts an existing stopped node in a cluster.": "クラスター中の既存の停止ノードを起動します。", + "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "{{.old_driver}} ドライバーを用いた始動に失敗しましたが、代わりの {{.new_driver}} ドライバーで再試行しています: {{.error}}", + "Stopped tunnel for service {{.service}}.": "{{.service}} サービス用トンネルを停止しました。", + "Stopping node \"{{.name}}\" ...": "「{{.name}}」ノードを停止しています...", + "Stopping tunnel for service {{.service}}.": "{{.service}} サービスのトンネルを停止しています。", + "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "ローカルの Kubernetes クラスターを停止します。このコマンドは下位層の VM またはコンテナーを停止しますが、ユーザーデータは損なわれずに保持します。クラスターは「start」コマンドで再起動できます。", + "Stops a node in a cluster.": "クラスター中のノードを停止します。", + "Stops a running local Kubernetes cluster": "ローカル Kubernetes クラスターを停止します", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "kic クラスター上で使用されるサブネット。空のままの場合、minikube は 192.168.49.0 で始まるサブネットを選択します (docker、podman ドライバーのみ)。", + "Successfully added {{.name}} to {{.cluster}}!": "{{.cluster}} への {{.name}} 追加に成功しました!", "Successfully deleted all profiles": "全てのプロファイルの削除に成功しました", - "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", - "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "", - "Successfully started node {{.name}}!": "", - "Successfully stopped node {{.name}}": "", + "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "{{.destinationPath}} への {{.sourcePath}} のマウントに成功しました", + "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "[{{.minikubeDirectory}}] にある minikube ディレクトリーの削除に成功しました", + "Successfully started node {{.name}}!": "{{.name}} ノードの起動に成功しました!", + "Successfully stopped node {{.name}}": "{{.name}} ノードの停止に成功しました", + "Successfully unblocked bootpd process from firewall, retrying": "", "Suggestion: {{.advice}}": "提案: {{.advice}}", - "Suggestion: {{.fix}}": "提案: {{.fix}}", - "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "Tag to apply to the new image (optional)": "", - "Target directory {{.path}} must be an absolute path": "", - "Target {{.path}} can not be empty": "", - "Test docs have been saved at - {{.path}}": "", - "The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo minikube --vm-driver={{.driver_name}}": "「{{.driver_name}}」ドライバにはルート権限が必要です。「sudo minikube --vm-driver={{.driver_name}}」を使用して minikube を実行してください", - "The \"{{.driver_name}}\" driver should not be used with root privileges.": "", - "The \"{{.name}}\" cluster has been deleted.": "「{{.name}}」クラスタが削除されました", - "The \"{{.name}}\" cluster has been deleted.__1": "「{{.name}}」クラスタが削除されました", - "The 'none' driver is designed for experts who need to integrate with an existing VM": "", - "The 'none' driver provides limited isolation and may reduce system security and reliability.": "ドライバに「none」を指定すると、分離が制限され、システムのセキュリティと信頼性が低下する可能性があります", - "The '{{.addonName}}' addon is enabled": "", - "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "", - "The '{{.driver}}' provider was not found: {{.error}}": "", - "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", - "The '{{.name}}' driver does not respect the --cpus flag": "", - "The '{{.name}}' driver does not respect the --memory flag": "", - "The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically": "", - "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "", - "The CIDR to be used for service cluster IPs.": "サービス クラスタ IP に使用される CIDR", - "The CIDR to be used for the minikube VM (virtualbox driver only)": "minikube VM に使用される CIDR(virtualbox ドライバのみ)", - "The KVM QEMU connection URI. (kvm2 driver only)": "KVM QEMU 接続 URI(kvm2 ドライバのみ)", - "The KVM default network name. (kvm2 driver only)": "", - "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", - "The KVM network name. (kvm2 driver only)": "KVM ネットワーク名(kvm2 ドライバのみ)", - "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", - "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", - "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", - "The \\\"{{.name}}\\\" container runtime requires CNI": "", - "The apiserver listening port": "API サーバー リスニング ポート", - "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Kubernetes 用に生成された証明書で使用される API サーバー名。マシンの外部から API サーバーを利用できるようにする場合に使用します", - "The argument to pass the minikube mount command on start": "起動時に minikube マウント コマンドを渡す引数", - "The argument to pass the minikube mount command on start.": "", - "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", - "The base image to use for docker/podman drivers. Intended for local development.": "", - "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", - "The cluster dns domain name used in the Kubernetes cluster": "", - "The cluster dns domain name used in the kubernetes cluster": "Kubernetes クラスタで使用されるクラスタ DNS ドメイン名", - "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "", - "The container runtime to be used (docker, crio, containerd)": "使用されるコンテナ ランタイム(docker、crio、containerd)", - "The control plane for \"{{.name}}\" is paused!": "", - "The control plane node \"{{.name}}\" does not exist.": "", - "The control plane node is not running (state={{.state}})": "", - "The control plane node must be running for this command": "", - "The cri socket path to be used": "使用される CRI ソケットパス", - "The cri socket path to be used.": "", - "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", - "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "ドライバ「{{.driver}}」は、{{.os}}/{{.arch}} ではサポートされていません", - "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "", - "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", - "The heapster addon is depreciated. please try to disable metrics-server instead": "", - "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "hyperv 仮想スイッチ名。最初に見つかったものにデフォルト設定されます(hyperv ドライバのみ)", - "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", - "The image '{{.imageName}}' was not found; unable to add it to cache.": "", - "The initial time interval for each check that wait performs in seconds": "", - "The kubeadm binary within the Docker container is not executable": "", - "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "minikube VM で使用される Kubernetes バージョン(例: v1.2.3)", - "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "", - "The minikube VM is offline. Please run 'minikube start' to start it again.": "", - "The minikube {{.driver_name}} container exited unexpectedly.": "", - "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", - "The name of the network plugin": "ネットワーク プラグインの名前", - "The named space to activate after start": "", - "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", - "The node to get IP. Defaults to the primary control plane.": "", - "The node to get logs from. Defaults to the primary control plane.": "", - "The node to get ssh-key path. Defaults to the primary control plane.": "", - "The node to ssh into. Defaults to the primary control plane.": "", - "The node {{.name}} has ran out of available PIDs.": "", - "The node {{.name}} has ran out of disk space.": "", - "The node {{.name}} has ran out of memory.": "", - "The node {{.name}} network is not available. Please verify network settings.": "", - "The none driver is not compatible with multi-node clusters.": "", - "The number of bytes to use for 9p packet payload": "", - "The number of nodes to spin up. Defaults to 1.": "", - "The output format. One of 'json', 'table'": "", - "The path on the file system where the docs in markdown need to be saved": "", - "The path on the file system where the error code docs in markdown need to be saved": "", - "The path on the file system where the testing docs in markdown need to be saved": "", - "The podman service within '{{.cluster}}' is not active": "", - "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "", - "The service namespace": "", - "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "", - "The services namespace": "", - "The time interval for each check that wait performs in seconds": "", - "The value passed to --format is invalid": "", - "The value passed to --format is invalid: {{.error}}": "", - "The {{.driver_name}} driver should not be used with root privileges.": "{{.driver_name}} ドライバをルート権限で使用しないでください", - "There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "「{{.driver_executable}}」の新しいバージョンがあります。アップグレードを検討してください。{{.documentation_url}}", - "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "", - "These changes will take effect upon a minikube delete and then a minikube start": "", - "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", + "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "システムは Kubernetes 用に要求された {{.req}}MiB より少ない {{.size}}MiB のみ利用可能です", + "Tag images": "イメージのタグ付与", + "Tag to apply to the new image (optional)": "新しいイメージに適用するタグ (任意)", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "ターゲット \u003cリモートファイルパス\u003e は絶対パスでなければなりません。相対パスは使用できません (例:「minikube:/home/docker/copied.txt」)", + "Target directory {{.path}} must be an absolute path": "ターゲットディレクトリー {{.path}} は絶対パスでなければなりません。", + "Target {{.path}} can not be empty": "ターゲット {{.path}} は空にできません", + "Test docs have been saved at - {{.path}}": "テストドキュメントは {{.path}} に保存されました", + "The \"{{.driver_name}}\" driver should not be used with root privileges.": "「{{.driver_name}}」ドライバーは root 権限で使用すべきではありません。", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "「{{.driver_name}}」ドライバーは root 権限で使用すべきではありません。root での継続を希望する場合、--force を使用してください。", + "The \"{{.name}}\" container runtime requires CNI": "「{{.name}}」コンテナーランタイムは CNI が必要です", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "", + "The 'none' driver is designed for experts who need to integrate with an existing VM": "'none' ドライバーは既存 VM の統合が必要なエキスパートに向けて設計されています。", + "The '{{.addonName}}' addon is enabled": "'{{.addonName}}' アドオンが有効です", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "'{{.driver}}' ドライバーは権限昇格が必要です。次のコマンドを実行してください:\n\n{{ .example }}\n", + "The '{{.driver}}' provider was not found: {{.error}}": "'{{.driver}}' プロバイダーが見つかりません: {{.error}}", + "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "'{{.name}} ドライバーは複数のプロファイルをサポートしていません: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "The '{{.name}}' driver does not respect the --cpus flag": "'{{.name}}' ドライバーは --cpus フラグを無視します", + "The '{{.name}}' driver does not respect the --memory flag": "'{{.name}}' ドライバーは --memory フラグを無視します", + "The '{{.name}}' driver does not support --cpus=no-limit": "", + "The '{{.name}}' driver does not support --memory=no-limit": "", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "指定された --image-repository フラグは {{.scheme}} スキームを含んでいますので、自動的に削除されます", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "指定された --image-repository フラグは kubernetes で競合の原因となりうる / が末尾に付いていますので、自動的に削除されます", + "The CIDR to be used for service cluster IPs.": "サービスクラスター IP に使用される CIDR。", + "The CIDR to be used for the minikube VM (virtualbox driver only)": "minikube VM に使用される CIDR (virtualbox ドライバーのみ)", + "The KVM QEMU connection URI. (kvm2 driver only)": "KVM QEMU 接続 URI (kvm2 ドライバーのみ)", + "The KVM default network name. (kvm2 driver only)": "KVM デフォルトネットワーク名 (kvm2 ドライバーのみ)", + "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "KVM ドライバーはこの古い VM を復元できません。`minikube delete` で VM を削除して、再度試行してください。", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "OLM アドオンが機能停止しました。詳細はこちらを参照してください: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534", + "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "VM ドライバーがクラッシュしました。'minikube start --alsologtostderr -v=8' を実行して、VM ドライバーのエラーメッセージを参照してください", + "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "VM ドライバーがエラー停止したため、破損している可能性があります。'minikube start --alsologtostderr -v=8' を実行して、エラーを参照してください", + "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "minikube が設定された VM はもう存在しません。'minikube delete' を実行してください", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "v1.23.0 で ambassador アドオンは機能を停止しました。 詳細はこちらを参照してください: https://github.com/datawire/ambassador-operator/issues/73", + "The apiserver listening port": "API サーバーリスニングポート", + "The argument to pass the minikube mount command on start.": "起動時に minikube マウントコマンドを渡す引数。", + "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "API サーバーの証明書と接続のための、権威 API サーバーホスト名。マシン外部から API サーバーに接続できるようにしたい場合に使用します。", + "The base image to use for docker/podman drivers. Intended for local development.": "Docker/Podman ドライバーで使用されるベースイメージ。ローカルデプロイ用です。", + "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "提供された証明書ホスト名が無効のようです (minikube のバグかも知れません。'minikube delete' を試してください)", + "The cluster dns domain name used in the Kubernetes cluster": "Kubernetes クラスターで使用されるクラスター DNS ドメイン名", + "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "{{.cluster}} クラスターは既に存在するので、--nodes パラメーターは無視されます。「minikube node add」を使って、既存クラスターにノードを追加してください。", + "The control plane for \"{{.name}}\" is paused!": "「{{.name}}」用コントロールプレーンは一時停止中です!", + "The control plane node \"{{.name}}\" does not exist.": "「{{.name}}」コントロールプレーンノードが存在しません。", + "The control plane node is not running (state={{.state}})": "コントロールプレーンノードは実行中ではありません (state={{.state}})", + "The control plane node must be running for this command": "このコマンドではコントロールプレーンノードが実行中でなければなりません", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is paused": "", + "The control-plane node {{.name}} apiserver is paused (will try others)": "", + "The control-plane node {{.name}} host does not exist": "", + "The control-plane node {{.name}} host does not exist (will try others)": "", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "", + "The control-plane node {{.name}} host is not running: state={{.state}}": "", + "The cri socket path to be used.": "使用される CRI ソケットパス。", + "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "docker-env コマンドはマルチノードクラスターと互換性がありません。'registry' アドオンを使用してください: https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "docker-env コマンドは「docker」ランタイムとだけ互換性がありますが、このクラスターは「{{.runtime}}」ランタイムを使用するよう設定されています。", + "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "'{{.driver}}' ドライバーは {{.os}}/{{.arch}} に対応していません", + "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "既存の「{{.name}}」クラスターは、(要求された「{{.new}}」ドライバーとは互換性のない)「{{.old}}」ドライバーを使用して作成されました。 ", + "The existing node configuration appears to be corrupt. Run 'minikube delete'": "既存のノード設定が破損しているようです。'minikube delete' を実行してください", + "The heapster addon is depreciated. please try to disable metrics-server instead": "heapster アドオンは廃止予定です。代わりに metrics-server を無効化してみてください", + "The host does not support filesystem 9p.": "", + "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "hyperv 仮想スイッチ名。デフォルト値は最初に見つかったスイッチ名です。 (hyperv ドライバーのみ)", + "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "ハイパーバイザーが適切に設定されていないようです。'minikube start --alsologtostderr -v=1' を実行してエラーコードを確認してください", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "'{{.imageName}}' イメージは見つかりませんでした (キャッシュに追加できません)。", + "The initial time interval for each check that wait performs in seconds": "実行待機チェックの初期時間間隔 (秒)", + "The kubeadm binary within the Docker container is not executable": "Docker コンテナー内の kubeadm バイナリーが実行可能形式ではありません", + "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "指定された machine-driver は起動に失敗しました。'docker-machine-driver-\u003ctype\u003e version' を実行してみてください", + "The minikube VM is offline. Please run 'minikube start' to start it again.": "minikube VM がオフラインです。'minikube start' を実行して minikube VM を再起動してください。", + "The minikube {{.driver_name}} container exited unexpectedly.": "minikube {{.driver_name}} コンテナーは想定外で終了しました。", + "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "minikube が要求する podman のバージョンは「{{.minVersion}}」です。あなたのバージョンは「{{.currentVersion}}」です。minikube は動作しないかも知れません。自己責任で使用してください。最新バージョンのインストールには https://podman.io/getting-started/installation.html を参照してください。", + "The named space to activate after start": "起動後にアクティベートするネームスペース", + "The node to build on. Defaults to the primary control plane.": "構築するノード。デフォルトは最初のコントロールプレーンです。", + "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "状態をチェックするノード。デフォルトはコントロールプレーンです。デフォルトフォーマットの空白のままにすると、全ノードの状態になります。", + "The node to get IP. Defaults to the primary control plane.": "IP を取得するノード。デフォルトは最初のコントロールプレーンです。", + "The node to get logs from. Defaults to the primary control plane.": "ログを取得するノード。デフォルトは最初のコントロールプレーンです。", + "The node to get ssh-key path. Defaults to the primary control plane.": "ssh-key パスを取得するノード。デフォルトは最初のコントロールプレーンです。", + "The node to ssh into. Defaults to the primary control plane.": "ssh ログインするノード。デフォルトは最初のコントロールプレーンです。", + "The node {{.name}} has ran out of available PIDs.": "{{.name}} ノードは利用可能な PID を使い果たしました。", + "The node {{.name}} has ran out of disk space.": "{{.name}} ノードはディスクスペースを使い果たしました。", + "The node {{.name}} has ran out of memory.": "{{.name}} ノードはメモリーを使い果たしました。", + "The node {{.name}} network is not available. Please verify network settings.": "{{.name}} ノードはネットワークが使用不能です。ネットワーク設定を検証してください。", + "The none driver is not compatible with multi-node clusters.": "none ドライバーはマルチノードクラスターと互換性がありません。", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Kubernetes v1.24+ の none ドライバーと docker container-runtime は cri-dockerd を要求します。\n\t\t\n\t\tこれらの手順を参照して cri-dockerd をインストールしてください:\n\n\t\thttps://github.com/Mirantis/cri-dockerd", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Kubernetes v1.24+ の none ドライバーと docker container-runtime は dockerd を要求します。\n\t\t\n\t\tこれらの手順を参照して dockerd をインストールしてください:\n\n\t\thttps://docs.docker.com/engine/install/", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "", + "The number of nodes to spin up. Defaults to 1.": "起動するノード数。デフォルトは 1。", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "", + "The output format. One of 'json', 'table'": "出力形式。'json', 'table' のいずれか", + "The path on the file system where the docs in markdown need to be saved": "markdown で書かれたドキュメントの保存先のファイルシステムパス", + "The path on the file system where the error code docs in markdown need to be saved": "markdown で書かれたエラーコードドキュメントの保存先のファイルシステムパス", + "The path on the file system where the testing docs in markdown need to be saved": "markdown で書かれたテストドキュメントの保存先のファイルシステムパス", + "The podman service within '{{.cluster}}' is not active": "'{{.cluster}}' 内の podman サービスが active ではありません", + "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "podman-env コマンドはマルチノードクラスターと互換性がありません。'registry' アドオンを使用してください: https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "podman-env コマンドは「crio」ランタイムのみ互換性がありますが、このクラスターは「{{.runtime}}」ランタイムを使用するよう設定されています。", + "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "要求された {{.requested}}MiB のメモリー割当は、システムのオーバーヘッド (合計システムメモリー: {{.system_limit}}MiB) に十分な空きを残しません。安定性の問題に直面するかも知れません。", + "The service namespace": "サービスネームスペース", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "{{.resource}} service/ingress は次の公開用特権ポートを要求します: {{.ports}}", + "The services namespace": "サービスネームスペース", + "The socket_vmnet network is only supported on macOS": "socket_vmnet ネットワークは macOS でのみサポートされます", + "The time interval for each check that wait performs in seconds": "実行待機チェックの時間間隔 (秒)", + "The total number of nodes to spin up. Defaults to 1.": "", + "The value passed to --format is invalid": "--format の値が無効です", + "The value passed to --format is invalid: {{.error}}": "--format の値が無効です: {{.error}}", + "The vfkit driver is only supported on macOS": "", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "必要なファイル共有を有効にする方法が 2 つあります:\n1. Docker Desktop 中の「Use the WSL 2 based engine」を有効にする\nまたは\n2. %s%s ディレクトリー用の Docker Desktop でファイル共有を有効にする", + "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "次の --extra-config パラメーターは無効です: {{.invalid_extra_opts}}", + "These changes will take effect upon a minikube delete and then a minikube start": "これらの変更は minikube delete の後に minikube start を実行すると反映されます", + "Things to try without Kubernetes ...": "Kubernetes なしで試すべきこと ...", + "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "このアドオンは 'addons open' コマンド用に定義されたエンドポイントがありません。\nサービスに {{.labelName}}:{{.addonName}} ラベルを付与することでエンドポイントを追加できます", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "これは環境変数 CHANGE_MINIKUBE_NONE_USER=true を設定して自動的に行うこともできます", - "This control plane is not running! (state={{.state}})": "", - "This driver does not yet work on your architecture. Maybe try --driver=none": "", - "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", - "This is unusual - you may want to investigate using \"{{.command}}\"": "", - "This will keep the existing kubectl context and will create a minikube context.": "これにより既存の kubectl コンテキストが保持され、minikube コンテキストが作成されます", - "This will start the mount daemon and automatically mount files into minikube": "これによりマウント デーモンが起動し、ファイルが minikube に自動的にマウントされます", - "This will start the mount daemon and automatically mount files into minikube.": "", - "This {{.type}} is having trouble accessing https://{{.repository}}": "", - "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "", - "Tip: To remove this root owned cluster, run: sudo {{.cmd}} delete": "ヒント: この root 所有のクラスタを削除するには、「sudo {{.cmd}} delete」を実行します", - "To connect to this cluster, use: --context={{.name}}": "", - "To connect to this cluster, use: kubectl --context={{.name}}": "このクラスタに接続するには、「kubectl --context={{.name}}」を使用します", - "To connect to this cluster, use: kubectl --context={{.name}}__1": "このクラスタに接続するには、「kubectl --context={{.name}}」を使用します", - "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", - "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "", - "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", - "To see addons list for other profiles use: `minikube addons -p name list`": "", - "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", - "To start a cluster, run: \"{{.command}}\"": "", - "To start minikube with Hyper-V, Powershell must be in your PATH`": "", - "To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "kubectl か minikube コマンドを独自のユーザーとして使用するには、そのコマンドの再配置が必要な場合があります。たとえば、独自の設定を上書きするには、以下を実行します", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "このクラスターは minikube v1.26.0 より前に作成され、cri-docker がインストールされていません。'minikube delete' を実行してから、再度 minikube を起動してください", + "This control plane is not running! (state={{.state}})": "このコントロールプレーンは動作していません!(state={{.state}})", + "This driver does not yet work on your architecture. Maybe try --driver=none": "このドライバーはあなたのアーキテクチャではまだ機能しません。もしかしたら、--driver=none を試してみてください", + "This flag is currently unsupported.": "このフラグは現在サポートされていません。", + "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "これは BTRFS ストレージドライバーの既知の問題です (回避策があります)。GitHub の issue を確認してください", + "This is unusual - you may want to investigate using \"{{.command}}\"": "これは異常です - 「{{.command}}」を使って調査できます", + "This will keep the existing kubectl context and will create a minikube context.": "これにより既存の kubectl コンテキストが保持され、minikube コンテキストが作成されます。", + "This will start the mount daemon and automatically mount files into minikube.": "これによりマウントデーモンが起動し、ファイルが minikube に自動的にマウントされます。", + "This {{.type}} is having trouble accessing https://{{.repository}}": "この {{.type}} は https://{{.repository}} アクセスにおける問題があります", + "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "ヒント: この root 所有クラスターの削除コマンド: sudo {{.cmd}}", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "", + "To access Headlamp, use the following command:\nminikube service headlamp -n headlamp\n\n": "Headlamp にアクセスするには、次のコマンドを使用します:\nminikube service headlamp -n headlamp\n\n", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "", + "To configure vment-helper to run without a password, please check the documentation:": "", + "To connect to this cluster, use: --context={{.name}}": "このクラスターに接続するためには、--context={{.name}} を使用します", + "To connect to this cluster, use: kubectl --context={{.profile_name}}": "このクラスターに接続するためには、kubectl --context={{.profile_name}} を使用します", + "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "ベータ通知を無効にするためには、'minikube config set WantBetaUpdateNotification false' を実行します", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "この通知を無効にするためには、'minikube config set WantUpdateNotification false' を実行します\n", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "全体的に更新通知を無効にするためには、'minikube config set WantUpdateNotification false' を実行します\n", + "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "外部イメージを取得するためには、プロキシーを設定する必要があるかも知れません: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/", + "To see addons list for other profiles use: `minikube addons -p name list`": "他のプロファイル用のアドオン一覧を表示するためには、`minikube addons -p name list` を実行します", + "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "Google Cloud プロジェクトを設定するためには、\n\n\t\tgcloud config set project \u003cproject name\u003e\n\n を実行するか、環境変数 GOOGLE_CLOUD_PROJECT を設定します。", + "To start a cluster, run: \"{{.command}}\"": "クラスターを起動するためには、「{{.command}}」を実行します", + "To start minikube with Hyper-V, Powershell must be in your PATH`": "Hyper-V で minikube を起動するためには、PATH 中に Powershell がなければなりません", + "To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "kubectl か minikube コマンドを独自のユーザーとして使用するためには、そのコマンドの再配置が必要な場合があります。たとえば、独自の設定を上書きするためには、以下を実行します", "Troubleshooting Commands:": "トラブルシュート用コマンド:", - "Try 'minikube delete' to force new SSL certificates to be installed": "", - "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", - "Trying to delete invalid profile {{.profile}}": "", - "Unable to bind flags": "", - "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", - "Unable to enable dashboard": "", - "Unable to fetch latest version info": "", - "Unable to find control plane": "", - "Unable to generate docs": "", - "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", - "Unable to get CPU info: {{.err}}": "", - "Unable to get bootstrapper: {{.error}}": "ブートストラッパを取得できません。{{.error}}", - "Unable to get command runner": "", - "Unable to get control plane status: {{.error}}": "", - "Unable to get current user": "", - "Unable to get forwarded endpoint": "", - "Unable to get machine status": "", - "Unable to get runtime": "", - "Unable to kill mount process: {{.error}}": "", - "Unable to list profiles: {{.error}}": "", - "Unable to load cached images from config file.": "キャッシュに保存されているイメージを構成ファイルから読み込むことができません", - "Unable to load cached images: {{.error}}": "", - "Unable to load config: {{.error}}": "構成を読み込むことができません。{{.error}}", - "Unable to load host": "", - "Unable to load profile: {{.error}}": "", - "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "「{{.kubernetes_version}}」を解析できません。{{.error}}", - "Unable to parse default Kubernetes version from constants: {{.error}}": "", - "Unable to parse memory '{{.memory}}': {{.error}}": "", - "Unable to parse oldest Kubernetes version from constants: {{.error}}": "", - "Unable to pick a default driver. Here is what was considered, in preference order:": "", - "Unable to pull images, which may be OK: {{.error}}": "イメージを pull できませんが、問題ありません。{{.error}}", - "Unable to push cached images: {{.error}}": "", - "Unable to remove machine directory": "", - "Unable to restart cluster, will reset it: {{.error}}": "", - "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", - "Unable to stop VM": "", - "Unable to update {{.driver}} driver: {{.error}}": "", - "Unfortunately, could not download the base image {{.image_name}} ": "", + "Try 'minikube delete' to force new SSL certificates to be installed": "新しい SSL 証明書を強制インストールするためには、'minikube delete' を試してください", + "Try 'minikube delete', and disable any conflicting VPN or firewall software": "'minikube delete' を試して、衝突している VPN あるいはファイアウォールソフトウェアを無効化してください", + "Try one or more of the following to free up space on the device:\n\t\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "このデバイスで容量を開放するために、次のうち 1 つ以上を試してください:\n\t\n\t\t\t1. 「sudo docker system prune」を実行して未使用の Docker データを削除する (オプションで「-a」も付与して)\n\t\t\t2. 以下のクリックで Docker for Desktop に割り当てるストレージを増やす\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Docker コンテナランタイムを使用する場合、「minikube ssh -- docker system prune」を実行する", + "Try one or more of the following to free up space on the device:\n\t\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "このデバイスで容量を開放するために、次のうち 1 つ以上を試してください:\n\t\n\t\t\t1. 「sudo podman system prune」を実行して未使用の podman データを削除する\n\t\t\t2. Docker コンテナランタイムを使用している場合、「minikube ssh -- docker system prune」を実行する", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Trying to delete invalid profile {{.profile}}": "無効なプロファイル {{.profile}} を削除中", + "Tunnel successfully started": "トンネルが無事開始しました", + "Unable to bind flags": "フラグをバインドできません", + "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "独立したネットワークの作成ができず、再起動後にクラスター IP が変更される結果になるかも知れません: {{.error}}", + "Unable to delete profile(s): {{.error}}": "", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "", + "Unable to enable dashboard": "ダッシュボードが有効になりません", + "Unable to fetch latest version info": "最新バージョン情報を取得できません", + "Unable to find any control-plane nodes": "", + "Unable to find control plane": "コントロールプレーンが見つかりません", + "Unable to generate docs": "ドキュメントを生成できません", + "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "ドキュメントを生成できません。指定されたパスが、書き込み権限が付与された既存のディレクトリーかどうか確認してください。", + "Unable to get CPU info: {{.err}}": "CPU 情報が取得できません: {{.err}}", + "Unable to get command runner": "コマンドランナーを取得できません", + "Unable to get control plane status: {{.error}}": "コントロールプレーンの状態を取得できません: {{.error}}", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "", + "Unable to get current user": "現在のユーザーを取得できません", + "Unable to get forwarded endpoint": "フォワードされたエンドポイントを取得できません", + "Unable to get machine status": "マシンの状態を取得できません", + "Unable to get runtime": "ランタイムを取得できません", + "Unable to kill mount process: {{.error}}": "mount プロセスを停止できません: {{.error}}", + "Unable to list profiles: {{.error}}": "プロファイルのリストを作成できません: {{.error}}", + "Unable to load cached images: {{.error}}": "キャッシュされたイメージを読み込めません: {{.error}}", + "Unable to load config: {{.error}}": "設定を読み込めません: {{.error}}", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "", + "Unable to load control-plane node {{.name}} host: {{.err}}": "", + "Unable to load host": "ホストを読み込めません", + "Unable to load profile: {{.error}}": "プロファイルを読み込めません: {{.error}}", + "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "「{{.kubernetes_version}}」を解析できません: {{.error}}", + "Unable to parse memory '{{.memory}}': {{.error}}": "メモリー '{{.memory}}' を解析できません: {{.error}}", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "version.json を解析できません: {{.error}}, json: {{.json}}", + "Unable to pick a default driver. Here is what was considered, in preference order:": "デフォルトドライバーを採用できませんでした。こちらが可能性の高い順に考えられる事です:", + "Unable to push cached images: {{.error}}": "キャッシュされたイメージを登録できません: {{.error}}", + "Unable to remove machine directory": "マシンディレクトリーを削除できません", + "Unable to restart cluster, will reset it: {{.error}}": "クラスターを再起動できません (リセットします): {{.error}}", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "", + "Unable to run vmnet-helper without a password": "", + "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "既存の Kubernetes v{{.old}} クラスターを v{{.new}} に安全にバージョンダウンできません", + "Unable to stop VM": "VM を停止できません", + "Unable to update {{.driver}} driver: {{.error}}": "{{.driver}} ドライバーを更新できません: {{.error}}", + "Unfortunately, could not download the base image {{.image_name}} ": "残念ながら、{{.image_name}} ベースイメージをダウンロードできませんでした", "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "{{.bootstrapper_name}} を使用して Kubernetes {{.kubernetes_version}} をアンインストールしています...", - "Unmounting {{.path}} ...": "", - "Unpause": "", - "Unpaused {{.count}} containers": "", - "Unpaused {{.count}} containers in: {{.namespaces}}": "次のnamespaceに存在する {{.count}} 個のコンテナを再稼働させました: {{.namespaces}}", - "Unpausing node {{.name}} ...": "ノード {{.name}} を再稼働させています ...", - "Unpausing node {{.name}} ... ": "", - "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "", - "Unset variables instead of setting them": "", - "Update Docker to the latest minor version, this version is unsupported": "", - "Update kubeconfig in case of an IP or port change": "IP アドレスやポート番号が変わった場合に kubeconfig を更新します", - "Update server returned an empty list": "", - "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "起動中の {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} を更新しています...", - "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", - "Upgrading from Kubernetes {{.old}} to {{.new}}": "Kubernetes を {{.old}} から {{.new}} にアップグレードしています", - "Usage": "", - "Usage: minikube completion SHELL": "", - "Usage: minikube delete": "", - "Usage: minikube delete --all --purge": "", - "Usage: minikube node [add|start|stop|delete|list]": "", - "Usage: minikube node delete [name]": "", - "Usage: minikube node list": "", - "Usage: minikube node start [name]": "", - "Usage: minikube node stop [name]": "", - "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", - "Use 'kubect get po -A' to find the correct and namespace name": "", - "Use -A to specify all namespaces": "", - "Use SSH connection instead of HTTPS (port 2376)": "", - "Use SSH for running kubernetes client on the node": "", - "Use VirtualBox to remove the conflicting VM and/or network interfaces": "", - "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "", + "Unmounting {{.path}} ...": "{{.path}} をアンマウントしています...", + "Unpause": "再稼働", + "Unpaused {{.count}} containers": "{{.count}} 個のコンテナーを再稼働させました", + "Unpaused {{.count}} containers in: {{.namespaces}}": "次のネームスペースに存在する {{.count}} 個のコンテナーを再稼働させました: {{.namespaces}}", + "Unpausing node {{.name}} ... ": "{{.name}} ノードを再稼働させています ... ", + "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "環境変数 KUBECONFIG をセット解除するか、同変数が空または不正なパスに設定されていないことを確認してください", + "Unset variables instead of setting them": "変数をセットせず解除します", + "Update Docker to the latest minor version, this version is unsupported": "Docker を最新のマイナーバージョンに更新してください (このバージョンは未サポートです)", + "Update kubeconfig in case of an IP or port change": "IP アドレスやポート番号が変わった場合に kubeconfig を更新してください", + "Update server returned an empty list": "空リストを返したサーバーを更新してください", + "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "実行中の {{.driver_name}} 「{{.cluster}}」 {{.machine_type}} を更新しています...", + "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "QEMU v3.1.0 以降にアップグレードするか、'virt-host-validate' を実行するか、ネストされた VM 環境中で実行されていないことを確認してください。", + "Usage": "使用法", + "Usage: minikube completion SHELL": "使用法: minikube completion SHELL", + "Usage: minikube delete": "使用法: minikube delete", + "Usage: minikube delete --all --purge": "使用法: minikube delete --all --purge", + "Usage: minikube node [add|start|stop|delete|list]": "使用法: minikube node [add|start|stop|delete|list]", + "Usage: minikube node delete [name]": "使用法: minikube node delete [ノード名]", + "Usage: minikube node list": "使用法: minikube node list", + "Usage: minikube node start [name]": "使用法: minikube node start [ノード名]", + "Usage: minikube node stop [name]": "使用法: minikube node stop [ノード名]", + "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "コマンドに関する追加情報は「{{.CommandPath}} [command] --help」を使用してください。", + "Use 'kubectl get po -A' to find the correct and namespace name": "'kubectl get po -A' を使用して、妥当なネームスペース名を見つけてください", + "Use -A to specify all namespaces": "全ネームスペースを指定する場合は -A を使用してください", + "Use SSH connection instead of HTTPS (port 2376)": "HTTPS 接続の代わりに SSH 接続を使用します (ポート 2376)", + "Use SSH for running kubernetes client on the node": "ノード上で実行中の Kubernetes クライアントへの接続に SSH を使用します", + "Use VirtualBox to remove the conflicting VM and/or network interfaces": "VirtualBox を使用して、衝突した VM やネットワークインターフェイスを削除してください", + "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "ネイティブの Go 言語 SSH クライアントを使用します (デフォルトは true)。Docker マシンにアクセスする際に、コマンドラインの 'ssh' コマンドを使用する場合は 'false' をセットしてください。マシンドライバーが 'Waiting for SSH' で開始されない場合に有用です。", "User ID: {{.userID}}": "ユーザー ID: {{.userID}}", - "User name '{{.username}}' is not valid": "", - "User name must be 60 chars or less.": "", - "Userspace file server is shutdown": "ユーザー側のファイルサーバーが停止しました", - "Userspace file server:": "ユーザー側のファイルサーバー", - "Userspace file server: ": "", - "Using image repository {{.name}}": "イメージ リポジトリ {{.name}} を使用しています", - "Using image {{.registry}}{{.image}}": "イメージ {{.registry}}{{.image}} を使用しています", - "Using image {{.registry}}{{.image}} (global image repository)": "イメージ {{.registry}}{{.image}}(グローバルイメージリポジトリ) を使用しています", - "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "「 none 」ドライバで「 {{.runtime}} 」ランタイムを使用することは、テストされていない設定です!", - "Using the {{.driver}} driver based on existing profile": "プロフィールを元に、 {{.driver}} ドライバを使用します", - "Using the {{.driver}} driver based on user configuration": "設定を元に、 {{.driver}} ドライバを使用します", - "VM driver is one of: %v": "VM ドライバは次のいずれかです。%v", - "Valid components are: {{.valid_extra_opts}}": "", - "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "検証中に、ディスクのサイズ( {{.diskSize}} )をパースできませんでした。{{.error}}", - "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "HTTP_PROXY と HTTPS_PROXY 環境変数が正常に設定されているかを確認します", - "Verify the IP address of the running cluster in kubeconfig.": "Kubernetes の設定ファイルのクラスタの IP アドレスを確認します", + "User name '{{.username}}' is not valid": "ユーザー名 '{{.username}}' は無効です", + "User name must be 60 chars or less.": "ユーザー名は 60 文字以内でなければなりません。", + "Userspace file server is shutdown": "ユーザースペースのファイルサーバーが停止しました", + "Userspace file server: ": "ユーザースペースのファイルサーバー: ", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "Docker ランタイムで Kubernetes v1.24+ を使用するには、cri-docker をインストールする必要があります", + "Using Kubernetes {{.version}} since patch version was unspecified": "", + "Using image repository {{.name}}": "{{.name}} イメージリポジトリーを使用しています", + "Using image {{.registry}}{{.image}}": "{{.registry}}{{.image}} イメージを使用しています", + "Using image {{.registry}}{{.image}} (global image repository)": "{{.registry}}{{.image}} イメージ (グローバルイメージリポジトリー) を使用しています", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "rootless Docker ドライバー使用が必要でしたが、現在の Docker は rootless が必要ないようです。'docker context use rootless' を試してみてください。", + "Using rootless driver was required, but the current driver does not seem rootless": "rootless ドライバー使用が必要でしたが、現在のドライバーは rootless が必要ないようです", + "Using rootless {{.driver_name}} driver": "rootless {{.driver_name}} ドライバー使用", + "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "' none' ドライバーでの '{{.runtime}}' ランタイム使用は、未テストの設定です!", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "", + "Using the {{.driver}} driver based on existing profile": "既存のプロファイルを元に、{{.driver}} ドライバーを使用します", + "Using the {{.driver}} driver based on user configuration": "ユーザーの設定に基づいて {{.driver}} ドライバーを使用します", + "Using {{.driver_name}} driver with root privileges": "root 権限を持つ {{.driver_name}} ドライバーを使用", + "Valid components are: {{.valid_extra_opts}}": "有効なコンポーネント: {{.valid_extra_opts}}", + "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "virt-host-validate 実行後に virsh net-list --all を実行して KVM ネットワークを検証してください", + "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "HTTP_PROXY と HTTPS_PROXY 環境変数が正しく設定されているかを確認してください。", "Verifying Kubernetes components...": "Kubernetes コンポーネントを検証しています...", - "Verifying dashboard health ...": "ダッシュボードの状態を確認しています...", - "Verifying proxy health ...": "プロキシの状態を確認しています...", - "Verifying {{.addon_name}} addon...": "{{.addon_name}} アドオンを検証中です...", + "Verifying dashboard health ...": "ダッシュボードの状態を検証しています...", + "Verifying proxy health ...": "プロキシーの状態を検証しています...", + "Verifying {{.addon_name}} addon...": "{{.addon_name}} アドオンを検証しています...", "Version: {{.version}}": "バージョン: {{.version}}", - "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "VirtualBox と Hyper-V が衝突しています。「 --driver=hyperv 」を使用するか、以下のコマンドで Hyper-V を無効にしてください。 bcdedit /set hypervisorlaunchtype off", - "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "VirtualBox がネットワークを作成できません。おそらく minikube が把握していないネットワークと衝突しています。「 minikube delete 」を実行してみてください", - "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "VirtualBox が故障しています。アンチウィルスソフトを無効にして、リブートしてください。もし問題が続くようであれば、 VirtualBox を再インストールしてください", - "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "VirtualBox が故障しています。 VirtualBox を再インストールして、リブートした後に、「 minikube delete 」を実行してください", - "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "VirtualBox はネットワークインターフェイスを見つけることができません。最新のリリースへとアップデートして、リブートしてみてください", - "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "このコンピュータでは仮想化のサポートが無効化されています。もし VM で minikube を動かすのであれば、「 --driver=docker 」を試してみてください。そうでなければ、仮想化を有効にする方法を BIOS の説明書を調べてください", - "Wait failed: {{.error}}": "待機するのに失敗しました。{{.error}}", - "Wait until Kubernetes core services are healthy before exiting": "Kubernetes コアサービスが正常になるまで待機してから終了してください", - "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", - "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "NFS 共有のルートに指定する場所。デフォルトは /nfsshares(hyperkit ドライバのみ)", - "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "仮想スイッチが明示的に設定されていない場合、デフォルトのではなく外部のスイッチを使用します。(Hyper-V ドライバのみ)", - "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", - "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", - "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see {{.documentation_url}} for more details": "プロキシを使用しようとしていますが、現在の NO_PROXY 環境に minikube IP({{.ip_address}})は含まれていません。詳細については、{{.documentation_url}} をご覧ください", - "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", - "You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "", - "You can also use 'minikube kubectl -- get pods' to invoke a matching version": "「 minikube kubectl -- get pods 」で、一致するバージョンを表示することができます", - "You can delete them using the following command(s):": "以下のコマンドで削除することができます", - "You can delete them using the following command(s): ": "", - "You can force an unsupported Kubernetes version via the --force flag": "", - "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", - "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", - "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", - "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "ハイパーバイザから「{{.name}}」VM を手動で削除することが必要な可能性があります", - "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "Hyper-V マネージャを停止して、「 minikube delete 」を再実行する必要があるかもしれません ", - "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "", - "You must specify a service name": "サービスの名前を明示する必要があります", - "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", - "Your cgroup does not allow setting memory.": "", - "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "ホストマシーンは KVM 仮想化をサポートしていません。 qemu-kvm がインストールされていることを確認してください。「 virt-host-validate 」を実行して、デバッグしてください", - "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "ホストマシーンは仮想化をサポートしていません。もし VM 内で minikube を動かすのであれば、「 --driver=docker 」を試してください。そうでなければ、 BIOS で仮想化を有効にしてください", - "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "ホストマシーンが minikube の VM にパケットをルーティングすることができていません。もし VPN を有効しているのであれば、VPN を無効にする、あるいは VM の IP アドレスに再ルーティングしないように設定してください。もし VPN を使用していないのであれば、 VM 環境のルーティング周りのオプションを確認してください", - "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "今の minikube の設定はサポートされていないドライバーを参照しています。 ~/.minikube を削除して、もう一度試してください", - "Your minikube vm is not running, try minikube start.": "minikube の VM が動いていません。以下のコマンドを試してみてください。 minikube start", - "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", - "[{{.id}}] {{.msg}} {{.error}}": "[{{.id}}] {{.msg}} {{.error}}", - "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "", - "adding node": "ノードを追加しています", - "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "「 {{.name}} 」アドオンは現在無効になっています。\n有効にするためには、以下のコマンドを実行してください。 \nminikube addons enable {{.name}}", - "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "「 {{.name}} 」アドオンは minikube では有効なアドオンではありません。\n利用可能なアドオンの一覧を表示するためには、以下のコマンドを実行してください。 \nminikube addons list", - "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "addons では以下のようにサブコマンドを使用することで、 minikube のアドオンのファイルを編集することができます。 \"minikube addons enable dashboard\"", - "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", - "bash completion failed": "bash の補完が失敗しました", - "bash completion.": "", - "call with cleanup=true to remove old tunnels": "cleanup=true で呼び出すことで、古い tunnel を削除することができます", - "cancel any existing scheduled stop requests": "", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm\"\nConfigurable fields:\\n\\n": "config では以下のようにサブコマンドを使用して、minikube の設定ファイルを編集することができます。 \"minikube config set driver kvm\"\n設定可能なフィールドは以下です。\\n\\n", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", - "config view failed": "設定を表示するのに失敗しました", - "containers paused status: {{.paused}}": "", - "dashboard service is not running: {{.error}}": "ダッシュボードのサービスが動いていません。 {{.error}}", - "delete ctx": "", + "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "VirtualBox と Hyper-V が衝突しています。'--driver=hyperv' を使用するか、次のコマンドで Hyper-V を無効にしてください: 'bcdedit /set hypervisorlaunchtype off'", + "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "VirtualBox がネットワークを作成できません。おそらく minikube が最早把握していない既存ネットワークと衝突しています。'minikube delete' を実行してみてください", + "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "VirtualBox が故障しています。問題が解決しない場合、リアルタイムのアンチウィルスソフトを無効化し、OS を再起動して、VirtualBox を再インストールしてください。", + "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "VirtualBox が故障しています。 VirtualBox を再インストールして OS を再起動し、'minikube delete' を実行してください。", + "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "VirtualBox はネットワークインターフェイスを検出できません。最新版にアップデートして、OS を再起動してみてください。", + "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "このコンピューターでは仮想化サポートが無効です。VM 内で minikube を実行する場合、'--driver=docker' を試してみてください。そうでなければ、仮想化を有効化する方法を BIOS の説明書を調べてください。", + "Wait failed: {{.error}}": "待機に失敗しました: {{.error}}", + "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "kubectl {{.version}} が必要ですか? 'minikube kubectl -- get pods -A' を試してみてください", + "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "NFS 共有のルートに指定する場所。デフォルトは /nfsshares (hyperkit ドライバーのみ)", + "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "仮想スイッチが明示的に設定されていない場合、Default Switch 越しに外部のスイッチを使用するかどうか (Hyper-V ドライバーのみ)。", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", + "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "--network-plugin=cni を用いる場合、自身の CNI を提供する必要があります。便利な代替策として --cni フラグを参照してください", + "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "プロキシーを使用しようとしていますが、minikube の IP ({{.ip_address}}) が NO_PROXY 環境変数に含まれていません。", + "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "WSL 内で Windows の .exe バイナリーを実行しようとしています。これより優れた統合として、Linux バイナリーを代わりに使用してください (https://minikube.sigs.k8s.io/docs/start/ でダウンロードしてください)。そうではなく、引き続きこのバイナリーを使用したい場合、--force オプションを使用してください", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "M1 システム上で amd64 バイナリーを実行しようとしています。\ndarwin/arm64 バイナリーを代わりに実行することをご検討ください。\n{{.url}} でダウンロードしてください。", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "独立したネットワークなしで QEMU ドライバーを使用しています。これは `minikube service` \u0026 `minikube tunnel` コマンドをサポートしていません。", + "You can create one using 'minikube start'.\n\t\t": "'minikube start' を使って新しいものを作成できます。\n\t\t", + "You can delete them using the following command(s): ": "次のコマンドで削除できます: ", + "You can force an unsupported Kubernetes version via the --force flag": "--force フラグを介して、サポート外の Kubernetes バージョンを強制的に使用できます", + "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "既存の minikube クラスターに対して、外部ディスクを追加または削除できません。最初にクラスターを削除してください。", + "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "既存の minikube クラスターに対して、CPU を変更できません。最初にクラスターを削除してください。", + "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "既存の minikube クラスターに対して、ディスクサイズを変更できません。最初にクラスターを削除してください。", + "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "既存の minikube クラスターに対して、メモリサイズを変更できません。最初にクラスターを削除してください。", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "既存の minikube クラスターに対して、静的 IP を変更できません。最初にクラスターを削除してください。", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "クラスター上で Kubernetes なしでアドオンを有効にすることはできません、クラスター上で Kubernetes を有効にするには、 minikube start --kubernetes-version=stable を実行してください", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "関連する JSON ファイルがないサービスアカウントで認証しています。GCP Auth アドオンは、作業を続行するために JSON ファイル付きクレデンシャルを要求します。", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue. The image pull secret has been imported.": "関連する JSON ファイルがないサービスアカウントで認証しています。GCP Auth アドオンは、作業を続行するために JSON ファイル付きクレデンシャルを要求します。イメージ取得シークレットがインポートされました。", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "CNI 無効が選択されましたが、「{{.name}}」コンテナランタイムは CNI が必要です", + "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "「virtualbox」ドライバーが選択されましたが、より良い選択肢があります!\n性能と機能の向上のため、別のドライバー使用を検討してください: {{.drivers}}\n\nこの警告を表示させないためには、以下を実行してください:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nminikube ドライバーについてもっと知るためには、https://minikube.sigs.k8s.io/docs/drivers/ を確認してください。\nベンチマークについては https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/ を確認してください\n\n", + "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "ハイパーバイザーから「{{.name}}」VM を手動で削除することが必要かもしれません", + "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "Hyper-V マネージャーを停止して、'minikube delete' を再度実行する必要があるかもしれません。", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "Apple シリコンの Mac 上で amd64 版 minikube を使用しているかもしれません。代わりに arm64 版 minikube を使用してください", + "You must specify service name(s) or --all": "サービス名か --all を指定する必要があります", + "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "あなたの GCP クレデンシャルは、{{.name}} クラスターに作成された各 Pod にマウントされます。", + "Your cgroup does not allow setting memory.": "あなたの cgroup ではメモリーの設定ができません。", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "", + "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "ホストが KVM 仮想化をサポートしていません。 qemu-kvm がインストールされていることを確認し、'virt-host-validate' を実行して問題を調査してください", + "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "ホストが仮想化をサポートしていません。VM 内で minikube を動かしている場合、'--driver=docker' を試してください。そうでなければ、 BIOS で仮想化を有効化してください", + "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "ホストが minikube の VM へのパケットルーティングに失敗しています。VPN ソフトウェアがある場合、VPN を無効にするか、VM の IP アドレスにトラフィックを再ルーティングしないように VPN を設定してください。VPN ソフトウェアがない場合、VM 環境のルーティングオプションを確認してください。", + "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "minikube 設定がサポートされていないドライバーを参照しています。 ~/.minikube を削除して、もう一度試してください。", + "Your minikube vm is not running, try minikube start.": "minikube の VM が実行されていません。minikube start を試してみてください。", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "アカウントが minikube プロファイルディレクトリーへの書き込み権限を持っていません。問題修正のため、'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' を実行してください", + "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "[警告] フル機能のために、'csi-hostpath-driver' アドオンが 'volumesnapshots' アドオンの有効化を要求しています。\n\n'minikube addons enable volumesnapshots' を実行して 'volumesnapshots' を有効化できます\n", + "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "'{{.name}}' アドオンは現在無効になっています。\n有効にするためには、以下のコマンドを実行してください。 \nminikube addons enable {{.name}}", + "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "'{{.name}}' は minikube にパッケージングされた有効なアドオンではありません。\n利用可能なアドオンの一覧を表示するためには、以下のコマンドを実行してください。 \nminikube addons list", + "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "addons コマンドは「minikube addons enable dashboard」のようなサブコマンドを使用することで、minikube アドオンファイルを修正します", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "arm64 VM ドライバーは現在、crio コンテナーランタイムをサポートしていません。 詳細については、https://github.com/kubernetes/minikube/issues/14146 を参照してください", + "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "auto-pause アドオンはアルファ機能で、まだ開発の初期段階です。auto-pause アドオン改善の手助けのために、問題は報告してください。", + "bash completion failed": "bash のコマンド補完に失敗しました", + "bash completion.": "bash のコマンド補完です。", + "call with cleanup=true to remove old tunnels": "cleanup=true で呼び出すことで、古いトンネルを削除してください", + "cancel any existing scheduled stop requests": "既存のスケジュール済み停止要求をキャンセルしてください", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "--kubernetes-version と --no-kubernetes を同時に指定できません。\nグローバル設定を解除するコマンド:\n\n$ minikube config unset kubernetes-version", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "config コマンドは「minikube config set driver kvm2」のようにサブコマンドを使用して、minikube 設定ファイルを編集します。 \n設定可能なフィールド:\n\n", + "config view failed": "設定表示が失敗しました", + "containers paused status: {{.paused}}": "コンテナー停止状態: {{.paused}}", + "dashboard": "ダッシュボード", + "dashboard service is not running: {{.error}}": "ダッシュボードサービスが実行していません: {{.error}}", + "delete ctx": "ctx を削除します", "deleting node": "ノードを削除しています", - "disable failed": "無効にするのに失敗しました", - "dry-run mode. Validates configuration, but does not mutate system state": "dry-run モードです。設定は検証しますが、実際にシステムの状態を変更することはしません", - "dry-run validation complete!": "dry-run の検証が終了しました", - "enable failed": "有効にするのに失敗しました", - "error creating clientset": "Clientset を作成する際にエラーが発生しました", - "error getting primary control plane": "コントロールプレーンを取得する際にエラーが発生しました", - "error getting ssh port": "SSH のポートを取得する際にエラーが発生しました", - "error initializing tracing: {{.Error}}": "", - "error parsing the input ip address for mount": "マウント用の入力された IP アドレスをパースする際にエラーが発生しました", - "error provisioning guest": "", - "error starting tunnel": "tunnel を開始する際にエラーが発生しました", - "error stopping tunnel": "tunnel を停止する際にエラーが発生しました", - "error: --output must be 'yaml' or 'json'": "エラーです。 --output は「 yaml 」、あるいは「 json 」である必要があります", - "experimental": "", - "failed to add node": "", - "failed to open browser: {{.error}}": "ブラウザを起動するのに失敗しました。 {{.error}}", - "failed to save config": "", - "failed to start node": "", - "fish completion failed": "", - "fish completion.": "", - "if true, will embed the certs in kubeconfig.": "有効であれば、Kubernetes の設定ファイルに証明書を埋め込みます", - "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "minikube のプロフィールを作成する場合は、以下のコマンドで作成できます。 minikube start -p {{.profile_name}}", - "initialization failed, will try again: {{.error}}": "初期化が失敗しました。再施行します。 {{.error}}", - "invalid kubernetes version": "", - "keep the kube-context active after cluster is stopped. Defaults to false.": "", - "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm が他のプロセス(おそらくローカルでの他の Kubernetes をインストールするプロセス)との TCP ポートでの衝突を検知しました。 lsof -p\u003cport\u003e を実行して、そのプロセスを Kill してください", + "disable failed": "無効化に失敗しました", + "dry-run mode. Validates configuration, but does not mutate system state": "dry-run モード。設定は検証しますが、システムの状態は変更しません", + "dry-run validation complete!": "dry-run の検証が終了しました!", + "enable failed": "有効化に失敗しました", + "enabled failed": "", + "error creating clientset": "clientset 作成中にエラー", + "error creating urls": "URL 作成でエラー", + "error fetching Kubernetes version list from GitHub": "", + "error getting control-plane node": "", + "error getting defaults: {{.error}}": "デフォルト取得中にエラー: {{.error}}", + "error getting primary control plane": "最初のコントロールプレーン取得中にエラー", + "error getting ssh port": "SSH ポートを取得中にエラー", + "error initializing tracing: {{.Error}}": "トレーシング初期化中にエラー: {{.Error}}", + "error parsing the input ip address for mount": "マウント用に入力された IP アドレスをパース中にエラー", + "error provisioning guest": "ゲストのプロビジョン中にエラー", + "error starting tunnel": "トンネル開始中にエラー", + "error: --output must be 'text', 'yaml' or 'json'": "エラー: --output は 'text'、'yaml'、'json' のいずれかでなければなりません", + "error: --output must be 'yaml' or 'json'": "エラー: --output は 'yaml'、'json' のいずれかでなければなりません", + "experimental": "実験的", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "予期せぬエラーによりロックの取得に失敗しました", + "failed to add node": "ノード追加に失敗しました", + "failed to load profile: {{.error}}": "", + "failed to open browser: {{.error}}": "ブラウザー起動に失敗しました: {{.error}}", + "failed to restart auto-pause: {{.error}}": "", + "failed to save config": "設定保存に失敗しました", + "failed to set extra option": "追加オプションの設定に失敗しました", + "failed to start node": "ノード開始に失敗しました", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "", + "fish completion failed": "fish のコマンド補完に失敗しました", + "fish completion.": "fish のコマンド補完です。", + "if true, will embed the certs in kubeconfig.": "true の場合、kubeconfig に証明書を埋め込みます。", + "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "プロファイルを作成したい場合、次のコマンドで作成できます: minikube start -p {{.profile_name}}", + "initialization failed, will try again: {{.error}}": "初期化に失敗しました。再試行します: {{.error}}", + "invalid kubernetes version": "無効な Kubernetes バージョン", + "ip not found": "", + "json encoding failure": "json エンコード失敗", + "keep the kube-context active after cluster is stopped. Defaults to false.": "クラスター停止後に kube-context をアクティブのままにします。デフォルトは false です。", + "kubeadm certificates have expired. Generating new ones...": "", + "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm が他のプロセス (おそらくローカルにインストールされた他の Kubernetes) との TCP ポート衝突を検出しました。 lsof -p\u003cport\u003e を実行してそのプロセスを特定し、停止してください", "kubectl and minikube configuration will be stored in {{.home_folder}}": "kubectl と minikube の構成は {{.home_folder}} に保存されます", - "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "", - "kubectl proxy": "kubectl proxy", + "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl が見つかりません。kubectl が必要な場合、'minikube kubectl -- get pods -A' を試してください", + "kubectl proxy": "kubectl プロキシー", "libmachine failed": "libmachine が失敗しました", - "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "", - "list versions of all components included with minikube. (the cluster must be running)": "", - "loading profile": "", - "logdir set failed": "logdir の値を設定するのに失敗しました", - "max time to wait per Kubernetes core services to be healthy.": "Kubernetes の core サービスが正常に稼働するまで待つ最大時間", - "max time to wait per Kubernetes or host to be healthy.": "", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "PROPERTY_NAME 用の有効なデフォルト設定を全て表示します。\n受け入れ可能なフィールド:\n\n", + "list versions of all components included with minikube. (the cluster must be running)": "minikube に含まれる全コンポーネントのバージョン一覧を出力します (クラスターが実行中でなければなりません)。", + "loading profile": "プロファイルを読み込み中", + "max time to wait per Kubernetes or host to be healthy.": "Kubernetes またはホストが正常稼働するまでの最大待機時間", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", "minikube addons list --output OUTPUT. json, list": "minikube addons list --output OUTPUT. json, list", - "minikube is exiting due to an error. If the above message is not useful, open an issue:": "minikube がエラーで終了しました。もし上のメッセージが不十分であれば、Issue を作成してください", - "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", - "minikube is not meant for production use. You are opening non-local traffic": "", - "minikube is not yet compatible with ChromeOS": "minikube はまだ ChromeOS と互換性がありません", - "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "minikube が Google Container Registry に接続できません。 HTTP プロキシを使用するように設定する必要があるかもしれません", - "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check": "minikube が VM に接続できませんでした。 {{.error}}\n\n\t考えられる理由は以下の二つです。\n\n\t- VPN 、あるいはファイアウォールによる干渉\n\t- {{.hypervisor}} のネットワークの設定での問題\n\n\t迂回策には以下があります。\n\n\t- ローカルの VPN 、あるいはファイアウォールを無効にする\n\t- {{.ip}} へのアクセスを許可するようにローカルの VPN 、あるいはファイアウォールを設定する\n\t- {{.hypervisor}} を再起動、あるいは再インストールする\n\t- 別の VM ドライバーを使用する\n\t- --force を使用してこの接続チェックを上書きする", - "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", - "minikube profile was successfully set to {{.profile_name}}": "{{.profile_name}} の値が minikube のプロフィールに正常に設定されました", - "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube は、開発ワークフロー用に最適化されたローカル Kubernetes クラスタをプロビジョンおよび管理します。", - "minikube quickly sets up a local Kubernetes cluster": "", - "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "minikube はまだ BTRFS ストレージドライバーに対応していませんが、回避策があります。次のフラグを start コマンドに追加してください: `--feature-gates=\"LocalStorageCapacityIsolation=false\"` ", + "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "minikube はあなたのゲスト環境に関連するファイルを見失いました。これは 'minikube delete' を実行することで修正できます", + "minikube is not meant for production use. You are opening non-local traffic": "minikube は本番適用を意図されたものではありません。あなたは非ローカルのトラフィックを開こうとしています", + "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "minikube が Google Container Registry に接続できません。 HTTP プロキシーを使用するように設定する必要があるかもしれません。", + "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "minikube が VM に接続できません: {{.error}}\n\n\t考えられる理由は以下の 2 つです:\n\n\t- VPN またはファイアウォールによる干渉\n\t- {{.hypervisor}} のネットワーク設定の問題\n\n\t回避策には以下があります:\n\n\t- ローカルの VPN またはファイアウォールを無効化\n\t- {{.ip}} へのアクセスを許可するようにローカルの VPN またはファイアウォールを設定\n\t- {{.hypervisor}} を再起動または再インストール\n\t- 代わりの --vm-driver を使用\n\t- --force を使用してこの接続チェックを上書き\n\t", + "minikube mount is not currently implemented with the builtin network on QEMU": "minikube mount は、QEMU 上のビルトインネットワークでは実装されていません", + "minikube mount is not currently implemented with the user network on QEMU": "minikube mount は、QEMU 上のユーザーネットワークでは実装されていません", + "minikube profile was successfully set to {{.profile_name}}": "無事 minikube のプロファイルが {{.profile_name}} に設定されました", + "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube は、開発ワークフロー用に最適化されたローカル Kubernetes クラスターを構築・管理します。", + "minikube quickly sets up a local Kubernetes cluster": "minikube はローカル Kubernetes クラスターを迅速にセットアップします", + "minikube service is not currently implemented with the builtin network on QEMU": "minikube サービスは現在、QEMU 上のビルトインネットワークでは実装されていません", + "minikube service is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "minikube サービスは現在、qemu2 ドライバーでは実装されていません。詳細については、https://github.com/kubernetes/minikube/issues/14146 を参照してください。", + "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "minikube は --force が付与された場合、様々な検証をスキップします (これは予期せぬ挙動を引き起こすかも知れません)", "minikube status --output OUTPUT. json, text": "minikube status --output OUTPUT. json, text", - "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} が利用可能です! 以下のURLでダウンロードできます。 {{.url}}", - "mkcmp is used to compare performance of two minikube binaries": "mkcmp で二つの minikube のバイナリのパフォーマンスを比較することができます", - "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "mount への引数 \"{{.value}}\" は以下のフォーマットである必要があります。\u003cソースディレクトリ\u003e:\u003cターゲットディレクトリ\u003e", - "mount could not connect": "", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "minikube トンネルは現在、QEMU 上のビルトインネットワークでは実装されていません", + "minikube tunnel is not currently implemented with the qemu2 driver. See https://github.com/kubernetes/minikube/issues/14146 for details.": "minikube トンネルは現在、qemu2 ドライバーでは実装されていません。 詳細については、https://github.com/kubernetes/minikube/issues/14146 を参照してください。", + "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} が利用可能です!次の URL からダウンロードしてください: {{.url}}", + "mkcmp is used to compare performance of two minikube binaries": "mkcmp で 2 つの minikube のバイナリーのパフォーマンスを比較できます", + "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "マウント引数「{{.value}}」は次の形式でなければなりません: \u003cソースディレクトリー\u003e:\u003cターゲットディレクトリー\u003e", + "mount could not connect": "マウントは接続できませんでした", "mount failed": "マウントが失敗しました", "namespaces to pause": "停止する名前空間", "namespaces to unpause": "停止を解除する名前空間", - "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "", - "none driver does not support multi-node clusters": "マルチクラスタをサポートしているドライバーがありません", - "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "引数({{.ArgCount}})が少なすぎます。\\n使用方法: minikube config set PROPERTY_NAME PROPERTY_VALUE", - "numa node is only supported on k8s v1.18 and later": "", - "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", + "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "minikube を実行するネットワーク。現時点では docker/podman と KVM ドライバーで使用されます。空の場合、minikube は新しいネットワークを作成します。", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", + "none driver does not support multi-node clusters": "none ドライバーはマルチノードクラスターをサポートしていません", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "引数 ({{.ArgCount}}) が不十分です。\n使用方法: minikube config set PROPERTY_NAME PROPERTY_VALUE", + "numa node is only supported on k8s v1.18 and later": "NUMA ノードは k8s v1.18 以降でのみサポートされます", + "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "出力形式 (実験的、JSON のみ): 'nodes' または 'cluster'", "pause Kubernetes": "Kubernetes を一時停止させます", - "pause containers": "コンテナを一時停止させます", - "preload extraction failed: \\\"No space left on device\\\"": "", - "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "profile で現在の minikube のプロフィールの値を設定することができます。profil に引数を渡さなければ、現在のプロフィールを見ることができます。このコマンドは複数の minikube インスタンスを管理するのに使用されます。「 minikube profile default 」で minikube のデフォルトのプロフィールを見ることができます", - "provisioning host for node": "", - "reload cached images.": "キャッシュしていたイメージから再読み込みをします", - "reloads images previously added using the 'cache add' subcommand": "", + "powershell completion failed": "", + "powershell completion.": "", + "preload extraction failed: \"No space left on device\"": "プリロードの展開に失敗しました: 「デバイスに空きスペースがありません」", + "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "profile は現在の minikube プロファイルを設定します (profile に引数を指定しない場合、現在のプロファイルを取得します)。このコマンドは複数の minikube インスタンスを管理するのに使用されます。`minikube profile default` でデフォルトの minikube プロファイルを返します", + "provisioning host for node": "ノード用ホストの構築中", + "reload cached images.": "登録済のイメージを再登録します。", + "reloads images previously added using the 'cache add' subcommand": "以前 'cache add' サブコマンドを用いて登録されたイメージを再登録します", "retrieving node": "ノードを取得しています", - "saving node": "ノードを保存しています", - "scheduled stop is not supported on the none driver, skipping scheduling": "", - "service {{.namespace_name}}/{{.service_name}} has no node port": "サービス {{.namespace_name}}/{{.service_name}} は NodePort を持っていません", - "startup failed": "起動に失敗しました", - "stat failed": "stat が失敗しました", - "status json failure": "ステータスは JSON エラーです", - "status text failure": "ステータスはテキストエラーです", - "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "引数の数({{.ArgCount}})が多すぎます。\\n使用方法: minikube config set PROPERTY_NAME PROPERTY_VALUE", - "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "tunnel によってタイプが LoadBalancer なサービスへのルーティングが作成され、Ingress をサービスの ClusterIP へと向けさせます。より詳細な例は以下を参照してください。https://minikube.sigs.k8s.io/docs/tasks/loadbalancer", - "tunnel makes services of type LoadBalancer accessible on localhost": "tunnel によってタイプが LoadBalancer なサービスが localhost からアクセス可能になります", - "unable to bind flags": "フラグをバインドすることができませんでした", - "unable to daemonize: {{.err}}": "", - "unable to delete minikube config folder": "minikube の設定フォルダーを削除できませんでした", - "unable to set logtostderr": "logtostderr を設定することができませんでした", - "unpause Kubernetes": "Kubernetes を再開させます", - "unset failed": "取り消しが失敗しました", - "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "minikube の設定ファイルから PROPERTY_NAME の値を取り消します。フラグ、あるいは環境変数で上書き可能です", - "unsets an individual value in a minikube config file": "minikube の設定ファイルの個々の値を取り消します", - "unsupported or missing driver: {{.name}}": "サポートしていない、あるいは不足しているドライバーです: {{.name}}", + "scheduled stop is not supported on the none driver, skipping scheduling": "none ドライバーでは予定停止がサポートされていません (予約をスキップします)", + "service not available": "", + "service {{.namespace_name}}/{{.service_name}} has no node port": "サービス {{.namespace_name}}/{{.service_name}} は NodePort がありません", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "トンネル バインド アドレスを設定します。空または '*' は、トンネルがすべてのインターフェイスで使用可能であることを示します", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "", + "stat failed": "stat に失敗しました", + "status json failure": "status json に失敗しました", + "status text failure": "status text に失敗しました", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "引数 ({{.ArgCount}} 個) が多すぎます。\n使用法: minikube config set PROPERTY_NAME PROPERTY_VALUE", + "true": "", + "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "tunnel は LoadBalancer タイプで作成されたサービスへのルートを作成し、Ingress をサービスの ClusterIP に設定します。詳細例は https://minikube.sigs.k8s.io/docs/tasks/loadbalancer を参照してください", + "unable to bind flags": "フラグをバインドできません", + "unable to daemonize: {{.err}}": "デーモン化できません: {{.err}}", + "unable to delete minikube config folder": "minikube の設定フォルダーを削除できません", + "unpause Kubernetes": "Kubernetes を停止解除します", + "unset failed": "unset に失敗しました", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "minikube 設定ファイルから PROPERTY_NAME の設定を解除します。フラグまたは環境変数で上書き可能です", + "unsets an individual value in a minikube config file": "minikube 設定ファイルの個々の設定を解除します", + "unsupported or missing driver: {{.name}}": "未サポートのドライバーか、ドライバーが見あたりません: {{.name}}", "update config": "設定を更新します", - "usage: minikube addons configure ADDON_NAME": "使用方法: minikube addons configure ADDON_NAME", - "usage: minikube addons disable ADDON_NAME": "使用方法: minikube addons disable ADDON_NAME", - "usage: minikube addons enable ADDON_NAME": "使用方法: minikube addons enable ADDON_NAME", - "usage: minikube addons images ADDON_NAME": "", - "usage: minikube addons list": "使用方法: minikube addons list", - "usage: minikube addons open ADDON_NAME": "使用方法: minikube addons open ADDON_NAME", - "usage: minikube config unset PROPERTY_NAME": "使用方法: minikube config unset PROPERTY_NAME", - "usage: minikube delete": "使用方法: minikube delete", - "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "使用方法: minikube profile [MINIKUBE_PROFILE_NAME]", - "using metrics-server addon, heapster is deprecated": "", - "version json failure": "JSON でバージョンを表示するのに失敗しました", - "version yaml failure": "YAML でバージョンを表示するのに失敗しました", - "zsh completion failed": "zsh の補完が失敗しました", - "zsh completion.": "", - "{{ .name }}: Suggestion: {{ .suggestion}}": "", - "{{ .name }}: {{ .rejection }}": "{{ .name }}: {{ .rejection }}", - "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", - "{{.cluster}} IP has been updated to point at {{.ip}}": "{{.cluster}} の IP アドレスは {{.ip}} へと更新されました", - "{{.cluster}} IP was already correctly configured for {{.ip}}": "{{.cluster}} の IP アドレスは {{.ip}} としてすでに正常に設定されています", - "{{.count}} nodes stopped.": "{{.count}}台のノードが停止しました。", + "usage: minikube addons configure ADDON_NAME": "使用法: minikube addons configure ADDON_NAME", + "usage: minikube addons disable ADDON_NAME": "使用法: minikube addons disable ADDON_NAME", + "usage: minikube addons enable ADDON_NAME": "使用法: minikube addons enable ADDON_NAME", + "usage: minikube addons images ADDON_NAME": "使用法: minikube addons images ADDON_NAME", + "usage: minikube addons list": "使用法: minikube addons list", + "usage: minikube addons open ADDON_NAME": "使用法: minikube addons open ADDON_NAME", + "usage: minikube config list PROPERTY_NAME": "使用法: minikube config list PROPERTY_NAME", + "usage: minikube config unset PROPERTY_NAME": "使用法: minikube config unset PROPERTY_NAME", + "usage: minikube delete": "使用法: minikube delete", + "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "使用法: minikube profile [MINIKUBE_PROFILE_NAME]", + "using metrics-server addon, heapster is deprecated": "metrics-server アドオンを使用します (heapster は廃止予定です)", + "version json failure": "JSON 形式のバージョン表示に失敗しました", + "version yaml failure": "YAML 形式のバージョン表示に失敗しました", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "YAML エンコードに失敗しました", + "zsh completion failed": "zsh のコマンド補完に失敗しました", + "zsh completion.": "zsh のコマンド補完です。", + "{{ .name }}: Suggestion: {{ .suggestion}}": "{{ .name }}: 提案: {{ .suggestion}}", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "{{.Driver}} は現在 {{.StorageDriver}} ストレージドライバーを使用しています。性能向上のため overlay2 への切替を検討してください", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "", + "{{.addon}} does not currently have an associated maintainer.": "", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "{{.count}} 台のノードが停止しました。", "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "{{.driver_name}} 「 {{.cluster}} 」 {{.machine_type}} がありません。再生成します。", - "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", - "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", - "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", - "{{.driver}} does not appear to be installed": "{{.driver}} がインストールされていないようです", - "{{.driver}} does not appear to be installed, but is specified by an existing profile. Please run 'minikube delete' or install {{.driver}}": "{{.driver}} がインストールされていないようですが、既存のプロフィールから指定されています。「 minikube delete 」を実行、あるいは {{.driver}} をインストールしてください", - "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "{{.extra_option_component_name}}.{{.key}}={{.value}}", - "{{.name}} doesn't have images.": "", - "{{.name}} has following images:": "", - "{{.name}} has no available configuration options": "{{.name}} には利用可能なオプションがありません", - "{{.name}} is already running": "{{.name}} はすでに起動しています", + "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "{{.driver_name}} サービスが正常ではないため、{{.driver_name}} は機能しません。", + "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "{{.driver_name}} で利用できる CPU が 2 個未満ですが、Kubernetes を使用するには 2 個以上の CPU が必要です", + "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "{{.driver_name}} は {{.container_limit}}MB のメモリーしか使用できませんが、{{.specified_memory}}MB のメモリー使用を指定されました", + "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "{{.driver}} は Kubernetes に必要な {{.req}}MiB 未満の {{.size}}MiB しか使用できません", + "{{.env}}={{.value}}": "", + "{{.name}} doesn't have images.": "{{.name}} はイメージがありません。", + "{{.name}} has following images:": "{{.name}} は次のイメージがあります:", + "{{.name}} has no available configuration options": "{{.name}} には利用可能な設定オプションがありません", + "{{.name}} has the following images:": "", + "{{.name}} is already running": "{{.name}} はすでに実行中です", "{{.name}} was successfully configured": "{{.name}} は正常に設定されました", - "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "", - "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "", - "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "", - "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "", - "{{.path}} is v{{.client_version}}, which may be incompatible with Kubernetes v{{.cluster_version}}.": "{{.path}} のバージョンは {{.client_version}}です。 {{.cluster_version}} の Kubernetes とは互換性がないかもしれません", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} はほとんどディスクがいっぱいで、デプロイが失敗する原因になりかねません!(容量の {{.p}}%)。'--force' を指定するとこのチェックをスキップできます。", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} はディスクがいっぱいです!(/var は容量の {{.p}}% です)。'--force' を指定するとこのチェックをスキップできます。", + "{{.ociBin}} rmi {{.images}}": "", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} の反応が異常なほど長時間かかっています。{{.ocibin}} の再起動を検討してください", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "{{.path}} のバージョンは {{.client_version}} で、Kubernetes {{.cluster_version}} と互換性がないかもしれません。", "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.platform}} 上の {{.prefix}}minikube {{.version}}", - "{{.profile}} profile is not valid: {{.err}}": "", - "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} はまだサポートされていなファイルシステムです。とにかくやってみます!", - "{{.url}} is not accessible: {{.error}}": "{{.url}} はアクセス可能ではありません。 {{.error}}" -} \ No newline at end of file + "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} プロファイルは無効です: {{.err}}", + "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} は未サポートのファイルシステムです。とにかくやってみます!", + "{{.url}} is not accessible: {{.error}}": "{{.url}} にアクセスできません: {{.error}}" +} diff --git a/translations/ko.json b/translations/ko.json index 312446022d03..26565d6f3245 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -1,10 +1,13 @@ { - "\"The '{{.minikube_addon}}' addon is disabled": "\"The '{{.minikube_addon}}' 이 비활성화되었습니다", - "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "\"{{.context}}\" 컨텍스트가 {{.hostname}}:{{.port}}로 갱신되었습니다.", + "\n\n": "\n\n", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "'{{.minikube_addon}}'은 유효한 minikube 애드온이 아닙니다", + "\"The '{{.minikube_addon}}' addon is disabled": "\"'{{.minikube_addon}}' 이 비활성화되었습니다", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\"는 추후 버전에서 사용 중단됩니다. \"minikube image load\"로 전환하세요", + "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "\"{{.context}}\" 컨텍스트가 {{.hostname}}:{{.port}}로 갱신되었습니다", "\"{{.machineName}}\" does not exist, nothing to stop": "\"{{.machineName}}\" 이 존재하지 않아, 중단할 것이 없습니다", "\"{{.name}}\" profile does not exist": "\"{{.name}}\" 프로필이 존재하지 않습니다", - "\"{{.name}}\" profile does not exist, trying anyways.": "\"{{.name}}\" 프로필이 존재하지 않습니다, 그럼에도 불구하고 시도합니다", - "\"{{.node_name}}\" stopped.": "\"{{.node_name}}\" 이 중단되었습니다", + "\"{{.name}}\" profile does not exist, trying anyways.": "\"{{.name}}\" 프로필이 존재하지 않으며, 그래도 시도합니다.", + "\"{{.node_name}}\" stopped.": "\"{{.node_name}}\" 이 중단되었습니다.", "\"{{.profile_name}}\" does not exist, nothing to stop": "\"{{.profile_name}}\" 이 존재하지 않아, 중단할 것이 없습니다", "\"{{.profile_name}}\" host does not exist, unable to show an IP": "\"{{.profile_name}}\" 호스트가 존재하지 않아, IP 를 조회할 수 없습니다", "'none' driver does not support 'minikube docker-env' command": "'none' 드라이버는 'minikube docker-env' 명령어를 지원하지 않습니다", @@ -12,164 +15,205 @@ "'none' driver does not support 'minikube podman-env' command": "'none' 드라이버는 'minikube podman-env' 명령어를 지원하지 않습니다", "'none' driver does not support 'minikube ssh' command": "'none' 드라이버는 'minikube ssh' 명령어를 지원하지 않습니다", "'none' driver does not support 'minikube ssh-host' command": "'none' 드라이버는 'minikube ssh-host' 명령어를 지원하지 않습니다", - "'{{.driver}}' driver reported an issue: {{.error}}": "'{{.driver}}' 드라이버가 다음 이슈를 기록하였습니다: {{.error}}", - "'{{.profile}}' is not running": "'{{.profile}}' 이 실행 중이지 않습니다", + "'{{.driver}}' driver reported an issue: {{.error}}": "'{{.driver}}' 드라이버가 문제를 보고했습니다: {{.error}}", + "'{{.profile}}' is not running": "'{{.profile}}' 이 실행되고 있지 않습니다", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "\n- \"minikube ssh\" 를 사용하여 minikube 의 노드에 SSH 로 접속합니다.\n- \"minikube docker-env\" 를 사용하여 docker-cli 를 minikube 내의 docker 로 지정합니다.\n- \"minikube image\" 를 사용하여 docker 없이 이미지를 빌드합니다.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "\n- \"minikube ssh\" 를 사용하여 minikube 의 노드에 SSH 로 접속합니다.\n- \"minikube image\" 를 사용하여 docker 없이 이미지를 빌드합니다.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "\n- \"minikube ssh\" 를 사용하여 minikube 의 노드에 SSH 로 접속합니다.\n- \"minikube podman-env\" 를 사용하여 podman-cli 를 minikube 내의 podman 으로 지정합니다.\n- \"minikube image\" 를 사용하여 docker 없이 이미지를 빌드합니다.", "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "minikube 클러스터를 삭제하고 재생성합니다.\n\t\tminikube를 삭제합니다.\n\t\tminikube start --driver={{.driver_name}}", "- Docs https://docs.docker.com/docker-for-mac/#resources": "- 문서: https://docs.docker.com/docker-for-mac/#resources", "- Docs https://docs.docker.com/docker-for-windows/#resources": "- 문서: https://docs.docker.com/docker-for-windows/#resources", "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "- {{.driver_name}} 데몬이 충분한 CPU/메모리 리소스에 액세스할 수 있는지 확인합니다.", - "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "", + "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "사용하지 않는 {{.driver_name}} 이미지, 볼륨, 네트워크 및 버려진 컨테이너를 정리합니다.\n\n\t\t\t\t{{.driver_name}} system prune --volumes", "- Restart your {{.driver_name}} service": "{{.driver_name}} 서비스를 다시 시작하세요", - "- {{.logPath}}": "", - "--kvm-numa-count range is 1-8": "--kvm-numa-count 범위는 1부터 8입니다", - "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", - "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", - "==\u003e Audit \u003c==": "", - "==\u003e Last Start \u003c==": "", - "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "", - "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "", - "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", - "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "", - "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", - "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", - "A set of key=value pairs that describe feature gates for alpha/experimental features.": "", + "--kvm-numa-count range is 1-8": "--kvm-numa-count 범위는 1-8 입니다", + "--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored": "--network 는 docker나 podman 에서만 유효합니다. KVM이나 Qemu 드라이버에서는 인자가 무시됩니다", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "--network는 docker나 podman, qemu, kvm, 그리고 vfkit 드라이버에서만 유효합니다. 다른 드라이버에서는 인자가 무시됩니다", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "QEMU 에서 --network 는 'builtin' 이나 'socket_vmnet' 이어야 합니다", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "vfkit에서 --network는 'nat' 이나 'vmnet-shared'이어야 합니다", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "--static-ip 는 Docker와 Podman 드라이버에서만 구현되었습니다. 인자는 무시됩니다", + "--static-ip overrides --subnet, --subnet will be ignored": "--static-ip 는 --subnet 을 재정의하기 때문에, --subnet 은 무시됩니다", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) 다음을 실행하여 Kubernetes {{.new}} 로 클러스터를 재생성합니다:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) 다음을 실행하여 Kubernetes {{.new}} 로 두 번째 클러스터를 생성합니다:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) 다음을 실행하여 Kubernetes {{.old}} 버전의 기존 클러스터를 사용합니다:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) 다음을 실행하여 Kubernetes {{.new}} 로 클러스터를 재생성합니다:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) 다음을 실행하여 Kubernetes {{.new}} 로 두 번째 클러스터를 생성합니다:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) 다음을 실행하여 Kubernetes {{.old}} 버전의 기존 클러스터를 사용합니다:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. \"Docker for Desktop\" 메뉴 아이콘을 클릭합니다\n\t\t\t2. \"Preferences\" 를 클릭합니다\n\t\t\t3. \"Resources\" 를 클릭합니다\n\t\t\t4. \"CPUs\" 슬라이더 바를 2 이상으로 늘립니다\n\t\t\t5. \"Apply \u0026 Restart\" 를 클릭합니다", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. \"Docker for Desktop\" 메뉴 아이콘을 클릭합니다\n\t\t\t2. \"Preferences\" 를 클릭합니다\n\t\t\t3. \"Resources\" 를 클릭합니다\n\t\t\t4. \"Memory\" 슬라이더 바를 {{.recommend}} 이상으로 늘립니다\n\t\t\t5. \"Apply \u0026 Restart\" 를 클릭합니다", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. 시스템 트레이의 Docker 아이콘을 클릭하여 \"Docker Desktop\" 메뉴를 엽니다\n\t\t2. \"Settings\" 를 클릭합니다\n\t\t3. \"Resources\" 를 클릭합니다\n\t\t4. \"CPUs\" 슬라이더 바를 2 이상으로 늘립니다\n\t\t5. \"Apply \u0026 Restart\" 를 클릭합니다", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. 시스템 트레이의 Docker 아이콘을 클릭하여 \"Docker Desktop\" 메뉴를 엽니다\n\t\t2. \"Settings\" 를 클릭합니다\n\t\t3. \"Resources\" 를 클릭합니다\n\t\t4. \"Memory\" 슬라이더 바를 {{.recommend}} 이상으로 늘립니다\n\t\t5. \"Apply \u0026 Restart\" 를 클릭합니다", + "==\u003e Audit \u003c==": "==\u003e 감사 \u003c==", + "==\u003e Last Start \u003c==": "==\u003e 마지막 시작 \u003c==", + "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "VPN 또는 방화벽이 minikube VM에 대한 HTTP 액세스를 방해하고 있습니다. 또는 다른 VM 드라이버를 사용해 보십시오: https://minikube.sigs.k8s.io/docs/start/", + "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "방화벽이 Docker의 minikube VM을 이미지 저장소에 연결하는 것을 차단하고 있습니다. --image-repository를 선택하거나 프록시를 사용해야 할 수도 있습니다.", + "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "방화벽이 외부로 나가는 HTTPS 요청을 수행하는 minikube의 기능을 방해하고 있습니다. HTTPS_PROXY 환경 변수의 값을 변경해야 할 수도 있습니다.", + "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "방화벽이 minikube의 인터넷 연결을 차단하고 있을 가능성이 높습니다. 프록시를 사용하려면 minikube를 구성해야 할 수도 있습니다.", + "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Kubernetes용으로 생성된 인증서에 사용되는 apiserver IP 주소 집합입니다. 머신 외부에서 apiserver를 사용할 수 있도록 하려는 경우에 사용할 수 있습니다", + "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Kubernetes용으로 생성된 인증서에 사용되는 apiserver 이름 집합입니다. 머신 외부에서 apiserver를 사용할 수 있도록 하려는 경우에 사용할 수 있습니다", + "A set of key=value pairs that describe feature gates for alpha/experimental features.": "alpha/experimental 기능에 대한 기능 게이트를 설명하는 key=value 쌍의 집합입니다.", "Access the Kubernetes dashboard running within the minikube cluster": "minikube 클러스터 내의 쿠버네티스 대시보드에 접근합니다", - "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", + "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "v8.1 이전 OpenSSH 클라이언트를 사용하는 Windows에서는 1024 미만의 포트에 대한 액세스가 실패할 수 있습니다. 자세한 내용은 https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission을 참조하세요", "Add SSH identity key to SSH authentication agent": "SSH 인증 에이전트에 SSH ID 키 추가합니다", - "Add an image to local cache.": "로컬 캐시에 이미지를 추가합니다", + "Add an image into minikube as a local cache, or delete, reload the cached images": "이미지를 로컬 캐시로 minikube에 추가하거나, 캐시된 이미지를 삭제하고 다시 로드합니다", + "Add an image to local cache.": "로컬 캐시에 이미지를 추가합니다.", "Add host key to SSH known_hosts file": "SSH known_hosts 파일에 호스트 키를 추가합니다", "Add image to cache for all running minikube clusters": "실행 중인 모든 미니큐브 클러스터의 캐시에 이미지를 추가합니다", "Add machine IP to NO_PROXY environment variable": "NO_PROXY 환경 변수에 머신 IP를 추가합니다", - "Add or delete an image from the local cache.": "로컬 캐시에 이미지를 추가하거나 삭제합니다", + "Add or delete an image from the local cache.": "로컬 캐시에 이미지를 추가하거나 삭제합니다.", "Add, delete, or push a local image into minikube": "minikube에 로컬 이미지를 추가하거나 삭제, 푸시합니다", "Add, remove, or list additional nodes": "노드를 추가하거나 삭제, 나열합니다", + "Adding a control-plane node is not yet supported, setting control-plane flag to false": "control-plane 노드를 추가하는 것은 아직 지원되지 않습니다. control-plane 플래그를 false로 설정합니다", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "non-HA(non-multi-control plane) 클러스터에 control-plane 노드를 추가하는 것은 현재 지원되지 않습니다. 먼저 클러스터를 삭제한 후 'minikube start --ha'를 사용하여 새로 생성해야 합니다.", "Adding node {{.name}} to cluster {{.cluster}}": "노드 {{.name}} 를 클러스터 {{.cluster}} 에 추가합니다", - "Additional help topics": "", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "노드 {{.name}} 를 클러스터 {{.cluster}} 에 {{.roles}} 로 추가합니다", + "Additional help topics": "추가적인 도움말 주제", "Additional mount options, such as cache=fscache": "cache=fscache 와 같은 추가적인 마운트 옵션", - "Adds a node to the given cluster config, and starts it.": "노드 하나를 주어진 클러스터 컨피그에 추가하고 시작합니다", - "Adds a node to the given cluster.": "노드 하나를 주어진 클러스터에 추가합니다", + "Adds a node to the given cluster config, and starts it.": "주어진 클러스터 구성에 노드 하나를 추가하고 시작합니다.", + "Adds a node to the given cluster.": "주어진 클러스터에 노드 하나를 추가합니다.", "Advanced Commands:": "고급 명령어:", - "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "", - "Aliases": "", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "애드온이 활성화된 후 \"minikube tunnel\"을 실행하면 인그레스 리소스를 \"127.0.0.1\"에서 사용할 수 있습니다", + "Aliases": "별칭", "All existing scheduled stops cancelled": "예정된 모든 중지 요청이 취소되었습니다", - "Allow user prompts for more information": "많은 정보를 위해 사용자 프롬프트를 허가합니다", - "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", - "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "minikube 가상 머신에 할당할 RAM 의 용량 (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)", - "Amount of time to wait for a service in seconds": "", - "Amount of time to wait for service in seconds": "", - "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "VirtualBox 와 같은 또 다른 하이퍼바이저가 KVM 과 충돌이 발생합니다. 다른 하이퍼바이저를 중단하거나 --driver 로 변경하세요", - "Another minikube instance is downloading dependencies... ": "", - "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "", - "At least needs control plane nodes to enable addon": "", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "pod 가 GPU를 사용할 수 있도록 허용합니다. 옵션은 다음과 같습니다: [all,nvidia,amd] (Docker 드라이버와 Docker 컨테이너 런타임만 해당)", + "Allow user prompts for more information": "추가 정보를 위해 사용자 프롬프트를 허용합니다", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "도커 이미지를 가져올 대체 이미지 저장소입니다. gcr.io에 제한된 액세스 권한이 있는 경우 사용할 수 있습니다. \"auto\"로 설정하여 minikube가 대신 결정하도록 할 수 있습니다. 중국 본토 사용자는 registry.cn-hangzhou.aliyuncs.com/google_containers와 같은 로컬 gcr.io 미러를 사용할 수 있습니다", + "Alternatively you could install one of these drivers:": "또는 다음 드라이버 중 하나를 설치할 수 있습니다:", + "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "minikube 가상 머신에 할당할 RAM 의 용량 (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).", + "Amount of time to wait for a service in seconds": "서비스를 기다리는 시간(초)", + "Amount of time to wait for service in seconds": "서비스를 기다리는 시간(초)", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "매번 프롬프트에 응답하는 대신, 애드온별 설정을 읽어 올 수 있는 선택적 환경 설정 파일입니다.", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "VirtualBox 와 같은 또 다른 하이퍼바이저가 KVM 과 충돌이 발생합니다. 다른 하이퍼바이저를 중단하거나 --driver 로 변경하세요.", + "Another minikube instance is downloading dependencies... ": "다른 minikube 인스턴스가 종속성을 다운로드 중입니다...", + "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "minikube 에 필요한 파일을 다른 프로그램이 사용하고 있습니다. Hyper-V 를 사용하고 있다면, Hyper-V 매니저에서 minikube VM 을 중지해보세요", + "Another tunnel process is already running, terminate the existing instance to start a new one": "다른 터널 프로세스가 이미 실행 중입니다. 새로운 터널 프로세스를 시작하려면 기존 인스턴스를 종료하세요", + "At least needs control plane nodes to enable addon": "에드온을 활성화하기 위해서는 적어도 컨트롤 플레인 노드가 필요합니다", + "Auto-pause is already enabled.": "자동 일시 정지 설정이 이미 활성화되어있습니다.", "Automatically selected the {{.driver}} driver": "자동적으로 {{.driver}} 드라이버가 선택되었습니다", "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "자동적으로 {{.driver}} 드라이버가 선택되었습니다. 다른 드라이버 목록: {{.alternates}}", + "Automatically selected the {{.network}} network": "자동적으로 {{.network}} 네트워크가 선택되었습니다", "Available Commands": "사용 가능한 명령어", "Basic Commands:": "기본 명령어:", - "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "", - "Bind Address: {{.Address}}": "연결된 주소 : {{.Address}}", - "Block until the apiserver is servicing API requests": "apiserver 가 API 요청을 서비스할 때까지 막습니다", - "Booting up control plane ...": "컨트롤 플레인이 부팅...", - "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "", - "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", + "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "{{.operating_system}} 에서 Docker 드라이버를 사용하고 있기 때문에, 터미널을 열어야 실행할 수 있습니다.", + "Bind Address: {{.Address}}": "연결된 주소: {{.Address}}", + "Block until the apiserver is servicing API requests": "apiserver 가 API 요청을 처리할 때까지 블록합니다", + "Booting up control plane ...": "컨트롤 플레인을 부팅하는 중 ...", + "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "driver={{.driver}} 와 vm-driver={{.vmd}} 가 모두 설정되었습니다.\n\n vm-driver 가 사용 중단되었으므로, minikube 는 driver={{.driver}} 로 기본값을 설정합니다.\n\n 전역 구성에서 vm-driver 가 설정된 경우, 이 경고를 해결하려면 \"minikube config unset vm-driver\" 를 실행하세요.\n\t\t\t", + "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "Bridge CNI 는 다중 노드 클러스터와 호환되지 않습니다. 다른 CNI 를 사용하세요", "Build a container image in minikube": "minikube 내 컨테이너 이미지를 빌드합니다", "Build a container image, using the container runtime.": "컨테이너 런타임을 사용하여 컨테이너 이미지를 빌드합니다.", - "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", + "Build image on all nodes.": "모든 노드에서 이미지를 빌드합니다.", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "사용자 환경에서 CGroup 할당을 사용할 수 없습니다. minikube 를 중첩된 컨테이너에서 실행하고 있을 수 있습니다. 다음을 실행해보세요:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "사용자 환경에서 CGroup 할당을 사용할 수 없습니다. minikube 를 중첩된 컨테이너에서 실행하고 있을 수 있습니다. 다음을 실행해보세요:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "사용할 CNI 플러그인입니다. 유효한 옵션은 다음과 같습니다: auto, bridge, calico, cilium, flannel, kindnet, 또는 CNI 매니페스트의 경로 (기본값: auto)", "Cache image from docker daemon": "도커 데몬의 캐시 이미지", "Cache image from remote registry": "원격 레지스트리의 캐시 이미지", + "Cache image to docker daemon": "도커 데몬에 이미지를 캐시", + "Cache image to remote registry": "원격 레지스트리에 이미지를 캐시", "Cannot find directory {{.path}} for copy": "복사하기 위한 디렉토리 {{.path}} 를 찾을 수 없습니다.", "Cannot find directory {{.path}} for mount": "마운트하기 위한 디렉토리 {{.path}} 를 찾을 수 없습니다", "Cannot use both --output and --format options": "--output 과 --format 옵션을 함께 사용할 수 없습니다", - "Check if you have unnecessary pods running by running 'kubectl get po -A": "", - "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", - "Check that libvirt is setup properly": "", - "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "minikube 가 실행 중인지 그리고 정확한 네임스페이스를 (-n 플래그로) 명시하였는지 확인하세요", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "{{.name}} 드라이버에서 --no-kubernetes 옵션을 사용할 수 없습니다", + "Certificate {{.certPath}} has expired. Generating a new one...": "{{.certPath}} 인증서가 만료되었습니다. 새로운 것을 생성하는 중...", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "기존 minikube HA (multi-control plane) 클러스터의 API 서버 포트 변경은 현재 지원되지 않습니다. 먼저 클러스터를 삭제해야 합니다.", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "기존 minikube 클러스터의 HA (multi-control plane) 모드 변경은 현재 지원되지 않습니다. 먼저 클러스터를 삭제한 후 'minikube start --ha'를 사용하여 새로 생성해야 합니다.", + "Check if you have unnecessary pods running by running 'kubectl get po -A": "'kubectl get po -A' 를 실행하여 불필요한 pod 가 실행 중인지 확인하세요", + "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "'journalctl -xeu kubelet' 의 출력을 확인하고, minikube start 에 --extra-config=kubelet.cgroup-driver=systemd 를 전달해보세요", + "Check that libvirt is setup properly": "libvirt 가 올바르게 설정되었는지 확인하세요", + "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "minikube 가 실행 중인지 그리고 정확한 네임스페이스를 (-n 플래그로) 명시하였는지 확인하세요.", "Check that the provided apiserver flags are valid": "주어진 apiserver 플래그가 유효한지 확인하세요", - "Check that the provided apiserver flags are valid, and that SELinux is disabled": "", + "Check that the provided apiserver flags are valid, and that SELinux is disabled": "주어진 apiserver 플래그가 유효한지 그리고 SELinux 가 비활성화되었는지 확인하세요", "Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "입력한 --kubernetes-version 이 'v'로 시작하는지 확인하세요. 예시: 'v1.1.14'", - "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "", - "Choose a smaller value for --memory, such as 2000": "", - "ChromeOS is missing the kernel support necessary for running Kubernetes": "", - "Cluster was created without any CNI, adding a node to it might cause broken networking.": "", + "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "방화벽 규칙의 간섭을 확인하고 'virt-host-validate'를 실행하여 KVM 구성 문제를 확인하십시오. VM 내에서 minikube를 실행하는 경우 --driver=none 사용을 고려하세요", + "Choose a smaller value for --memory, such as 2000": "--memory에 대해 2000과 같이 더 작은 값을 선택하세요", + "ChromeOS is missing the kernel support necessary for running Kubernetes": "ChromeOS 에는 Kubernetes 를 실행하기 위해 필요한 커널 지원이 누락되어 있습니다", + "Cluster was created without any CNI, adding a node to it might cause broken networking.": "CNI 없이 클러스터가 생성되었으므로, 클러스터에 노드를 추가하면 네트워킹이 중단될 수 있습니다.", "Configuration and Management Commands:": "환경 설정 및 관리 명령어:", - "Configure a default route on this Linux host, or use another --driver that does not require it": "", - "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", - "Configure environment to use minikube's Docker daemon": "", - "Configure environment to use minikube's Podman service": "", - "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "", + "Configure a default route on this Linux host, or use another --driver that does not require it": "이 Linux 호스트에 대한 기본 경로를 구성하거나, 이를 필요로하지 않는 다른 --driver 를 사용하세요", + "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "공식 문서를 따라 외부 네트워크 스위치를 구성한 다음 `minikube start`에 `--hyperv-virtual-switch=\u003cswitch-name\u003e`를 추가하세요", + "Configure environment to use minikube's Podman service": "minikube 의 Podman 서비스를 사용하도록 환경을 구성합니다", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\n\t\thttps://github.com/nirs/vmnet-helper#granting-permission-to-run-vmnet-helper": "vmnet-helper를 암호 없이 실행하도록 구성합니다.\n\n\t\t다음 지침에 따라 vmnet-helper sudoers 규칙을 설치하십시오:\n\n\t\thttps://github.com/nirs/vmnet-helper#granting-permission-to-run-vmnet-helper", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "minikube 내에서 애드온 w/ADDON_NAME 을 구성합니다 (예시: minikube addons configure registry-creds). 사용 가능한 애드온 목록은 다음과 같습니다: minikube addons list", "Configuring RBAC rules ...": "RBAC 규칙을 구성하는 중 ...", "Configuring local host environment ...": "로컬 환경 변수를 구성하는 중 ...", - "Configuring {{.name}} (Container Networking Interface) ...": "", - "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "", - "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "", - "Connect to LoadBalancer services": "", - "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", - "Consider increasing Docker Desktop's memory size.": "", - "Continuously listing/getting the status with optional interval duration.": "", - "Control Plane could not update, try minikube delete --all --purge": "", - "Copy the specified file into minikube": "", - "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "", - "Could not determine a Google Cloud project, which might be ok.": "", - "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "", - "Could not process error from failed deletion": "", - "Could not process errors from failed deletion": "", - "Could not resolve IP address": "", - "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "", + "Configuring {{.name}} (Container Networking Interface) ...": "{{.name}} (Container Networking Interface) 를 구성하는 중 ...", + "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "'minikube logs' 를 사용하여 인터넷 연결이 작동하는지 그리고 VM 이 리소스를 모두 사용하지 않았는지 확인하세요", + "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "'Get-VMSwitch' 명령을 사용하여 --hyperv-virtual-switch 에 올바른 값을 제공했는지 확인하세요", + "Connect to LoadBalancer services": "로드밸런서 서비스에 연결합니다", + "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "`minikube start --memory SIZE_MB` 를 사용하여 더 큰 메모리 크기의 클러스터를 생성하는 것을 고려하세요", + "Consider increasing Docker Desktop's memory size.": "Docker Desktop 의 메모리 크기를 늘리는 것을 고려하세요.", + "Continuously listing/getting the status with optional interval duration.": "선택한 일정 간격 동안 상태를 지속적으로 나열/가져옵니다.", + "Control Plane could not update, try minikube delete --all --purge": "컨트롤 플레인을 업데이트할 수 없습니다. minikube delete --all --purge 를 시도해보세요", + "Copy the specified file into minikube": "지정된 파일을 minikube 에 복사합니다", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "지정된 파일을 minikube로 복사합니다, 파일은 minikube 내 \u003c대상 파일 절대 경로\u003e에 저장됩니다.\n기본 대상 노드는 controlplane이며, \u003c소스 노드 이름\u003e이 생략되면 호스트에서 복사를 시도합니다.\n\n예시 명령어 : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"", + "Could not determine a Google Cloud project, which might be ok.": "Google Cloud 프로젝트를 확인할 수 없습니다. 이는 정상일 수 있습니다.", + "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "GCP 자격 파일을 찾을 수 없습니다. `gcloud auth application-default login`을 실행하거나, GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 자격 파일의 경로로 설정하십시오.", + "Could not process error from failed deletion": "삭제 실패로 인한 오류를 처리할 수 없습니다", + "Could not process errors from failed deletion": "삭제 실패로 인한 오류를 처리할 수 없습니다", + "Could not resolve IP address": "IP 주소를 확인할 수 없습니다", + "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "사용할 이미지 미러의 국가 코드입니다. 비워두면 전역 코드가 사용됩니다. 중국 본토 사용자의 경우 cn으로 설정하세요.", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "최소 3개의 컨트롤 플레인 노드로 고가용성 멀티 컨트롤 플레인 클러스터를 생성하며, 해당 노드들은 작업용으로도 지정됩니다.", "Creating Kubernetes in {{.driver_name}} {{.machine_type}} with (CPUs={{.number_of_cpus}}) ({{.number_of_host_cpus}} available), Memory={{.memory_size}}MB ({{.host_memory_size}}MB available) ...": "{{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}} ({{.number_of_host_cpus}}MB 유효한), Memory={{.memory_size}}MB ({{.host_memory_size}}MB 유효한) ...", - "Creating mount {{.name}} ...": "", + "Creating mount {{.name}} ...": "마운트 {{.name}} 를 생성하는 중 ...", "Creating {{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "{{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) 를 생성하는 중 ...", - "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "{{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) 를 생성하는 중 ...", - "Current context is \"{{.context}}\"": "", - "DEPRECATED, use `driver` instead.": "DEPRECATED 되었습니다, 'driver' 를 사용하세요", - "DEPRECATED: Replaced by --cni=bridge": "", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "{{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}제한 없음{{else}}{{.number_of_cpus}}{{end}}, 메모리={{if not .memory_size}}제한 없음{{else}}{{.memory_size}}MB{{end}}) 를 생성하는 중 ...", + "Current context is \"{{.context}}\"": "현재 컨텍스트는 \"{{.context}}\" 입니다", + "DEPRECATED, use `driver` instead.": "DEPRECATED 되었습니다, 'driver' 를 사용하세요.", + "DEPRECATED: Replaced by --cni": "DEPRECATED: --cni 로 대체되었습니다", + "DEPRECATED: Replaced by --cni=bridge": "DEPRECATED: --cni=bridge 로 대체되었습니다", "Default group id used for the mount": "마운트를 위한 디폴트 group id", "Default user id used for the mount": "마운트를 위한 디폴트 user id", - "Delete an image from the local cache.": "로컬 캐시에서 이미지를 삭제합니다", + "Delete an image from the local cache.": "로컬 캐시에서 이미지를 삭제합니다.", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "{{.delcommand}}를 사용하여 기존 {{.name}} 클러스터를 삭제하거나, {{.command}} --driver={{.old}}를 사용하여 기존 {{.name}} 클러스터를 시작하십시오", "Deletes a local Kubernetes cluster": "로컬 쿠버네티스 클러스터를 삭제합니다", - "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "로컬 쿠버네티스 클러스터를 삭제합니다. 해당 명령어는 가상 머신을 삭제하고 모든 관련 파일을 삭제합니다", + "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "로컬 쿠버네티스 클러스터를 삭제합니다. 해당 명령어는 가상 머신을 삭제하고 모든 관련 파일을 삭제합니다.", "Deletes a local kubernetes cluster": "로컬 쿠버네티스 클러스터를 삭제합니다", - "Deletes a local kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "로컬 쿠버네티스 클러스터를 삭제합니다. 해당 명령어는 가상 머신을 삭제하고 모든 관련 파일을 삭제합니다", - "Deletes a node from a cluster.": "클러스터에서 노드를 삭제합니다", + "Deletes a local kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "로컬 쿠버네티스 클러스터를 삭제합니다. 해당 명령어는 가상 머신을 삭제하고 모든 관련 파일을 삭제합니다.", + "Deletes a node from a cluster.": "클러스터에서 노드를 삭제합니다.", "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "{{.driver_name}} 의 \"{{.profile_name}}\" 를 삭제하는 중 ...", - "Deleting container \"{{.name}}\" ...": "", - "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", + "Deleting container \"{{.name}}\" ...": "\"{{.name}}\" 컨테이너를 삭제하는 중 ...", + "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "사용자가 --delete-on-failure 플래그를 설정했기 때문에, 다른 드라이버 {{.driver_name}}를 사용하는 기존 클러스터 {{.name}}를 삭제합니다. ", "Deleting node {{.name}} from cluster {{.cluster}}": "클러스터 {{.cluster}} 에서 노드 {{.name}} 를 삭제하는 중 ...", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "'/host-path:/guest-path' 형식을 사용하여 게스트에 마운트할 디렉터리입니다.", + "Directory to output licenses to": "라이선스를 출력할 디렉터리입니다", "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "가상 머신 시작 전 하드웨어 가상화 지원 여부 확인 작업을 비활성화합니다 (virtualbox 드라이버 한정)", - "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", - "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", - "Disables the filesystem mounts provided by the hypervisors": "", - "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "", - "Display dashboard URL instead of opening a browser": "", - "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "", - "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "", - "Display values currently set in the minikube config file": "", - "Display values currently set in the minikube config file.": "", - "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "", - "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "", - "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "", - "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "", - "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", - "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", + "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "VM 관리자에서 동적 메모리를 비활성화하거나, --memory 값에 더 큰 값을 전달하세요", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "minikube 내에서 애드온 w/ADDON_NAME을 비활성화합니다. (예시: minikube addons disable dashboard). 사용 가능한 애드온 목록을 보려면 minikube addons list를 사용하십시오 ", + "Disables the filesystem mounts provided by the hypervisors": "하이퍼바이저가 제공하는 파일 시스템 마운트를 비활성화합니다", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "minikube VM에 할당할 디스크 크기 (형식: \u003cnumber\u003e[\u003cunit\u003e], 단위: b, k, m 또는 g).", + "Display dashboard URL instead of opening a browser": "브라우저를 여는 대신 대시보드 URL을 표시합니다", + "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "기본 브라우저에서 여는 대신 CLI에 쿠버네티스 애드온 URL을 표시합니다", + "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "기본 브라우저에서 여는 대신 CLI에 쿠버네티스 서비스 URL을 표시합니다", + "Display values currently set in the minikube config file": "현재 minikube 설정 파일에 설정된 값을 표시합니다", + "Display values currently set in the minikube config file.": "현재 minikube 설정 파일에 설정된 값을 표시합니다.", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", + "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "Docker Desktop은 2개 미만의 CPU로 설정되어 있지만, Kubernetes는 최소 2개의 CPU가 필요합니다", + "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Docker Desktop이 Windows 컨테이너용으로 설정되어 있지만, minikube는 Linux 컨테이너가 필요합니다", + "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Docker Desktop은 {{.size}}MiB만 사용할 수 있지만, Kubernetes는 최소 {{.req}}MiB가 필요합니다", + "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "Docker Desktop은 {{.size}}MiB만 사용할 수 있어, 애플리케이션 배포 실패가 발생할 수 있습니다.", + "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "컨테이너가 생성된 후 도중에 종료되었습니다. Docker의 성능이나 상태를 확인해보세요.", + "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "Docker에서 사용할 수 있는 CPU가 2개 미만이지만, Kubernetes는 최소 2개가 필요합니다", + "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "VM 내의 Docker를 사용할 수 없습니다. VM을 재설정하려면 `minikube delete`를 실행해 보십시오.", "Docs have been saved at - {{.path}}": "문서가 다음 경로에 저장되었습니다 - {{.path}}", "Documentation: {{.url}}": "문서: {{.url}}", "Done! kubectl is now configured to use \"{{.name}}\"": "끝났습니다! 이제 kubectl 이 \"{{.name}}\" 를 사용할 수 있도록 설정되었습니다", - "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "끝났습니다! kubectl이 \"{{.name}}\" 클러스터와 \"{{.ns}}\" 네임스페이스를 기본적으로 사용하도록 구성되었습니다.", + "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "끝났습니다! kubectl이 \"{{.name}}\" 클러스터와 \"{{.ns}}\" 네임스페이스를 기본적으로 사용하도록 구성되었습니다", + "Done! minikube is ready without Kubernetes!": "끝났습니다! 쿠버네티스 없이 minikube가 준비되었습니다!", "Download complete!": "다운로드가 성공하였습니다!", "Downloading Kubernetes {{.version}} preload ...": "쿠버네티스 {{.version}} 을 다운로드 중 ...", "Downloading VM boot image ...": "가상 머신 부트 이미지 다운로드 중 ...", "Downloading driver {{.driver}}:": "드라이버 {{.driver}} 다운로드 중 :", "Downloading {{.name}} {{.version}}": "{{.name}} {{.version}} 다운로드 중", - "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "", - "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "registry-creds-acr` secret 생성 오류", "ERROR creating `registry-creds-dpr` secret": "`registry-creds-dpr` secret 생성 오류", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "`registry-creds-ecr` secret 생성 오류: {{.error}}", "ERROR creating `registry-creds-gcr` secret: {{.error}}": "`registry-creds-gcr` secret 생성 오류: {{.error}}", "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "", - "Enable addons. see `minikube addons list` for a list of valid addon names.": "", "Enable experimental NVIDIA GPU support in minikube": "", "Enable host resolver for NAT DNS requests (virtualbox driver only)": "", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "", "Enable or disable a minikube addon": "", "Enable proxy for NAT DNS requests (virtualbox driver only)": "", "Enabled addons: {{.addons}}": "애드온 활성화 : {{.addons}}", @@ -204,12 +248,12 @@ "Error getting cluster bootstrapper": "클러스터 부트스트래퍼 조회 오류", "Error getting cluster config": "클러스터 컨피그 조회 오류", "Error getting config": "컨피그 조회 오류", + "Error getting control-plane node": "", "Error getting host": "호스트 조회 오류", "Error getting host IP": "호스트 IP 조회 오류", "Error getting host status": "호스트 상태 조회 오류", "Error getting machine logs": "머신 로그 조회 오류", "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "", - "Error getting primary control plane": "", "Error getting service status": "서비스 상태 조회 오류", "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "", "Error getting ssh client": "ssh 클라이언트 조회 오류", @@ -236,44 +280,54 @@ "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "", "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "", "Fail check if container paused": "", + "Failed removing pid from pidfile: {{.error}}": "", "Failed runtime": "런타임이 실패하였습니다", "Failed to build image": "", "Failed to cache ISO": "ISO 캐싱에 실패하였습니다", "Failed to cache and load images": "이미지 캐싱 및 로딩에 실패하였습니다", "Failed to cache binaries": "바이너리 캐싱에 실패하였습니다", - "Failed to cache images": "", "Failed to cache images to tar": "이미지를 tar 로 캐싱하는 데 실패하였습니다", "Failed to cache kubectl": "kubectl 캐싱에 실패하였습니다", "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "{{.minikube_dir_path}} 의 권한 변경에 실패하였습니다: {{.error}}", "Failed to check if machine exists": "머신이 존재하는지 확인하는 데 실패하였습니다", "Failed to check main repository and mirrors for images": "", + "Failed to configure auto-pause {{.profile}}": "", "Failed to configure metallb IP {{.profile}}": "", + "Failed to configure registry-aliases {{.profile}}": "", "Failed to create file": "", - "Failed to create runtime": "", "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "", "Failed to delete cluster {{.name}}.": "", "Failed to delete cluster: {{.error}}": "클러스터 제거에 실패하였습니다: {{.error}}", "Failed to delete images": "이미지 제거에 실패하였습니다", "Failed to delete images from config": "컨피그로부터 이미지 제거에 실패하였습니다", "Failed to delete node {{.name}}": "노드 {{.name}} 제거에 실패하였습니다", + "Failed to delete profile(s): {{.error}}": "", + "Failed to download licenses": "", "Failed to enable container runtime": "컨테이너 런타임 활성화에 실패하였습니다", "Failed to generate config": "컨피그 생성에 실패하였습니다", "Failed to get bootstrapper": "부트스트래퍼 조회에 실패하였습니다", "Failed to get command runner": "", "Failed to get driver URL": "드라이버 URL 조회에 실패하였습니다", "Failed to get image map": "", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "", "Failed to get service URL: {{.error}}": "서비스 URL 조회에 실패하였습니다: {{.error}}", + "Failed to get temp": "", "Failed to kill mount process: {{.error}}": "마운트 프로세스 중지에 실패하였습니다: {{.error}}", "Failed to list cached images": "캐시된 이미지를 조회하는 데 실패하였습니다", "Failed to list images": "", "Failed to load image": "", "Failed to persist images": "", "Failed to pull image": "", + "Failed to pull images": "", + "Failed to push images": "", + "Failed to read temp": "", "Failed to reload cached images": "캐시된 이미지를 다시 불러오는 데 실패하였습니다", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to save config": "컨피그 저장에 실패하였습니다", "Failed to save config {{.profile}}": "", "Failed to save dir": "", + "Failed to save image": "", "Failed to save stdin": "", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "", "Failed to setup certs": "", @@ -282,13 +336,17 @@ "Failed to start node {{.name}}": "노드 {{.name}} 시작에 실패하였습니다", "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "", "Failed to stop node {{.name}}": "노드 {{.name}} 중지에 실패하였습니다", + "Failed to stop node {{.name}}: {{.error}}": "", + "Failed to stop ssh-agent process: {{.error}}": "", + "Failed to tag images": "", "Failed to update cluster": "클러스터를 수정하는 데 실패하였습니다", "Failed to update config": "컨피그를 수정하는 데 실패하였습니다", "Failed unmount: {{.error}}": "마운트 해제에 실패하였습니다: {{.error}}", - "File permissions used for the mount": "", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "", "Filter to use only VM Drivers": "", "Flags": "", "Follow": "", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "", "For improved {{.driver}} performance, {{.fix}}": "", "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "", "For more information, see:": "더 많은 정보를 보려면, 다음을 참고하세요:", @@ -296,12 +354,15 @@ "For more information, see: {{.url}}": "", "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", "Force minikube to perform possibly dangerous operations": "", + "Format output. One of: short|table|json|yaml": "", "Format to print stdout in. Options include: [text,json]": "", - "Found docker, but the docker service isn't running. Try restarting the docker service.": "", + "Forwards all services in a namespace (defaults to \"false\")": "", + "Found docker, but the docker service isn't running. Try restarting the docker service.": "도커를 찾았으나 docker service 가 실행중이지 않습니다, docker service 를 다시 시작해주세요", "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "", "Found network options:": "네트워크 옵션을 찾았습니다", "Found {{.number}} invalid profile(s) !": "{{.number}} 개의 무효한 프로필을 찾았습니다", "Found {{.number}} invalid profile(s) ! ": "", + "Generate command completion for PowerShell.": "", "Generate command completion for a shell": "", "Generate command completion for bash.": "", "Generate command completion for fish .": "", @@ -316,31 +377,42 @@ "Gets the value of PROPERTY_NAME from the minikube config file": "", "Getting machine config failed": "머신 컨피그 조회 실패", "Global Flags": "", - "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", - "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", - "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "", "Group ID: {{.groupID}}": "", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "", "Have you set up libvirt correctly?": "libvirt 설정을 알맞게 하셨습니까?", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "", "IP Address to use to expose ports (docker and podman driver only)": "", "IP address (ssh driver only)": "", "If present, writes to the provided file instead of stdout.": "", + "If set, added node will be available as worker. Defaults to true.": "", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "", "If set, automatically updates drivers to the latest version. Defaults to true.": "", "If set, delete the current cluster if start fails and try again. Defaults to false.": "", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "", "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "", "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "", "If set, install addons. Defaults to true.": "", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "", "If set, pause all namespaces": "", "If set, unpause all namespaces": "", "If the above advice does not help, please let us know:": "", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "", "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "", "If true, only download and cache files for later use - don't install or start anything.": "", "If true, pods might get deleted and restarted on addon enable": "", + "If true, print web links to addons' documentation if using --output=list (default).": "", + "If true, returns a detailed list of profiles.": "", "If true, returns list of profiles faster by skipping validating the status of the cluster.": "", - "If true, the added node will be marked for work. Defaults to true.": "", - "If true, the node added will also be a control plane in addition to a worker.": "", "If true, will perform potentially dangerous operations. Use with discretion.": "", "If you are running minikube within a VM, consider using --driver=none:": "", "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "", @@ -350,22 +422,32 @@ "Ignoring invalid pair entry {{.pair}}": "", "Ignoring unknown custom image {{.name}}": "", "Ignoring unknown custom registry {{.name}}": "", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "", "Images Commands:": "이미지 명령어", "Images used by this addon. Separated by commas.": "", "In order to use the fall back image, you need to log in to the github packages registry": "", "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", + "Interval is an invalid duration: {{.error}}": "", + "Interval must be greater than 0s": "", "Invalid port": "", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "Kept for backward compatibility, value is ignored.": "", + "Kicbase images have not been deleted. To delete images run:": "", "Kill the mount process spawned by minikube start": "", - "Kubelet network plug-in to use (default: auto)": "", "Kubernetes requires at least 2 CPU's to start": "", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "", + "Kubernetes version {{.specified}} found in GitHub version list": "", + "Kubernetes version {{.specified}} found in version list": "", + "Kubernetes version {{.version}} is not supported by this release of minikube": "", "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "이제 {{.new}} 버전의 쿠버네티스를 사용할 수 있습니다. 업그레이드를 원하신다면 다음과 같이 지정하세요: --kubernetes-version={{.prefix}}{{.new}}", "Kubernetes {{.version}} is not supported by this release of minikube": "{{.version}} 버전의 쿠버네티스는 설치되어 있는 버전의 minikube에서 지원되지 않습니다.", + "Kubernetes: Stopping ...": "", + "Kubernetes: {{.status}}": "", "Launching Kubernetes ...": "쿠버네티스를 시작하는 중 ...", "Launching proxy ...": "프록시를 시작하는 중 ...", "List all available images from the local cache.": "", @@ -382,17 +464,21 @@ "Lists all valid default values for PROPERTY_NAME": "", "Lists all valid minikube profiles and detects all possible invalid profiles.": "", "Lists the URLs for the services in your local cluster": "", - "Load a image into minikube": "", + "Load an image into minikube": "", "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "", "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "", "Locations to fetch the minikube ISO from.": "", "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", "Log into the minikube environment (for debugging)": "(디버깅을 위해) minikube 환경에 접속합니다", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "", + "Manage cache for images": "", "Manage images": "", "Message Size: {{.size}}": "메시지 사이즈: {{.size}}", "Minikube is a CLI tool that provisions and manages single-node Kubernetes clusters optimized for development workflows.": "Minikube 는 개발용으로 최적화된 싱글 노드 쿠버네티스 클러스터 제공 및 관리 CLI 툴입니다", "Minikube is a tool for managing local Kubernetes clusters.": "Minikube 는 로컬 쿠버네티스 클러스터 관리 툴입니다", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "", "Modify persistent configuration values": "", "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "", "Most users should use the newer 'docker' driver instead, which does not require root!": "", @@ -401,16 +487,22 @@ "Mounts the specified directory into minikube": "특정 디렉토리를 minikube 에 마운트합니다", "Mounts the specified directory into minikube.": "", "Multiple errors deleting profiles": "", + "Multiple errors encountered:": "", "Multiple minikube profiles were found - ": "", "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", "Networking and Connectivity Commands:": "", "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "", "No changes required for the \"{{.context}}\" context": "", - "No minikube profile was found. ": "", + "No control-plane nodes found.": "", + "No minikube profile was found.": "", "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "", "No such addon {{.name}}": "", + "No valid URL found for tunnel.": "", + "No valid port found for tunnel.": "", "Node {{.name}} failed to start, deleting and trying again.": "", "Node {{.name}} was successfully deleted.": "", "Node {{.nodeName}} does not exist.": "", @@ -418,51 +510,59 @@ "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "", "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "", + "One of 'text', 'yaml' or 'json'.": "", "One of 'yaml' or 'json'.": "", "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "", "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "", "Open the addons URL with https instead of http": "", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "", + "Open the service URL with https instead of http (defaults to \"false\")": "", "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "", "Opening {{.url}} in your default browser...": "", "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", "Operations on nodes": "", "Options: {{.options}}": "옵션: {{.options}}", - "Output format. Accepted values: [json]": "", - "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Output format. Accepted values: [json, yaml]": "", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Outputs the licenses of dependencies to a directory": "", "Overwrite image even if same image:tag name exists": "", + "Path to socket vmnet binary (QEMU driver only)": "", "Path to the Dockerfile to use (optional)": "", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "", + "Path to the socket vmnet client binary (QEMU driver only)": "", "Pause": "", "Paused {{.count}} containers": "", "Paused {{.count}} containers in: {{.namespaces}}": "", "Pausing node {{.name}} ... ": "", - "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", + "Please also attach the following file to the GitHub issue:": "", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", "Please enter a value:": "값을 입력하세요", "Please free up disk or prune images.": "", - "Please increse Desktop's disk size.": "", + "Please increase Desktop's disk size.": "", "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", "Please provide a path or url to build": "", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "", "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", + "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "", - "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", - "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", "Please try purging minikube using `minikube delete --all --purge`": "", - "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", "Populates the specified folder with documentation in markdown about minikube": "", "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", - "Powering off \"{{.profile_name}}\" via SSH ...": "", + "Powering off \"{{.profile_name}}\" via SSH ...": "\"{{.profile_name}}\"를 SSH로 전원을 끕니다 ...", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "쿠버네티스 {{.k8sVersion}} 을 {{.runtime}} {{.runtimeVersion}} 런타임으로 설치하는 중", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "", "Print current and latest version number": "현재 그리고 최신 버전을 출력합니다", "Print just the version number.": "", "Print the version of minikube": "minikube 의 버전을 출력합니다", @@ -476,12 +576,18 @@ "Profile name '{{.profilename}}' is not valid": "", "Profile name should be unique": "", "Provide VM UUID to restore MAC address (hyperkit driver only)": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "", + "Pull images": "", "Pull the remote image (no caching)": "", - "Pulling base image ...": "베이스 이미지를 다운받는 중 ...", + "Pulling base image ...": "기본 이미지를 가져오는 중 ...", + "Pulling base image {{.kicVersion}} ...": "기본 이미지 {{.kicVersion}}를 가져오는 중 ...", + "Push images": "", "Push the new image (requires tag)": "", "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "", "Rebuild libvirt with virt-network support": "", "Received {{.name}} signal": "", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "", "Registries used by this addon. Separated by commas.": "", "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "", "Registry mirrors to pass to the Docker daemon": "", @@ -495,7 +601,6 @@ "Removing {{.directory}} ...": "{{.directory}} 제거 중 ...", "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "", - "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", @@ -513,7 +618,7 @@ "Retrieves the IP address of the specified node, and writes it to STDOUT.": "", "Returns a URL to connect to a service": "서비스에 연결된 URL을 반환합니다", "Returns logs to debug a local Kubernetes cluster": "로컬 쿠버네티스 클러스터를 디버그하기 위해 로그를 반환합니다", - "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", @@ -523,8 +628,9 @@ "Run kubectl": "kubectl 을 실행합니다", "Run minikube from the C: drive.": "", "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "", "Run the minikube command as an Administrator": "minikube 명령어를 관리자 권한으로 실행합니다", - "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "", "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", @@ -534,9 +640,13 @@ "SSH key (ssh driver only)": "", "SSH port (ssh driver only)": "", "SSH user (ssh driver only)": "", + "Save a image from minikube": "", + "Searching the internet for Kubernetes version...": "", "Select a valid value for --dnsdomain": "", "Send trace events. Options include: [gcp]": "", "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "", "Set failed": "설정이 실패하였습니다", "Set flag to delete all profiles": "", "Set flag to stop all profiles (clusters)": "", @@ -544,16 +654,18 @@ "Set this flag to delete the '.minikube' folder from your user directory.": "", "Sets an individual value in a minikube config file": "", "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", - "Sets up docker env variables; similar to '$(docker-machine env)'.": "", "Sets up podman env variables; similar to '$(podman-machine env)'.": "", "Setting profile failed": "프로필 설정이 실패하였습니다", "Show a list of global command-line options (applies to all commands).": "", "Show only log entries which point to known problems": "", + "Show only the audit logs": "", + "Show only the last start logs.": "", "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "", "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "", - "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "", "Sorry, Kubernetes {{.version}} is not supported by this release of minikube": "죄송합니다, 쿠버네티스 {{.version}} 는 해당 minikube 버전에서 지원하지 않습니다", "Sorry, completion support is not yet implemented for {{.name}}": "", "Sorry, please set the --output flag to one of the following valid options: [text,json]": "", @@ -563,18 +675,19 @@ "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "", "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "", "Source {{.path}} can not be empty": "", - "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "", "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "", "Specify arbitrary flags to pass to the build. (format: key=value)": "", - "Specify the 9p version that the mount should use": "", - "Specify the ip that the mount should be setup on": "", - "Specify the mount filesystem type (supported types: 9p)": "", - "Specify the port that the mount should be setup on, where 0 means any free port.": "", "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "", "StartHost failed, but will try again: {{.error}}": "", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "\"{{.cluster}}\" 클러스터의 \"{{.node}}\" {{.role}} 노드를 시작하는 중", "Starting control plane node {{.name}} in cluster {{.cluster}}": "{{.cluster}} 클러스터의 {{.name}} 컨트롤 플레인 노드를 시작하는 중", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "", "Starting node": "노드를 시작하는 중", "Starting node {{.name}} in cluster {{.cluster}}": "{{.cluster}} 클러스터의 {{.name}} 노드를 시작하는 중", "Starting tunnel for service {{.service}}.": "{{.service}} 서비스의 터널을 시작하는 중", @@ -583,64 +696,82 @@ "Starts a node.": "노드를 시작합니다", "Starts an existing stopped node in a cluster.": "클러스터의 중지된 노드를 시작합니다", "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "", - "Stopping node \"{{.name}}\" ...": "", + "Stopped tunnel for service {{.service}}.": "", + "Stopping node \"{{.name}}\" ...": "\"{{.name}}\" 노드를 중지하는 중 ...", "Stopping tunnel for service {{.service}}.": "", "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "", "Stops a node in a cluster.": "클러스터의 한 노드를 중지합니다", "Stops a running local Kubernetes cluster": "실행 중인 로컬 쿠버네티스 클러스터를 중지합니다", "Stops a running local kubernetes cluster": "실행 중인 로컬 쿠버네티스 클러스터를 중지합니다", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "", "Successfully added {{.name}} to {{.cluster}}!": "{{.name}} 를 {{.cluster}} 에 성공적으로 추가하였습니다!", "Successfully deleted all profiles": "모든 프로필이 성공적으로 삭제되었습니다", "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "", "Successfully started node {{.name}}!": "{{.name}} 노드가 정상적으로 시작되었습니다!", "Successfully stopped node {{.name}}": "{{.name}} 노드가 정상적으로 중지되었습니다", + "Successfully unblocked bootpd process from firewall, retrying": "", "Suggestion: {{.advice}}": "권장: {{.advice}}", "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "Tag images": "", "Tag to apply to the new image (optional)": "", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "", "Target directory {{.path}} must be an absolute path": "타겟 폴더 {{.path}} 는 절대 경로여야 합니다", "Target {{.path}} can not be empty": "", "Test docs have been saved at - {{.path}}": "", "The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo minikube --driver={{.driver_name}}'.": "\"{{.driver_name}}\" 드라이버는 root 권한으로 실행되어야 합니다. minikube 를 다음과 같이 실행하세요 'sudo minikube --driver={{.driver_name}}'", "The \"{{.driver_name}}\" driver should not be used with root privileges.": "\"{{.driver_name}}\" 드라이버는 root 권한으로 실행되면 안 됩니다", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "", + "The \"{{.name}}\" container runtime requires CNI": "", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "", "The 'none' driver is designed for experts who need to integrate with an existing VM": "", "The '{{.addonName}}' addon is enabled": "'{{.addonName}}' 애드온이 활성화되었습니다", - "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "", "The '{{.driver}}' provider was not found: {{.error}}": "", "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", "The '{{.name}}' driver does not respect the --cpus flag": "", "The '{{.name}}' driver does not respect the --memory flag": "", - "The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically": "", - "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "", + "The '{{.name}}' driver does not support --cpus=no-limit": "", + "The '{{.name}}' driver does not support --memory=no-limit": "", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "", "The CIDR to be used for service cluster IPs.": "", "The CIDR to be used for the minikube VM (virtualbox driver only)": "", "The KVM QEMU connection URI. (kvm2 driver only)": "", "The KVM default network name. (kvm2 driver only)": "", "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "", "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", - "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "API 서버 수신 포트", - "The argument to pass the minikube mount command on start.": "", "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", "The base image to use for docker/podman drivers. Intended for local development.": "", "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", "The cluster dns domain name used in the Kubernetes cluster": "", - "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "", "The control plane for \"{{.name}}\" is paused!": "\"{{.name}}\"의 컨트롤 플레인이 중지되었습니다!", "The control plane node \"{{.name}}\" does not exist.": "\"{{.name}}\" 컨트롤 플레인 노드가 존재하지 않습니다.", "The control plane node is not running (state={{.state}})": "컨트롤 플레인 노드가 실행 상태가 아닙니다 (상태={{.state}})", "The control plane node must be running for this command": "컨트롤 플레인 노드는 실행 상태여야 합니다", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is paused": "", + "The control-plane node {{.name}} apiserver is paused (will try others)": "", + "The control-plane node {{.name}} host does not exist": "", + "The control-plane node {{.name}} host does not exist (will try others)": "", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "", + "The control-plane node {{.name}} host is not running: state={{.state}}": "", "The cri socket path to be used.": "", "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "", "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "", "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", "The heapster addon is depreciated. please try to disable metrics-server instead": "", + "The host does not support filesystem 9p.": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "", "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", @@ -649,6 +780,7 @@ "The minikube {{.driver_name}} container exited unexpectedly.": "", "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -659,38 +791,47 @@ "The node {{.name}} has ran out of memory.": "", "The node {{.name}} network is not available. Please verify network settings.": "", "The none driver is not compatible with multi-node clusters.": "", - "The number of bytes to use for 9p packet payload": "", - "The number of nodes to spin up. Defaults to 1.": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "", "The output format. One of 'json', 'table'": "", "The path on the file system where the docs in markdown need to be saved": "", "The path on the file system where the error code docs in markdown need to be saved": "", "The path on the file system where the testing docs in markdown need to be saved": "", "The podman service within '{{.cluster}}' is not active": "", "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "", "The service namespace": "", - "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "", "The services namespace": "", + "The socket_vmnet network is only supported on macOS": "", "The time interval for each check that wait performs in seconds": "", + "The total number of nodes to spin up. Defaults to 1.": "", "The value passed to --format is invalid": "", "The value passed to --format is invalid: {{.error}}": "", + "The vfkit driver is only supported on macOS": "", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "", "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "", "These changes will take effect upon a minikube delete and then a minikube start": "", + "Things to try without Kubernetes ...": "", "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "", - "This control plane is not running! (state={{.state}})": "", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "", "This driver does not yet work on your architecture. Maybe try --driver=none": "", "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", - "This is unusual - you may want to investigate using \"{{.command}}\"": "", "This will keep the existing kubectl context and will create a minikube context.": "", - "This will start the mount daemon and automatically mount files into minikube.": "", - "This {{.type}} is having trouble accessing https://{{.repository}}": "", "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "", + "To configure vment-helper to run without a password, please check the documentation:": "", "To connect to this cluster, use: --context={{.name}}": "", "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "", - "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "해당 알림을 비활성화하려면 다음 명령어를 실행하세요. 'minikube config set WantUpdateNotification false'", - "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "해당 알림을 비활성화하려면 다음 명령어를 실행하세요. 'minikube config set WantUpdateNotification false'", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "", "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", "To see addons list for other profiles use: `minikube addons -p name list`": "", "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", @@ -700,21 +841,30 @@ "Troubleshooting Commands:": "", "Try 'minikube delete' to force new SSL certificates to be installed": "", "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", "Trying to delete invalid profile {{.profile}}": "무효한 프로필 {{.profile}} 를 삭제하는 중", + "Tunnel successfully started": "", "Unable to bind flags": "flags 를 합칠 수 없습니다", "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", + "Unable to delete profile(s): {{.error}}": "", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "", "Unable to enable dashboard": "대시보드를 활성화할 수 없습니다", "Unable to fetch latest version info": "최신 버전 정보를 가져올 수 없습니다", - "Unable to find control plane": "", + "Unable to find any control-plane nodes": "", "Unable to generate docs": "문서를 생성할 수 없습니다", "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", "Unable to get CPU info: {{.err}}": "", "Unable to get VM IP address": "가상 머신 IP 주소를 조회할 수 없습니다", - "Unable to get command runner": "", - "Unable to get control plane status: {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "", "Unable to get current user": "현재 사용자를 조회할 수 없습니다", - "Unable to get forwarded endpoint": "", - "Unable to get machine status": "", "Unable to get runtime": "런타임을 조회할 수 없습니다", "Unable to get the status of the {{.name}} cluster.": "{{.name}} 클러스터의 상태를 조회할 수 없습니다", "Unable to kill mount process: {{.error}}": "마운트 프로세스를 중지할 수 없습니다: {{.error}}", @@ -722,17 +872,18 @@ "Unable to load cached images from config file.": "컨피그 파일로부터 캐시된 이미지를 로드할 수 없습니다", "Unable to load cached images: {{.error}}": "캐시된 이미지를 로드할 수 없습니다: {{.error}}", "Unable to load config: {{.error}}": "컨피그를 로드할 수 없습니다: {{.error}}", - "Unable to load host": "", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "", + "Unable to load control-plane node {{.name}} host: {{.err}}": "", "Unable to load profile: {{.error}}": "", "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": " \"{{.kubernetes_version}}\" 를 파싱할 수 없습니다: {{.error}}", - "Unable to parse default Kubernetes version from constants: {{.error}}": "", "Unable to parse memory '{{.memory}}': {{.error}}": "", - "Unable to parse oldest Kubernetes version from constants: {{.error}}": "", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "", "Unable to pick a default driver. Here is what was considered, in preference order:": "", "Unable to push cached images: {{.error}}": "", "Unable to remove machine directory": "", "Unable to remove machine directory: %v": "머신 디렉토리를 제거할 수 없습니다: %v", - "Unable to restart cluster, will reset it: {{.error}}": "", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "", + "Unable to run vmnet-helper without a password": "", "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", "Unable to start VM. Please investigate and run 'minikube delete' if possible": "가상 머신을 시작할 수 없습니다. 확인 후 가능하면 'minikube delete' 를 실행하세요", "Unable to stop VM": "가상 머신을 중지할 수 없습니다", @@ -762,7 +913,7 @@ "Usage: minikube node start [name]": "", "Usage: minikube node stop [name]": "", "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", - "Use 'kubect get po -A' to find the correct and namespace name": "", + "Use 'kubectl get po -A' to find the correct and namespace name": "", "Use -A to specify all namespaces": "모든 namespace 를 확인하려면 -A 를 사용하세요", "Use SSH connection instead of HTTPS (port 2376)": "", "Use SSH for running kubernetes client on the node": "", @@ -773,20 +924,26 @@ "User name must be 60 chars or less.": "", "Userspace file server is shutdown": "", "Userspace file server: ": "", - "Using image repository {{.name}}": "", - "Using image {{.registry}}{{.image}}": "", - "Using image {{.registry}}{{.image}} (global image repository)": "", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "", + "Using Kubernetes {{.version}} since patch version was unspecified": "", + "Using image repository {{.name}}": "이미지 저장소 {{.name}} 사용 중", + "Using image {{.registry}}{{.image}}": "이미지 {{.registry}}{{.image}} 사용 중", + "Using image {{.registry}}{{.image}} (global image repository)": "이미지 {{.registry}}{{.image}} 사용 중 (글로벌 이미지 저장소)", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "", + "Using rootless driver was required, but the current driver does not seem rootless": "", + "Using rootless {{.driver_name}} driver": "", "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "", "Using the {{.driver}} driver based on existing profile": "기존 프로필에 기반하여 {{.driver}} 드라이버를 사용하는 중", "Using the {{.driver}} driver based on user configuration": "유저 환경 설정 정보에 기반하여 {{.driver}} 드라이버를 사용하는 중", + "Using {{.driver_name}} driver with root privileges": "{{.driver_name}} 드라이버를 루트 권한으로 사용 중", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", "Verifying Kubernetes components...": "Kubernetes 구성 요소를 확인...", - "Verifying dashboard health ...": "", - "Verifying proxy health ...": "", - "Verifying {{.addon_name}} addon...": "", + "Verifying dashboard health ...": "Dashboard 의 상태를 확인 중입니다 ...", + "Verifying proxy health ...": "Proxy 의 상태를 확인 중입니다 ...", + "Verifying {{.addon_name}} addon...": "{{.addon_name}} 애드온을 확인 중입니다 ...", "Version: {{.version}}": "버전: {{.version}}", "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "", "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "", @@ -799,11 +956,14 @@ "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "", "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", - "You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "", "You can also use 'minikube kubectl -- get pods' to invoke a matching version": "맞는 버전의 kubectl 을 사용하기 위해서는 다음과 같이 사용 가능합니다. minikube kubectl -- get pods'", + "You can create one using 'minikube start'.\n\t\t": "", "You can delete them using the following command(s):": "다음 명령어(들)을 사용하여 제거할 수 있습니다", "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", @@ -811,34 +971,44 @@ "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", - "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", - "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "Apple Silicon Mac에서 amd64 버전을 사용하고 있을 수 있습니다. arm64 버전의 minikube를 사용하십시오", "You must specify a service name": "service 이름을 명시해야 합니다", + "You must specify service name(s) or --all": "", "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", "Your cgroup does not allow setting memory.": "", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "", "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "호스트가 KVM 가상화를 지원하지 않습니다. qemu-kvm 이 설치되었는지 확인 후, 문제 디버그를 위해 'virt-host-validate' 를 실행하세요", - "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "", + "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "호스트가 가상화를 지원하지 않습니다. 가상 머신 안에서 minikube 를 실행 중인 경우, '--driver=docker' 로 시도하세요. 그렇지 않다면, BIOS 에서 가상화를 활성화하세요", "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=none'. Otherwise, enable virtualization in your BIOS": "호스트가 가상화를 지원하지 않습니다. 가상 머신 안에서 minikube 를 실행 중인 경우, '--driver=none' 로 시도하세요. 그렇지 않다면, BIOS 에서 가상화를 활성화하세요", "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "minikube config 가 미지원 드라이버를 참조하고 있습니다. ~/.minikube 를 제거한 후, 다시 시도하세요", "Your minikube vm is not running, try minikube start.": "minikube 가상 머신이 실행 중이 아닙니다, minikube start 를 시도하세요", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "", "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", - "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "", "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "", "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "bash completion failed": "bash 자동 완성이 실패하였습니다", "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "예정된 모든 중지 요청을 취소합니다", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "", "config view failed": "config view 가 실패하였습니다", - "containers paused status: {{.paused}}": "", "creating api client": "api 클라이언트 생성 중", + "dashboard": "", "dashboard service is not running: {{.error}}": "대시보드 서비스가 실행 중이지 않습니다: {{.error}}", "delete ctx": "", "deleting node": "", @@ -846,21 +1016,32 @@ "dry-run mode. Validates configuration, but does not mutate system state": "", "dry-run validation complete!": "dry-run 검증 완료!", "enable failed": "활성화가 실패하였습니다", + "enabled failed": "", "error creating clientset": "clientset 생성 오류", "error creating machine client": "머신 client 생성 오류", - "error getting primary control plane": "", + "error creating urls": "", + "error fetching Kubernetes version list from GitHub": "", + "error getting control-plane node": "", + "error getting defaults: {{.error}}": "", "error getting ssh port": "ssh 포트 조회 오류", "error initializing tracing: {{.Error}}": "", "error parsing the input ip address for mount": "", "error provisioning guest": "", "error starting tunnel": "", - "error stopping tunnel": "", + "error: --output must be 'text', 'yaml' or 'json'": "", "error: --output must be 'yaml' or 'json'": "", "experimental": "", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "", "failed to add node": "", + "failed to load profile: {{.error}}": "", "failed to open browser: {{.error}}": "", + "failed to restart auto-pause: {{.error}}": "", "failed to save config": "", + "failed to set extra option": "", "failed to start node": "", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "", "fish completion failed": "", "fish completion.": "", "getting config": "컨피그 조회 중", @@ -868,30 +1049,39 @@ "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "프로필을 생성하려면 다음 명령어를 입력하세요: minikube start -p {{.profile_name}}\"", "initialization failed, will try again: {{.error}}": "", "invalid kubernetes version": "", + "ip not found": "", + "json encoding failure": "", "keep the kube-context active after cluster is stopped. Defaults to false.": "", + "kubeadm certificates have expired. Generating new ones...": "", "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "kubectl 과 minikube 환경 정보는 {{.home_folder}} 에 저장될 것입니다", "kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "kubectl 이 PATH 에 없습니다, 하지만 이는 대시보드에서 필요로 합니다. 설치 가이드:https://kubernetes.io/docs/tasks/tools/install-kubectl/", "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl 을 찾을 수 없습니다. 만약 필요하다면, 'minikube kubectl -- get pods -A'를 시도합니다.", "kubectl proxy": "kubectl 프록시", "libmachine failed": "", - "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "", "list versions of all components included with minikube. (the cluster must be running)": "", "loading config": "컨피그 로딩 중", "loading profile": "", "logdir set failed": "logdir 설정이 실패하였습니다", "machine '{{.name}}' does not exist. Proceeding ahead with recreating VM.": "머신 '{{.name}}' 이 존재하지 않습니다. 진행하기 앞서 가상 머신을 재생성합니다", "max time to wait per Kubernetes or host to be healthy.": "", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", "minikube addons list --output OUTPUT. json, list": "", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "", "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", "minikube is not meant for production use. You are opening non-local traffic": "", "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", + "minikube mount is not currently implemented with the builtin network on QEMU": "", "minikube profile was successfully set to {{.profile_name}}": "", "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube는 개발 워크플로우에 최적화된 로컬 쿠버네티스를 제공하고 관리합니다.", "minikube quickly sets up a local Kubernetes cluster": "", + "minikube service is not currently implemented with the builtin network on QEMU": "", "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "", "minikube status --output OUTPUT. json, text": "", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "", "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} 이 사용가능합니다! 다음 경로에서 다운받으세요: {{.url}}", "mkcmp is used to compare performance of two minikube binaries": "", "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", @@ -899,24 +1089,31 @@ "mount failed": "마운트 실패", "namespaces to pause": "잠시 멈추려는 네임스페이스", "namespaces to unpause": "재개하려는 네임스페이스", - "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", "none driver does not support multi-node clusters": "", - "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "numa node is only supported on k8s v1.18 and later": "", "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", "pause Kubernetes": "쿠버네티스를 잠시 멈춥니다", - "preload extraction failed: \\\"No space left on device\\\"": "", + "powershell completion failed": "", + "powershell completion.": "", + "preload extraction failed: \"No space left on device\"": "", "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", "provisioning host for node": "", "reload cached images.": "캐시된 이미지 다시 불러 오기", "reloads images previously added using the 'cache add' subcommand": "", "retrieving node": "", "scheduled stop is not supported on the none driver, skipping scheduling": "", + "service not available": "", "service {{.namespace_name}}/{{.service_name}} has no node port": "", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "", "stat failed": "", "status json failure": "", "status text failure": "", - "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "true": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", "unable to daemonize: {{.err}}": "", @@ -934,38 +1131,46 @@ "usage: minikube addons images ADDON_NAME": "", "usage: minikube addons list": "", "usage: minikube addons open ADDON_NAME": "", + "usage: minikube config list PROPERTY_NAME": "", "usage: minikube config unset PROPERTY_NAME": "", "usage: minikube delete": "", "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", - "using metrics-server addon, heapster is deprecated": "", "version json failure": "", "version yaml failure": "", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "", "zsh completion failed": "zsh 완성이 실패하였습니다", "zsh completion.": "", "{{ .name }}: Suggestion: {{ .suggestion}}": "", - "{{ .name }}: {{ .rejection }}": "", - "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "", + "{{.addon}} does not currently have an associated maintainer.": "", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "", "{{.count}} nodes stopped.": "{{.count}}개의 노드가 중지되었습니다.", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "{{.count}}개의 노드가 중지되었습니다.", "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "", "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", "{{.driver}} does not appear to be installed": "{{.driver}} 가 설치되지 않았습니다", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", + "{{.env}}={{.value}}": "", "{{.name}} cluster does not exist": "{{.name}} 클러스터가 존재하지 않습니다", "{{.name}} doesn't have images.": "{{.name}} 이미지가 없습니다.", "{{.name}} has following images:": "{{.name}}에는 다음과 같은 이미지가 있습니다.", "{{.name}} has no available configuration options": "{{.name}} 이 사용 가능한 환경 정보 옵션이 없습니다", + "{{.name}} has the following images:": "", "{{.name}} is already running": "{{.name}} 이 이미 실행 중입니다", "{{.name}} was successfully configured": "{{.name}} 이 성공적으로 설정되었습니다", - "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "", - "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "", - "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "", - "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.ociBin}} rmi {{.images}}": "", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "", "{{.path}} is v{{.client_version}}, which may be incompatible with Kubernetes v{{.cluster_version}}.": "{{.path}} 의 버전은 v{{.client_version}} 이므로, 쿠버네티스 버전 v{{.cluster_version}} 과 호환되지 않을 수 있습니다", "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}{{.platform}} 의 minikube {{.version}}", "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} 프로파일이 올바르지 않습니다: {{.err}}", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", "{{.url}} is not accessible: {{.error}}": "{{.url}} 이 접근 불가능합니다: {{.error}}" -} \ No newline at end of file +} diff --git a/translations/pl.json b/translations/pl.json index e634bbdefd1c..26a9f4becf50 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -1,5 +1,8 @@ { + "\n\n": "", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "", "\"The '{{.minikube_addon}}' addon is disabled": "", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "", "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "", "\"{{.machineName}}\" does not exist, nothing to stop": "", "\"{{.minikube_addon}}\" was successfully disabled": "\"{{.minikube_addon}}\" został wyłączony", @@ -13,16 +16,26 @@ "'none' driver does not support 'minikube podman-env' command": "", "'none' driver does not support 'minikube ssh' command": "sterownik 'none' nie wspiera komendy 'minikube ssh'", "'none' driver does not support 'minikube ssh-host' command": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "", "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "", "- Docs https://docs.docker.com/docker-for-mac/#resources": "", "- Docs https://docs.docker.com/docker-for-windows/#resources": "", "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "", "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "", "- Restart your {{.driver_name}} service": "", - "- {{.logPath}}": "", "--kvm-numa-count range is 1-8": "", - "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", - "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "", + "--static-ip overrides --subnet, --subnet will be ignored": "", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "", "==\u003e Audit \u003c==": "==\u003e Audyt \u003c==", "==\u003e Last Start \u003c==": "==\u003e Ostatni start \u003c==", "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "VPN lub zapora sieciowa przeszkadza w komunikacji protokołem HTTP z maszyną wirtualną minikube. Spróbuj użyć innego sterownika: https://minikube.sigs.k8s.io/docs/start/", @@ -35,13 +48,16 @@ "Access the Kubernetes dashboard running within the minikube cluster": "Dostęp do dashboardu uruchomionego w klastrze kubernetesa w minikube", "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", "Add SSH identity key to SSH authentication agent": "", + "Add an image into minikube as a local cache, or delete, reload the cached images": "", "Add an image to local cache.": "Dodaj obraz do lokalnego cache", "Add host key to SSH known_hosts file": "Dodaj klucz hosta do pliku known_hosts", "Add image to cache for all running minikube clusters": "Dodaj obraz do cache'a dla wszystkich uruchomionych klastrów minikube", "Add machine IP to NO_PROXY environment variable": "Dodaj IP serwera do zmiennej środowiskowej NO_PROXY", "Add, delete, or push a local image into minikube": "Dodaj, usuń lub wypchnij lokalny obraz do minikube", "Add, remove, or list additional nodes": "Dodaj, usuń lub wylistuj pozostałe węzły", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", "Adding node {{.name}} to cluster {{.cluster}}": "Dodawanie węzła {{.name}} do klastra {{.cluster}}", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "", "Additional help topics": "Dodatkowe tematy pomocy", "Additional mount options, such as cache=fscache": "Dodatkowe opcje montowania, jak na przykład cache=fscache", "Adds a node to the given cluster config, and starts it.": "Dodaje węzeł do konfiguracji danego klastra i wystartowuje go", @@ -50,17 +66,22 @@ "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "Po włączeniu addona wykonaj komendę \"minikube tunnel\". Twoje zasoby będą dostępne pod adresem \"127.0.0.1\"", "Aliases": "Aliasy", "All existing scheduled stops cancelled": "Wszystkie zaplanowane zatrzymania zostały anulowane", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "", "Allow user prompts for more information": "", - "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", + "Alternatively you could install one of these drivers:": "", "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "Ilość zarezerwowanej pamięci RAM dla maszyny wirtualnej minikube (format: \u003cnumber\u003e[\u003cunit\u003e], gdzie jednostka to = b, k, m lub g)", "Amount of time to wait for a service in seconds": "Czas oczekiwania na serwis w sekundach", "Amount of time to wait for service in seconds": "Czas oczekiwania na serwis w sekundach", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "", "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "Inny hiperwizor, taki jak Virtualbox, powoduje konflikty z KVM. Zatrzymaj innego hiperwizora lub użyj flagi --driver żeby go zmienić.", "Another minikube instance is downloading dependencies... ": "Inny program minikube już pobiera zależności...", "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "Inny program używa pliku wymaganego przez minikube. Jeśli używasz Hyper-V, spróbuj zatrzymać maszynę wirtualną minikube z poziomu managera Hyper-V", + "Another tunnel process is already running, terminate the existing instance to start a new one": "", "At least needs control plane nodes to enable addon": "Wymaga węzłów z płaszczyzny kontrolnej do włączenia addona", "Automatically selected the {{.driver}} driver": "Automatycznie wybrano sterownik {{.driver}}", "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Automatycznie wybrano sterownik {{.driver}}. Inne możliwe sterowniki: {{.alternates}}", + "Automatically selected the {{.network}} network": "", "Available Commands": "Dostępne polecenia", "Basic Commands:": "Podstawowe polecenia", "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Z powodu użycia sterownika dockera na systemie operacyjnym {{.operating_system}}, terminal musi zostać uruchomiony.", @@ -70,12 +91,21 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "Zbuduj obraz kontenera w minikube", "Build a container image, using the container runtime.": "Zbuduj obraz kontenera używając środowiska uruchomieniowego kontenera", + "Build image on all nodes.": "", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", "Cache image from docker daemon": "", "Cache image from remote registry": "", + "Cache image to docker daemon": "", + "Cache image to remote registry": "", "Cannot find directory {{.path}} for copy": "Nie znaleziono katalogu {{.path}} do skopiowania", "Cannot find directory {{.path}} for mount": "Nie można odnaleźć folderu {{.path}} do zamontowania", "Cannot use both --output and --format options": "Nie można użyć obydwu opcji --output i --format jednocześnie", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "", + "Certificate {{.certPath}} has expired. Generating a new one...": "", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "Sprawdź czy są uruchomione jakieś niepotrzebne pody za pomocą komendy: 'kubectl get pod -A' ", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", "Check that libvirt is setup properly": "Sprawdź czy bibliteka libvirt jest poprawnie zainstalowana", @@ -89,8 +119,8 @@ "Configuration and Management Commands:": "Polecenia konfiguracji i zarządzania", "Configure a default route on this Linux host, or use another --driver that does not require it": "", "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", - "Configure environment to use minikube's Docker daemon": "", "Configure environment to use minikube's Podman service": "", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "", "Configuring RBAC rules ...": "Konfigurowanie zasad RBAC ...", "Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "Konfigurowanie środowiska dla Kubernetesa w wersji {{.k8sVersion}} na {{.runtime}} {{.runtimeVersion}}", @@ -104,25 +134,28 @@ "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", "Copy the specified file into minikube": "Skopiuj dany plik do minikube", - "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "", "Could not determine a Google Cloud project, which might be ok.": "", "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "", "Could not process error from failed deletion": "", "Could not process errors from failed deletion": "", "Could not resolve IP address": "", "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "", "Created a new profile : {{.profile_name}}": "Stworzono nowy profil : {{.profile_name}}", "Creating a new profile failed": "Tworzenie nowego profilu nie powiodło się", "Creating mount {{.name}} ...": "", "Creating {{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Tworzenie {{.driver_name}} (CPUs={{.number_of_cpus}}, Pamięć={{.memory_size}}MB, Dysk={{.disk_size}}MB)...", - "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "", "Current context is \"{{.context}}\"": "Obecny kontekst to \"{{.context}}\"", "DEPRECATED, use `driver` instead.": "PRZESTARZAŁE, użyj zamiast tego `driver`", + "DEPRECATED: Replaced by --cni": "", "DEPRECATED: Replaced by --cni=bridge": "PRZESTARZAŁE, zostało zastąpione przez --cni=bridge", "Default group id used for the mount": "Domyślne id groupy użyte dla montowania", "Default user id used for the mount": "Domyślne id użytkownika użyte dla montowania ", "Delete an image from the local cache.": "Usuń obraz z lokalnego cache'a", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "", "Deletes a local Kubernetes cluster": "Usuwa lokalny klaster Kubernetesa", "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "", "Deletes a local kubernetes cluster": "Usuwa lokalny klaster Kubernetesa", @@ -133,6 +166,8 @@ "Deleting container \"{{.name}}\" ...": "Usuwanie kontenera \"{{.name}}\" ...", "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", "Deleting node {{.name}} from cluster {{.cluster}}": "Usuwanie węzła {{.name}} z klastra {{.cluster}}", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "", + "Directory to output licenses to": "", "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "", "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", @@ -143,6 +178,7 @@ "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "", "Display values currently set in the minikube config file": "Wyświetl wartości z obecnej konfiguracji minikube", "Display values currently set in the minikube config file.": "Wyświetl wartości z obecnej konfiguracji minikube", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "", "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "", "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", @@ -155,21 +191,24 @@ "Done! kubectl is now configured to use \"{{.name}}": "Gotowe! kubectl jest skonfigurowany do użycia z \"{{.name}}\".", "Done! kubectl is now configured to use \"{{.name}}\"": "Gotowe! kubectl jest skonfigurowany do użycia z \"{{.name}}\".", "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "", + "Done! minikube is ready without Kubernetes!": "", "Download complete!": "Pobieranie zakończone!", "Downloading Kubernetes {{.version}} preload ...": "", "Downloading VM boot image ...": "Pobieranie obrazu maszyny wirtualnej ...", "Downloading driver {{.driver}}:": "", "Downloading {{.name}} {{.version}}": "Pobieranie {{.name}} {{.version}}", - "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "", - "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "", "ERROR creating `registry-creds-dpr` secret": "", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", "ERROR creating `registry-creds-gcr` secret: {{.error}}": "", "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "", - "Enable addons. see `minikube addons list` for a list of valid addon names.": "", "Enable experimental NVIDIA GPU support in minikube": "Aktywuj eksperymentalne wsparcie minikube dla NVIDIA GPU", "Enable host resolver for NAT DNS requests (virtualbox driver only)": "", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "", "Enable or disable a minikube addon": "", "Enable proxy for NAT DNS requests (virtualbox driver only)": "", "Enabled addons: {{.addons}}": "", @@ -198,9 +237,9 @@ "Error generating unset output": "", "Error getting cluster bootstrapper": "", "Error getting cluster config": "", + "Error getting control-plane node": "", "Error getting host": "", "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "", - "Error getting primary control plane": "", "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "", "Error getting ssh client": "", "Error getting the host IP address to use from within the VM": "", @@ -227,67 +266,82 @@ "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "", "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "", "Fail check if container paused": "", + "Failed removing pid from pidfile: {{.error}}": "", "Failed runtime": "", "Failed to build image": "", "Failed to cache and load images": "", "Failed to cache binaries": "", - "Failed to cache images": "", "Failed to cache images to tar": "", "Failed to cache kubectl": "", "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Nie udało się zmienić uprawnień pliku {{.minikube_dir_path}}: {{.error}}", "Failed to check main repository and mirrors for images": "", + "Failed to configure auto-pause {{.profile}}": "", "Failed to configure metallb IP {{.profile}}": "", + "Failed to configure registry-aliases {{.profile}}": "", "Failed to create file": "", - "Failed to create runtime": "", "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "", "Failed to delete cluster {{.name}}.": "", "Failed to delete cluster: {{.error}}": "", "Failed to delete images": "", "Failed to delete images from config": "", + "Failed to delete profile(s): {{.error}}": "", "Failed to download kubectl": "Pobieranie kubectl nie powiodło się", + "Failed to download licenses": "", "Failed to enable container runtime": "", "Failed to get bootstrapper": "", "Failed to get command runner": "", "Failed to get image map": "", - "Failed to get service URL: {{.error}}": "", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "", + "Failed to get temp": "", "Failed to kill mount process: {{.error}}": "Zabicie procesu nie powiodło się: {{.error}}", "Failed to list cached images": "", "Failed to list images": "", "Failed to load image": "", "Failed to persist images": "", "Failed to pull image": "", + "Failed to pull images": "", + "Failed to push images": "", + "Failed to read temp": "", "Failed to reload cached images": "", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to remove profile": "Usunięcie profilu nie powiodło się", "Failed to save config": "Zapisywanie konfiguracji nie powiodło się", "Failed to save config {{.profile}}": "", "Failed to save dir": "", + "Failed to save image": "", "Failed to save stdin": "", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "", "Failed to setup certs": "Konfiguracja certyfikatów nie powiodła się", "Failed to setup kubeconfig": "Konfiguracja kubeconfig nie powiodła się", "Failed to start container runtime": "", "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "", - "Failed to stop node {{.name}}": "", + "Failed to stop node {{.name}}: {{.error}}": "", + "Failed to stop ssh-agent process: {{.error}}": "", + "Failed to tag images": "", "Failed to update cluster": "Aktualizacja klastra nie powiodła się", "Failed to update config": "Aktualizacja konfiguracji nie powiodła się", "Failed unmount: {{.error}}": "", - "File permissions used for the mount": "", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "", "Filter to use only VM Drivers": "", "Flags": "", "Follow": "", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "", "For improved {{.driver}} performance, {{.fix}}": "", "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "", "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", "For more information, see: {{.url}}": "", "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", "Force minikube to perform possibly dangerous operations": "Wymuś wykonanie potencjalnie niebezpiecznych operacji", + "Format output. One of: short|table|json|yaml": "", "Format to print stdout in. Options include: [text,json]": "", + "Forwards all services in a namespace (defaults to \"false\")": "", "Found docker, but the docker service isn't running. Try restarting the docker service.": "", "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "", "Found network options:": "Wykryto opcje sieciowe:", "Found {{.number}} invalid profile(s) !": "Wykryto {{.number}} nieprawidłowych profili ! ", "Found {{.number}} invalid profile(s) ! ": "", + "Generate command completion for PowerShell.": "", "Generate command completion for a shell": "", "Generate command completion for bash.": "", "Generate command completion for fish .": "", @@ -302,31 +356,42 @@ "Gets the status of a local kubernetes cluster": "Pobiera aktualny status klastra kubernetesa", "Gets the value of PROPERTY_NAME from the minikube config file": "", "Global Flags": "", - "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", - "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", - "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "", "Group ID: {{.groupID}}": "", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "", "Have you set up libvirt correctly?": "Czy napewno skonfigurowano libvirt w sposób prawidłowy?", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "", "IP Address to use to expose ports (docker and podman driver only)": "", "IP address (ssh driver only)": "", "If present, writes to the provided file instead of stdout.": "", + "If set, added node will be available as worker. Defaults to true.": "", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "", "If set, automatically updates drivers to the latest version. Defaults to true.": "", "If set, delete the current cluster if start fails and try again. Defaults to false.": "", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "", "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "", "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "", "If set, install addons. Defaults to true.": "", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "", "If set, pause all namespaces": "", "If set, unpause all namespaces": "", "If the above advice does not help, please let us know:": "", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "", "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "", "If true, only download and cache files for later use - don't install or start anything.": "", "If true, pods might get deleted and restarted on addon enable": "", + "If true, print web links to addons' documentation if using --output=list (default).": "", + "If true, returns a detailed list of profiles.": "", "If true, returns list of profiles faster by skipping validating the status of the cluster.": "", - "If true, the added node will be marked for work. Defaults to true.": "", - "If true, the node added will also be a control plane in addition to a worker.": "", "If true, will perform potentially dangerous operations. Use with discretion.": "", "If using the none driver, ensure that systemctl is installed": "Jeśli użyto sterownika 'none', upewnij się że systemctl jest zainstalowany", "If you are running minikube within a VM, consider using --driver=none:": "", @@ -337,23 +402,33 @@ "Ignoring invalid pair entry {{.pair}}": "", "Ignoring unknown custom image {{.name}}": "", "Ignoring unknown custom registry {{.name}}": "", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "", "Images Commands:": "", "Images used by this addon. Separated by commas.": "", "In order to use the fall back image, you need to log in to the github packages registry": "", "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", + "Interval is an invalid duration: {{.error}}": "", + "Interval must be greater than 0s": "", "Invalid port": "", "Invalid size passed in argument: {{.error}}": "Nieprawidłowy rozmiar przekazany w argumencie: {{.error}}", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "Kept for backward compatibility, value is ignored.": "", + "Kicbase images have not been deleted. To delete images run:": "", "Kill the mount process spawned by minikube start": "", - "Kubelet network plug-in to use (default: auto)": "", "Kubernetes requires at least 2 CPU's to start": "", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "", + "Kubernetes version {{.specified}} found in GitHub version list": "", + "Kubernetes version {{.specified}} found in version list": "", + "Kubernetes version {{.version}} is not supported by this release of minikube": "", "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "", "Kubernetes {{.version}} is not supported by this release of minikube": "", + "Kubernetes: Stopping ...": "", + "Kubernetes: {{.status}}": "", "Launching Kubernetes ...": "Uruchamianie Kubernetesa ...", "Launching proxy ...": "Uruchamianie proxy ...", "List all available images from the local cache.": "", @@ -370,18 +445,22 @@ "Lists all valid default values for PROPERTY_NAME": "Wylistuj wszystkie prawidłowe domyślne wartości dla opcji konfiguracyjnej PROPERTY_NAME", "Lists all valid minikube profiles and detects all possible invalid profiles.": "Wylistuj wszystkie prawidłowe profile minikube i wykryj wszystkie nieprawidłowe profile.", "Lists the URLs for the services in your local cluster": "Wylistuj adresy URL serwisów w twoim lokalnym klastrze", - "Load a image into minikube": "Załaduj obraz do minikube", + "Load an image into minikube": "Załaduj obraz do minikube", "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "Lokalne katalogi do współdzielenia z Guestem poprzez NFS (tylko sterownik hyperkit)", "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "", "Location of the minikube iso": "Ścieżka do obrazu iso minikube", "Location of the minikube iso.": "Ścieżka do obrazu iso minikube", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "", "Locations to fetch the minikube ISO from.": "Ścieżki, z których pobrany będzie obra ISO minikube", "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'": "Zaloguj się i wykonaj polecenie w maszynie za pomocą ssh. Podobne do 'docker-machine ssh'", "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Zaloguj się i wykonaj polecenie w maszynie za pomocą ssh. Podobne do 'docker-machine ssh'", "Log into the minikube environment (for debugging)": "Zaloguj się do środowiska minikube (do debugowania)", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "", + "Manage cache for images": "", "Manage images": "Zarządzaj obrazami", "Message Size: {{.size}}": "Rozmiar wiadomości: {{.size}}", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "", "Modify persistent configuration values": "Modyfikuj globalne opcje konfiguracyjne", "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "Więcej informacji: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", "Most users should use the newer 'docker' driver instead, which does not require root!": "Większość użytkowników powinna używać nowszego sterownika docker, ktory nie wymaga uruchamiania z poziomu roota!", @@ -390,16 +469,23 @@ "Mounts the specified directory into minikube": "Montuje podany katalog wewnątrz minikube", "Mounts the specified directory into minikube.": "Montuje podany katalog wewnątrz minikube", "Multiple errors deleting profiles": "Wystąpiło wiele błędów podczas usuwania profili", + "Multiple errors encountered:": "", "Multiple minikube profiles were found - ": "Znaleziono wiele profili minikube - ", "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", "Networking and Connectivity Commands:": "", "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "Nie znaleziono adresu IP. Spróbuj przekazać adres IP za pomocą flagi --ssh-ip-address lub odwiedź https://minikube.sigs.k8s.io/docs/drivers/ssh/", "No changes required for the \"{{.context}}\" context": "Żadne zmiany nie są wymagane dla kontekstu \"{{.context}}\"", + "No control-plane nodes found.": "", + "No minikube profile was found.": "", "No minikube profile was found. ": "Nie znaleziono żadnego profilu minikube", "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Nie znaleziono żadnego możliwego sterownika. Spróbuj przekazać sterownik za pomocą flagi --driver lub odwiedź https://minikube.sigs.k8s.io/docs/start/", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "", "No such addon {{.name}}": "Nie istnieje addon {{.name}}", + "No valid URL found for tunnel.": "", + "No valid port found for tunnel.": "", "Node {{.name}} failed to start, deleting and trying again.": "Węzeł {{.name}} nie uruchomił się pomyślnie. Usuwam i próbuję uruchomić węzeł ponownie", "Node {{.name}} was successfully deleted.": "Węzeł {{.name}} został pomyślnie usunięty", "Node {{.nodeName}} does not exist.": "Węzeł {{.nodeName}} nie istnieje", @@ -410,53 +496,65 @@ "Number of CPUs allocated to Kubernetes.": "Liczba procesorów przypisana do Kubernetesa", "Number of CPUs allocated to the minikube VM": "Liczba procesorów przypisana do maszyny wirtualnej minikube", "Number of CPUs allocated to the minikube VM.": "Liczba procesorów przypisana do maszyny wirtualnej minikube", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "Wersja systemu operacyjnego to {{.pretty_name}}", + "One of 'text', 'yaml' or 'json'.": "", "One of 'yaml' or 'json'.": "Jeden z dwóćh formatów - 'yaml' lub 'json'", "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "Tylko znaki alfanumeryczne oraz myślniki '-' są dozwolone. Co najmniej jeden znak, zaczynając od znaku alfanumerycznego", "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "Tylko znaki alfanumeryczne oraz myślniki '-' są dozwolone. Co najmniej dwa znaki, zaczynając od znaku alfanumerycznego", "Open the addons URL with https instead of http": "Otwórz URL addonów używając protokołu https zamiast http", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "Otwórz URL serwisu używając protokołu https zamiast http (domyślnie ma wartość fałsz)", + "Open the service URL with https instead of http (defaults to \"false\")": "Otwórz URL serwisu używając protokołu https zamiast http (domyślnie ma wartość fałsz)", "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "Otwieranie serwisu Kubernetesa {{.namespace_name}}/{{.service_name}} w domyślnej przeglądarce...", "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "Otwieranie serwisu {{.namespace_name}}/{{.service_name}} w domyślnej przeglądarce...", "Opening {{.url}} in your default browser...": "Otwieranie {{.url}} w domyślnej przeglądarce...", "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", "Operations on nodes": "Operacje na węzłach", "Options: {{.options}}": "Opcje: {{.options}}", + "Output format. Accepted values: [json, yaml]": "", "Output format. Accepted values: [json]": "Format wyjściowy. Akceptowane wartości: [json]", "Outputs minikube shell completion for the given shell (bash or zsh)": "Zwraca autouzupełnianie poleceń minikube dla danej powłoki (bash, zsh)", - "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Outputs the licenses of dependencies to a directory": "", "Overwrite image even if same image:tag name exists": "Nadpisuje obraz nawet jeśli istnieje obraz o tej samej nazwie i tagu.", + "Path to socket vmnet binary (QEMU driver only)": "", "Path to the Dockerfile to use (optional)": "Ścieżka pliku Dockerfile, którego należy użyć (opcjonalne)", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "", + "Path to the socket vmnet client binary (QEMU driver only)": "", "Pause": "Stop", "Paused {{.count}} containers": "Zatrzymane kontenery: {{.count}}", "Paused {{.count}} containers in: {{.namespaces}}": "Zatrzymane kontenery: {{.count}} w przestrzeniach nazw: {{.namespaces}}", "Pausing node {{.name}} ... ": "Zatrzymywanie węzła {{.name}} ... ", - "Permissions: {{.octalMode}} ({{.writtenMode}})": "", + "Please also attach the following file to the GitHub issue:": "", "Please attach the following file to the GitHub issue:": "Dołącz następujący plik do zgłoszenia problemu na GitHubie:", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "Utwórz klaster z większym rozmiarem dysku: `minikube start --disk SIZE_MB`", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "Uwierzytelnij się w rejestrze lub użyć flagi --base-image w celu użycia innego rejestru.", "Please enter a value:": "Wprowadź wartość", "Please free up disk or prune images.": "Zwolnij miejsce na dysku lub usuń niepotrzebne obrazy", + "Please increase Desktop's disk size.": "", "Please increse Desktop's disk size.": "Zwiększ miejsce na dysku dla programu Docker Desktop", "Please install the minikube hyperkit VM driver, or select an alternative --driver": "Zainstaluj sterownik hyperkit lub wybierz inny sterownik używając flagi --driver", "Please install the minikube kvm2 VM driver, or select an alternative --driver": "Zainstaluj sterownik kvm2 lub wybierz inny sterownik używając flagi --driver", "Please make sure the service you are looking for is deployed or is in the correct namespace.": "Proszę upewnij się, że serwis którego szukasz znajduje się w prawidłowej przestrzeni nazw", "Please provide a path or url to build": "", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "", "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", + "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "Zobacz {{.documentation_url}} żeby uzyskać więcej informacji", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "Sprecyzuj katalog, który ma być zamontowany: \n\tminikube mount \u003ckatalog źródłowy\u003e:\u003ckatalog docelowy\u003e (przykład: \"/host-home:/vm-home\")", - "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", "Please try purging minikube using `minikube delete --all --purge`": "Spróbuj wyczyścic minikube używając: `minikube delete --all --purge`", "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "Proszę zaktualizować '{{.driver_executable}}'. {{.documentation_url}}", - "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", "Populates the specified folder with documentation in markdown about minikube": "Umieszcza dokumentację minikube w formacie markdown w podanym katalogu", "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "PowerShell jest uruchomiony w trybie ograniczonym, co jest niekompatybilne ze skryptowaniem w wirtualizacji z użyciem Hyper-V", "Powering off \"{{.profile_name}}\" via SSH ...": "Wyłączanie klastra \"{{.profile_name}}\" przez SSH ...", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Przygotowywanie Kubernetesa {{.k8sVersion}} na {{.runtime}} {{.runtimeVersion}}...", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "", "Print current and latest version number": "Wyświetl aktualną i najnowszą wersję", "Print just the version number.": "Wyświetl tylko numer wersji", "Print the version of minikube": "Wyświetl wersję minikube", @@ -471,13 +569,18 @@ "Profile name '{{.profilename}}' is not valid": "", "Profile name should be unique": "", "Provide VM UUID to restore MAC address (hyperkit driver only)": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "", + "Pull images": "", "Pull the remote image (no caching)": "", - "Pulling base image ...": "", + "Pulling base image {{.kicVersion}} ...": "", + "Push images": "", "Push the new image (requires tag)": "", "Reboot to complete VirtualBox installation, and verify that VirtualBox is not blocked by your system": "Uruchom ponownie komputer aby zakończyć instalację VirtualBox'a i upewnij się, że nie jest on blokowany przez twój system", "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "", "Rebuild libvirt with virt-network support": "", "Received {{.name}} signal": "", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "", "Registries used by this addon. Separated by commas.": "", "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "", "Registry mirrors to pass to the Docker daemon": "", @@ -491,7 +594,6 @@ "Removing {{.directory}} ...": "", "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "", - "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", @@ -513,7 +615,7 @@ "Retrieves the IP address of the specified node, and writes it to STDOUT.": "", "Returns a URL to connect to a service": "", "Returns logs to debug a local Kubernetes cluster": "", - "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", @@ -523,7 +625,8 @@ "Run kubectl": "Uruchamia kubectl", "Run minikube from the C: drive.": "", "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "", - "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "", "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", @@ -533,9 +636,13 @@ "SSH key (ssh driver only)": "", "SSH port (ssh driver only)": "", "SSH user (ssh driver only)": "", + "Save a image from minikube": "", + "Searching the internet for Kubernetes version...": "", "Select a valid value for --dnsdomain": "", "Send trace events. Options include: [gcp]": "", "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "", "Set failed": "", "Set flag to delete all profiles": "", "Set flag to stop all profiles (clusters)": "", @@ -549,11 +656,14 @@ "Setting profile failed": "Ustawianie profilu nie powiodło się", "Show a list of global command-line options (applies to all commands).": "", "Show only log entries which point to known problems": "Pokaż logi które wskazują na znane problemy", + "Show only the audit logs": "", + "Show only the last start logs.": "", "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "", "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Zignorowano zmianę kontekstu kubectl dla {{.profile_name}} ponieważ --keep-context zostało przekazane", - "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "", "Sorry, completion support is not yet implemented for {{.name}}": "", "Sorry, please set the --output flag to one of the following valid options: [text,json]": "", "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "", @@ -562,25 +672,25 @@ "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "", "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "", "Source {{.path}} can not be empty": "", - "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "", "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "", "Specify arbitrary flags to pass to the build. (format: key=value)": "", - "Specify the 9p version that the mount should use": "", - "Specify the ip that the mount should be setup on": "", - "Specify the mount filesystem type (supported types: 9p)": "", - "Specify the port that the mount should be setup on, where 0 means any free port.": "", "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "", "StartHost failed, but will try again: {{.error}}": "", - "Starting control plane node {{.name}} in cluster {{.cluster}}": "", - "Starting node {{.name}} in cluster {{.cluster}}": "", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "", "Starting tunnel for service {{.service}}.": "", "Starts a local Kubernetes cluster": "", "Starts a local kubernetes cluster": "Uruchamianie lokalnego klastra kubernetesa", "Starts a node.": "", "Starts an existing stopped node in a cluster.": "", "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "", + "Stopped tunnel for service {{.service}}.": "", "Stopping \"{{.profile_name}}\" in {{.driver_name}} ...": "Zatrzymywanie \"{{.profile_name}}\" - {{.driver_name}}...", "Stopping node \"{{.name}}\" ...": "", "Stopping tunnel for service {{.service}}.": "", @@ -588,64 +698,77 @@ "Stops a node in a cluster.": "", "Stops a running local Kubernetes cluster": "", "Stops a running local kubernetes cluster": "Zatrzymuje lokalny klaster kubernetesa", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "", "Successfully added {{.name}} to {{.cluster}}!": "", "Successfully deleted all profiles": "", "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "Pomyślnie zamontowano {{.sourcePath}} do {{.destinationPath}}", "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "", "Successfully started node {{.name}}!": "", "Successfully stopped node {{.name}}": "", + "Successfully unblocked bootpd process from firewall, retrying": "", "Suggestion: {{.advice}}": "Sugestia: {{.advice}}", "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "Tag images": "", "Tag to apply to the new image (optional)": "", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "", "Target directory {{.path}} must be an absolute path": "", "Target {{.path}} can not be empty": "", "Test docs have been saved at - {{.path}}": "", "The \"{{.cluster_name}}\" cluster has been deleted.": "Klaster \"{{.cluster_name}}\" został usunięty", "The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo minikube --vm-driver={{.driver_name}}'.": "Sterownik \"{{.driver_name}}\" wymaga uprawnień root'a. Użyj 'sudo minikube --vm-driver={{.driver_name}}'", "The \"{{.driver_name}}\" driver should not be used with root privileges.": "", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "", "The \"{{.name}}\" cluster has been deleted.": "Klaster \"{{.name}}\" został usunięty.", + "The \"{{.name}}\" container runtime requires CNI": "", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "", "The 'none' driver is designed for experts who need to integrate with an existing VM": "", "The '{{.addonName}}' addon is enabled": "", - "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "", "The '{{.driver}}' provider was not found: {{.error}}": "", "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", "The '{{.name}}' driver does not respect the --cpus flag": "", "The '{{.name}}' driver does not respect the --memory flag": "", - "The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically": "", - "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "", + "The '{{.name}}' driver does not support --cpus=no-limit": "", + "The '{{.name}}' driver does not support --memory=no-limit": "", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "", "The CIDR to be used for service cluster IPs.": "", "The CIDR to be used for the minikube VM (virtualbox driver only)": "", "The KVM QEMU connection URI. (kvm2 driver only)": "", "The KVM default network name. (kvm2 driver only)": "", "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", "The KVM network name. (kvm2 driver only)": "Nazwa sieci KVM. (wspierane tylko przez kvm2)", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "", "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", - "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "API nasłuchuje na porcie:", - "The argument to pass the minikube mount command on start.": "", "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", "The base image to use for docker/podman drivers. Intended for local development.": "", "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", "The cluster dns domain name used in the Kubernetes cluster": "", "The cluster dns domain name used in the kubernetes cluster": "Domena dns klastra użyta przez kubernetesa", - "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "", "The container runtime to be used (docker, crio, containerd)": "Runtime konteneryzacji (docker, crio, containerd).", - "The control plane for \"{{.name}}\" is paused!": "", - "The control plane node \"{{.name}}\" does not exist.": "", - "The control plane node is not running (state={{.state}})": "", - "The control plane node must be running for this command": "", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is paused": "", + "The control-plane node {{.name}} apiserver is paused (will try others)": "", + "The control-plane node {{.name}} host does not exist": "", + "The control-plane node {{.name}} host does not exist (will try others)": "", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "", + "The control-plane node {{.name}} host is not running: state={{.state}}": "", "The cri socket path to be used.": "", "The docker service is currently not active": "Serwis docker jest nieaktywny", "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Sterownik '{{.driver}} jest niewspierany przez system {{.os}}/{{.arch}}", "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "", "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", "The heapster addon is depreciated. please try to disable metrics-server instead": "", + "The host does not support filesystem 9p.": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "", "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", @@ -657,6 +780,7 @@ "The name of the network plugin": "Nazwa pluginu sieciowego", "The name of the network plugin.": "Nazwa pluginu sieciowego", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -667,41 +791,50 @@ "The node {{.name}} has ran out of memory.": "", "The node {{.name}} network is not available. Please verify network settings.": "", "The none driver is not compatible with multi-node clusters.": "", - "The number of bytes to use for 9p packet payload": "", - "The number of nodes to spin up. Defaults to 1.": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "", "The output format. One of 'json', 'table'": "", "The path on the file system where the docs in markdown need to be saved": "", "The path on the file system where the error code docs in markdown need to be saved": "", "The path on the file system where the testing docs in markdown need to be saved": "", "The podman service within '{{.cluster}}' is not active": "", "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "", "The service namespace": "", - "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "", "The services namespace": "", + "The socket_vmnet network is only supported on macOS": "", "The time interval for each check that wait performs in seconds": "", + "The total number of nodes to spin up. Defaults to 1.": "", "The value passed to --format is invalid": "Wartość przekazana do --format jest nieprawidłowa", "The value passed to --format is invalid: {{.error}}": "Wartość przekazana do --format jest nieprawidłowa: {{.error}}", + "The vfkit driver is only supported on macOS": "", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "", "The {{.driver_name}} driver should not be used with root privileges.": "{{.driver_name}} nie powinien być używany z przywilejami root'a.", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "", "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "", "These changes will take effect upon a minikube delete and then a minikube start": "", + "Things to try without Kubernetes ...": "", "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "", - "This control plane is not running! (state={{.state}})": "", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "", "This driver does not yet work on your architecture. Maybe try --driver=none": "", "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", - "This is unusual - you may want to investigate using \"{{.command}}\"": "", "This will keep the existing kubectl context and will create a minikube context.": "", - "This will start the mount daemon and automatically mount files into minikube.": "", - "This {{.type}} is having trouble accessing https://{{.repository}}": "", "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "", + "To configure vment-helper to run without a password, please check the documentation:": "", "To connect to this cluster, use: --context={{.name}}": "", "To connect to this cluster, use: kubectl --context={{.name}}": "Aby połączyć się z klastrem użyj: kubectl --context={{.name}}", "To connect to this cluster, use: kubectl --context={{.profile_name}}": "Aby połaczyć się z klastrem użyj: kubectl --context={{.profile_name}}", "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "", "To disable this notice, run: 'minikube config set WantUpdateNotification false'": "Aby wyłączyć tę notyfikację, użyj: 'minikube config set WantUpdateNotification false'", - "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "", "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", "To see addons list for other profiles use: `minikube addons -p name list`": "", "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", @@ -712,35 +845,45 @@ "Troubleshooting Commands:": "", "Try 'minikube delete' to force new SSL certificates to be installed": "", "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", "Trying to delete invalid profile {{.profile}}": "", + "Tunnel successfully started": "", "Unable to bind flags": "", "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", + "Unable to delete profile(s): {{.error}}": "", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "", "Unable to enable dashboard": "", "Unable to fetch latest version info": "", - "Unable to find control plane": "", + "Unable to find any control-plane nodes": "", "Unable to generate docs": "", "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", "Unable to get CPU info: {{.err}}": "", - "Unable to get command runner": "", - "Unable to get control plane status: {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "", "Unable to get current user": "", - "Unable to get forwarded endpoint": "", - "Unable to get machine status": "", "Unable to get runtime": "", "Unable to kill mount process: {{.error}}": "", "Unable to list profiles: {{.error}}": "", "Unable to load cached images: {{.error}}": "", "Unable to load config: {{.error}}": "", - "Unable to load host": "", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "", + "Unable to load control-plane node {{.name}} host: {{.err}}": "", "Unable to load profile: {{.error}}": "", "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "", - "Unable to parse default Kubernetes version from constants: {{.error}}": "", "Unable to parse memory '{{.memory}}': {{.error}}": "", - "Unable to parse oldest Kubernetes version from constants: {{.error}}": "", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "", "Unable to pick a default driver. Here is what was considered, in preference order:": "", "Unable to push cached images: {{.error}}": "", "Unable to remove machine directory": "", - "Unable to restart cluster, will reset it: {{.error}}": "", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "", + "Unable to run vmnet-helper without a password": "", "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", "Unable to start VM": "Nie można uruchomić maszyny wirtualnej", "Unable to stop VM": "Nie można zatrzymać maszyny wirtualnej", @@ -769,7 +912,7 @@ "Usage: minikube node start [name]": "", "Usage: minikube node stop [name]": "", "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", - "Use 'kubect get po -A' to find the correct and namespace name": "", + "Use 'kubectl get po -A' to find the correct and namespace name": "", "Use -A to specify all namespaces": "", "Use SSH connection instead of HTTPS (port 2376)": "", "Use SSH for running kubernetes client on the node": "", @@ -780,16 +923,22 @@ "User name must be 60 chars or less.": "", "Userspace file server is shutdown": "", "Userspace file server: ": "", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "", + "Using Kubernetes {{.version}} since patch version was unspecified": "", "Using image repository {{.name}}": "", "Using image {{.registry}}{{.image}}": "", "Using image {{.registry}}{{.image}} (global image repository)": "", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "", + "Using rootless driver was required, but the current driver does not seem rootless": "", + "Using rootless {{.driver_name}} driver": "", "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "", "Using the {{.driver}} driver based on existing profile": "", "Using the {{.driver}} driver based on user configuration": "", + "Using {{.driver_name}} driver with root privileges": "", "VM driver is one of: %v": "Sterownik wirtualnej maszyny to jeden z: %v", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "Zweryfikuj czy zmienne HTTP_PROXY i HTTPS_PROXY są ustawione poprawnie", "Verify the IP address of the running cluster in kubeconfig.": "Weryfikacja adresu IP działającego klastra w kubeconfig", "Verifying Kubernetes components...": "", @@ -810,42 +959,55 @@ "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "", "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", - "You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "", + "You can create one using 'minikube start'.\n\t\t": "", "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", - "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", - "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "", "You must specify a service name": "Musisz podać nazwę serwisu", + "You must specify service name(s) or --all": "", "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", "Your cgroup does not allow setting memory.": "", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "", "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "Twoje środowisko nie wspiera wirtualizacji KVM. Upewnij się, że qemu-kvm jest zainstalowane i uruchom 'virt-host-validate' aby rozwiązać problem.", "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "", "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "", "Your minikube vm is not running, try minikube start.": "", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "", "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", - "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "", "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "", "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "bash completion failed": "", "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "", "config view failed": "", - "containers paused status: {{.paused}}": "", + "dashboard": "", "dashboard service is not running: {{.error}}": "", "delete ctx": "", "deleting node": "", @@ -853,47 +1015,67 @@ "dry-run mode. Validates configuration, but does not mutate system state": "", "dry-run validation complete!": "", "enable failed": "", + "enabled failed": "", "error creating clientset": "", - "error getting primary control plane": "", + "error creating urls": "", + "error fetching Kubernetes version list from GitHub": "", + "error getting control-plane node": "", + "error getting defaults: {{.error}}": "", "error getting ssh port": "", "error initializing tracing: {{.Error}}": "", "error parsing the input ip address for mount": "", "error provisioning guest": "", "error starting tunnel": "", - "error stopping tunnel": "", + "error: --output must be 'text', 'yaml' or 'json'": "", "error: --output must be 'yaml' or 'json'": "", "experimental": "", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "", "failed to add node": "", + "failed to load profile: {{.error}}": "", "failed to open browser: {{.error}}": "Nie udało się otworzyć przeglądarki: {{.error}}", + "failed to restart auto-pause: {{.error}}": "", "failed to save config": "", + "failed to set extra option": "", "failed to start node": "", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "", "fish completion failed": "", "fish completion.": "", "if true, will embed the certs in kubeconfig.": "Jeśli ta opcja będzie miała wartoś true, zakodowane w base64 certyfikaty zostaną osadzone w pliku konfiguracyjnym kubeconfig zamiast ścieżek do plików z certyfikatami", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", "invalid kubernetes version": "Nieprawidłowa wersja Kubernetesa", + "ip not found": "", + "json encoding failure": "", "keep the kube-context active after cluster is stopped. Defaults to false.": "", + "kubeadm certificates have expired. Generating new ones...": "", "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "konfiguracja minikube i kubectl będzie przechowywana w katalogu {{.home_folder}}", "kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "kubectl nie zostało odnalezione w zmiennej środowiskowej ${PATH}. Instrukcja instalacji: https://kubernetes.io/docs/tasks/tools/install-kubectl/", "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "", "kubectl proxy": "", "libmachine failed": "", - "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "", "list versions of all components included with minikube. (the cluster must be running)": "", "loading profile": "Ładowanie profilu", "max time to wait per Kubernetes or host to be healthy.": "", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", "minikube addons list --output OUTPUT. json, list": "", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "", "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", "minikube is not meant for production use. You are opening non-local traffic": "minikube nie jest przeznaczony do użycia w środowisku produkcyjnym. Otwierasz klaster na ruch nielokalny", "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "uzyskanie dostępu do Google Container Registry poprzez minikube nie powiodło się. Możliwe, że musisz skonfigurować ustawienia proxy HTTP w minikube", "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", + "minikube mount is not currently implemented with the builtin network on QEMU": "", "minikube profile was successfully set to {{.profile_name}}": "profil minikube został z powodzeniem zmieniony na: {{.profile_name}}", "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube dostarcza lokalne klastry Kubernetesa zoptymalizowane do celów rozwoju oprogramowania oraz zarządza nimi", "minikube quickly sets up a local Kubernetes cluster": "minikube szybko inicjalizuje lokalny klaster Kubernetesa", + "minikube service is not currently implemented with the builtin network on QEMU": "", "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "użycie flagi --force sprawia, że minikube pomija pewne walidacje, co może skutkować niespodziewanym zachowaniem", "minikube status --output OUTPUT. json, text": "", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "", "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} jest dostępne! Pobierz je z: {{.url}}", "mkcmp is used to compare performance of two minikube binaries": "", "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", @@ -901,24 +1083,31 @@ "mount failed": "Montowanie się nie powiodło", "namespaces to pause": "", "namespaces to unpause": "", - "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", "none driver does not support multi-node clusters": "sterownik none nie wspiera klastrów składających się z więcej niż jednego węzła", - "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "Niewystarczająca ilośc argumentów ({{.ArgCount}}). \\nużycie: minikube config set PROPERTY_NAME PROPERTY_VALUE", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "Niewystarczająca ilośc argumentów ({{.ArgCount}}). \nużycie: minikube config set PROPERTY_NAME PROPERTY_VALUE", "numa node is only supported on k8s v1.18 and later": "", "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", "pause Kubernetes": "", - "preload extraction failed: \\\"No space left on device\\\"": "", + "powershell completion failed": "", + "powershell completion.": "", + "preload extraction failed: \"No space left on device\"": "", "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", "provisioning host for node": "", "reload cached images.": "", "reloads images previously added using the 'cache add' subcommand": "", "retrieving node": "przywracanie węzła", "scheduled stop is not supported on the none driver, skipping scheduling": "", + "service not available": "", "service {{.namespace_name}}/{{.service_name}} has no node port": "", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "", "stat failed": "wykonanie komendy stat nie powiodło się", "status json failure": "", "status text failure": "", - "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "true": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", "unable to daemonize: {{.err}}": "", @@ -936,37 +1125,46 @@ "usage: minikube addons images ADDON_NAME": "użycie: minikube addons images ADDON_NAME", "usage: minikube addons list": "użycie: minikube addons list", "usage: minikube addons open ADDON_NAME": "użycie: minikube addons open ADDON_NAME", + "usage: minikube config list PROPERTY_NAME": "", "usage: minikube config unset PROPERTY_NAME": "użycie: minikube config unset PROPERTY_NAME", "usage: minikube delete": "użycie: minikube delete", "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "użycie: minikube profile [MINIKUBE_PROFILE_NAME]", - "using metrics-server addon, heapster is deprecated": "", "version json failure": "", "version yaml failure": "", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "", "zsh completion failed": "autouzupełnianie zsh nie powiodło się", "zsh completion.": "autouzupełnianie zsh", "{{ .name }}: Suggestion: {{ .suggestion}}": "", - "{{ .name }}: {{ .rejection }}": "", - "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "", "{{.addonName}} was successfully enabled": "{{.addonName}} został aktywowany pomyślnie", - "{{.count}} nodes stopped.": "", + "{{.addon}} does not currently have an associated maintainer.": "", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "", "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "", "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "sterownik {{.driver}} ma tylko {{.size}}MiB dostępnej przestrzeni dyskowej, to mniej niż wymagane {{.req}}MiB dla Kubernetesa", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", + "{{.env}}={{.value}}": "", "{{.name}} cluster does not exist": "Klaster {{.name}} nie istnieje", "{{.name}} doesn't have images.": "{{.name}} nie ma obrazów.", "{{.name}} has following images:": "{{.name}} ma następujące obrazy:", "{{.name}} has no available configuration options": "{{.name}} nie posiada opcji konfiguracji", + "{{.name}} has the following images:": "", "{{.name}} is already running": "{{.name}} został już wcześniej uruchomiony", "{{.name}} was successfully configured": "{{.name}} skonfigurowano pomyślnie", "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "{{.n}} prawie nie ma wolnej przestrzeni dyskowej, co może powodować, że wdrożenia nie powiodą się ({{.p}}% zużycia przestrzeni dyskowej)", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "", "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "{{.n}} nie ma wolnej przestrzeni dyskowej! (/var jest w {{.p}}% pełny)", - "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "Czas odpowiedzi od {{.ocibin}} jest niespotykanie długi, rozważ ponowne uruchomienie {{.ocibin}}", - "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "{{.path}} jest w wersji {{.client_version}}, co może być niekompatybilne z Kubernetesem w wersji {{.cluster_version}}.", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.ociBin}} rmi {{.images}}": "", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "Czas odpowiedzi od {{.ocibin}} jest niespotykanie długi, rozważ ponowne uruchomienie {{.ocibin}}", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "{{.path}} jest w wersji {{.client_version}}, co może być niekompatybilne z Kubernetesem w wersji {{.cluster_version}}.", "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} na {{.platform}}", "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} profil nie jest poprawny: {{.err}}", "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} nie jest wspierany przez system plików. I tak spróbujemy!", "{{.url}} is not accessible: {{.error}}": "{{.url}} nie jest osiągalny: {{.error}}" -} \ No newline at end of file +} diff --git a/translations/ru.json b/translations/ru.json new file mode 100644 index 000000000000..4a26da0dd8e8 --- /dev/null +++ b/translations/ru.json @@ -0,0 +1,1082 @@ +{ + "\n\n": "", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "", + "\"The '{{.minikube_addon}}' addon is disabled": "\"Дополнение '{{.minikube_addon}}' выключено", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "", + "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "Контекст \"{{.context}}\" был обновлён и теперь указывает на {{.hostname}}:{{.port}}", + "\"{{.machineName}}\" does not exist, nothing to stop": "\"{{.machineName}}\" не существует, нечего останавливать", + "\"{{.name}}\" profile does not exist, trying anyways.": "Профиль \"{{.name}}\" не существует, но попробую.", + "'none' driver does not support 'minikube docker-env' command": "", + "'none' driver does not support 'minikube mount' command": "", + "'none' driver does not support 'minikube podman-env' command": "", + "'none' driver does not support 'minikube ssh' command": "", + "'none' driver does not support 'minikube ssh-host' command": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "", + "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "", + "- Docs https://docs.docker.com/docker-for-mac/#resources": "", + "- Docs https://docs.docker.com/docker-for-windows/#resources": "", + "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "", + "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "", + "- Restart your {{.driver_name}} service": "", + "--kvm-numa-count range is 1-8": "", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "", + "--static-ip overrides --subnet, --subnet will be ignored": "", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Пересоздайте кластер с Kubernetes {{.new}}, выполнив:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Создайье второй кластер с Kubernetes {{.new}}, выполнив:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Используйте существующий кластер с версией Kubernetes {{.old}}, выполнив:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Кликните на иконку \"Docker for Desktop\"\n\t\t\t2. Выберите \"Preferences\"\n\t\t\t3. Нажмите \"Resources\"\n\t\t\t4. Увеличьте кол-во \"CPUs\" до 2 или выше\n\t\t\t5. Нажмите \"Apply \u0026 Перезапуск\"", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Кликните на иконку \"Docker for Desktop\"\n\t\t\t2. Выберите \"Preferences\"\n\t\t\t3. Нажмите \"Resources\"\n\t\t\t4. Увеличьте кол-во \"emory\" до {{.recommend}} или выше\n\t\t\t5. Нажмите \"Apply \u0026 Перезапуск\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "", + "==\u003e Audit \u003c==": "", + "==\u003e Last Start \u003c==": "", + "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "", + "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "", + "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", + "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "", + "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "A set of key=value pairs that describe feature gates for alpha/experimental features.": "", + "Access the Kubernetes dashboard running within the minikube cluster": "", + "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", + "Add SSH identity key to SSH authentication agent": "", + "Add an image into minikube as a local cache, or delete, reload the cached images": "", + "Add an image to local cache.": "", + "Add host key to SSH known_hosts file": "", + "Add image to cache for all running minikube clusters": "", + "Add machine IP to NO_PROXY environment variable": "", + "Add, remove, or list additional nodes": "", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "", + "Additional help topics": "", + "Adds a node to the given cluster config, and starts it.": "", + "Adds a node to the given cluster.": "", + "Advanced Commands:": "", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "", + "Aliases": "", + "All existing scheduled stops cancelled": "", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "", + "Allow user prompts for more information": "", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", + "Alternatively you could install one of these drivers:": "", + "Amount of time to wait for a service in seconds": "", + "Amount of time to wait for service in seconds": "", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "", + "Another minikube instance is downloading dependencies... ": "", + "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "", + "Another tunnel process is already running, terminate the existing instance to start a new one": "", + "At least needs control plane nodes to enable addon": "", + "Automatically selected the {{.driver}} driver": "", + "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "", + "Automatically selected the {{.network}} network": "", + "Available Commands": "", + "Basic Commands:": "", + "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "", + "Bind Address: {{.Address}}": "", + "Booting up control plane ...": "", + "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "", + "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", + "Build a container image in minikube": "", + "Build a container image, using the container runtime.": "", + "Build image on all nodes.": "", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", + "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", + "Cache image from docker daemon": "", + "Cache image from remote registry": "", + "Cache image to docker daemon": "", + "Cache image to remote registry": "", + "Cannot find directory {{.path}} for copy": "", + "Cannot find directory {{.path}} for mount": "", + "Cannot use both --output and --format options": "", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "", + "Certificate {{.certPath}} has expired. Generating a new one...": "", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", + "Check if you have unnecessary pods running by running 'kubectl get po -A": "", + "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", + "Check that libvirt is setup properly": "", + "Check that the provided apiserver flags are valid, and that SELinux is disabled": "", + "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "", + "Choose a smaller value for --memory, such as 2000": "", + "ChromeOS is missing the kernel support necessary for running Kubernetes": "", + "Cluster was created without any CNI, adding a node to it might cause broken networking.": "", + "Configuration and Management Commands:": "", + "Configure a default route on this Linux host, or use another --driver that does not require it": "", + "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", + "Configure environment to use minikube's Podman service": "", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "", + "Configuring RBAC rules ...": "", + "Configuring local host environment ...": "", + "Configuring {{.name}} (Container Networking Interface) ...": "", + "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "", + "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "", + "Connect to LoadBalancer services": "", + "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", + "Consider increasing Docker Desktop's memory size.": "", + "Continuously listing/getting the status with optional interval duration.": "", + "Control Plane could not update, try minikube delete --all --purge": "", + "Copy the specified file into minikube": "", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "", + "Could not determine a Google Cloud project, which might be ok.": "", + "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "", + "Could not process error from failed deletion": "", + "Could not process errors from failed deletion": "", + "Could not resolve IP address": "", + "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "", + "Creating mount {{.name}} ...": "", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "", + "Current context is \"{{.context}}\"": "", + "DEPRECATED, use `driver` instead.": "", + "DEPRECATED: Replaced by --cni": "", + "DEPRECATED: Replaced by --cni=bridge": "", + "Delete an image from the local cache.": "", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "", + "Deletes a local Kubernetes cluster": "", + "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "", + "Deletes a node from a cluster.": "", + "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "", + "Deleting container \"{{.name}}\" ...": "", + "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", + "Deleting node {{.name}} from cluster {{.cluster}}": "", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "", + "Directory to output licenses to": "", + "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "", + "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", + "Disables the filesystem mounts provided by the hypervisors": "", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "", + "Display dashboard URL instead of opening a browser": "", + "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "", + "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "", + "Display values currently set in the minikube config file": "", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", + "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "", + "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "", + "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "", + "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "", + "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", + "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", + "Docs have been saved at - {{.path}}": "", + "Documentation: {{.url}}": "", + "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "Готово! kubectl настроен для использования кластера \"{{.name}}\" и \"{{.ns}}\" пространства имён по умолчанию", + "Done! minikube is ready without Kubernetes!": "", + "Download complete!": "", + "Downloading Kubernetes {{.version}} preload ...": "Скачивается Kubernetes {{.version}} ...", + "Downloading VM boot image ...": "", + "Downloading driver {{.driver}}:": "", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", + "ERROR creating `registry-creds-acr` secret": "", + "ERROR creating `registry-creds-dpr` secret": "", + "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", + "ERROR creating `registry-creds-gcr` secret: {{.error}}": "", + "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "", + "Enable experimental NVIDIA GPU support in minikube": "", + "Enable host resolver for NAT DNS requests (virtualbox driver only)": "", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "", + "Enable or disable a minikube addon": "", + "Enable proxy for NAT DNS requests (virtualbox driver only)": "", + "Enabled addons: {{.addons}}": "Включенные дополнения: {{.addons}}", + "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "", + "Enabling '{{.name}}' returned an error: {{.error}}": "", + "Enabling dashboard ...": "", + "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "", + "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "", + "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "", + "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "", + "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "", + "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "", + "Ensure the tmp directory path is writable to the current user.": "", + "Ensure you have at least 20GB of free disk space.": "", + "Ensure your {{.driver_name}} is running and is healthy.": "", + "Environment variables to pass to the Docker daemon. (format: key=value)": "", + "Environment variables to pass to the build. (format: key=value)": "", + "Error code docs have been saved at - {{.path}}": "", + "Error creating minikube directory": "", + "Error creating view template": "", + "Error detecting shell": "", + "Error executing view template": "", + "Error finding port for mount": "", + "Error generating set output": "", + "Error generating unset output": "", + "Error getting cluster bootstrapper": "", + "Error getting cluster config": "", + "Error getting control-plane node": "", + "Error getting host": "", + "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "", + "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "", + "Error getting ssh client": "", + "Error getting the host IP address to use from within the VM": "", + "Error killing mount process": "", + "Error loading profile config: {{.error}}": "", + "Error opening service": "", + "Error parsing {{.name}}={{.value}}, {{.err}}": "", + "Error reading {{.path}}: {{.error}}": "", + "Error starting cluster": "", + "Error starting mount": "", + "Error while setting kubectl current context : {{.error}}": "", + "Error while setting kubectl current context: {{.error}}": "", + "Error with ssh-add": "", + "Error writing mount pid": "", + "Examples": "", + "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "", + "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "", + "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "", + "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "", + "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "", + "Fail check if container paused": "", + "Failed removing pid from pidfile: {{.error}}": "", + "Failed runtime": "", + "Failed to build image": "", + "Failed to cache and load images": "", + "Failed to cache binaries": "", + "Failed to cache images to tar": "", + "Failed to cache kubectl": "", + "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "", + "Failed to check main repository and mirrors for images": "", + "Failed to configure auto-pause {{.profile}}": "", + "Failed to configure metallb IP {{.profile}}": "", + "Failed to configure registry-aliases {{.profile}}": "", + "Failed to create file": "", + "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "", + "Failed to delete cluster {{.name}}.": "", + "Failed to delete cluster: {{.error}}": "", + "Failed to delete images": "", + "Failed to delete images from config": "", + "Failed to delete profile(s): {{.error}}": "", + "Failed to download licenses": "", + "Failed to enable container runtime": "", + "Failed to get bootstrapper": "", + "Failed to get command runner": "", + "Failed to get image map": "", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "", + "Failed to get temp": "", + "Failed to kill mount process: {{.error}}": "", + "Failed to list cached images": "", + "Failed to list images": "", + "Failed to load image": "", + "Failed to persist images": "", + "Failed to pull image": "", + "Failed to pull images": "", + "Failed to push images": "", + "Failed to read temp": "", + "Failed to reload cached images": "", + "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", + "Failed to save config {{.profile}}": "", + "Failed to save dir": "", + "Failed to save image": "", + "Failed to save stdin": "", + "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "", + "Failed to setup certs": "", + "Failed to start container runtime": "", + "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "", + "Failed to stop node {{.name}}: {{.error}}": "", + "Failed to stop ssh-agent process: {{.error}}": "", + "Failed to tag images": "", + "Failed to update cluster": "", + "Failed to update config": "", + "Failed unmount: {{.error}}": "", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "", + "Filter to use only VM Drivers": "", + "Flags": "", + "Follow": "", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "", + "For improved {{.driver}} performance, {{.fix}}": "", + "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "", + "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", + "For more information, see: {{.url}}": "", + "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", + "Force minikube to perform possibly dangerous operations": "", + "Format output. One of: short|table|json|yaml": "", + "Format to print stdout in. Options include: [text,json]": "", + "Forwards all services in a namespace (defaults to \"false\")": "", + "Found docker, but the docker service isn't running. Try restarting the docker service.": "", + "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "", + "Found network options:": "", + "Found {{.number}} invalid profile(s) ! ": "", + "Generate command completion for PowerShell.": "", + "Generate command completion for a shell": "", + "Generate command completion for bash.": "", + "Generate command completion for fish .": "", + "Generate command completion for zsh.": "", + "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", + "Generate unable to parse memory '{{.memory}}': {{.error}}": "", + "Generating certificates and keys ...": "", + "Get or list the current profiles (clusters)": "", + "Gets the logs of the running instance, used for debugging minikube, not user code.": "", + "Gets the status of a local Kubernetes cluster": "", + "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "", + "Gets the value of PROPERTY_NAME from the minikube config file": "", + "Global Flags": "", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "", + "Group ID: {{.groupID}}": "", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", + "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", + "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "", + "IP Address to use to expose ports (docker and podman driver only)": "", + "IP address (ssh driver only)": "", + "If present, writes to the provided file instead of stdout.": "", + "If set, added node will be available as worker. Defaults to true.": "", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "", + "If set, automatically updates drivers to the latest version. Defaults to true.": "", + "If set, delete the current cluster if start fails and try again. Defaults to false.": "", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "", + "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "", + "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "", + "If set, install addons. Defaults to true.": "", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "", + "If set, pause all namespaces": "", + "If set, unpause all namespaces": "", + "If the above advice does not help, please let us know:": "", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "", + "If true, only download and cache files for later use - don't install or start anything.": "", + "If true, pods might get deleted and restarted on addon enable": "", + "If true, print web links to addons' documentation if using --output=list (default).": "", + "If true, returns a detailed list of profiles.": "", + "If true, returns list of profiles faster by skipping validating the status of the cluster.": "", + "If true, will perform potentially dangerous operations. Use with discretion.": "", + "If you are running minikube within a VM, consider using --driver=none:": "", + "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "", + "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "", + "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "", + "Ignoring empty custom image {{.name}}": "", + "Ignoring invalid pair entry {{.pair}}": "", + "Ignoring unknown custom image {{.name}}": "", + "Ignoring unknown custom registry {{.name}}": "", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "", + "Images Commands:": "", + "Images used by this addon. Separated by commas.": "", + "In order to use the fall back image, you need to log in to the github packages registry": "", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", + "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", + "Install the latest hyperkit binary, and run 'minikube delete'": "", + "Interval is an invalid duration: {{.error}}": "", + "Interval must be greater than 0s": "", + "Invalid port": "", + "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", + "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", + "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "Kept for backward compatibility, value is ignored.": "", + "Kicbase images have not been deleted. To delete images run:": "", + "Kill the mount process spawned by minikube start": "", + "Kubernetes requires at least 2 CPU's to start": "", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "", + "Kubernetes version {{.specified}} found in GitHub version list": "", + "Kubernetes version {{.specified}} found in version list": "", + "Kubernetes version {{.version}} is not supported by this release of minikube": "", + "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "Доступен Kubernetes {{.new}}. Для обновления, укажите: --kubernetes-version={{.prefix}}{{.new}}", + "Kubernetes {{.version}} is not supported by this release of minikube": "", + "Kubernetes: Stopping ...": "", + "Kubernetes: {{.status}}": "", + "Launching proxy ...": "", + "List all available images from the local cache.": "", + "List existing minikube nodes.": "", + "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "", + "List images": "", + "List nodes.": "", + "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "", + "List of ports that should be exposed (docker and podman driver only)": "", + "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "", + "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "", + "Lists all minikube profiles.": "", + "Lists all valid default values for PROPERTY_NAME": "", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "", + "Lists the URLs for the services in your local cluster": "", + "Load an image into minikube": "", + "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "", + "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", + "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "", + "Locations to fetch the minikube ISO from.": "", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", + "Log into the minikube environment (for debugging)": "", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "", + "Manage cache for images": "", + "Manage images": "", + "Message Size: {{.size}}": "", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "", + "Modify persistent configuration values": "", + "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "", + "Most users should use the newer 'docker' driver instead, which does not require root!": "", + "Mount type: {{.name}}": "", + "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", + "Mounts the specified directory into minikube": "", + "Mounts the specified directory into minikube.": "", + "Multiple errors deleting profiles": "", + "Multiple errors encountered:": "", + "Multiple minikube profiles were found - ": "", + "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", + "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "", + "NOTE: This process must stay alive for the mount to be accessible ...": "", + "Networking and Connectivity Commands:": "", + "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "", + "No changes required for the \"{{.context}}\" context": "", + "No control-plane nodes found.": "", + "No minikube profile was found.": "", + "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "", + "No such addon {{.name}}": "", + "No valid URL found for tunnel.": "", + "No valid port found for tunnel.": "", + "Node {{.name}} failed to start, deleting and trying again.": "", + "Node {{.name}} was successfully deleted.": "", + "Node {{.nodeName}} does not exist.": "", + "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "", + "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "", + "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", + "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "", + "Number of lines back to go within the log": "", + "OS release is {{.pretty_name}}": "", + "One of 'text', 'yaml' or 'json'.": "", + "One of 'yaml' or 'json'.": "", + "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "", + "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "", + "Open the addons URL with https instead of http": "", + "Open the service URL with https instead of http (defaults to \"false\")": "", + "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", + "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "", + "Opening {{.url}} in your default browser...": "", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", + "Operations on nodes": "", + "Options: {{.options}}": "", + "Output format. Accepted values: [json, yaml]": "", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Outputs the licenses of dependencies to a directory": "", + "Overwrite image even if same image:tag name exists": "", + "Path to socket vmnet binary (QEMU driver only)": "", + "Path to the Dockerfile to use (optional)": "", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "", + "Path to the socket vmnet client binary (QEMU driver only)": "", + "Pause": "", + "Paused {{.count}} containers": "", + "Paused {{.count}} containers in: {{.namespaces}}": "", + "Pausing node {{.name}} ... ": "", + "Please also attach the following file to the GitHub issue:": "", + "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", + "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", + "Please enter a value:": "", + "Please free up disk or prune images.": "", + "Please increase Desktop's disk size.": "", + "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", + "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", + "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", + "Please provide a path or url to build": "", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "", + "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", + "Please provide source and target image": "", + "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", + "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", + "Please see {{.documentation_url}} for more details": "", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please try purging minikube using `minikube delete --all --purge`": "", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Populates the specified folder with documentation in markdown about minikube": "", + "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", + "Powering off \"{{.profile_name}}\" via SSH ...": "Выключается \"{{.profile_name}}\" через SSH ...", + "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Подготавливается Kubernetes {{.k8sVersion}} на {{.runtime}} {{.runtimeVersion}} ...", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "", + "Print current and latest version number": "", + "Print just the version number.": "", + "Print the version of minikube": "", + "Print the version of minikube.": "", + "Problems detected in {{.entry}}:": "", + "Problems detected in {{.name}}:": "", + "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "", + "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "", + "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "", + "Profile name '{{.name}}' is not valid": "", + "Profile name '{{.profilename}}' is not valid": "", + "Profile name should be unique": "", + "Provide VM UUID to restore MAC address (hyperkit driver only)": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "", + "Pull images": "", + "Pull the remote image (no caching)": "", + "Pulling base image ...": "Скачивается базовый образ ...", + "Pulling base image {{.kicVersion}} ...": "", + "Push images": "", + "Push the new image (requires tag)": "", + "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "", + "Rebuild libvirt with virt-network support": "", + "Received {{.name}} signal": "", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "", + "Registries used by this addon. Separated by commas.": "", + "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "", + "Registry mirrors to pass to the Docker daemon": "", + "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "", + "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", + "Related issue: {{.url}}": "", + "Related issues:": "", + "Remove one or more images": "", + "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "", + "Removed all traces of the \"{{.name}}\" cluster.": "", + "Removing {{.directory}} ...": "", + "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", + "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "", + "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", + "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", + "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", + "Reset Docker to factory defaults": "", + "Restart Docker": "", + "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "", + "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "Перезагружается существующий {{.driver_name}} {{.machine_type}} для \"{{.cluster}}\" ...", + "Restarting the {{.name}} service may improve performance.": "", + "Retrieve the ssh host key of the specified node": "", + "Retrieve the ssh host key of the specified node.": "", + "Retrieve the ssh identity key path of the specified node": "", + "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "", + "Retrieves the IP address of the specified node": "", + "Retrieves the IP address of the specified node, and writes it to STDOUT.": "", + "Returns a URL to connect to a service": "", + "Returns logs to debug a local Kubernetes cluster": "", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", + "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", + "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", + "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "", + "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "", + "Run a kubectl binary matching the cluster version": "", + "Run minikube from the C: drive.": "", + "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "", + "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", + "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", + "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", + "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "", + "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", + "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", + "SSH key (ssh driver only)": "", + "SSH port (ssh driver only)": "", + "SSH user (ssh driver only)": "", + "Save a image from minikube": "", + "Searching the internet for Kubernetes version...": "", + "Select a valid value for --dnsdomain": "", + "Send trace events. Options include: [gcp]": "", + "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "", + "Set failed": "", + "Set flag to delete all profiles": "", + "Set flag to stop all profiles (clusters)": "", + "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "", + "Set this flag to delete the '.minikube' folder from your user directory.": "", + "Sets an individual value in a minikube config file": "", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", + "Sets up podman env variables; similar to '$(podman-machine env)'.": "", + "Setting profile failed": "", + "Show a list of global command-line options (applies to all commands).": "", + "Show only log entries which point to known problems": "", + "Show only the audit logs": "", + "Show only the last start logs.": "", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", + "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "", + "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", + "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "", + "Sorry, completion support is not yet implemented for {{.name}}": "", + "Sorry, please set the --output flag to one of the following valid options: [text,json]": "", + "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "", + "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "", + "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "", + "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "", + "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "", + "Source {{.path}} can not be empty": "", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "", + "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", + "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", + "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "", + "Specify arbitrary flags to pass to the build. (format: key=value)": "", + "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "", + "StartHost failed, but will try again: {{.error}}": "", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "", + "Starting control plane node {{.name}} in cluster {{.cluster}}": "Запускается control plane узел {{.name}} в кластере {{.cluster}}", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "", + "Starting tunnel for service {{.service}}.": "", + "Starts a local Kubernetes cluster": "", + "Starts a node.": "", + "Starts an existing stopped node in a cluster.": "", + "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "", + "Stopped tunnel for service {{.service}}.": "", + "Stopping node \"{{.name}}\" ...": "Узел \"{{.name}}\" останавливается ...", + "Stopping tunnel for service {{.service}}.": "", + "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "", + "Stops a node in a cluster.": "", + "Stops a running local Kubernetes cluster": "", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "", + "Successfully added {{.name}} to {{.cluster}}!": "", + "Successfully deleted all profiles": "", + "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", + "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "", + "Successfully started node {{.name}}!": "", + "Successfully stopped node {{.name}}": "", + "Successfully unblocked bootpd process from firewall, retrying": "", + "Suggestion: {{.advice}}": "Предложение: {{.advice}}", + "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "Tag images": "", + "Tag to apply to the new image (optional)": "", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "", + "Target directory {{.path}} must be an absolute path": "", + "Target {{.path}} can not be empty": "", + "Test docs have been saved at - {{.path}}": "", + "The \"{{.driver_name}}\" driver should not be used with root privileges.": "", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "", + "The \"{{.name}}\" container runtime requires CNI": "", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "", + "The 'none' driver is designed for experts who need to integrate with an existing VM": "", + "The '{{.addonName}}' addon is enabled": "", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "", + "The '{{.driver}}' provider was not found: {{.error}}": "", + "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", + "The '{{.name}}' driver does not respect the --cpus flag": "", + "The '{{.name}}' driver does not respect the --memory flag": "", + "The '{{.name}}' driver does not support --cpus=no-limit": "", + "The '{{.name}}' driver does not support --memory=no-limit": "", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "", + "The CIDR to be used for service cluster IPs.": "", + "The CIDR to be used for the minikube VM (virtualbox driver only)": "", + "The KVM QEMU connection URI. (kvm2 driver only)": "", + "The KVM default network name. (kvm2 driver only)": "", + "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "", + "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", + "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", + "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", + "The apiserver listening port": "", + "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", + "The base image to use for docker/podman drivers. Intended for local development.": "", + "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", + "The cluster dns domain name used in the Kubernetes cluster": "", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is paused": "", + "The control-plane node {{.name}} apiserver is paused (will try others)": "", + "The control-plane node {{.name}} host does not exist": "", + "The control-plane node {{.name}} host does not exist (will try others)": "", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "", + "The control-plane node {{.name}} host is not running: state={{.state}}": "", + "The cri socket path to be used.": "", + "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", + "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "", + "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "", + "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", + "The heapster addon is depreciated. please try to disable metrics-server instead": "", + "The host does not support filesystem 9p.": "", + "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "", + "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "", + "The initial time interval for each check that wait performs in seconds": "", + "The kubeadm binary within the Docker container is not executable": "", + "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "", + "The minikube VM is offline. Please run 'minikube start' to start it again.": "", + "The minikube {{.driver_name}} container exited unexpectedly.": "", + "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", + "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", + "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", + "The node to get IP. Defaults to the primary control plane.": "", + "The node to get logs from. Defaults to the primary control plane.": "", + "The node to get ssh-key path. Defaults to the primary control plane.": "", + "The node to ssh into. Defaults to the primary control plane.": "", + "The node {{.name}} has ran out of available PIDs.": "", + "The node {{.name}} has ran out of disk space.": "", + "The node {{.name}} has ran out of memory.": "", + "The node {{.name}} network is not available. Please verify network settings.": "", + "The none driver is not compatible with multi-node clusters.": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "", + "The output format. One of 'json', 'table'": "", + "The path on the file system where the docs in markdown need to be saved": "", + "The path on the file system where the error code docs in markdown need to be saved": "", + "The path on the file system where the testing docs in markdown need to be saved": "", + "The podman service within '{{.cluster}}' is not active": "", + "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", + "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "", + "The service namespace": "", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "", + "The services namespace": "", + "The socket_vmnet network is only supported on macOS": "", + "The time interval for each check that wait performs in seconds": "", + "The total number of nodes to spin up. Defaults to 1.": "", + "The value passed to --format is invalid": "", + "The value passed to --format is invalid: {{.error}}": "", + "The vfkit driver is only supported on macOS": "", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "", + "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "", + "These changes will take effect upon a minikube delete and then a minikube start": "", + "Things to try without Kubernetes ...": "", + "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", + "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "", + "This driver does not yet work on your architecture. Maybe try --driver=none": "", + "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", + "This will keep the existing kubectl context and will create a minikube context.": "", + "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "", + "To configure vment-helper to run without a password, please check the documentation:": "", + "To connect to this cluster, use: --context={{.name}}": "", + "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", + "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "", + "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", + "To see addons list for other profiles use: `minikube addons -p name list`": "", + "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", + "To start a cluster, run: \"{{.command}}\"": "", + "To start minikube with Hyper-V, Powershell must be in your PATH`": "", + "To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "", + "Troubleshooting Commands:": "", + "Try 'minikube delete' to force new SSL certificates to be installed": "", + "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Trying to delete invalid profile {{.profile}}": "", + "Tunnel successfully started": "", + "Unable to bind flags": "", + "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", + "Unable to delete profile(s): {{.error}}": "", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "", + "Unable to enable dashboard": "", + "Unable to fetch latest version info": "", + "Unable to find any control-plane nodes": "", + "Unable to generate docs": "", + "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", + "Unable to get CPU info: {{.err}}": "", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "", + "Unable to get current user": "", + "Unable to get runtime": "", + "Unable to kill mount process: {{.error}}": "", + "Unable to list profiles: {{.error}}": "", + "Unable to load cached images: {{.error}}": "Невозможно загрузить образы из кэша: {{.error}}", + "Unable to load config: {{.error}}": "", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "", + "Unable to load control-plane node {{.name}} host: {{.err}}": "", + "Unable to load profile: {{.error}}": "", + "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "", + "Unable to parse memory '{{.memory}}': {{.error}}": "", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "", + "Unable to pick a default driver. Here is what was considered, in preference order:": "", + "Unable to push cached images: {{.error}}": "", + "Unable to remove machine directory": "", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "", + "Unable to run vmnet-helper without a password": "", + "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", + "Unable to stop VM": "", + "Unable to update {{.driver}} driver: {{.error}}": "", + "Unfortunately, could not download the base image {{.image_name}} ": "", + "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "", + "Unmounting {{.path}} ...": "", + "Unpause": "", + "Unpaused {{.count}} containers": "", + "Unpaused {{.count}} containers in: {{.namespaces}}": "", + "Unpausing node {{.name}} ... ": "", + "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "", + "Unset variables instead of setting them": "", + "Update Docker to the latest minor version, this version is unsupported": "", + "Update kubeconfig in case of an IP or port change": "", + "Update server returned an empty list": "", + "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "Обновляется работающий {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...", + "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", + "Usage": "", + "Usage: minikube completion SHELL": "", + "Usage: minikube delete": "", + "Usage: minikube delete --all --purge": "", + "Usage: minikube node [add|start|stop|delete|list]": "", + "Usage: minikube node delete [name]": "", + "Usage: minikube node list": "", + "Usage: minikube node start [name]": "", + "Usage: minikube node stop [name]": "", + "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", + "Use 'kubectl get po -A' to find the correct and namespace name": "", + "Use -A to specify all namespaces": "", + "Use SSH connection instead of HTTPS (port 2376)": "", + "Use SSH for running kubernetes client on the node": "", + "Use VirtualBox to remove the conflicting VM and/or network interfaces": "", + "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "", + "User ID: {{.userID}}": "", + "User name '{{.username}}' is not valid": "", + "User name must be 60 chars or less.": "", + "Userspace file server is shutdown": "", + "Userspace file server: ": "", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "", + "Using Kubernetes {{.version}} since patch version was unspecified": "", + "Using image repository {{.name}}": "", + "Using image {{.registry}}{{.image}}": "Используется образ {{.registry}}{{.image}}", + "Using image {{.registry}}{{.image}} (global image repository)": "", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "", + "Using rootless driver was required, but the current driver does not seem rootless": "", + "Using rootless {{.driver_name}} driver": "", + "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "", + "Using the {{.driver}} driver based on existing profile": "Используется драйвер {{.driver}} на основе существующего профиля", + "Using the {{.driver}} driver based on user configuration": "Используется драйвер {{.driver}} на основе конфига пользователя", + "Using {{.driver_name}} driver with root privileges": "", + "Valid components are: {{.valid_extra_opts}}": "", + "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", + "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", + "Verifying Kubernetes components...": "Компоненты Kubernetes проверяются ...", + "Verifying dashboard health ...": "", + "Verifying proxy health ...": "", + "Verifying {{.addon_name}} addon...": "", + "Version: {{.version}}": "", + "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "", + "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "", + "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "", + "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "", + "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "", + "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "", + "Wait failed: {{.error}}": "", + "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", + "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "", + "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", + "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", + "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", + "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "", + "You can create one using 'minikube start'.\n\t\t": "", + "You can delete them using the following command(s): ": "", + "You can force an unsupported Kubernetes version via the --force flag": "", + "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "", + "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", + "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", + "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "", + "You must specify service name(s) or --all": "", + "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", + "Your cgroup does not allow setting memory.": "", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "", + "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "", + "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "", + "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", + "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "", + "Your minikube vm is not running, try minikube start.": "", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "", + "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", + "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", + "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", + "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "", + "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", + "bash completion failed": "", + "bash completion.": "", + "call with cleanup=true to remove old tunnels": "", + "cancel any existing scheduled stop requests": "", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "", + "config view failed": "", + "dashboard": "", + "dashboard service is not running: {{.error}}": "", + "delete ctx": "", + "deleting node": "", + "disable failed": "", + "dry-run mode. Validates configuration, but does not mutate system state": "", + "dry-run validation complete!": "", + "enable failed": "", + "enabled failed": "", + "error creating clientset": "", + "error creating urls": "", + "error fetching Kubernetes version list from GitHub": "", + "error getting control-plane node": "", + "error getting defaults: {{.error}}": "", + "error getting ssh port": "", + "error initializing tracing: {{.Error}}": "", + "error parsing the input ip address for mount": "", + "error provisioning guest": "", + "error starting tunnel": "", + "error: --output must be 'text', 'yaml' or 'json'": "", + "error: --output must be 'yaml' or 'json'": "", + "experimental": "", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "", + "failed to add node": "", + "failed to load profile: {{.error}}": "", + "failed to open browser: {{.error}}": "", + "failed to restart auto-pause: {{.error}}": "", + "failed to save config": "", + "failed to set extra option": "", + "failed to start node": "", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "", + "fish completion failed": "", + "fish completion.": "", + "if true, will embed the certs in kubeconfig.": "", + "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", + "initialization failed, will try again: {{.error}}": "", + "invalid kubernetes version": "", + "ip not found": "", + "json encoding failure": "", + "keep the kube-context active after cluster is stopped. Defaults to false.": "", + "kubeadm certificates have expired. Generating new ones...": "", + "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "", + "kubectl and minikube configuration will be stored in {{.home_folder}}": "", + "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "", + "kubectl proxy": "", + "libmachine failed": "", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "", + "list versions of all components included with minikube. (the cluster must be running)": "", + "loading profile": "", + "max time to wait per Kubernetes or host to be healthy.": "", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", + "minikube addons list --output OUTPUT. json, list": "", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "", + "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", + "minikube is not meant for production use. You are opening non-local traffic": "", + "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", + "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", + "minikube mount is not currently implemented with the builtin network on QEMU": "", + "minikube profile was successfully set to {{.profile_name}}": "", + "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "", + "minikube quickly sets up a local Kubernetes cluster": "", + "minikube service is not currently implemented with the builtin network on QEMU": "", + "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "", + "minikube status --output OUTPUT. json, text": "", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "", + "minikube {{.version}} is available! Download it: {{.url}}": "", + "mkcmp is used to compare performance of two minikube binaries": "", + "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", + "mount could not connect": "", + "mount failed": "", + "namespaces to pause": "", + "namespaces to unpause": "", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", + "none driver does not support multi-node clusters": "", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "numa node is only supported on k8s v1.18 and later": "", + "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", + "pause Kubernetes": "", + "powershell completion failed": "", + "powershell completion.": "", + "preload extraction failed: \"No space left on device\"": "", + "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", + "provisioning host for node": "", + "reload cached images.": "", + "reloads images previously added using the 'cache add' subcommand": "", + "retrieving node": "", + "scheduled stop is not supported on the none driver, skipping scheduling": "", + "service not available": "", + "service {{.namespace_name}}/{{.service_name}} has no node port": "", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "", + "stat failed": "", + "status json failure": "", + "status text failure": "", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "true": "", + "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", + "unable to bind flags": "", + "unable to daemonize: {{.err}}": "", + "unable to delete minikube config folder": "", + "unpause Kubernetes": "", + "unset failed": "", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "", + "unsets an individual value in a minikube config file": "", + "unsupported or missing driver: {{.name}}": "", + "update config": "", + "usage: minikube addons configure ADDON_NAME": "", + "usage: minikube addons disable ADDON_NAME": "", + "usage: minikube addons enable ADDON_NAME": "", + "usage: minikube addons images ADDON_NAME": "", + "usage: minikube addons list": "", + "usage: minikube addons open ADDON_NAME": "", + "usage: minikube config list PROPERTY_NAME": "", + "usage: minikube config unset PROPERTY_NAME": "", + "usage: minikube delete": "", + "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", + "version json failure": "", + "version yaml failure": "", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "", + "zsh completion failed": "", + "zsh completion.": "", + "{{ .name }}: Suggestion: {{ .suggestion}}": "", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "", + "{{.addon}} does not currently have an associated maintainer.": "", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "Остановлено узлов: {{.count}}.", + "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "", + "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", + "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", + "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", + "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "{{.env}}={{.value}}": "", + "{{.name}} doesn't have images.": "", + "{{.name}} has no available configuration options": "", + "{{.name}} has the following images:": "", + "{{.name}} is already running": "", + "{{.name}} was successfully configured": "", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "В {{.n}} заканчивается место на диске, что может привести к проблемам в работе! ({{.p}}% занято)", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "В {{.n}} закончилось место! (в /var занято {{.p}}%)", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.ociBin}} rmi {{.images}}": "", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "", + "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} на {{.platform}}", + "{{.profile}} profile is not valid: {{.err}}": "", + "{{.type}} is not yet a supported filesystem. We will try anyways!": "", + "{{.url}} is not accessible: {{.error}}": "" +} diff --git a/translations/strings.txt b/translations/strings.txt index 3256057b22e4..1f41798b469e 100644 --- a/translations/strings.txt +++ b/translations/strings.txt @@ -1,5 +1,8 @@ { + "\n\n": "", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "", "\"The '{{.minikube_addon}}' addon is disabled": "", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "", "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "", "\"{{.machineName}}\" does not exist, nothing to stop": "", "\"{{.name}}\" profile does not exist, trying anyways.": "", @@ -8,16 +11,26 @@ "'none' driver does not support 'minikube podman-env' command": "", "'none' driver does not support 'minikube ssh' command": "", "'none' driver does not support 'minikube ssh-host' command": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "", "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "", "- Docs https://docs.docker.com/docker-for-mac/#resources": "", "- Docs https://docs.docker.com/docker-for-windows/#resources": "", "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "", "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "", "- Restart your {{.driver_name}} service": "", - "- {{.logPath}}": "", "--kvm-numa-count range is 1-8": "", - "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", - "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "", + "--static-ip overrides --subnet, --subnet will be ignored": "", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "", "==\u003e Audit \u003c==": "", "==\u003e Last Start \u003c==": "", "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "", @@ -30,31 +43,36 @@ "Access the Kubernetes dashboard running within the minikube cluster": "", "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", "Add SSH identity key to SSH authentication agent": "", + "Add an image into minikube as a local cache, or delete, reload the cached images": "", "Add an image to local cache.": "", "Add host key to SSH known_hosts file": "", "Add image to cache for all running minikube clusters": "", "Add machine IP to NO_PROXY environment variable": "", - "Add, delete, or push a local image into minikube": "", "Add, remove, or list additional nodes": "", - "Adding node {{.name}} to cluster {{.cluster}}": "", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "", "Additional help topics": "", - "Additional mount options, such as cache=fscache": "", "Adds a node to the given cluster config, and starts it.": "", "Adds a node to the given cluster.": "", "Advanced Commands:": "", "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "", "Aliases": "", "All existing scheduled stops cancelled": "", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "", "Allow user prompts for more information": "", - "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", + "Alternatively you could install one of these drivers:": "", "Amount of time to wait for a service in seconds": "", "Amount of time to wait for service in seconds": "", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "", "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "", "Another minikube instance is downloading dependencies... ": "", "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "", + "Another tunnel process is already running, terminate the existing instance to start a new one": "", "At least needs control plane nodes to enable addon": "", "Automatically selected the {{.driver}} driver": "", "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "", + "Automatically selected the {{.network}} network": "", "Available Commands": "", "Basic Commands:": "", "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "", @@ -64,16 +82,24 @@ "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", "Build a container image in minikube": "", "Build a container image, using the container runtime.": "", + "Build image on all nodes.": "", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "", "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", "Cache image from docker daemon": "", "Cache image from remote registry": "", + "Cache image to docker daemon": "", + "Cache image to remote registry": "", "Cannot find directory {{.path}} for copy": "", "Cannot find directory {{.path}} for mount": "", "Cannot use both --output and --format options": "", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "", + "Certificate {{.certPath}} has expired. Generating a new one...": "", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "", "Check if you have unnecessary pods running by running 'kubectl get po -A": "", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "", "Check that libvirt is setup properly": "", - "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", "Check that the provided apiserver flags are valid, and that SELinux is disabled": "", "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "", "Choose a smaller value for --memory, such as 2000": "", @@ -82,8 +108,8 @@ "Configuration and Management Commands:": "", "Configure a default route on this Linux host, or use another --driver that does not require it": "", "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", - "Configure environment to use minikube's Docker daemon": "", "Configure environment to use minikube's Podman service": "", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "", "Configuring RBAC rules ...": "", "Configuring local host environment ...": "", @@ -96,22 +122,23 @@ "Continuously listing/getting the status with optional interval duration.": "", "Control Plane could not update, try minikube delete --all --purge": "", "Copy the specified file into minikube": "", - "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "", "Could not determine a Google Cloud project, which might be ok.": "", "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "", "Could not process error from failed deletion": "", "Could not process errors from failed deletion": "", "Could not resolve IP address": "", "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "", "Creating mount {{.name}} ...": "", - "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "", "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "", "Current context is \"{{.context}}\"": "", "DEPRECATED, use `driver` instead.": "", + "DEPRECATED: Replaced by --cni": "", "DEPRECATED: Replaced by --cni=bridge": "", - "Default group id used for the mount": "", - "Default user id used for the mount": "", "Delete an image from the local cache.": "", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "", "Deletes a local Kubernetes cluster": "", "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "", "Deletes a node from a cluster.": "", @@ -119,6 +146,8 @@ "Deleting container \"{{.name}}\" ...": "", "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", "Deleting node {{.name}} from cluster {{.cluster}}": "", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "", + "Directory to output licenses to": "", "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "", "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", @@ -128,7 +157,7 @@ "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "", "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "", "Display values currently set in the minikube config file": "", - "Display values currently set in the minikube config file.": "", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "", "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "", "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", @@ -139,20 +168,23 @@ "Docs have been saved at - {{.path}}": "", "Documentation: {{.url}}": "", "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "", + "Done! minikube is ready without Kubernetes!": "", "Download complete!": "", "Downloading Kubernetes {{.version}} preload ...": "", "Downloading VM boot image ...": "", "Downloading driver {{.driver}}:": "", - "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "", - "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "", "ERROR creating `registry-creds-acr` secret": "", "ERROR creating `registry-creds-dpr` secret": "", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", "ERROR creating `registry-creds-gcr` secret: {{.error}}": "", "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "", - "Enable addons. see `minikube addons list` for a list of valid addon names.": "", "Enable experimental NVIDIA GPU support in minikube": "", "Enable host resolver for NAT DNS requests (virtualbox driver only)": "", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "", "Enable or disable a minikube addon": "", "Enable proxy for NAT DNS requests (virtualbox driver only)": "", "Enabled addons: {{.addons}}": "", @@ -180,16 +212,15 @@ "Error generating unset output": "", "Error getting cluster bootstrapper": "", "Error getting cluster config": "", + "Error getting control-plane node": "", "Error getting host": "", "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "", - "Error getting primary control plane": "", "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "", "Error getting ssh client": "", "Error getting the host IP address to use from within the VM": "", "Error killing mount process": "", "Error loading profile config: {{.error}}": "", "Error opening service": "", - "Error parsing minikube version: {{.error}}": "", "Error parsing {{.name}}={{.value}}, {{.err}}": "", "Error reading {{.path}}: {{.error}}": "", "Error starting cluster": "", @@ -205,62 +236,77 @@ "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "", "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "", "Fail check if container paused": "", + "Failed removing pid from pidfile: {{.error}}": "", "Failed runtime": "", "Failed to build image": "", "Failed to cache and load images": "", "Failed to cache binaries": "", - "Failed to cache images": "", "Failed to cache images to tar": "", "Failed to cache kubectl": "", "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "", "Failed to check main repository and mirrors for images": "", + "Failed to configure auto-pause {{.profile}}": "", "Failed to configure metallb IP {{.profile}}": "", + "Failed to configure registry-aliases {{.profile}}": "", "Failed to create file": "", - "Failed to create runtime": "", "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "", "Failed to delete cluster {{.name}}.": "", "Failed to delete cluster: {{.error}}": "", "Failed to delete images": "", "Failed to delete images from config": "", + "Failed to delete profile(s): {{.error}}": "", + "Failed to download licenses": "", "Failed to enable container runtime": "", "Failed to get bootstrapper": "", "Failed to get command runner": "", "Failed to get image map": "", - "Failed to get service URL: {{.error}}": "", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "", + "Failed to get temp": "", "Failed to kill mount process: {{.error}}": "", "Failed to list cached images": "", "Failed to list images": "", "Failed to load image": "", "Failed to persist images": "", "Failed to pull image": "", + "Failed to pull images": "", + "Failed to push images": "", + "Failed to read temp": "", "Failed to reload cached images": "", "Failed to remove image": "", + "Failed to remove images for profile {{.pName}} {{.error}}": "", "Failed to save config {{.profile}}": "", "Failed to save dir": "", + "Failed to save image": "", "Failed to save stdin": "", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "", "Failed to setup certs": "", "Failed to start container runtime": "", "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "", - "Failed to stop node {{.name}}": "", + "Failed to stop node {{.name}}: {{.error}}": "", + "Failed to stop ssh-agent process: {{.error}}": "", + "Failed to tag images": "", "Failed to update cluster": "", "Failed to update config": "", "Failed unmount: {{.error}}": "", - "File permissions used for the mount": "", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "", "Filter to use only VM Drivers": "", "Flags": "", "Follow": "", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "", "For improved {{.driver}} performance, {{.fix}}": "", "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "", "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", "For more information, see: {{.url}}": "", "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", "Force minikube to perform possibly dangerous operations": "", + "Format output. One of: short|table|json|yaml": "", "Format to print stdout in. Options include: [text,json]": "", + "Forwards all services in a namespace (defaults to \"false\")": "", "Found docker, but the docker service isn't running. Try restarting the docker service.": "", "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "", "Found network options:": "", "Found {{.number}} invalid profile(s) ! ": "", + "Generate command completion for PowerShell.": "", "Generate command completion for a shell": "", "Generate command completion for bash.": "", "Generate command completion for fish .": "", @@ -274,30 +320,41 @@ "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "", "Gets the value of PROPERTY_NAME from the minikube config file": "", "Global Flags": "", - "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", - "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", - "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "", "Group ID: {{.groupID}}": "", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "", "IP Address to use to expose ports (docker and podman driver only)": "", "IP address (ssh driver only)": "", "If present, writes to the provided file instead of stdout.": "", + "If set, added node will be available as worker. Defaults to true.": "", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "", "If set, automatically updates drivers to the latest version. Defaults to true.": "", "If set, delete the current cluster if start fails and try again. Defaults to false.": "", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "", "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "", "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "", "If set, install addons. Defaults to true.": "", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "", "If set, pause all namespaces": "", "If set, unpause all namespaces": "", "If the above advice does not help, please let us know:": "", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "", "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "", "If true, only download and cache files for later use - don't install or start anything.": "", "If true, pods might get deleted and restarted on addon enable": "", + "If true, print web links to addons' documentation if using --output=list (default).": "", + "If true, returns a detailed list of profiles.": "", "If true, returns list of profiles faster by skipping validating the status of the cluster.": "", - "If true, the added node will be marked for work. Defaults to true.": "", - "If true, the node added will also be a control plane in addition to a worker.": "", "If true, will perform potentially dangerous operations. Use with discretion.": "", "If you are running minikube within a VM, consider using --driver=none:": "", "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "", @@ -307,22 +364,32 @@ "Ignoring invalid pair entry {{.pair}}": "", "Ignoring unknown custom image {{.name}}": "", "Ignoring unknown custom registry {{.name}}": "", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "", "Images Commands:": "", "Images used by this addon. Separated by commas.": "", "In order to use the fall back image, you need to log in to the github packages registry": "", "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", + "Interval is an invalid duration: {{.error}}": "", + "Interval must be greater than 0s": "", "Invalid port": "", "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "Kept for backward compatibility, value is ignored.": "", + "Kicbase images have not been deleted. To delete images run:": "", "Kill the mount process spawned by minikube start": "", - "Kubelet network plug-in to use (default: auto)": "", "Kubernetes requires at least 2 CPU's to start": "", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "", + "Kubernetes version {{.specified}} found in GitHub version list": "", + "Kubernetes version {{.specified}} found in version list": "", + "Kubernetes version {{.version}} is not supported by this release of minikube": "", "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "", "Kubernetes {{.version}} is not supported by this release of minikube": "", + "Kubernetes: Stopping ...": "", + "Kubernetes: {{.status}}": "", "Launching proxy ...": "", "List all available images from the local cache.": "", "List existing minikube nodes.": "", @@ -338,15 +405,19 @@ "Lists all valid default values for PROPERTY_NAME": "", "Lists all valid minikube profiles and detects all possible invalid profiles.": "", "Lists the URLs for the services in your local cluster": "", - "Load a image into minikube": "", + "Load an image into minikube": "", "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "", "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "", "Locations to fetch the minikube ISO from.": "", "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", "Log into the minikube environment (for debugging)": "", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "", + "Manage cache for images": "", "Manage images": "", "Message Size: {{.size}}": "", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "", "Modify persistent configuration values": "", "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "", "Most users should use the newer 'docker' driver instead, which does not require root!": "", @@ -355,16 +426,22 @@ "Mounts the specified directory into minikube": "", "Mounts the specified directory into minikube.": "", "Multiple errors deleting profiles": "", + "Multiple errors encountered:": "", "Multiple minikube profiles were found - ": "", "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", "Networking and Connectivity Commands:": "", "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "", "No changes required for the \"{{.context}}\" context": "", - "No minikube profile was found. ": "", + "No control-plane nodes found.": "", + "No minikube profile was found.": "", "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "", "No such addon {{.name}}": "", + "No valid URL found for tunnel.": "", + "No valid port found for tunnel.": "", "Node {{.name}} failed to start, deleting and trying again.": "", "Node {{.name}} was successfully deleted.": "", "Node {{.nodeName}} does not exist.": "", @@ -372,51 +449,59 @@ "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "", "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "", "Number of lines back to go within the log": "", "OS release is {{.pretty_name}}": "", + "One of 'text', 'yaml' or 'json'.": "", "One of 'yaml' or 'json'.": "", "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "", "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "", "Open the addons URL with https instead of http": "", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "", + "Open the service URL with https instead of http (defaults to \"false\")": "", "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "", "Opening {{.url}} in your default browser...": "", "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", "Operations on nodes": "", "Options: {{.options}}": "", - "Output format. Accepted values: [json]": "", - "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Output format. Accepted values: [json, yaml]": "", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", + "Outputs the licenses of dependencies to a directory": "", "Overwrite image even if same image:tag name exists": "", + "Path to socket vmnet binary (QEMU driver only)": "", "Path to the Dockerfile to use (optional)": "", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "", + "Path to the socket vmnet client binary (QEMU driver only)": "", "Pause": "", "Paused {{.count}} containers": "", "Paused {{.count}} containers in: {{.namespaces}}": "", "Pausing node {{.name}} ... ": "", - "Permissions: {{.octalMode}} ({{.writtenMode}})": "", - "Please attach the following file to the GitHub issue:": "", + "Please also attach the following file to the GitHub issue:": "", "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", "Please enter a value:": "", "Please free up disk or prune images.": "", - "Please increse Desktop's disk size.": "", + "Please increase Desktop's disk size.": "", "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", "Please provide a path or url to build": "", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "", "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", + "Please provide source and target image": "", "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "", "Please see {{.documentation_url}} for more details": "", - "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", - "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", "Please try purging minikube using `minikube delete --all --purge`": "", - "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", "Populates the specified folder with documentation in markdown about minikube": "", "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", "Powering off \"{{.profile_name}}\" via SSH ...": "", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "", "Print current and latest version number": "", "Print just the version number.": "", "Print the version of minikube": "", @@ -430,12 +515,17 @@ "Profile name '{{.profilename}}' is not valid": "", "Profile name should be unique": "", "Provide VM UUID to restore MAC address (hyperkit driver only)": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "", + "Pull images": "", "Pull the remote image (no caching)": "", - "Pulling base image ...": "", + "Pulling base image {{.kicVersion}} ...": "", + "Push images": "", "Push the new image (requires tag)": "", "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "", "Rebuild libvirt with virt-network support": "", "Received {{.name}} signal": "", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "", "Registries used by this addon. Separated by commas.": "", "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "", "Registry mirrors to pass to the Docker daemon": "", @@ -449,7 +539,6 @@ "Removing {{.directory}} ...": "", "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "", - "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", @@ -467,7 +556,7 @@ "Retrieves the IP address of the specified node, and writes it to STDOUT.": "", "Returns a URL to connect to a service": "", "Returns logs to debug a local Kubernetes cluster": "", - "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", @@ -476,7 +565,8 @@ "Run a kubectl binary matching the cluster version": "", "Run minikube from the C: drive.": "", "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "", - "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "", "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", @@ -486,9 +576,13 @@ "SSH key (ssh driver only)": "", "SSH port (ssh driver only)": "", "SSH user (ssh driver only)": "", + "Save a image from minikube": "", + "Searching the internet for Kubernetes version...": "", "Select a valid value for --dnsdomain": "", "Send trace events. Options include: [gcp]": "", "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "", "Set failed": "", "Set flag to delete all profiles": "", "Set flag to stop all profiles (clusters)": "", @@ -496,16 +590,18 @@ "Set this flag to delete the '.minikube' folder from your user directory.": "", "Sets an individual value in a minikube config file": "", "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", - "Sets up docker env variables; similar to '$(docker-machine env)'.": "", "Sets up podman env variables; similar to '$(podman-machine env)'.": "", "Setting profile failed": "", "Show a list of global command-line options (applies to all commands).": "", "Show only log entries which point to known problems": "", + "Show only the audit logs": "", + "Show only the last start logs.": "", "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "", "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "", - "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "", "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "", "Sorry, completion support is not yet implemented for {{.name}}": "", "Sorry, please set the --output flag to one of the following valid options: [text,json]": "", "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "", @@ -514,80 +610,93 @@ "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "", "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "", "Source {{.path}} can not be empty": "", - "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "", "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "", "Specify arbitrary flags to pass to the build. (format: key=value)": "", - "Specify the 9p version that the mount should use": "", - "Specify the ip that the mount should be setup on": "", - "Specify the mount filesystem type (supported types: 9p)": "", - "Specify the port that the mount should be setup on, where 0 means any free port.": "", "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "", "StartHost failed, but will try again: {{.error}}": "", - "Starting control plane node {{.name}} in cluster {{.cluster}}": "", - "Starting node {{.name}} in cluster {{.cluster}}": "", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "", "Starting tunnel for service {{.service}}.": "", "Starts a local Kubernetes cluster": "", "Starts a node.": "", "Starts an existing stopped node in a cluster.": "", "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "", + "Stopped tunnel for service {{.service}}.": "", "Stopping node \"{{.name}}\" ...": "", "Stopping tunnel for service {{.service}}.": "", "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "", "Stops a node in a cluster.": "", "Stops a running local Kubernetes cluster": "", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "", "Successfully added {{.name}} to {{.cluster}}!": "", "Successfully deleted all profiles": "", "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "", "Successfully started node {{.name}}!": "", "Successfully stopped node {{.name}}": "", + "Successfully unblocked bootpd process from firewall, retrying": "", "Suggestion: {{.advice}}": "", "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", + "Tag images": "", "Tag to apply to the new image (optional)": "", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "", "Target directory {{.path}} must be an absolute path": "", "Target {{.path}} can not be empty": "", "Test docs have been saved at - {{.path}}": "", "The \"{{.driver_name}}\" driver should not be used with root privileges.": "", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "", + "The \"{{.name}}\" container runtime requires CNI": "", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "", "The 'none' driver is designed for experts who need to integrate with an existing VM": "", "The '{{.addonName}}' addon is enabled": "", - "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "", "The '{{.driver}}' provider was not found: {{.error}}": "", "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", "The '{{.name}}' driver does not respect the --cpus flag": "", "The '{{.name}}' driver does not respect the --memory flag": "", - "The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically": "", - "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "", + "The '{{.name}}' driver does not support --cpus=no-limit": "", + "The '{{.name}}' driver does not support --memory=no-limit": "", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "", "The CIDR to be used for service cluster IPs.": "", "The CIDR to be used for the minikube VM (virtualbox driver only)": "", "The KVM QEMU connection URI. (kvm2 driver only)": "", "The KVM default network name. (kvm2 driver only)": "", "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "", "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", - "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "", "The apiserver listening port": "", - "The argument to pass the minikube mount command on start.": "", "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", "The base image to use for docker/podman drivers. Intended for local development.": "", "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", "The cluster dns domain name used in the Kubernetes cluster": "", - "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "", - "The control plane for \"{{.name}}\" is paused!": "", - "The control plane node \"{{.name}}\" does not exist.": "", - "The control plane node is not running (state={{.state}})": "", - "The control plane node must be running for this command": "", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is paused": "", + "The control-plane node {{.name}} apiserver is paused (will try others)": "", + "The control-plane node {{.name}} host does not exist": "", + "The control-plane node {{.name}} host does not exist (will try others)": "", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "", + "The control-plane node {{.name}} host is not running: state={{.state}}": "", "The cri socket path to be used.": "", "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "", "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "", "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", "The heapster addon is depreciated. please try to disable metrics-server instead": "", + "The host does not support filesystem 9p.": "", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "", "The image '{{.imageName}}' was not found; unable to add it to cache.": "", "The initial time interval for each check that wait performs in seconds": "", "The kubeadm binary within the Docker container is not executable": "", @@ -596,6 +705,7 @@ "The minikube {{.driver_name}} container exited unexpectedly.": "", "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", "The named space to activate after start": "", + "The node to build on. Defaults to the primary control plane.": "", "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", "The node to get IP. Defaults to the primary control plane.": "", "The node to get logs from. Defaults to the primary control plane.": "", @@ -606,38 +716,47 @@ "The node {{.name}} has ran out of memory.": "", "The node {{.name}} network is not available. Please verify network settings.": "", "The none driver is not compatible with multi-node clusters.": "", - "The number of bytes to use for 9p packet payload": "", - "The number of nodes to spin up. Defaults to 1.": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "", "The output format. One of 'json', 'table'": "", "The path on the file system where the docs in markdown need to be saved": "", "The path on the file system where the error code docs in markdown need to be saved": "", "The path on the file system where the testing docs in markdown need to be saved": "", "The podman service within '{{.cluster}}' is not active": "", "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "", "The service namespace": "", - "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "", "The services namespace": "", + "The socket_vmnet network is only supported on macOS": "", "The time interval for each check that wait performs in seconds": "", + "The total number of nodes to spin up. Defaults to 1.": "", "The value passed to --format is invalid": "", "The value passed to --format is invalid: {{.error}}": "", + "The vfkit driver is only supported on macOS": "", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "", "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "", "These changes will take effect upon a minikube delete and then a minikube start": "", + "Things to try without Kubernetes ...": "", "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "", - "This control plane is not running! (state={{.state}})": "", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "", "This driver does not yet work on your architecture. Maybe try --driver=none": "", "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", - "This is unusual - you may want to investigate using \"{{.command}}\"": "", "This will keep the existing kubectl context and will create a minikube context.": "", - "This will start the mount daemon and automatically mount files into minikube.": "", - "This {{.type}} is having trouble accessing https://{{.repository}}": "", "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "", + "To configure vment-helper to run without a password, please check the documentation:": "", "To connect to this cluster, use: --context={{.name}}": "", "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "", - "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "", "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", "To see addons list for other profiles use: `minikube addons -p name list`": "", "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", @@ -647,35 +766,45 @@ "Troubleshooting Commands:": "", "Try 'minikube delete' to force new SSL certificates to be installed": "", "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", "Trying to delete invalid profile {{.profile}}": "", + "Tunnel successfully started": "", "Unable to bind flags": "", "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", + "Unable to delete profile(s): {{.error}}": "", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "", "Unable to enable dashboard": "", "Unable to fetch latest version info": "", - "Unable to find control plane": "", + "Unable to find any control-plane nodes": "", "Unable to generate docs": "", "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", "Unable to get CPU info: {{.err}}": "", - "Unable to get command runner": "", - "Unable to get control plane status: {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "", "Unable to get current user": "", - "Unable to get forwarded endpoint": "", - "Unable to get machine status": "", "Unable to get runtime": "", "Unable to kill mount process: {{.error}}": "", "Unable to list profiles: {{.error}}": "", "Unable to load cached images: {{.error}}": "", "Unable to load config: {{.error}}": "", - "Unable to load host": "", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "", + "Unable to load control-plane node {{.name}} host: {{.err}}": "", "Unable to load profile: {{.error}}": "", "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "", - "Unable to parse default Kubernetes version from constants: {{.error}}": "", "Unable to parse memory '{{.memory}}': {{.error}}": "", - "Unable to parse oldest Kubernetes version from constants: {{.error}}": "", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "", "Unable to pick a default driver. Here is what was considered, in preference order:": "", "Unable to push cached images: {{.error}}": "", "Unable to remove machine directory": "", - "Unable to restart cluster, will reset it: {{.error}}": "", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "", + "Unable to run vmnet-helper without a password": "", "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", "Unable to stop VM": "", "Unable to update {{.driver}} driver: {{.error}}": "", @@ -703,7 +832,7 @@ "Usage: minikube node start [name]": "", "Usage: minikube node stop [name]": "", "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", - "Use 'kubect get po -A' to find the correct and namespace name": "", + "Use 'kubectl get po -A' to find the correct and namespace name": "", "Use -A to specify all namespaces": "", "Use SSH connection instead of HTTPS (port 2376)": "", "Use SSH for running kubernetes client on the node": "", @@ -714,15 +843,21 @@ "User name must be 60 chars or less.": "", "Userspace file server is shutdown": "", "Userspace file server: ": "", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "", + "Using Kubernetes {{.version}} since patch version was unspecified": "", "Using image repository {{.name}}": "", "Using image {{.registry}}{{.image}}": "", "Using image {{.registry}}{{.image}} (global image repository)": "", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "", + "Using rootless driver was required, but the current driver does not seem rootless": "", + "Using rootless {{.driver_name}} driver": "", "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "", "Using the {{.driver}} driver based on existing profile": "", "Using the {{.driver}} driver based on user configuration": "", + "Using {{.driver_name}} driver with root privileges": "", "Valid components are: {{.valid_extra_opts}}": "", "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", "Verifying Kubernetes components...": "", "Verifying dashboard health ...": "", @@ -739,42 +874,54 @@ "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "", "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", - "You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "", + "You can create one using 'minikube start'.\n\t\t": "", "You can delete them using the following command(s): ": "", "You can force an unsupported Kubernetes version via the --force flag": "", "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", - "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "", "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", - "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "", - "You must specify a service name": "", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "", + "You must specify service name(s) or --all": "", "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", "Your cgroup does not allow setting memory.": "", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "", "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "", "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "", "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "", "Your minikube vm is not running, try minikube start.": "", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "", "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", - "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "", "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "", "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", "bash completion failed": "", "bash completion.": "", "call with cleanup=true to remove old tunnels": "", "cancel any existing scheduled stop requests": "", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "", "config view failed": "", - "containers paused status: {{.paused}}": "", + "dashboard": "", "dashboard service is not running: {{.error}}": "", "delete ctx": "", "deleting node": "", @@ -782,46 +929,66 @@ "dry-run mode. Validates configuration, but does not mutate system state": "", "dry-run validation complete!": "", "enable failed": "", + "enabled failed": "", "error creating clientset": "", - "error getting primary control plane": "", + "error creating urls": "", + "error fetching Kubernetes version list from GitHub": "", + "error getting control-plane node": "", + "error getting defaults: {{.error}}": "", "error getting ssh port": "", "error initializing tracing: {{.Error}}": "", "error parsing the input ip address for mount": "", "error provisioning guest": "", "error starting tunnel": "", - "error stopping tunnel": "", + "error: --output must be 'text', 'yaml' or 'json'": "", "error: --output must be 'yaml' or 'json'": "", "experimental": "", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "", "failed to add node": "", + "failed to load profile: {{.error}}": "", "failed to open browser: {{.error}}": "", + "failed to restart auto-pause: {{.error}}": "", "failed to save config": "", + "failed to set extra option": "", "failed to start node": "", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "", "fish completion failed": "", "fish completion.": "", "if true, will embed the certs in kubeconfig.": "", "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", "initialization failed, will try again: {{.error}}": "", "invalid kubernetes version": "", + "ip not found": "", + "json encoding failure": "", "keep the kube-context active after cluster is stopped. Defaults to false.": "", + "kubeadm certificates have expired. Generating new ones...": "", "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "", "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "", "kubectl proxy": "", "libmachine failed": "", - "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "", "list versions of all components included with minikube. (the cluster must be running)": "", "loading profile": "", "max time to wait per Kubernetes or host to be healthy.": "", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", "minikube addons list --output OUTPUT. json, list": "", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "", "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", "minikube is not meant for production use. You are opening non-local traffic": "", "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", + "minikube mount is not currently implemented with the builtin network on QEMU": "", "minikube profile was successfully set to {{.profile_name}}": "", "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "", "minikube quickly sets up a local Kubernetes cluster": "", + "minikube service is not currently implemented with the builtin network on QEMU": "", "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "", "minikube status --output OUTPUT. json, text": "", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "", "minikube {{.version}} is available! Download it: {{.url}}": "", "mkcmp is used to compare performance of two minikube binaries": "", "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", @@ -829,24 +996,31 @@ "mount failed": "", "namespaces to pause": "", "namespaces to unpause": "", - "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", "none driver does not support multi-node clusters": "", - "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", "numa node is only supported on k8s v1.18 and later": "", "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", "pause Kubernetes": "", - "preload extraction failed: \\\"No space left on device\\\"": "", + "powershell completion failed": "", + "powershell completion.": "", + "preload extraction failed: \"No space left on device\"": "", "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", "provisioning host for node": "", "reload cached images.": "", "reloads images previously added using the 'cache add' subcommand": "", "retrieving node": "", "scheduled stop is not supported on the none driver, skipping scheduling": "", + "service not available": "", "service {{.namespace_name}}/{{.service_name}} has no node port": "", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "", "stat failed": "", "status json failure": "", "status text failure": "", - "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", + "true": "", "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", "unable to bind flags": "", "unable to daemonize: {{.err}}": "", @@ -863,33 +1037,39 @@ "usage: minikube addons images ADDON_NAME": "", "usage: minikube addons list": "", "usage: minikube addons open ADDON_NAME": "", + "usage: minikube config list PROPERTY_NAME": "", "usage: minikube config unset PROPERTY_NAME": "", "usage: minikube delete": "", "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", - "using metrics-server addon, heapster is deprecated": "", "version json failure": "", "version yaml failure": "", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "", "zsh completion failed": "", "zsh completion.": "", "{{ .name }}: Suggestion: {{ .suggestion}}": "", - "{{ .name }}: {{ .rejection }}": "", - "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", - "{{.count}} nodes stopped.": "", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "", + "{{.addon}} does not currently have an associated maintainer.": "", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "", "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "", "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", + "{{.env}}={{.value}}": "", "{{.name}} doesn't have images.": "", - "{{.name}} has following images:": "", "{{.name}} has no available configuration options": "", + "{{.name}} has the following images:": "", "{{.name}} is already running": "", "{{.name}} was successfully configured": "", - "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "", - "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "", - "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "", - "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "", + "{{.ociBin}} rmi {{.images}}": "", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "", "{{.prefix}}minikube {{.version}} on {{.platform}}": "", "{{.profile}} profile is not valid: {{.err}}": "", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", diff --git a/translations/translations.go b/translations/translations.go index 2407a74dc210..d2283705db2e 100644 --- a/translations/translations.go +++ b/translations/translations.go @@ -19,5 +19,6 @@ package translations import "embed" // Translations contains all translation JSON files. +// //go:embed *.json var Translations embed.FS diff --git a/translations/uk.json b/translations/uk.json new file mode 100644 index 000000000000..c6113ce135a9 --- /dev/null +++ b/translations/uk.json @@ -0,0 +1,1091 @@ +{ + "\n\n": "", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "\"'{{.minikube_addon}}' не є валідною надбудовою minikube", + "\"The '{{.minikube_addon}}' addon is disabled": "\"Надудову '{{.minikube_addon}}' вимкнено", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\" буде визнано застарілим в наступних версіяї, будь ласка, перейдіть на використання \"minikube image load\"", + "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "Контекст \"{{.context}}\" було оновено, щоб вказувати на {{.hostname}}:{{.port}}", + "\"{{.machineName}}\" does not exist, nothing to stop": "\"{{.machineName}}\" не існує, немає чого зупиняти", + "\"{{.name}}\" profile does not exist, trying anyways.": "Профіль \"{{.name}}\" не існує, але спробуємо все одно.", + "'none' driver does not support 'minikube docker-env' command": "Драйвер 'none' не підтримує команду 'minikube docker-env'.", + "'none' driver does not support 'minikube mount' command": "Драйвер 'none' не підтримує команду 'minikube mount'", + "'none' driver does not support 'minikube podman-env' command": "Драйвер 'none' не підтримує команду 'minikube podman-env'", + "'none' driver does not support 'minikube ssh' command": "Драйвер 'none' не підтримує команду 'minikube ssh'", + "'none' driver does not support 'minikube ssh-host' command": "Драйвер 'none' не підтримує команду 'minikube ssh-host'", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" для входу через SSH до вузла minikube.\n- \"minikube docker-env\" щоб вказати docker-cli на docker всередині minikube.\n- \"minikube image\" щоб створювати образи без docker.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" для входу через SSH до вузла minikube.\n- \"minikube image\" щоб створювати образи без docker.", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "- \"minikube ssh\" для входу через SSH до вузла minikube.\n- \"minikube podman-env\" щоб вказати podman-cli на podman всередині minikube.\n- \"minikube image\" щоб створювати образи без docker.", + "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "- Видалити та створити заново кластер minikube\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}", + "- Docs https://docs.docker.com/docker-for-mac/#resources": "- Документація https://docs.docker.com/docker-for-mac/#resources", + "- Docs https://docs.docker.com/docker-for-windows/#resources": "- Документація https://docs.docker.com/docker-for-windows/#resources", + "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "- Переконайтеся, що ваш демон {{.driver_name}} має доступ до достатніх ресурсів CPU і памʼяті.", + "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "- Видаляйте невикористані образи {{.driver_name}}, томи, мережі та покинуті контейнери.\n\n\t\t\t\t{{.driver_name}} system prune --volumes", + "- Restart your {{.driver_name}} service": "- Перезапустіть ваш сервіс {{.driver_name}}.", + "--kvm-numa-count range is 1-8": "діапазон --kvm-numa-count становить 1-8", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "прапорець --network дійсний тільки для драйверів docker/podman, qemu, kvm і vfkit, він буде проігнорований", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "--network з QEMU повинна бути 'builtin' або 'socket_vmnet'", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "--network з vfkit повинна бути 'nat' або 'vmnet-shared'", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "--static-ip реалізовано тільки в драйверах Docker і Podman, прапорець буде проігноровано", + "--static-ip overrides --subnet, --subnet will be ignored": "--static-ip перевизначає --subnet, --subnet буде проігноровано", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) Створіть нанового кластер за допомогою Kubernetes {{.new}}, виконавши:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Створіть другий кластер за допомогою Kubernetes {{.new}}, виконавши:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Використовуйте наявний кластер у версії Kubernetes {{.old}}, виконавши:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Клацніть значок меню \"Docker for Desktop\"\n\t\t\t2. Клацніть \"Preferences\"\n\t\t\t3. Клацніть \"Resources\"\n\t\t\t4. Збільште слайдером кількість \"CPUs\" до 2 або більше\n\t\t\t5. Клацніть \"Apply \u0026 Restart\"", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. Клацніть значок меню \"Docker for Desktop\"\n\t\t\t2. Клацніть \"Preferences\"\n\t\t\t3. Клацніть \"Resources\"\n\t\t\t4. Збільшіть слайдером обсяг \"Memory\" до {{.recommend}} або більше\n\t\t\t5. Клацніть \"Apply \u0026 Restart\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. Вікрийте меню \"Docker Desktop\" клацнувши на значок Docker в системній таці\n\t\t2. Клацніть \"Settings\"\n\t\t3. Клацніть \"Resources\"\n\t\t4. Збільште слайдером кількість \"CPUs\" до 2 або більше\n\t\t5. Клацніть \"Apply \u0026 Restart\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. Вікрийте меню \"Docker Desktop\" клацнувши на значок Docker в системній таці\n\t\t2. Клацніть \"Settings\"\n\t\t3. Клацніть \"Resources\"\n\t\t4. Збільшіть слайдером обсяг \"Memory\" до {{.recommend}} або більше\n\t\t5. Клацніть \"Apply \u0026 Restart\"", + "==\u003e Audit \u003c==": "==\u003e Аудит \u003c==", + "==\u003e Last Start \u003c==": "==\u003e Останній старт \u003c==", + "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "VPN або брандмауер перешкоджає доступу HTTP до віртуальної машини minikube. Як варіант, спробуйте інший драйвер віртуальної машини: https://minikube.sigs.k8s.io/docs/start/", + "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "Брандмауер блокує доступ віртуальної машини Docker minikube до сховища образів. Можливо, вам доведеться вибрати --image-repository або використовувати проксі-сервер.", + "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "Брандмауер перешкоджає minikube надсилати вихідні запити HTTPS. Можливо, вам доведеться змінити значення змінної середовища HTTPS_PROXY.", + "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "Брандмауер, ймовірно, блокує доступ minikube до Інтернету. Можливо, вам доведеться налаштувати minikube для використання проксі-сервера.", + "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Набір IP-адрес apiserver, які використовуються в сертифікаті, що генерується для kubernetes. Його можна використовувати, якщо ви хочете зробити apiserver доступним назовні.", + "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "Набір імен apiserver, які використовуються в сертифікаті, що генерується для kubernetes. Його можна використовувати, якщо ви хочете зробити apiserver доступним назовні.", + "A set of key=value pairs that describe feature gates for alpha/experimental features.": "Набір пар ключ=значення, що описують функціональні можливості для альфа/експериментальних функцій.", + "Access the Kubernetes dashboard running within the minikube cluster": "Доступ до інформаційної панелі Kubernetes, що працює в кластері minikube", + "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "Доступ до портів нижче 1024 може не працювати в Windows з клієнтами OpenSSH версії нижче 8.1. Докладнішу інформацію див. за адресою: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission", + "Add SSH identity key to SSH authentication agent": "Додати ключ ідентифікації SSH до агента автентифікації SSH", + "Add an image into minikube as a local cache, or delete, reload the cached images": "Додавання образу в minikube як в локальний кеш або видалення, перезавантаження кешованих образів", + "Add an image to local cache.": "Додати образ до локального кешу.", + "Add host key to SSH known_hosts file": "Додати ключ хоста до файлу SSH known_hosts", + "Add image to cache for all running minikube clusters": "Додати образ до кешу для всіх запущених кластерів minikube", + "Add machine IP to NO_PROXY environment variable": "Додати IP-адресу машини до змінної середовища NO_PROXY", + "Add, remove, or list additional nodes": "Додавання, видалення або виведення переліку додаткових вузлів", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "Додавання вузла панелі управління до кластера, що не підтримує високу доступність (не має кількох вузлів панелі управління), наразі не підтримується. Спочатку видаліть кластер і скористайтеся командою 'minikube start --ha', щоб створити новий.", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "Додавання вузла {{.name}} до кластера {{.cluster}} як {{.roles}}", + "Additional help topics": "Додаткові теми довідки", + "Additional mount options, such as cache=fscache": "Додаткові параметри монтування, такі як cache=fscache", + "Adds a node to the given cluster config, and starts it.": "Додає вузол до заданої конфігурації кластера та запускає його.", + "Adds a node to the given cluster.": "Додає вузли до вказаного кластера.", + "Advanced Commands:": "Додаткові команди", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "Після увімкнення надбудови запустіть \"minikube tunnel\", і ваші ресурси входу будуть доступні за адресою \"127.0.0.1\".", + "Aliases": "Аліаси", + "All existing scheduled stops cancelled": "Всі наявні заплановані зупинки скасовано", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "Дозволити подам використовувати ваші GPU. Доступні опції: [all,nvidia,amd] (тільки драйвер Docker з середовищем виконання Docker)", + "Allow user prompts for more information": "Дозволити запити користувача для отримання додаткової інформації", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "Альтернативне сховище образів для отримання образів Docker. Його можна використовувати, якщо у вас обмежений доступ до gcr.io. Встановіть значення \"auto\", щоб minikube самостійно вибрав сховище. Користувачі з материкового Китаю можуть використовувати локальні дзеркала gcr.io, наприклад registry.cn-hangzhou.aliyuncs.com/google_containers.", + "Alternatively you could install one of these drivers:": "Або ви можете встановити один із цих драйверів:", + "Amount of time to wait for a service in seconds": "Час очікування сервісу в секундах", + "Amount of time to wait for service in seconds": "Час очікування сервісу в секундах", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "Опціональний файл конфігурації для зчитування конфігурацій, специфічних для надбудов, замість того, щоб запитувати їх щоразу.", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "Інший гіпервізор, наприклад VirtualBox, конфліктує з KVM. Будь ласка, зупиніть інший гіпервізор або використовуйте --driver, щоб переключитися на нього.", + "Another minikube instance is downloading dependencies... ": "Інший екземпляр minikube завантажує залежності... ", + "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "Інший застосунок використовує файл, необхідний для minikube. Якщо ви використовуєте Hyper-V, спробуйте зупинити віртуальну машину minikube в менеджері Hyper-V.", + "Another tunnel process is already running, terminate the existing instance to start a new one": "Інший процес тунелювання вже працює, завершіть поточний екземпляр, щоб запустити новий.", + "At least needs control plane nodes to enable addon": "Як мінімум, потрібні вузли панелі управління, щоб увімкнути надбудову", + "Automatically selected the {{.driver}} driver": "Автоматично вибрано драйвер {{.driver}}", + "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "Автоматично вибрано драйвер {{.driver}}. Інші варіанти: {{.alternates}}", + "Automatically selected the {{.network}} network": "Автоматично вибрано мережу {{.network}}", + "Available Commands": "Доступні команди", + "Basic Commands:": "Основні команди", + "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "Оскільки ви використовуєте драйвер Docker в {{.operating_system}}, для його запуску необхідно відкрити термінал.", + "Bind Address: {{.Address}}": "Адреса привʼязки: {{.Address}}", + "Booting up control plane ...": "Завантаження панелі управління ...", + "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "Було встановлено як driver={{.driver}}, так і vm-driver={{.vmd}}.\n\n Оскільки vm-driver є застарілим, minikube стандартно використовуватиме driver={{.driver}}.\n\n Якщо vm-driver встановлено в глобальній конфігурації, виконайте команду \"minikube config unset vm-driver\", щоб усунути це попередження. \n\t\t\t", + "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "Bridge CNI несумісний з багатовузловими кластерами, використовуйте інший CNI", + "Build a container image in minikube": "Створити образ контейнера в minikube", + "Build a container image, using the container runtime.": "Створити образ контейнера, використовуючи середовище виконання контейнера.", + "Build image on all nodes.": "Створити образ на всіх вузлах.", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "Виділення CGroup недоступне у вашому середовищі. Можливо, ви запускаєте minikube у вкладеному контейнері. Спробуйте виконати:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "Виділення CGroup недоступне у вашому середовищі. Можливо, ви запускаєте minikube у вкладеному контейнері. Спробуйте виконати:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "Втулок CNI для використання. Допустимі параметри: auto, bridge, calico, cilium, flannel, kindnet або шлях до маніфесту CNI (стандартно: auto)", + "Cache image from docker daemon": "Кешувати образ з докер-демона", + "Cache image from remote registry": "Кешувати образ з віддаленого реєстру", + "Cache image to docker daemon": "Кешувати образ у докер-демоні", + "Cache image to remote registry": "Кешувати образ у віддаленому реєстрі", + "Cannot find directory {{.path}} for copy": "Не вдається знайти теку {{.path}} для копіювання", + "Cannot find directory {{.path}} for mount": "Не вдається знайти теку {{.path}} для монтування", + "Cannot use both --output and --format options": "Не можна використовувати одночасно опції --output і --format", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "Неможливо використовувати опцію --no-kubernetes у драйвері {{.name}}.", + "Certificate {{.certPath}} has expired. Generating a new one...": "Термін дії сертифіката {{.certPath}} закінчився. Створюється новий...", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "Зміна порту API-сервера наявного кластера minikube HA (з кількома панелями управління) наразі не підтримується. Спочатку видаліть кластер.", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "Зміна режиму HA (з багатьма панеліями управління) для наявного кластера minikube наразі не підтримується. Спочатку видаліть кластер і скористайтеся командою 'minikube start --ha', щоб створити новий.", + "Check if you have unnecessary pods running by running 'kubectl get po -A": "Перевірте, чи не працюють непотрібні поди, запустивши команду 'kubectl get po -A'", + "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "Перевірте вивід команди journalctl -xeu kubelet', спробуйте передати --extra-config=kubelet.cgroup-driver=systemd до minikube start.", + "Check that libvirt is setup properly": "Перевірте, чи правильно налаштовано libvirt", + "Check that the provided apiserver flags are valid, and that SELinux is disabled": "Перевірте, чи надані прапорці apiserver є дійсними, і чи вимкнено SELinux.", + "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "Перевірте правила брандмауера на наявність втручань і запустіть 'virt-host-validate' , щоб перевірити наявність проблем із конфігурацією KVM. Якщо ви використовуєте minikube у віртуальній машині, розгляньте можливість використання --driver=none.", + "Choose a smaller value for --memory, such as 2000": "Виберіть менше значення для --memory, наприклад 2000.", + "ChromeOS is missing the kernel support necessary for running Kubernetes": "ChromeOS не має підтримки ядра, необхідної для запуску Kubernetes.", + "Cluster was created without any CNI, adding a node to it might cause broken networking.": "Кластер було створено без CNI, додавання до нього вузла може призвести до порушення роботи мережі.", + "Configuration and Management Commands:": "Команди налаштування та управління", + "Configure a default route on this Linux host, or use another --driver that does not require it": "Налаштуйте стандартний маршрут на цьому хості Linux або використовуйте інший драйвер, який цього не вимагає.", + "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "Налаштуйте зовнішній мережевий комутатор відповідно до офіційної документації, а потім додайте `--hyperv-virtual-switch=\u003cswitch-name\u003e` до `minikube start`.", + "Configure environment to use minikube's Podman service": "Налаштування середовища для використання сервісу Podman в minikube", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "Налаштуйте vmnet-helper для запуску без пароля.\n\n\t\tВстановіть правило sudoers для vmnet-helper, використовуючи ці інструкції:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "Налаштовує надбудову w/ADDON_NAME у minikube (приклад: minikube addons configure registry-creds). Щоб переглянути список доступних надбудов, скористайтеся командою: minikube addons list", + "Configuring RBAC rules ...": " Налаштування правил RBAC ...", + "Configuring local host environment ...": "Налаштування середовища локального хоста ...", + "Configuring {{.name}} (Container Networking Interface) ...": "Налаштування {{.name}} (Container Networking Interface) ...", + "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "Переконайтеся, що у вас є робоче підключення до Інтернету і що у вашій віртуальній машині не закінчилися ресурси, використовуючи: 'minikube logs'", + "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "Переконайтеся, що ви вказали правильне значення для --hyperv-virtual-switch за допомогою команди 'Get-VMSwitch'", + "Connect to LoadBalancer services": "Підключення до сервісів LoadBalancer", + "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "Розгляньте можливість створення кластера з більшим розміром памʼяті за допомогою команди `minikube start --memory SIZE_MB`. ", + "Consider increasing Docker Desktop's memory size.": "Розгляньте можливість збільшення обсягу памʼяті Docker Desktop.", + "Continuously listing/getting the status with optional interval duration.": "Постійне виведення/отримання статусу з можливістю вказання інтервалу.", + "Control Plane could not update, try minikube delete --all --purge": "Не вдалося оновити Control Plane, спробуйте minikube delete --all --purge", + "Copy the specified file into minikube": "Копіювання вказаного файлу в minikube", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "Копіювання вказаного файлу в minikube, його буде збережено у шляху \u003cабсолютний шлях цільовго файла\u003e у вашому minikube.\nСтандартний цільовий вузолк – вузол панелі управління, якщо \u003cімʼя цільового файлу\u003e пропущене, буде намагатись копіювати з хосту.\n\nПриклад команди: \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"", + "Could not determine a Google Cloud project, which might be ok.": "Не вдалося визначити проєкт Google Cloud, що може бути нормальним.", + "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "Не вдалося знайти жодних облікових даних GCP. Виконайте команду `gcloud auth application-default login` або встановіть значення змінної середовища GOOGLE_APPLICATION_CREDENTIALS, вказавши шлях до файлу облікових даних.", + "Could not process error from failed deletion": "Не вдалося обробити помилку через збій видалення", + "Could not process errors from failed deletion": "Не вдалося обробити помилки через збій видалення", + "Could not resolve IP address": "Не вдалося розпізнати IP-адресу", + "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "Код країни дзеркала образів, яке буде використовуватися. Залиште поле порожнім, щоб використовувати глобальне дзеркало. Для користувачів з материкового Китаю встановіть значення cn.", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "Створювати кластер з високою доступністю та декількома панелями управління, що складається щонайменше з трьох вузлів панелей управління, які також будуть позначені для використання.", + "Creating mount {{.name}} ...": "Створюю монтування {{.name}} ...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Створюю {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB)", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "Створюю {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...", + "Current context is \"{{.context}}\"": "Поточний контекст — \"{{.context}}\"", + "DEPRECATED, use `driver` instead.": "ЗАСТАРІЛО, використовуйте `driver` натомість", + "DEPRECATED: Replaced by --cni": "ЗАСТАРІЛО: Замінено на --cni", + "DEPRECATED: Replaced by --cni=bridge": "ЗАСТАРІЛО: Замінено на --cni=bridge", + "Default group id used for the mount": "Ідентифікатор стандартної групи, яка використовується для монтування", + "Default user id used for the mount": "Ідентифікатор стандартного користувача, який використовується для монтування", + "Delete an image from the local cache.": "Видалити образ з локального кешу.", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "Видаліть наявний кластер '{{.name}}' використовуючи команду '{{.delcommand}}', або запустіть наявний кластер '{{.name}}' командою '{{.command}} --driver={{.old}}'", + "Deletes a local Kubernetes cluster": "Видаляє локальний кластер Kubernetes", + "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "Видаляє локальний кластер Kubernetes. Ця команда видаляє віртуальну машину та\nвсі повʼязані з нею файли.", + "Deletes a node from a cluster.": "Видаляє вузол з кластера.", + "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "Вилучення \"{{.profile_name}}\" в {{.driver_name}} ...", + "Deleting container \"{{.name}}\" ...": "ВИлучення контейнера \"{{.name}}\" ...", + "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "Видалення наявного кластера {{.name}} з іншим драйвером {{.driver_name}} внаслідок встановлення користувачем прапорця --delete-on-failure. ", + "Deleting node {{.name}} from cluster {{.cluster}}": "Видалення вузла {{.name}} з кластера {{.cluster}}", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "Тека для монтування в гостьовій системі за допомогою формату '/host-path:/guest-path'.", + "Directory to output licenses to": "Тека для виводу ліцензій", + "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "Вимкнути перевірку наявності апаратної віртуалізації перед запуском віртуальної машини (тільки драйвер VirtualBox)", + "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "Вимкніть динамічну памʼять у диспетчері віртуальних машин або вкажіть більше значення --memory.", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "Вимикає надбудову w/ADDON_NAME у minikube (приклад: minikube addons disable dashboard). Щоб переглянути список доступних надбудов, скористайтеся командою: minikube addons list ", + "Disables the filesystem mounts provided by the hypervisors": "Вимикає монтування файлової системи, що надається гіпервізорами.", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "Розмір диска, виділений для віртуальної машини minikube (формат: \u003cчисло\u003e[\u003cодиниці вимірювання\u003e], де одиниці вимірювання = b, k, m або g).", + "Display dashboard URL instead of opening a browser": "Показати URL інфопанелі замість відкриття її у вебоглядачі", + "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "Показувати URL-адресу надбудов Kubernetes у CLI замість відкриття її у стандартному вебоглядачі", + "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "Показувати URL-адресу сервісу Kubernetes у CLI замість відкриття її у стандартному вебоглядачі", + "Display values currently set in the minikube config file": "Показує значення, які наразі встановлені у файлі конфігурації minikube", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "", + "Display values currently set in the minikube config file. \n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "Показує значення, які наразі встановлені у файлі конфігурації minikube. \n\tФормат виводу можна налаштувати за допомогою прапорця --format, який приймає шаблон Go. \n\tФайл конфігурації зазвичай знаходиться за адресою \"~/.minikube/config/config.json\".", + "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "У Docker Desktop налаштовано менше 2 процесорів, однак Kubernetes вимагає наявності щонайменше 2 процесорів", + "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Docker Desktop налаштований для контейнерів Windows, але для minikube потрібні контейнери Linux.", + "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Docker Desktop має в наявності лише {{.size}}MiB, що менше необхідних {{.req}}MiB для Kubernetes.", + "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "Docker Desktop має в наявності лише {{.size}}MiB, тому можуть виникнути проблеми з розгортанням застосунків.", + "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "Контейнер Docker передчасно завершив роботу після створення. Рекомендуємо перевірити продуктивність/працездатність Docker.", + "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "Docker має менше 2 доступних CPU, але Kubernetes вимагає, щоб було доступно щонайменше 2 CPU.", + "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "Docker у віртуальній машині недоступний. Спробуйте виконати команду 'minikube delete', щоб очистити віртуальну машину.", + "Docs have been saved at - {{.path}}": "Документацію збережео до {{.path}}", + "Documentation: {{.url}}": "Документація: {{.url}}", + "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "Готово! kubectl налаштовано на стандартне використання кластера \"{{.name}}\" та простору імен \"{{.ns}}\"", + "Done! minikube is ready without Kubernetes!": "Готово! minikube готовий без Kubernetes!", + "Download complete!": "Завантаження завершено!", + "Downloading Kubernetes {{.version}} preload ...": "Завантаження Kubernetes {{.version}} preload ...", + "Downloading VM boot image ...": "Завантаження завантажувального образа VM ...", + "Downloading driver {{.driver}}:": "Завантаження дравера {{.driver}}:", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "Через проблеми з DNS у вашому кластері можуть виникнути проблеми із запуском, і ви не зможете отримати образи\nБільш детальна інформація доступна за адресою: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "Через зміни в macOS 13+ minikube наразі не підтримує VirtualBox. Ви можете використовувати альтернативні драйвери, такі як 'vfkit', 'qemu' або 'docker.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n Більш детальну інформацію про цю проблему див.: https://github.com/kubernetes/minikube/issues/15274\n", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "Тривалість бездіяльності перед призупиненням роботи віртуальної машини minikube (стандартно 1m0s)", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "Термін дії сертифіката minikube, стандартно становить три роки (26280h)", + "ERROR creating `registry-creds-acr` secret": "ПОМИЛКА створення секрету `registry-creds-acr", + "ERROR creating `registry-creds-dpr` secret": "ПОМИЛКА створення секрету `registry-creds-dpr`", + "ERROR creating `registry-creds-ecr` secret: {{.error}}": "ПОМИЛКА створення секрету `registry-creds-ecr`: {{.error}}", + "ERROR creating `registry-creds-gcr` secret: {{.error}}": "ПОМИЛКА створення секрету `registry-creds-gcr`: {{.error}}", + "Either systemctl is not installed, or Docker is broken. Run 'sudo systemctl start docker' and 'journalctl -u docker'": "Або systemctl не встановлено, або Docker не працює. Виконайте команди 'sudo systemctl start docker' та 'journalctl -u docker'.", + "Enable experimental NVIDIA GPU support in minikube": "Увімкнення експериментальної підтримки GPU NVIDIA в minikube", + "Enable host resolver for NAT DNS requests (virtualbox driver only)": "Вмикає резолвер хоста для запитів NAT DNS (тільки драйвер VirtualBox)", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "Вмикає одну або декілька надбудов у форматі, розділеному комами. Перелік допустимих назв надбудов дивись у `minikube addons list`.", + "Enable or disable a minikube addon": "Вмикає чи вимикає надбудови minikube", + "Enable proxy for NAT DNS requests (virtualbox driver only)": "Вмикає проксі для запитів NAT DNS (тільки драйвер VirtualBox)", + "Enabled addons: {{.addons}}": "Увімкнені надбудови: {{.addons}}", + "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "Вмикає надбудову w/ADDON_NAME у minikube. Щоб переглянути список доступних надбудов, скористайтеся командою: minikube addons list ", + "Enabling '{{.name}}' returned an error: {{.error}}": "Увімкення '{{.name}}' призвело до помилки: {{.error}}", + "Enabling dashboard ...": "Увімкення інфопанелі ...", + "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "Переконайтеся, що CRI-O встановлено та працює належним чином: запустіть 'sudo systemctl start crio' та 'journalctl -u crio'. Або використовуйте --container-runtime=docker.", + "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "Переконайтеся, що Docker встановлений і працює належним чином: запустіть 'sudo systemctl start docker' і 'journalctl -u docker'. Або виберіть інше значення для --driver.", + "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "Переконайтеся, що необхідна група cgroup 'pids' увімкнена на вашому хості: grep pids /proc/cgroups", + "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "Переконайтеся, що користувач, зазначений у файлі /etc/libvirt/qemu.conf, має доступ до вашої домашньої теки.", + "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "Переконайтеся, що ви є членом відповідної групи libvirt (не забудьте повторно увійти в систему, щоб зміни в групі набули чинності!).", + "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "Переконайтеся, що значення HTTPS_PROXY вказує на HTTPS-проксі, а не на HTTP-проксі.", + "Ensure the tmp directory path is writable to the current user.": "Переконайтеся, що шлях до теки tmp доступний для запису поточному користувачу.", + "Ensure you have at least 20GB of free disk space.": "Переконайтеся, що у вас є щонайменше 20 ГБ вільного місця на диску.", + "Ensure your {{.driver_name}} is running and is healthy.": "Переконайтеся, що {{.driver_name}} працює і знаходиться в справному стані.", + "Environment variables to pass to the Docker daemon. (format: key=value)": "Змінні середовища, які передаються демону Docker. (формат: ключ=значення)", + "Environment variables to pass to the build. (format: key=value)": "Змінні середовища, які потрібно передати до збірки. (формат: ключ=значення)", + "Error code docs have been saved at - {{.path}}": "Документи з кодами помилок збережено за адресою — {{.path}}", + "Error creating minikube directory": "Помилка під час створення теки minikube", + "Error creating view template": "Помилка під час створення шаблону view", + "Error detecting shell": "Помилка виявлення оболонки", + "Error executing view template": "Помилка під час застосування шаблону view", + "Error finding port for mount": "Помилка під час пошуку порту для монтування", + "Error generating set output": "Помилка при створенні виводу set", + "Error generating unset output": "Помилка при створенні виводу unset", + "Error getting cluster bootstrapper": "Помилка під час отримання завантажувача кластера", + "Error getting cluster config": "Помилка під час отримання конфігурації кластера", + "Error getting control-plane node": "Помилка під час отримання вузла панелі управління", + "Error getting host": "Помилка під час отримання хосту", + "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "Помилка під час отримання прив'язки порту для драйвера '{{.driver_name}}': {{.error}}", + "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "Помилка під час отримання сервісу з простором імен: {{.namespace}} та мітками {{.labelName}}:{{.addonName}}: {{.error}}", + "Error getting ssh client": "Помилка під час отримання клієнта ssh", + "Error getting the host IP address to use from within the VM": "Помилка під час отримання IP-адреси хоста для використання зсередини віртуальної машини", + "Error killing mount process": "Помилка під час примусового завершення процесу монтування", + "Error loading profile config: {{.error}}": "Помилка під час завантаження конфігурації профілю: {{.error}}", + "Error opening service": "Помилка під час відкриття сервісу", + "Error parsing minikube version: {{.error}}": "Помилка під час синтаксичного аналізу версії minikube: {{.error}}", + "Error parsing {{.name}}={{.value}}, {{.err}}": "Помилка синтаксичного аналізу {{.name}}={{.value}}, {{.err}}", + "Error reading {{.path}}: {{.error}}": "Помилка під час читання {{.path}}: {{.error}}", + "Error starting cluster": "Помилка запуску кластреа", + "Error starting mount": "Помилка запуску монтування", + "Error while setting kubectl current context : {{.error}}": "Помилка під час встановлення поточного контексту kubectl: {{.error}}", + "Error while setting kubectl current context: {{.error}}": "Помилка під час встановлення поточного контексту kubectl: {{.error}}", + "Error with ssh-add": "Помилка з ssh-add", + "Error writing mount pid": "Помилка під час запису PID монтування", + "Examples": "Приклади", + "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "Виконання \"{{.command}}\" зайняло надзвичайно багато часу: {{.duration}}", + "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "На поточному диску відсутні нові можливості ({{.error}}). Для оновлення виконайте команду 'minikube delete'", + "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "Вихід через помилку {{.fatal_code}}: {{.fatal_msg}}", + "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "Порт інфопанелі, експонований через проксі. Встановіть значення 0, щоб обирати випадковий порт.", + "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "Зовнішній адаптер, на якому буде створено зовнішній комутатор, якщо зовнішній комутатор не знайдено. (тільки драйвер hyperv)", + "Fail check if container paused": "Перевірка на наявність помилки, якщо контейнер призупинено", + "Failed removing pid from pidfile: {{.error}}": "Не вдалося видалити pid з файлу pidfile: {{.error}}", + "Failed runtime": "Збій під час виконання", + "Failed to build image": "Не вдалося створити образ", + "Failed to cache and load images": "Не вдалося зберегти в кеші та завантажити образи", + "Failed to cache binaries": "Не вдалося зберегти бінарні файли в кеші", + "Failed to cache images to tar": "Не вдалося зберегти кешовані образи в tar", + "Failed to cache kubectl": "Не вдалося зберегти kubectl у кеші", + "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Не вдалося змінити дозволи для {{.minikube_dir_path}}: {{.error}}", + "Failed to check main repository and mirrors for images": "", + "Failed to configure auto-pause {{.profile}}": "Не вдалося налаштувати автоматичну паузу в {{.profile}}", + "Failed to configure metallb IP {{.profile}}": "Не вдалося налаштувати IP-адресу metallb в {{.profile}}", + "Failed to configure registry-aliases {{.profile}}": "Не вдалося налаштувати псевдоніми реєстру в {{.profile}}", + "Failed to create file": "Не вдалося створити файл", + "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "Не вдалося видалити кластер {{.name}}, продовжуємо робити спроби.", + "Failed to delete cluster {{.name}}.": "Не вдалося видалити кластер {{.name}}.", + "Failed to delete cluster: {{.error}}": "Не вдалося видалити кластер: {{.error}}", + "Failed to delete images": "Не вдалося видалити образи", + "Failed to delete images from config": "Не вдалося видалити образи з конфігурації", + "Failed to delete profile(s): {{.error}}": "Не вдалося видалити профіль(і): {{.error}}", + "Failed to download licenses": "Не вдалося завантажити ліцензії", + "Failed to enable container runtime": "Не вдалося увімкнути середовище виконання контейнерів", + "Failed to get bootstrapper": "Не вдалося отримати завантажувач", + "Failed to get command runner": "Не вдалося отримати запускач команд", + "Failed to get image map": "Не вдалося отримати мапу образу", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "Не вдалося отримати URL-адресу сервісу — перевірте, чи працює minikube і чи вказали ви правильний простір імен ( прапорець -n), якщо він потрібен: {{.error}}", + "Failed to get temp": "Не вдалося отримати temp", + "Failed to kill mount process: {{.error}}": "Не вдалося знищити процес монтування: {{.error}}", + "Failed to list cached images": "Не вдалося вивести перелік кешованих образів", + "Failed to list images": "Не вдалося вивести перелік образів", + "Failed to load image": "Не вдалося завантажити образ", + "Failed to persist images": "Не вдалося зберегти образи", + "Failed to pull image": "Не вдалося отримати образ", + "Failed to pull images": "Не вдалося отримати образи", + "Failed to push images": "Не вдалося надіслати образи", + "Failed to read temp": "Не вдалося прочитати temp", + "Failed to reload cached images": "Не вдалося повторно завантажити кешовані образи", + "Failed to remove image": "Не вдалося видалити образ", + "Failed to remove images for profile {{.pName}} {{.error}}": "Не вдалося видалити образи для профілю {{.pName}} {{.error}}", + "Failed to save config {{.profile}}": "Не вдалося зберегти конфігурацію {{.profile}}", + "Failed to save dir": "Не вдалося зберегти теку", + "Failed to save image": "Не вдалося зберегти образ", + "Failed to save stdin": "Не вдалося зберегти stdin", + "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "Не вдалося встановити NO_PROXY Env. Будь ласка, використовуйте `export NO_PROXY=$NO_PROXY,{{.ip}}`.", + "Failed to setup certs": "Не вдалося налаштувати сертифікати", + "Failed to start container runtime": "Не вдалося запустити середовище виконання контейнерів", + "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "Не вдалося запустити {{.driver}} {{.driver_type}}. Виконання команди \"{{.cmd}} може вирішити проблему: {{.error}}", + "Failed to stop node {{.name}}: {{.error}}": "Не вдалося зупинити вузол {{.name}}: {{.error}}", + "Failed to stop ssh-agent process: {{.error}}": "Не вдалося зупинити процес ssh-agent: {{.error}}", + "Failed to tag images": "Не вдалося позначити образи", + "Failed to update cluster": "Не вдалося оновити кластер", + "Failed to update config": "Не вдалося оновити конфігурацію", + "Failed unmount: {{.error}}": "Не вдалося розмонтувати: {{.error}}", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "Не вдалося підключитися до {{.curlTarget}} зсередини minikube {{.type}}", + "Filter to use only VM Drivers": "Фільтр для використання тільки драйверів VM", + "Flags": "Прапорці", + "Follow": "Слідкувати", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "Для кращого досвіду рекомендується використовувати Docker Engine замість Docker Desktop. Інструкції з інсталяції Docker Engine: https://docs.docker.com/engine/install/#server", + "For improved {{.driver}} performance, {{.fix}}": "Для поліпшення продуктивності {{.driver}}, {{.fix}}", + "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "Для отримання додаткової інформації див.: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}", + "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Для отримання додаткової інформації див.: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "For more information, see: {{.url}}": "Для отримання додаткової інформації див.: {{.url}}", + "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "Примусове налаштування середовища для вказаної оболонки: [fish, cmd, powershell, tcsh, bash, zsh], стандартно — автоматичне виявлення", + "Force minikube to perform possibly dangerous operations": "Змушує minikube виконувати потенційно небезпечні операції", + "Format output. One of: short|table|json|yaml": "Формат виводу. Один з наступних: short|table|json|yaml", + "Format to print stdout in. Options include: [text,json]": "Формат для виводу stdout. Опції включають: [text,json]", + "Forwards all services in a namespace (defaults to \"false\")": "Перенаправляє всі сервіси в просторі імен (стандартне значення — \"false\")", + "Found docker, but the docker service isn't running. Try restarting the docker service.": "Знайдено docker, але сервіс docker не працює. Спробуйте перезапустити сервіс docker.", + "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "Знайдено драйвери, але жоден з них не був працездатним. Дивіться вище, щоб дізнатися, як виправити встановлені драйвери.", + "Found network options:": "Знайдено мережеві параметри", + "Found {{.number}} invalid profile(s) ! ": "Знайдено {{.number}} недійсний(х) профіль(ів)! ", + "Generate command completion for PowerShell.": "Генерація завершення команд для PowerShell.", + "Generate command completion for a shell": "Генерація завершення команд для оболонки", + "Generate command completion for bash.": "Генерація завершення команд для bash.", + "Generate command completion for fish .": "Генерація завершення команд для fish.", + "Generate command completion for zsh.": "Генерація завершення команд для zsh", + "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "Неможливо розібрати вказаний розмір диска '{{.diskSize}}': {{.error}}", + "Generate unable to parse memory '{{.memory}}': {{.error}}": "Неможливо розібрати вказаний розмір памʼяті '{{.memory}}': {{.error}}", + "Generating certificates and keys ...": "Створення сертифікатів і ключів ...", + "Get or list the current profiles (clusters)": "Отримання або перегляд поточних профілів (кластерів)", + "Gets the logs of the running instance, used for debugging minikube, not user code.": "Отримує логи запущеного екземпляра, що використовуються для налагодження minikube, а не коду користувача.", + "Gets the status of a local Kubernetes cluster": "Отримує стан локального кластера Kubernetes", + "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "Отримує стан локального кластера Kubernetes.\n\tСтатус виходу містить статус віртуальної машини minikube, кластера та Kubernetes, закодований у бітах у такому порядку: справа наліво.\n\tНаприклад: 7 означає: 1 (для minikube NOK) + 2 (для кластера NOK) + 4 (для Kubernetes NOK)", + "Gets the value of PROPERTY_NAME from the minikube config file": "Отримує значення PROPERTY_NAME з файлу конфігурації minikube", + "Global Flags": "Глобальні прапорці", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "Формат рядка шаблону Go для виведення списку кешу. Формат шаблонів Go можна знайти тут: https://pkg.go.dev/text/template\nСписок доступних змінних для шаблону дивіться тут: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "Формат рядка шаблону Go для виведення перегляду конфігурації. Формат шаблонів Go можна знайти тут: https://pkg.go.dev/text/template\nСписок доступних змінних для шаблону дивіться тут: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "Формат рядка шаблону Go для виведення статусу. Формат шаблонів Go можна знайти тут: https://pkg.go.dev/text/template\nСписок доступних змінних для шаблону дивіться тут: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status", + "Group ID: {{.groupID}}": "ID групи: {{.groupID}}", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "Кластери HA (з кількома панелями управління) вимагають 3 або більше вузлів control-plane.", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Headlamp може показувати більш детальну інформацію, якщо встановлено metrics-server. Щоб встановити його, виконайте:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n", + "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "Приховати підпис гіпервізора від гостя в minikube (тільки драйвер kvm2)", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "Hyper-V вимагає, щоб обсяг памʼяті в мегабайтах був парним числом. Було вказано {{.memory}} МБ. Спробуйте `--memory {{.suggestMemory}}`.", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "", + "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "Hyperkit не працює. Оновіть до останньої версії Hyperkit та/або Docker for Desktop. Або ж ви можете вибрати альтернативний --driver.", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "Мережа Hyperkit не працює. Спробуйте вимкнути спільний доступ до Інтернету: System Preference \u003e Sharing \u003e Internet Sharing.\nКрім того, ви можете спробувати оновити Hyperkit до останньої версії або використовувати альтернативний драйвер.", + "IP Address to use to expose ports (docker and podman driver only)": "IP-адреса, яка використовується для експонування портів (тільки для драйверів Docker і Podman)", + "IP address (ssh driver only)": "IP-адреса (тільки драйвер ssh)", + "If present, writes to the provided file instead of stdout.": "Якщо вказано, робить запис в наданий файл замість stdout.", + "If set, added node will be available as worker. Defaults to true.": "Якщо встановлено, доданий вузол буде доступний як worker. Стандартне значення — true.", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "Якщо встановлено, доданий вузол стане панеллю управління. Стандартне значення — false. Наразі підтримується тільки для наявних кластерів HA (з декількома панелями управління).", + "If set, automatically updates drivers to the latest version. Defaults to true.": "Якщо встановлено, автоматично оновлює драйвери до останньої версії. Стандартне значення — true.", + "If set, delete the current cluster if start fails and try again. Defaults to false.": "Якщо встановлено, поточний кластер буде видалено та виконано ще одну спроду, якщо запуск не вдався. Стандартне значення — false.", + "If set, disable CoreDNS verbose logging. Defaults to false.": "Якщо встановлено, вимикає детальне логування CoreDNS. Стандартне значення — false.", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "Якщо встановлено, вимикає збирання метрик (використання CPU та пам'яті), що може покращити використання CPU. Стандартне значення — false.", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "Якщо встановлено, вимикає оптимізації, встановлені для локального Kubernetes. Включно зі зменшенням кількості реплік CoreDNS з 2 до 1. Стандартне значення — false.", + "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "Якщо встановлено, завантажувати архів попередньо завантажених образів, якщо вони доступні, для покращення часу запуску. Стандартне значення — true.", + "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "Якщо встановлено, змушує середовище виконання контейнерів використовувати systemd як менеджер cgroup. Стандартне значення — false.", + "If set, install addons. Defaults to true.": "Якщо встановлено, встановлювати надбудови. Стандартне значення — true.", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "Якщо встановлено, віртуальна машина/контейнер minikube запуститься без запуску або налаштування Kubernetes. (працює тільки на нових кластерах)", + "If set, pause all namespaces": "Якщо встановлено, призупиняє роботу всіх просторів імен", + "If set, unpause all namespaces": "Якщо встановлено, відновлює роботу всіх просторів імен", + "If the above advice does not help, please let us know:": "Якщо вищезазначені поради не допомогли, дайте нам знати:", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "Якщо у хоста встановлено брандмауер:\n\n\t\t1. Дозвольте доафік для порту в брендмауеріn\t\t2. Вкажіть \"--port=\u003cport_number\u003e\" для \"minikube mount\"", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "Якщо true, кешувати образи Docker для поточного завантажувача і завантажувати їх у машину. Завжди false з --driver=none.", + "If true, only download and cache files for later use - don't install or start anything.": "Якщо true, тільки завантажувати та кешувати файли для подальшого використання — нічого не встановлювати та не запускати.", + "If true, pods might get deleted and restarted on addon enable": "Якщо true, то під час увімкнення надбудови поди можуть бути видалені та перезапущені.", + "If true, print web links to addons' documentation if using --output=list (default).": "Якщо true, вивести веб-посилання на документацію надбудов при використанні --output=list (стандартно).", + "If true, returns a detailed list of profiles.": "Якщо true, повертає докладний перелік профілів.", + "If true, returns list of profiles faster by skipping validating the status of the cluster.": "Якщо true, повертає перелік профілів швидше, пропускаючи перевірку стану кластера.", + "If true, will perform potentially dangerous operations. Use with discretion.": "Якщо true, будуть виконуватися потенційно небезпечні операції. Використовуйте з обережністю.", + "If you are running minikube within a VM, consider using --driver=none:": "Якщо ви запускаєте minikube у віртуальній машині, розгляньте можливість використання --driver=none:", + "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "Якщо ви все ще зацікавлені в тому, щоб драйвер {{.driver_name}} працював, наступні поради можуть допомогти вам вирішити цю проблему:", + "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "Якщо ви не хочете, щоб ваші облікові дані були змонтовані в конкретному поді, додайте мітку з ключем `gcp-auth-skip-secret` до конфігурації вашого пода.", + "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "Якщо ви хочете, щоб наявні поди монтувалися з обліковими даними, створіть їх заново або перезапустіть addons enable з параметром --refresh.", + "Ignoring empty custom image {{.name}}": "Ігнорувати порожній образ користувача {{.name}}", + "Ignoring invalid pair entry {{.pair}}": "Ігнорувати недійсний запис пари {{.pair}}", + "Ignoring unknown custom image {{.name}}": "Ігнорувати невідомий образ користувача {{.name}}", + "Ignoring unknown custom registry {{.name}}": "Ігнорувати незнайомий реєстр користувача {{.name}}", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "Для поточної версії minikube образ не був створений. Щоб вирішити цю проблему, ви можете видалити та створити кластер minikube наново, використовуючи найновіші образи. Очікувана версія minikube: {{.imageMinikubeVersion}} -\u003e Фактична версія minikube: {{.minikubeVersion}}", + "Images Commands:": "Команди для роботи з образами", + "Images used by this addon. Separated by commas.": "Образи, що використовуються цією надбудовою. Розділені комами.", + "In order to use the fall back image, you need to log in to the github packages registry": "Щоб використовувати резервний образ, вам потрібно увійти в реєстр пакунків github.", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "Незахищені реєстри Docker для передачі до демона Docker. Стандартний діапазон сервісу CIDR буде додано автоматично.", + "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "Встановіть VirtualBox і переконайтеся, що він знаходиться в path, або виберіть альтернативне значення для --driver", + "Install the latest hyperkit binary, and run 'minikube delete'": "Встановіть останню версію бінарного файлу hyperkit і запустіть команду 'minikube delete'", + "Interval is an invalid duration: {{.error}}": "Інтервал має неприпустиму тривалість: {{.error}}", + "Interval must be greater than 0s": "Інтервал має бути більшим за 0s", + "Invalid port": "Недійсний порт", + "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "Istio потребує {{.minCPUs}} CPUs — ваша конфігурація виділяє лише {{.cpus}} CPUs", + "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "Istio потребує {{.minMem}}МБ памʼяті — ваша конфігурація виділяє лише {{.memory}}МБ.", + "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "Схоже, ви працюєте в GCE, а це означає, що автентифікація повинна працювати без надбудови GCP Auth. Якщо ви все ж хочете пройти автентифікацію за допомогою файлу облікових даних, використовуйте прапорець --force.", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configure is:": "Швидше за все, у вас проблема з інтернетом. Переконайтеся, що ви можете підключитися до інтернету хоча б через HTTP, безпосередньо або через проксі-сервер. Наразі ваші налаштування проксі-сервера такі:", + "Kept for backward compatibility, value is ignored.": "Зберігається для зворотної сумісності, значення ігнорується.", + "Kicbase images have not been deleted. To delete images run:": "Образи kicbase не були видалені. Щоб їх видалити, виконайте:", + "Kill the mount process spawned by minikube start": "Знищити процес монтування, запущений minikube start", + "Kubernetes requires at least 2 CPU's to start": "Для запуску Kubernetes потрібно щонайменше 2 CPU.", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "Версія Kubernetes не знайдена у списку версій GitHub. Ви можете примусово встановити версію Kubernetes за допомогою прапорця --force.", + "Kubernetes version {{.specified}} found in GitHub version list": "Версія Kubernetes {{.specified}} знайдена у списку версій GitHub", + "Kubernetes version {{.specified}} found in version list": "Версія Kubernetes {{.specified}} знайдена у списку версій", + "Kubernetes version {{.version}} is not supported by this release of minikube": "Версія Kubernetes {{.version}} не підтримується цією версією minikube.", + "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "Kubernetes {{.new}} тепер доступний. Якщо ви хочете оновити версію, вкажіть: --kubernetes-version={{.prefix}}{{.new}}", + "Kubernetes {{.version}} is not supported by this release of minikube": "Kubernetes {{.version}} не підтримується цією версією minikube.", + "Kubernetes: Stopping ...": "Kubernetes: Зупинка ...", + "Kubernetes: {{.status}}": "", + "Launching proxy ...": "Запуск проксі ...", + "List all available images from the local cache.": "Виводіть перелік усіх доступних образів із локального кешу.", + "List existing minikube nodes.": "Виводіть перелік наявних вузлів minikube.", + "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "Список імен образів які використовує надбудова ADDON_NAME. Для перегляду списку доступних надбудов використовуйте: minikube addons list", + "List images": "Виводіть перелік образів", + "List nodes.": "Виводіть перелік вузлів.", + "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "Список гостьових портів VSock, які повинні бути відкриті як сокети на хості (тільки драйвер hyperkit)", + "List of ports that should be exposed (docker and podman driver only)": "Список портів, які повинні бути експоновані (тільки для драйверів Docker і Podman)", + "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "Прослуховування 0.0.0.0 на зовнішньому хості docker {{.host}}. Будь ласка, зверніть увагу", + "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "Прослуховування {{.listenAddr}}. Це не рекомендується і може спричинити вразливість безпеки. Використовуйте на власний ризик.", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "Показує перелік усіх доступних надбудов minikube, а також їхній поточний стан (увімкнено/вимкнено).", + "Lists all minikube profiles.": "Виводіть перелкі всіх профілів minikube", + "Lists all valid default values for PROPERTY_NAME": "Виводить перелік усіх дійсних стандартних значень для PROPERTY_NAME", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "Виводить перелік усіх дійсних профілів minikube та виявляє всі можливі недійсні профілі.", + "Lists the URLs for the services in your local cluster": "Виводить перелік URL-адрес сервісів у вашому локальному кластері.", + "Load an image into minikube": "Завантаження образу в minikube", + "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "Локальні теки для спільного використання з Guest через NFS-монтування (тільки драйвер hyperkit)", + "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "Локальний проксі ігнорується: {{.name}}={{.value}} не передається в docker env.", + "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "Розташування сокета VPNKit, що використовується для мережевого зʼєднання. Якщо поле порожнє, вимикає Hyperkit VPNKitSock, якщо 'auto' — використовує Docker для зʼєднання Mac VPNKit, в іншому випадку використовує вказаний VSock (тільки драйвер hyperkit).", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "Місце, звідки можна завантажити бінарні файли kubectl, kubelet та kubeadm.", + "Locations to fetch the minikube ISO from.": "Місця, звідки можна завантажити ISO-образ minikube.", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "Увійдіть або виконайте команду на машині за допомогою SSH; аналогічно до 'docker-machine ssh'.", + "Log into the minikube environment (for debugging)": "Вхід в середовище minikube (для налагодження)", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "Створено файл журналу ({{.logPath}}), не забудьте додати його при повідомленні про проблеми!", + "Manage cache for images": "Керування кешем для образів", + "Manage images": "Керування образами", + "Message Size: {{.size}}": "Розмір повідомлення: {{.size}}", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "Мінімальна підтримувана версія VirtualBox: {{.vers}}, поточна версія VirtualBox: {{.cvers}}", + "Modify persistent configuration values": "Зміна постійних значень конфігурації", + "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "Більше інформації: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", + "Most users should use the newer 'docker' driver instead, which does not require root!": "Більшість користувачів повинні використовувати новий драйвер 'docker', який не вимагає прав суперкористувача!", + "Mount type: {{.name}}": "Тип монтування: {{.name}}", + "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "Монтування шляху хоста {{.sourcePath}} у віртуальну машину як {{.destinationPath}} ...", + "Mounts the specified directory into minikube": "Монтує вказану теку в minikube", + "Mounts the specified directory into minikube.": "Монтує вказану теку в minikube.", + "Multiple errors deleting profiles": "Численні помилки під час видалення профілів", + "Multiple errors encountered:": "Виникло кілька помилок:", + "Multiple minikube profiles were found - ": "Знайдено кілька профілів minikube - ", + "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "Тип NIC, що використовується тільки для мережі хоста. Один з Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM або virtio (тільки драйвер virtualbox)", + "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "Тип NIC, що використовується для мережі NAT. Один з Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM або virtio (тільки драйвер virtualbox)", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "ПРИМІТКА: Будь ласка, не закривайте цей термінал, оскільки цей процес повинен залишатися активним, щоб тунель був доступним ...", + "NOTE: This process must stay alive for the mount to be accessible ...": "ПРИМІТКА: Цей процес повинен залишатися активним, щоб монтування було доступним ...", + "Networking and Connectivity Commands:": "Команди для роботи з мережею та підключенням", + "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "IP-адреса не вказана. Спробуйте вказати --ssh-ip-address або перегляньте https://minikube.sigs.k8s.io/docs/drivers/ssh/", + "No changes required for the \"{{.context}}\" context": "Зміни для контексту \"{{.context}}\" не потрібні.", + "No control-plane nodes found.": "Не знайдено вузла control-plane.", + "No minikube profile was found.": "Не знайдено профіль minikube.", + "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Не виявлено жодного можливого драйвера. Спробуйте вказати --driver або перегляньте https://minikube.sigs.k8s.io/docs/start/", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "У просторі імен '{{.namespace}}' не знайдено жодного сервісу.\nВи можете вибрати інший простір імен за допомогою команди 'minikube service --all -n \u003cnamespace\u003e'", + "No such addon {{.name}}": "Надбудови {{.name}} немає", + "No valid URL found for tunnel.": "Не знайдено допустимої URL-адреси для тунелю.", + "No valid port found for tunnel.": "Не знайдено допустимого порту для тунелю.", + "Node {{.name}} failed to start, deleting and trying again.": "Не вдалося запустити вузол {{.name}}, видаляємо і спробуємо ще раз.", + "Node {{.name}} was successfully deleted.": "Вузол {{.name}} було успішно видалено.", + "Node {{.nodeName}} does not exist.": "Вузол {{.nodeName}} не існує.", + "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "Жодне з відомих сховищ не є доступним. Розгляньте можливість вказати альтернативне сховище образів за допомогою прапорця --image-repository.", + "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "Жодне з відомих сховищ у вашому регіоні не є доступним. Використовується {{.image_repository_name}} як запасний варіант.", + "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "Помітив, що у вас активовано docker-env в драйвері {{.driver_name}} в цьому терміналі:", + "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "Помітив, що у вас активовано podman-env в драйвері {{.driver_name}} в цьому терміналі:", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "Кількість додаткових дисків, створених і підключених до віртуальної машини minikube (наразі реалізовано тільки для драйверів hyperkit, kvm2, qemu2, vfkit і krunkit)", + "Number of lines back to go within the log": "Кількість рядків, на яку потрібно повернутися назад у лозі", + "OS release is {{.pretty_name}}": "Випуск OS — {{.pretty_name}}", + "One of 'text', 'yaml' or 'json'.": "Одне з 'text', 'yaml' чи 'json'.", + "One of 'yaml' or 'json'.": "Одне з 'yaml' чи 'json'.", + "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "Дозволено використовувати тільки літери, цифри та дефіси '-'. Мінімум 1 символ, починаючи з літери або цифри.", + "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "Дозволено використовувати тільки літери, цифри та дефіси '-'. Мінімум 2 символи, починаючи з літери або цифри.", + "Open the addons URL with https instead of http": "Відкрийте URL-адресу надбудови з https замість http", + "Open the service URL with https instead of http (defaults to \"false\")": "Відкрити URL-адресу сервісу з https замість http (стандартне значення — \"false\")", + "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "Відкриття сервісу Kubernetes {{.namespace_name}}/{{.service_name}} у стандартному вебоглядачі...", + "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "Відкриття сервісу {{.namespace_name}}/{{.service_name}} у стандартному вебоглядачі...", + "Opening {{.url}} in your default browser...": "Відкриття {{.url}} у вашому стандартному вебоглядачі...", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "Відкриває надбудову з ADDON_NAME у minikube (приклад: minikube addons open dashboard). Щоб переглянути список доступних надбудов, скористайтеся командою: minikube addons list ", + "Operations on nodes": "Операції з вузлами", + "Options: {{.options}}": "Параметри: {{.options}}", + "Output format. Accepted values: [json, yaml]": "Формат виводу. Прийнятні значення: [json, yaml]", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "Виводить код завершення команд оболонки (bash, zsh, fish або powershell)\n\n\tЦе залежить від бінарного файлу bash-completion. Приклад інструкцій з інсталяції:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion\t# для bash\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion\t# для zsh\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish\t# для fish\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash)\t# для bash\n\t\t$ source \u003c(minikube completion zsh)\t# для zsh\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish\t# для fish\n\n\tМожна вивести результат виконання в файл і використовувати через source у вашому .bashrc.\n\n\tWindows:\n\t\t## Збережіть код завершення в скрипті та виконайте його в профілі\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Виконайте код завершення в профілі\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tПримітка для zsh: [1] Автодоповнення zsh підтримується тільки у версіях zsh \u003e= 5.2\n\tПримітка для fish: [2] детальнішу інформацію дивіться в документації. https://fishshell.com/docs/current/#tab-completion\n", + "Outputs the licenses of dependencies to a directory": "Виводить ліцензії залежностей в теку", + "Overwrite image even if same image:tag name exists": "Перезаписати образ, навіть якщо існує такий самий image:tag", + "Path to socket vmnet binary (QEMU driver only)": "Шлях до бінарного файлу vmnet сокета (тільки драйвер QEMU)", + "Path to the Dockerfile to use (optional)": "Шлях до файлу Dockerfile, який потрібно використовувати (опціонально)", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "Шлях до файлу прошивки qemu. Стандартні налаштування: для Linux — стандартне розташування прошивки. Для macOS — розташування встановлення brew. Для Windows — C:\\Program Files\\qemu\\share", + "Path to the socket vmnet client binary (QEMU driver only)": "Шлях до бінарного файлу клієнта vmnet сокета (тільки драйвер QEMU)", + "Pause": "Пауза", + "Paused {{.count}} containers": "Призупинено {{.count}} контейнери(ів)", + "Paused {{.count}} containers in: {{.namespaces}}": "Призупинено {{.count}} контейнери(ів) в: {{.namespaces}}", + "Pausing node {{.name}} ... ": "Призупинення роботи вузла {{.name}} ... ", + "Please also attach the following file to the GitHub issue:": "Також додайте наступний файл до Тікета GitHub", + "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "Створіть кластер із більшим розміром диска: `minikube start --disk SIZE_MB` ", + "Please either authenticate to the registry or use --base-image flag to use a different registry.": "Пройдіть процедуру автентифікації в реєстрі або використовуйте прапорець --base-image, щоб використовувати інший реєстр.", + "Please enter a value:": "Введіт значення", + "Please free up disk or prune images.": "Звільніть місце на диску або видаліть образи.", + "Please increase Desktop's disk size.": "Збільште розмір диска.", + "Please install the minikube hyperkit VM driver, or select an alternative --driver": "Встановіть драйвер віртуальної машини minikube hyperkit або виберіть альтернативний драйвер --driver.", + "Please install the minikube kvm2 VM driver, or select an alternative --driver": "Встановіть драйвер minikube kvm2 VM або виберіть альтернативний драйвер --driver.", + "Please make sure the service you are looking for is deployed or is in the correct namespace.": "Переконайтеся, що сервіс, який ви шукаєте, розгорнуто або він знаходиться у правильному просторі імен.", + "Please provide a path or url to build": "Вкажіть шлях або URL-адресу для збирання", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "Надайте образ в середовищі виконання контейнерів, щоб зберегти його а minikube за допомогою \u003cminikube image save IMAGE_NAME\u003e", + "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "Надайте образ у вашому локальному демоні для завантаження в minikube за допомогою \u003cminikube image load IMAGE_NAME\u003e", + "Please provide source and target image": "Надайте вихідний та цільовий образи", + "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "Перегляньте своє середовище docker-env, щоб переконатися, що ваші змінні середовища мають оновлені порти:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t", + "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "Перегляньте своє середовище podman-env, щоб переконатися, що ваші змінні середовища мають оновлені порти:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "Запустіть `minikube logs --file=logs.txt` і додайте файл logs.txt до Тікета GitHub.", + "Please see {{.documentation_url}} for more details": "Більш детальну інформацію дивіться у {{.documentation_url}}.", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", + "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "Вкажіть теку, яку потрібно змонтувати: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (приклад: \"/host-home:/vm-home\")", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", + "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "Вкажіть шлях для копіювання: \n\tminikube cp \u003csource шлях до файлу\u003e \u003ctarget абсолютний шлях до файлу\u003e (приклад: \"minikube cp a/b.txt /copied.txt\")", + "Please try purging minikube using `minikube delete --all --purge`": "Спробуйте очистити minikube за допомогою команди `minikube delete --all --purge`.", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", + "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "Будь ласка, перейдіть за наступним посиланням, щоб ознайомитися з документацією з цього питання:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n", + "Populates the specified folder with documentation in markdown about minikube": "Заповнює вказану теку документацією про minikube у форматі Markdown.", + "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "PowerShell працює в режимі обмежень, який несумісний зі скриптами Hyper-V.", + "Powering off \"{{.profile_name}}\" via SSH ...": "Вимкнення \"{{.profile_name}}\" через SSH ...", + "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "Підготовка Kubernetes {{.k8sVersion}} у {{.runtime}} {{.runtimeVersion}} ...", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "Підготовка {{.runtime}} {{.runtimeVersion}} ...", + "Print current and latest version number": "Виводить поточний та останній номер версії", + "Print just the version number.": "Вивести тільки номер версії.", + "Print the version of minikube": "Виводить версію minikube", + "Print the version of minikube.": "Виводить версію minikube.", + "Problems detected in {{.entry}}:": "Проблеми, виявлені в {{.entry}}:", + "Problems detected in {{.name}}:": "Проблеми, виявлені в {{.name}}:", + "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "Профіль \"{{.cluster}}\" не знайдено. Скористайтесь командою \"minikube profile list\" для перегляду всіх профілів.", + "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "Імʼя профілю \"{{.profilename}}\" є зарезервованим ключовим словом. Щоб видалити цей профіль, виконайте: \"{{.cmd}}\"", + "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "Імʼя профілю '{{.name}}' дублюється з іменем машини '{{.machine}}' у профілі '{{.profile}}'", + "Profile name '{{.name}}' is not valid": "Імʼя профілю '{{.name}}' не є дійсним", + "Profile name '{{.profilename}}' is not valid": "Імʼя профілю '{{.profilename}}' не є дійсним", + "Profile name should be unique": "Імʼя профілю повинно бути унікальним", + "Provide VM UUID to restore MAC address (hyperkit driver only)": "Визначає UUID віртуальної машини для відновлення MAC-адреси (тільки драйвер Hyperkit)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "Надає інструкції щодо налаштування docker-cli вашого терміналу для роботи з Docker Engine всередині minikube. (Корисно для створення образів Docker безпосередньо всередині minikube)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "Надає інструкції щодо налаштування docker-cli вашого терміналу для роботи з Docker Engine всередині minikube. (Корисно для створення образів Docker безпосередньо всередині minikube)\n\nНаприклад, ви можете виконувати всі операції Docker, такі як docker build, docker run та docker ps, безпосередньо в Docker всередині minikube.\n\nПримітка: На вашому компʼютері має бути встановлено docker-cli. Інструкції з встановлення docker-cli: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps", + "Pull images": "Отримання образів", + "Pull the remote image (no caching)": "Отримати відділений образ (без кешування)", + "Pulling base image {{.kicVersion}} ...": "Отримання базового образа {{.kicVersion}} ...", + "Push images": "Надсилання образів", + "Push the new image (requires tag)": "Надсилання нового образа (вимагається теґ)", + "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "Перезавантажте компʼютер, щоб завершити встановлення VirtualBox, переконайтеся, що VirtualBox не блокується вашою системою, та/або використовуйте інший гіпервізор.", + "Rebuild libvirt with virt-network support": "Перекомпілюйте libvirt з підтримкою virt-network", + "Received {{.name}} signal": "Отримано сигнал {{.name}}", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "Повторно створіть кластер, виконавши наступні команди:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}", + "Registries used by this addon. Separated by commas.": "Реєстри, які використовує надбудова. Розділені комами.", + "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "Надбудова реєстру з драйвером {{.driver}} використовує порт {{.port}}. Будь ласка, використовуйте його замість стандартного порту 5000.", + "Registry mirrors to pass to the Docker daemon": "Дзеркала реєстру для передачі демону Docker", + "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "Перевстановіть VirtualBox і перезавантажте компʼютер. Або спробуйте драйвер kvm2: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/", + "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "Перевстановіть VirtualBox і переконайтеся, що він не заблокований: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading", + "Related issue: {{.url}}": "Повʼязана проблема: {{.url}}", + "Related issues:": "Повʼязані питання:", + "Remove one or more images": "Вилучення одного або декількох образів", + "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "Видаліть недійсний прапорець --docker-opt або --insecure-registry, якщо він був вказаний.", + "Removed all traces of the \"{{.name}}\" cluster.": "Вилучення всіх слідів кластера \"{{.name}}\"", + "Removing {{.directory}} ...": "Вилучення {{.directory}} ...", + "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "Запитана кількість CPU {{.requested_cpus}} перевищує кількість доступних CPU {{.avail_cpus}}.", + "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "Запитана кількість CPU {{.requested_cpus}} менше мінімально допустимої кількості {{.minimum_cpus}}", + "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "Запитаний обсяг памʼяті ({{.requested}} МБ) менше рекомендованого мінімуму {{.recommend}} МБ. Розгортання може завершитися невдачею.", + "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "Запитаний обсяг памʼяті {{.requested}} МБ перевищує обмеження вашої системи {{.system_limit}} МБ.", + "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "Запитаний обсяг памʼяті {{.requested}}MiB менше мінімального доступного обсягу {{.minimum_memory}}MB", + "Reset Docker to factory defaults": "Скинути Docker до заводських налаштувань", + "Restart Docker": "Перезапустити Docker", + "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "Перезапустіть Docker, переконайтеся, що Docker працює, а потім виконайте: 'minikube delete', а потім знову 'minikube start'.", + "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "Перезапуск наявного {{.driver_name}} {{.machine_type}} для \"{{.cluster}}\" ...", + "Restarting the {{.name}} service may improve performance.": "Перезапуск сервісу {{.name}} може покращити продуктивність.", + "Retrieve the ssh host key of the specified node": "Отримання ключа ssh-хосту вказаного вузла", + "Retrieve the ssh host key of the specified node.": "Отримання ключа ssh-хосту вказаного вузла.", + "Retrieve the ssh identity key path of the specified node": "Отримання шляху до ключа ідентифікації ssh вказаного вузла", + "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "Отримання шляху до ключа ідентифікації ssh вказаного вузла та запис його в STDOUT", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "Отримує IP-адресу працюючого кластера, перевіряє її\n\tз IP в kubeconfig і виправляє kubeconfig, якщо вона неправильна.", + "Retrieves the IP address of the specified node": "Отримання IP-адреси вказаного вузла", + "Retrieves the IP address of the specified node, and writes it to STDOUT.": "Отримання IP-адреси вказаного вузла та запис її в STDOUT", + "Returns a URL to connect to a service": "Повертає URL-адресу для підключення до сервісу", + "Returns logs to debug a local Kubernetes cluster": "Вивід логів для налагодження локального кластера Kubernetes", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "Повертає URL-адреси Kubernetes для сервісів у вашому локальному кластері. У разі наявності декількох URL-адрес вони будуть виведені по одній за раз.", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "Повертає значення PROPERTY_NAME з файлу конфігурації minikube. Значення може бути перезаписане під час виконання за допомогою прапорців або змінних середовища.", + "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "Клацніть правою кнопкою миші піктограму PowerShell і виберіть «Запустити від імені адміністратора», щоб відкрити PowerShell у режимі з підвищеними правами.", + "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "Запустіть 'kubectl describe pod coredns -n kube-system' і перевірте наявність конфлікту брандмауера або DNS.", + "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "Запустіть “minikube delete”, щоб видалити застарілу віртуальну машину, або переконайтеся, що minikube працює під тим самим користувачем, під яким ви запускаєте цю команду.", + "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "Виконайте команду 'sudo sysctl fs.protected_regular=0' або спробуйте драйвер, який не вимагає прав суперкористувача, наприклад '--driver=docker'.", + "Run a kubectl binary matching the cluster version": "Запускає бінарний файл kubectl, що відповідає версії кластера", + "Run minikube from the C: drive.": "Запустіть minikube з диска C:.", + "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "Запуска клієнт Kubernetes, за необхідності завантажує його. Не забувайте -- після kubectl!\n\nЦя команда запустить клієнта Kubernetes (kubectl) з тією ж версією, що і кластер.\n\nЗазвичай завантажується бінарний файл, що відповідає операційній системі та архітектурі хоста, але за бажанням ви також можете запустити його безпосередньо в панелі управління через ssh-зʼєднання. Це може бути корисно, якщо ви не можете запустити kubectl локально з якоїсь причини, наприклад, через непідтримуваний хост. Зверніть увагу, що при використанні --ssh всі шляхи будуть застосовуватися до віддаленої машини.", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "Виконайте наступне:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "Виконайте: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'", + "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "Виконайте: 'kubectl delete clusterrolebinding kubernetes-dashboard'", + "Run: 'minikube delete --all' to clean up all the abandoned networks.": "Виконайте: 'minikube delete --all', щоб очистити всі покинуті мережі.", + "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "Виконайте: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'", + "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "Виконайте: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'", + "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Працює на localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", + "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "Працює віддалено (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", + "SSH key (ssh driver only)": "Ключ SSH (тільки драйвер ssh)", + "SSH port (ssh driver only)": "Порт SSH (тільки драйвер ssh)", + "SSH user (ssh driver only)": "Користувач SSH (тільки драйвер ssh)", + "Save a image from minikube": "Збереження образу з minikube", + "Searching the internet for Kubernetes version...": "Пошук версії Kubernetes в Інтернеті...", + "Select a valid value for --dnsdomain": "Виберіть дійсне значення для --dnsdomain", + "Send trace events. Options include: [gcp]": "Надіслати події трасування. Доступні опції: [gcp]", + "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "Сервіс '{{.service}}' не знайдено в просторі імен '{{.namespace}}'. Ви можете вибрати інший простір імен за допомогою команди 'minikube service {{.service}} -n \u003cnamespace\u003e'. Або вивести перелік усіх сервісів за допомогою команди 'minikube service list'.", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "Сервіси {{.svc_names}} мають тип \"ClusterIP\", який не призначений для експонування, проте для локальної розробки minikube дозволяє отримати до нього доступ!", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "Встановлює статичну IP-адресу для кластера minikube. IP-адреса повинна бути приватною, IPv4, а останній октет повинен бути в діапазоні від 2 до 254, наприклад 192.168.200.200 (тільки для драйверів Docker і Podman).", + "Set failed": "Збій встановлення", + "Set flag to delete all profiles": "Встановлює прапорець для видалення всіх профілів", + "Set flag to stop all profiles (clusters)": "Встановлює прапорець, для зупинки всіх профілів (кластерів)", + "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "Встановити прапорець для зупинки кластера через заданий проміжок часу (наприклад, --schedule=5m)", + "Set this flag to delete the '.minikube' folder from your user directory.": "Встановіть цей прапорець, щоб видалити теку '.minikube' з вашої домашньої теки користувача.", + "Sets an individual value in a minikube config file": "Встановлює певне значення у файлі конфігурації minikube", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "Встановлює значення PROPERTY_NAME у PROPERTY_VALUE\n\tЦі значення можуть бути перезаписані прапорцями або змінними середовища під час виконання.", + "Sets up podman env variables; similar to '$(podman-machine env)'.": "Встановлює змінні середовища podman; аналогічно до “$(podman-machine env)”.", + "Setting profile failed": "Помилка налаштування профілю", + "Show a list of global command-line options (applies to all commands).": "Показує список глобальних опцій командного рядка (застосовується до всіх команд).", + "Show only log entries which point to known problems": "Показати тільки записи журналу, які вказують на відомі проблеми", + "Show only the audit logs": "Показати тільки логи аудиту", + "Show only the last start logs.": "Показувати тільки логи останнього запуску.", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "Показувати тільки найновіші записи в журналі та постійно виводити нові записи, коли вони додаються до журналу.", + "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "Імітувати кількість вузлів numa в minikube, підтримуваний діапазон кількості вузлів numa становить 1-8 (тільки драйвер kvm2)", + "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "Пропущено перемикання контексту kubectl для {{.profile_name}}, оскільки було встановлено --keep-context.", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Деякі функції інформаційної панелі вимагають надбудови metrics-server. Щоб увімкнути всі функції, виконайте наступну команду:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n", + "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "Вибачте, Kubernetes {{.k8sVersion}} вимагає, щоб conntrack був встановлений у шляху root.", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "Вибачте, Kubernetes {{.k8sVersion}} вимагає, щоб crictl був встановлений у шляху root.", + "Sorry, completion support is not yet implemented for {{.name}}": "", + "Sorry, please set the --output flag to one of the following valid options: [text,json]": "Вибачте, встановіть прапорець --output на один із таких дійсних варіантів: [text,json]", + "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "Вибачте, IP-адреса, вказана з прапорцем --listen-address, є недійсною: {{.listenAddr}}.", + "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "Вибачте, адреса, вказана з прапорцем --insecure-registry, є недійсною: {{.addr}}. Очікувані формати: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] або \u003cnetwork\u003e/\u003cnetmask\u003e", + "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "Вибачте, параметр kubeadm.{{.parameter_name}} наразі не підтримується --extra-config.", + "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "Вибачте, URL-адреса, вказана з прапорцем --registry-mirror, є недійсною: {{.url}}", + "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "Вибачте, {{.driver}} не дозволяє змінювати монтування після створення контейнера (попереднє монтування: '{{.old}}', нове монтування: '{{.new}})'", + "Source {{.path}} can not be empty": "Source {{.path}} не може бути порожнім", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "Вказана версія Kubernetes {{.specified}} є старішою за найстарішу підтримувану версію: {{.oldest}}. Для отримання детальної інформації скористайтеся командою `minikube config defaults kubernetes-version`.", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "Вказана версія Kubernetes {{.specified}} є новішою за найновішу підтримувану версію: {{.newest}}. Для отримання детальної інформації скористайтеся командою `minikube config defaults kubernetes-version`.", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "Вказана версія Kubernetes {{.specified}} не знайдена у переліку версій Kubernetes", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "Вказана основна версія Kubernetes {{.specifiedMajor}} є новішою за найновішу підтримувану основну версію: {{.newestMajor}}", + "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "Вкажіть --kubernetes-version у форматі v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e. Приклад: 'v1.1.14'", + "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "Вкажіть альтернативне значення --host-only-cidr, наприклад 172.16.0.1/24.", + "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "Вказує довільні прапорці, які передаються демону Docker. (формат: ключ=значення)", + "Specify arbitrary flags to pass to the build. (format: key=value)": "Вкажіть довільні прапорці, які потрібно передати до збірки. (формат: ключ=значення)", + "Specify the 9p version that the mount should use": "Вкажіть версію 9p, яку має використовувати монтування", + "Specify the ip that the mount should be setup on": "Вкажіть IP-адресу, для якої потрібно налаштувати монтування", + "Specify the mount filesystem type (supported types: 9p)": "Вкажіть тип файлової системи для монтування (підтримувані типи: 9p)", + "Specify the port that the mount should be setup on, where 0 means any free port.": "Вкажіть порт, на якому слід налаштувати монтування, де 0 означає будь-який вільний порт.", + "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "Вказання додаткових дисків наразі підтримується лише для таких драйверів: {{.supported_drivers}}. Якщо ви можете допомогти додати цю функцію, створіть PR.", + "StartHost failed, but will try again: {{.error}}": "StartHost не відбувся, але спробу буде повторено: {{.error}}", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "Запуск вузла \"{{.node}}\" {{.role}} в кластері \"{{.cluster}}\"", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "Запуск minikube без Kubernetes у кластері {{.cluster}}", + "Starting tunnel for service {{.service}}.": "Запуск тунелю для сервісу {{.service}}.", + "Starts a local Kubernetes cluster": "Запускає локальний кластер Kubernetes", + "Starts a node.": "Запускає вузол.", + "Starts an existing stopped node in a cluster.": "Запускає наявний зупинений вузол у кластері.", + "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "Запуск із драйвером {{.old_driver}} не вдався, спробуємо з альтернативним драйвером {{.new_driver}}: {{.error}}", + "Stopped tunnel for service {{.service}}.": "Зупинено тунель для сервісу {{.service}}.", + "Stopping node \"{{.name}}\" ...": "Зупика вузла \"{{.name}}\" ...", + "Stopping tunnel for service {{.service}}.": "Зупинка тунелю для сервіса {{.service}}.", + "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "Зупиняє локальний кластер Kubernetes. Ця команда зупиняє базову віртуальну машину або контейнер, але зберігає дані користувача без змін. Кластер можна запустити знову за допомогою команди \"start\".", + "Stops a node in a cluster.": "Зупиняє вузол в кластері.", + "Stops a running local Kubernetes cluster": "Зупиняє роботу локального кластера Kubernetes", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "Підмережа, яка буде використовуватися в кластері kic. Якщо поле залишити порожнім, minikube вибере адресу підмережі, починаючи з 192.168.49.0. (тільки для драйверів docker і podman)", + "Successfully added {{.name}} to {{.cluster}}!": "Успішно додано {{.name}} до {{.cluster}}!", + "Successfully deleted all profiles": "Всі профілі успішно видалені", + "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "Успішно змонтовано {{.sourcePath}} до {{.destinationPath}}", + "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "Успішно очищено теку minikube, розташовану за адресою — [{{.minikubeDirectory}}]", + "Successfully started node {{.name}}!": "Успішно запущено вузол {{.name}}!", + "Successfully stopped node {{.name}}": "Успішно зупинено вузол {{.name}}", + "Successfully unblocked bootpd process from firewall, retrying": "Успішно розблоковано процес bootpd з брандмауера, повторна спроба", + "Suggestion: {{.advice}}": "Порада: {{.advice}}", + "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Система має в наявності лише {{.size}}MiB, що менше необхідних {{.req}}MiB для Kubernetes.", + "Tag images": "Додавання теґів образів", + "Tag to apply to the new image (optional)": "Теґ, який слід застосувати до нового образу (опціонально)", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "Цільовий \u003cremote file path\u003e повинен бути абсолютним шляхом. Відносні шляхи не допускаються (приклад: \"minikube:/home/docker/copied.txt\"", + "Target directory {{.path}} must be an absolute path": "Цільова тека {{.path}} повинна бути абсолютним шляхом", + "Target {{.path}} can not be empty": "Ціль {{.path}} не може бути порожньою", + "Test docs have been saved at - {{.path}}": "Тестові документи збережено за адресою — {{.path}}", + "The \"{{.driver_name}}\" driver should not be used with root privileges.": "Драйвер \"{{.driver_name}}\" не слід використовувати з правами суперкористувача.", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "Драйвер \"{{.driver_name}}\" не слід використовувати з правами суперкористувача. Якщо ви бажаєте продовжити роботу як суперкористувач, використовуйте --force.", + "The \"{{.name}}\" container runtime requires CNI": "Для роботи контейнера \"{{.name}}\" потрібен CNI", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "Драйвер 'hyperkit' є застарілим і буде видалений у майбутніх версіях.\n Ви можете використовувати альтернативні драйвери, такі як 'vfkit', 'qemu' або 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t", + "The 'none' driver is designed for experts who need to integrate with an existing VM": "Драйвер 'none' призначений для експертів, яким потрібно інтегруватися з наявною віртуальною машиною.", + "The '{{.addonName}}' addon is enabled": "Надбудову '{{.addonName}}' було увімкнено", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "Драйвер '{{.driver}}' вимагає підвищених прав доступу. Будуть виконані наступні команди:\n\n{{ .example }}\n", + "The '{{.driver}}' provider was not found: {{.error}}": "Не знайдено постачальника '{{.driver}}': {{.error}}", + "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "Драйвер '{{.name}}' не підтримує кілька профілів: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "The '{{.name}}' driver does not respect the --cpus flag": "Драйвер '{{.name}}' не враховує прапорець --cpus", + "The '{{.name}}' driver does not respect the --memory flag": "Драйвер '{{.name}}' не враховує прапорець --memory", + "The '{{.name}}' driver does not support --cpus=no-limit": "Драйвер '{{.name}}' не враховує прапорець --cpus=no-limit", + "The '{{.name}}' driver does not support --memory=no-limit": "Драйвер '{{.name}}' не враховує прапорець --memory=no-limit", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "Прапорець --image-repository, який ви вказали, містить схему: {{.scheme}}, яку буде автоматично видалено.", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "Прапорець --image-repository, який ви вказали, закінчувався символом /, що могло спричинити конфлікт у Kubernetes, тому його було автоматично видалено", + "The CIDR to be used for service cluster IPs.": "CIDR, який буде використовуватися для IP-адрес сервісів кластера", + "The CIDR to be used for the minikube VM (virtualbox driver only)": "CIDR, який буде використовуватися для віртуальної машини minikube (тільки драйвер virtualbox)", + "The KVM QEMU connection URI. (kvm2 driver only)": "URI-адреса підключення KVM QEMU. (тільки драйвер kvm2)", + "The KVM default network name. (kvm2 driver only)": "Стандартне імʼя мережі KVM. (тільки драйвер kvm2)", + "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "Драйвер KVM не може відтворити цю стару віртуальну машину. Виконайте команду `minikube delete`, щоб видалити її, і спробуйте ще раз.", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534", + "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "Драйвер віртуальної машини вийшов з ладу. Виконайте команду 'minikube start --alsologtostderr -v=8', щоб переглянути повідомлення про помилку драйвера віртуальної машини.", + "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "Драйвер віртуальної машини завершив роботу з помилкою і, можливо, пошкоджений. Виконайте команду 'minikube start' з параметрами --alsologtostderr -v=8, щоб переглянути помилку.", + "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "Віртуальної машини, для якої налаштовано minikube, більше не існує. Виконайте команду 'minikube delete'", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "Надбудова ambassador перестала працювати з версії v1.23.0. Для отримання додаткової інформації відвідайте: https://github.com/datawire/ambassador-operator/issues/73", + "The apiserver listening port": "Порт на якому слухає apiserver", + "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "Авторизаційне імʼя хосту apiserver для сертифікатів apiserver та підключення. Його можна використовувати, якщо ви хочете зробити apiserver доступним назовні.", + "The base image to use for docker/podman drivers. Intended for local development.": "Базовий образ для використання в драйверах docker/podman. Призначений для локальної розробки.", + "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "Надане імʼя хосту сертифіката є недійсним (можливо, це помилка minikube, спробуйте 'minikube delete')", + "The cluster dns domain name used in the Kubernetes cluster": "Доменне імʼя кластера DNS, яке використовується в кластері Kubernetes", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "Вузол панелі управління {{.name}} apiserver не працює (буде спробувано інші): (state={{.state}})", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "Вузол панелі управління {{.name}} apiserver не працює: (state={{.state}})", + "The control-plane node {{.name}} apiserver is paused": "Вузол панелі управління {{.name}} apiserver призупинено", + "The control-plane node {{.name}} apiserver is paused (will try others)": "Вузол панелі управління {{.name}} apiserver призупинено (буде спробувано інші)", + "The control-plane node {{.name}} host does not exist": "Хост вузла {{.name}} панелі управління не існує", + "The control-plane node {{.name}} host does not exist (will try others)": "Хост вузла {{.name}} панелі управління не існує (буде спробувано інші)", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "Хост вузла {{.name}} панелі управління не працює (буде спробувано інші): state={{.state}}", + "The control-plane node {{.name}} host is not running: state={{.state}}": "Хост вузла {{.name}} панелі управління не працює: state={{.state}}", + "The cri socket path to be used.": "Шлях до сокета cri, який буде використовуватися", + "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "Команда docker-env несумісна з багатовузловими кластерами. Використовуйте надбудову 'registry': https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "Драйвер '{{.driver}}' не підтримується в {{.os}}/{{.arch}}", + "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "Поточний кластер \"{{.name}}\" був створений з використанням драйвера \"{{.old}}\", який не сумісний із запитуваним драйвером \"{{.new}}\".", + "The existing node configuration appears to be corrupt. Run 'minikube delete'": "Поточна конфігурація вузла, схоже, пошкоджена. Виконайте команду 'minikube delete'", + "The heapster addon is depreciated. please try to disable metrics-server instead": "Надбудова heapster є застарілою. Спробуйте замість цього вимкнути metrics-server.", + "The host does not support filesystem 9p.": "Хост не підтримує файлову систему 9p.", + "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "Імʼя віртуального комутатора Hyper-V. Стандартно використовується перше знайдене. (тільки драйвер Hyper-V)", + "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "Гіпервізор, схоже, налаштований неправильно. Виконайте команду 'minikube start --alsologtostderr -v=1' і перевірте код помилки.", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "Образ '{{.imageName}}' не відповідає архітектурі середовища виконання контейнера, використовуйте замість нього образ з підтримкою декількох архітектур.", + "The image '{{.imageName}}' was not found; unable to add it to cache.": "Образ '{{.imageName}}' не знайдено; неможливо додати його до кешу.", + "The initial time interval for each check that wait performs in seconds": "Початковий інтервал часу для кожної перевірки, яку виконує wait, у секундах", + "The kubeadm binary within the Docker container is not executable": "Бінарний файл kubeadm у контейнері Docker не є виконуваним", + "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "Вказаний драйвер машини не запускається. Спробуйте виконати команду 'docker-machine-driver-\u003ctype\u003e version'", + "The minikube VM is offline. Please run 'minikube start' to start it again.": "Віртуальна машина minikube відключена. Виконайте команду 'minikube start', щоб запустити її знову.", + "The minikube {{.driver_name}} container exited unexpectedly.": "Контейнер minikube {{.driver_name}} несподівано завершив роботу.", + "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "Мінімальна необхідна версія для podman — \"{{.minVersion}}\". Ваша версія — \"{{.currentVersion}}\". Minikube може не працювати. Використовуйте на власний ризик. Щоб встановити останню версію, перейдіть за посиланням https://podman.io/getting-started/installation.html.", + "The named space to activate after start": "Простір імен, який активується після запуску", + "The node to build on. Defaults to the primary control plane.": "Вузол, на якому буде виконано створення контейнера. Стандартно використовується головна панель управління.", + "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "Вузол, стан якого потрібно перевірити. Стандартно це панель управління. Залиште поле порожнім, щоб використовувати стандартний формат для стану на всіх вузлах.", + "The node to get IP. Defaults to the primary control plane.": "Вузол, IP адресу якого потрібно отрмати. Стандартно використовується основна панель управління.", + "The node to get logs from. Defaults to the primary control plane.": "Вузол, з якого потрібно отримати логи. Стандартно використовується основна панель управління.", + "The node to get ssh-key path. Defaults to the primary control plane.": "Вузол для отримання шляху для ssh-ключа. Стандартно використовується основна панель управління.", + "The node to ssh into. Defaults to the primary control plane.": "Вузол для підключення по SSH. Стандартно використовується основна панель управління.", + "The node {{.name}} has ran out of available PIDs.": "На вузлі {{.name}} вичерпано доступні PID.", + "The node {{.name}} has ran out of disk space.": "На вузлі {{.name}} закінчився простір на диску.", + "The node {{.name}} has ran out of memory.": "На вузлі {{.name}} закінчилася памʼять.", + "The node {{.name}} network is not available. Please verify network settings.": "Мережа вузла {{.name}} недоступна. Перевірте налаштування мережі.", + "The none driver is not compatible with multi-node clusters.": "Драйвер none не сумісний з багатовузловими кластерами.", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Драйвер none з Kubernetes v1.24+ та середовищем виконання контейнерів docker вимагає cri-dockerd.\n\n\t\tВстановіть cri-dockerd, дотримуючись цих інструкцій:\n\n\t\thttps://github.com/Mirantis/cri-dockerd", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Драйвер none з Kubernetes v1.24+ та середовищем виконання контейнерів docker вимагає dockerd.\n\n\t\tВстановіть dockerd, дотримуючись цих інструкцій:\n\n\t\thttps://docs.docker.com/engine/install/", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "Драйвер none з Kubernetes v1.24+ та середовищем виконання контейнерів docker вимагає containernetworking-plugins.\n\n\t\tВстановіть containernetworking-plugins, дотримуючись цих інструкцій:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver", + "The number of bytes to use for 9p packet payload": "Кількість байтів, що використовуються для корисного навантаження пакета 9p", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "Надбудова nvidia-gpu-device-plugin є застарілою, а її функціональність обʼєднано з надбудовою nvidia-device-plugin. Вона буде видалена у майбутньому випуску. Замість неї використовуйте надбудову nvidia-device-plugin. Для отримання додаткової інформації відвідайте: https://github.com/kubernetes/minikube/issues/19114.", + "The output format. One of 'json', 'table'": "Формат виводу. Один з 'json', 'table'", + "The path on the file system where the docs in markdown need to be saved": "Шлях у файловій системі, де потрібно зберегти документи у форматі Markdown.", + "The path on the file system where the error code docs in markdown need to be saved": "Шлях у файловій системі, де потрібно зберегти документи з кодами помилок у форматі Markdown.", + "The path on the file system where the testing docs in markdown need to be saved": "Шлях у файловій системі, де потрібно зберегти тестові документи у форматі Markdown.", + "The podman service within '{{.cluster}}' is not active": "Сервіс podman у '{{.cluster}}' не активний", + "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "Команда podman-env несумісна з багатовузловими кластерами. Використовуйте надбудову 'registry': https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "Команда podman-env сумісна тільки з середовищем виконання \"crio\", але цей кластер був налаштований на використання середовища виконання \"{{.runtime}}\".", + "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "Запитаний обсяг памʼяті {{.requested}}MiB не залишає місця для системних ресурсів (загальний обсяг системної памʼяті: {{.system_limit}}MiB). Можуть виникнути проблеми зі стабільністю роботи.", + "The service namespace": "Простір імен сервісу", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "Для service/ingress {{.resource}} необхідно експонувати привілейовані порти: {{.ports}}", + "The services namespace": "Простір імен сервісів", + "The socket_vmnet network is only supported on macOS": "Мережа socket_vmnet підтримується тільки в macOS.", + "The time interval for each check that wait performs in seconds": "Інтервал часу для кожної перевірки, яку виконує wait, у секундах", + "The total number of nodes to spin up. Defaults to 1.": "Загальна кількість вузлів, які потрібно запустити. Стандартно — 1.", + "The value passed to --format is invalid": "Значення, передане до --format, є недійсним", + "The value passed to --format is invalid: {{.error}}": "Значення, передане до --format, є недійсним: {{.error}}", + "The vfkit driver is only supported on macOS": "Драйвер vfkit підтримується тільки в macOS.", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "Надбудова {{.addon}} підтримується тільки з драйвером KVM\n\nІнструкції з налаштування GPU див.: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "Є кілька способів увімкнути необхідний обмін файлами:\n1. Увімкніть \"Use the WSL 2 based engine\" у Docker Desktop\nабо\n2. Увімкніть обмін файлами у Docker Desktop для теки %s%s", + "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "Ці --extra-config параметри конфігурації є недійсними: {{.invalid_extra_opts}}", + "These changes will take effect upon a minikube delete and then a minikube start": "Ці зміни набудуть чинності після minikube delete та minikube start.", + "Things to try without Kubernetes ...": "Що спробувати без Kubernetes ...", + "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "Ця надбудова не має визначеної точки доступу для команди 'addons open'\n. Ви можете додати її, додавши до сервісу мітку {{.labelName}}:{{.addonName}}.", + "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "Це також можна зробити автоматично, встановивши змінну середовища CHANGE_MINIKUBE_NONE_USER=true.", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "Цей кластер був створений до версії minikube v1.26.0 і не має встановленого cri-docker. Виконайте команду 'minikube delete', а потім запустіть minikube знову", + "This driver does not yet work on your architecture. Maybe try --driver=none": "Цей драйвер ще не працює на вашій архітектурі. Спробуйте --driver=none", + "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "Це відома проблема з драйвером сховища BTRFS, існує обхідний шлях, будь ласка, ознайомтеся з тікетом на GitHub.", + "This will keep the existing kubectl context and will create a minikube context.": "Це збереже наявний контекст kubectl і створить контекст minikube.", + "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "Порада: щоб видалити цей кластер, що належить root, виконайте: sudo {{.cmd}}", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "Щоб отримати доступ до Headlamp, скористайтеся такою командою:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "Щоб отримати доступ до YAKD - Kubernetes Dashboard, дочекайтеся готовності Pod і виконайте наступну команду:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n", + "To configure vment-helper to run without a password, please check the documentation:": "Щоб налаштувати vment-helper для запуску без пароля, ознайомтеся з документацією:", + "To connect to this cluster, use: --context={{.name}}": "Щоб підключитися до цього кластера, використовуйте: --context={{.name}}", + "To connect to this cluster, use: kubectl --context={{.profile_name}}": "Щоб підключитися до цього кластера, використовуйте: kubectl --context={{.profile_name}}", + "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "Щоб вимкнути бета-повідомлення, виконайте: 'minikube config set WantBetaUpdateNotification false'", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": " 'minikube config set WantUpdateNotification false'\n", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "Щоб загалом вимкнути сповіщення про оновлення, виконайте: 'minikube config set WantUpdateNotification false'\n", + "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "Щоб завантажити нові зовнішні образи, можливо, доведеться налаштувати проксі-сервер: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/", + "To see addons list for other profiles use: `minikube addons -p name list`": "Щоб переглянути список надбудов для інших профілів, скористайтеся командою: `minikube addons -p name list`", + "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "Щоб налаштуванти проєкт Google Cloud, виконайте: \n\n\t\tgcloud config set project \u003cproject name\u003e\n\nабо встановіть значення змінної середовища GOOGLE_CLOUD_PROJECT.", + "To start a cluster, run: \"{{.command}}\"": "Для запуску кластера, використовуйте: \"{{.command}}\"", + "To start minikube with Hyper-V, Powershell must be in your PATH`": "Щоб запустити minikube з Hyper-V, Powershell повинен бути у вашому PATH`", + "To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "Щоб використовувати команди kubectl або minikube під своїм імʼям користувача, можливо, доведеться перемістити їх. Наприклад, щоб перезаписати власні налаштування, виконайте:", + "Troubleshooting Commands:": "Команди для пошуку та усунення несправностей", + "Try 'minikube delete' to force new SSL certificates to be installed": "Спробуйте 'minikube delete', щоб примусово встановити нові сертифікати SSL.", + "Try 'minikube delete', and disable any conflicting VPN or firewall software": "Спробуйте виконати команду 'minikube delete' та вимкніть будь-яке програмне забезпечення VPN або брандмауер, що створює конфлікти.", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Спробуйте один або кілька з наступних способів, щоб звільнити місце на пристрої:\n\n\t\t\t1. Запустіть команду \"docker system prune\", щоб видалити дані, які більше не потрібні в Docker (за бажанням з параметром \"-a\")\n\t\t\t2. Збільште обсяг памʼяті, виділений для Docker for Desktop, клацніть:\n\t\t\t\tПіктограму Docker \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Виконайте команду \"minikube ssh -- docker system prune\", якщо використовуєте середовище виконання контейнерів Docker.", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "Спробуйте один або кілька з наступних способів, щоб звільнити місце на пристрої:\n\n\t\t\t1. Запустіть команду \"sudo podman system prune\", щоб видалити дані, які більше не потрібні в podman\n\t\t\t2. Виконайте команду \"minikube ssh -- docker system prune\", якщо використовуєте середовище виконання контейнерів Docker.", + "Trying to delete invalid profile {{.profile}}": "Спробуйте видалити недійсний профіль {{.profile}}", + "Tunnel successfully started": "Тунель успішно запущений", + "Unable to bind flags": "Неможливо привʼязати прапорці", + "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "Неможливо створити виділену мережу, це може призвести до зміни IP-адреси кластера після перезапуску: {{.error}}", + "Unable to delete profile(s): {{.error}}": "Неможливо видалити профіль(і): {{.error}}", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "Неможливо виявити останню версію латки для вказаної версії major.minor v{{.majorminor}}", + "Unable to enable dashboard": "Неможливо увімкнути інфопанель", + "Unable to fetch latest version info": "Неможливо отримати інформацію про останню версію", + "Unable to find any control-plane nodes": "Неможливо знайти вузли панелі управління", + "Unable to generate docs": "Неможливо створити документи", + "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "Неможливо створити документацію. Переконайтеся, що вказаний шлях є текою, яка існує, і що ви маєте права на запис у ній.", + "Unable to get CPU info: {{.err}}": "Неможливо отримати інформацію про CPU: {{.err}}", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "Неможливо отримати стан вузла {{.name}} apiserver панелі управління (буде спробувано інші): {{.error}}", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "Неможливо отримати стан вузла {{.name}} apiserver панелі управління: {{.error}}", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "Неможливо отримати точку доступу вузла панелі управління {{.name}} (буде спробувано інші): {{.err}}", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "Неможливо отримати точку доступу вузла панелі управління {{.name}}: {{.err}}", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "Неможливо отримати виконувача команд хосту вузла панелі управління {{.name}} (буде спробувано інші): {{.err}}", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "Неможливо отримати виконувача команд хосту вузла панелі управління {{.name}}: {{.err}}", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "Неможливо отримати виконувача статус хосту вузла панелі управління {{.name}} (буде спробувано інші): {{.err}}", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "Неможливо отримати виконувача статус хосту вузла панелі управління {{.name}}: {{.err}}", + "Unable to get current user": "Неможливо отримати поточного користувача", + "Unable to get runtime": "Неможливо отримати runtime", + "Unable to kill mount process: {{.error}}": "Неможливо знищити процес монтування: {{.error}}", + "Unable to list profiles: {{.error}}": "Неможливо показати перелік профілів: {{.error}}", + "Unable to load cached images: {{.error}}": "Неможливо завантажити кешовані образи: {{.error}}", + "Unable to load config: {{.error}}": "Неможливо завантажити конфігурацію: {{.error}}", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "Неможливо завантажити хост вузла панелі управління {{.name}} (буде спробувано інші): {{.err}}", + "Unable to load control-plane node {{.name}} host: {{.err}}": "Неможливо завантажити хост вузла панелі управління {{.name}}: {{.err}}", + "Unable to load profile: {{.error}}": "Неможливо завантажити профіль: {{.error}}", + "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "Неможливо розібрати \"{{.kubernetes_version}}\": {{.error}}", + "Unable to parse memory '{{.memory}}': {{.error}}": "Неможливо розібрати занчення памʼяті '{{.memory}}': {{.error}}", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "Неможливо розібрати файл version.json: {{.error}}, json: {{.json}}", + "Unable to pick a default driver. Here is what was considered, in preference order:": "Неможливо вибрати стандартний драйвер. Ось що було розглянуто в порядку пріоритетності:", + "Unable to push cached images: {{.error}}": "Неможливо надіслати кешовані образи: {{.error}}", + "Unable to remove machine directory": "Неможливо видалити теку машини", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "Неможливо перезапустити вузол(и) панелі управління, буде виконано скидання кластера: {{.error}}", + "Unable to run vmnet-helper without a password": "Неможливо запустити vmnet-helper без пароля", + "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "Неможливо безпечно понизити версію поточного кластера Kubernetes v{{.old}} до v{{.new}}", + "Unable to stop VM": "Неможливо зупинити віртуальну машину", + "Unable to update {{.driver}} driver: {{.error}}": "Неможливо оновити драйвер {{.driver}}: {{.error}}", + "Unfortunately, could not download the base image {{.image_name}} ": "На жаль, не вдалося завантажити базовий образ {{.image_name}} ", + "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "Видалення Kubernetes {{.kubernetes_version}} за допомогою {{.bootstrapper_name}} ...", + "Unmounting {{.path}} ...": "Розмонтування {{.path}} ...", + "Unpause": "Відновити", + "Unpaused {{.count}} containers": "Відновлено роботу {{.count}} контейнерів", + "Unpaused {{.count}} containers in: {{.namespaces}}": "Відновлено роботу {{.count}} контейнерів в: {{.namespaces}}", + "Unpausing node {{.name}} ... ": "Відновленя роботи вузла {{.name}} ...", + "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "Очистіть змінну середовища KUBECONFIG або переконайтеся, що вона не вказує на порожній або інший недійсний шлях.", + "Unset variables instead of setting them": "Скидання змінних замість їх встановлення", + "Update Docker to the latest minor version, this version is unsupported": "Оновіть Docker до останньої мінорної версії, ця версія не підтримується", + "Update kubeconfig in case of an IP or port change": "Оновлення kubeconfig у разі зміни IP-адреси або порту", + "Update server returned an empty list": "Сервер оновлення повернув порожній список", + "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "Оновлення запущеного {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...", + "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "Оновіть QEMU до версії 3.1.0+, запустіть 'virt-host-validate' або переконайтеся, що ви не працюєте у вкладеному середовищі віртуальної машини.", + "Usage": "Використання", + "Usage: minikube completion SHELL": "Використання: minikube completion SHELL", + "Usage: minikube delete": "Використання: minikube delete", + "Usage: minikube delete --all --purge": "Використання: minikube delete --all --purge", + "Usage: minikube node [add|start|stop|delete|list]": "Використання: minikube node [add|start|stop|delete|list]", + "Usage: minikube node delete [name]": "Використання: minikube node delete [name]", + "Usage: minikube node list": "Використання: minikube node list", + "Usage: minikube node start [name]": "Використання: minikube node start [name]", + "Usage: minikube node stop [name]": "Використання: minikube node stop [name]", + "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "Використовуйте \"{{.CommandPath}} [command] --help\" для отримання докладної інформації для вказаної команди.", + "Use 'kubectl get po -A' to find the correct and namespace name": "Використовуйте “kubectl get po -A”, щоб знайти правильну назву простору імен.", + "Use -A to specify all namespaces": "Використовуйте -A, щоб вказати всі простори імен", + "Use SSH connection instead of HTTPS (port 2376)": "Використовувати SSH-зʼєднання замість HTTPS (порт 2376)", + "Use SSH for running kubernetes client on the node": "Використовувати SSH для запуску клієнта Kubernetes на вузлі", + "Use VirtualBox to remove the conflicting VM and/or network interfaces": "Використовуйте VirtualBox для видалення віртуальних машин, що мають конфлікти, та/або мережевих інтерфейсів", + "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "Використовувати вбудований SSH-клієнт Golang (стандартне значення true). Встановіть значення 'false', щоб використовувати команду командного рядка 'ssh' під час доступу до машини Docker. Корисно для драйверів машини, коли вони не запускаються з повідомленням 'Waiting for SSH' (Очікування SSH).", + "User ID: {{.userID}}": "ID користувача: {{.userID}}", + "User name '{{.username}}' is not valid": "Імʼя користувача '{{.username}}' недійсне", + "User name must be 60 chars or less.": "Імʼя користувача повинно містити не більше 60 символів.", + "Userspace file server is shutdown": "Файловий сервер користувача вимкнено", + "Userspace file server: ": "Файловий сервер у просторі користувача: ", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "Для використання Kubernetes v1.24+ з середовищем виконання Docker необхідно встановити cri-docker.", + "Using Kubernetes {{.version}} since patch version was unspecified": "Використовуємо Kubernetes {{.version}}, оскільки версію латки не вказано.", + "Using image repository {{.name}}": "Використовую репозиторій образів {{.name}}", + "Using image {{.registry}}{{.image}}": "Використовую образ {{.registry}}{{.image}}", + "Using image {{.registry}}{{.image}} (global image repository)": "Використовую образ {{.registry}}{{.image}} (глобальне репозиторій образів)", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "Було потрібно використовувати драйвер Docker без прав суперкористувача, але поточна версія Docker, здається, не підтримує роботу без прав суперкористувача. Спробуйте виконати команду 'docker context use rootless'.", + "Using rootless driver was required, but the current driver does not seem rootless": "Було потрібно використовувати драйвер без прав суперкористувача, але поточний драйвер, здається, не є таким.", + "Using rootless {{.driver_name}} driver": "Використання драйвера {{.driver_name}} без прав суперкористувача", + "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "Використання середовища виконання '{{.runtime}}' з драйвером 'none' є ще не протестованою конфігурацією!", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "Використання команди docker-env із середовищем виконання containerd є вкрай експериментальною функцією. Будь ласка, надайте відгук або долучіться до її вдосконалення.", + "Using the {{.driver}} driver based on existing profile": "Використовую драйвер {{.driver}} на основі наявного профілю", + "Using the {{.driver}} driver based on user configuration": "Використовую драйвер {{.driver}} на основі конфігурації користувача", + "Using {{.driver_name}} driver with root privileges": "Використовую драйвер {{.driver_name}} з правами суперкористувача", + "Valid components are: {{.valid_extra_opts}}": "Допустимі компоненти: {{.valid_extra_opts}}", + "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "Перевірте ваші мережі KVM. Виконайте: virt-host-validate, а потім virsh net-list --all", + "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "Перевірте, чи правильно встановлені ваші змінні середовища HTTP_PROXY та HTTPS_PROXY.", + "Verifying Kubernetes components...": "Перевіряю компонети Kubernetes...", + "Verifying dashboard health ...": "Перевіряю справність інфопанелі...", + "Verifying proxy health ...": "Перевіряю справність проксі...", + "Verifying {{.addon_name}} addon...": "Перевіряю надбудову {{.addon_name}}...", + "Version: {{.version}}": "Версія: {{.version}}", + "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "VirtualBox і Hyper-V конфліктують між собою. Використовуйте '--driver=hyperv' або вимкніть Hyper-V за допомогою: 'bcdedit /set hypervisorlaunchtype off'", + "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "VirtualBox не може створити мережу, ймовірно, через конфлікт з поточною мережею, про яку minikube більше не знає. Спробуйте виконати команду 'minikube delete'", + "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "VirtualBox не працює. Вимкніть антивірусне програмне забезпечення, що працює в режимі реального часу, перезавантажте компʼютер і перевстановіть VirtualBox, якщо проблема не зникне.", + "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "VirtualBox не працює. Перевстановіть VirtualBox, перезавантажте компʼютер і запустіть команду 'minikube delete'.", + "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "VirtualBox не може знайти свій мережевий інтерфейс. Спробуйте оновитись до останньої версії та перезавантажити систему.", + "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "Підтримку віртуалізації на вашому компʼютері вимкнено. Якщо ви використовуєте minikube у віртуальній машині, спробуйте '--driver=docker'. В іншому випадку зверніться до посібника з BIOS вашої системи, щоб дізнатися, як увімкнути віртуалізацію.", + "Wait failed: {{.error}}": "Очікування завершилося невдало: {{.error}}", + "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "Хочете kubectl {{.version}}? Спробуйте 'minikube kubectl -- get pods -A'", + "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "Де розмістити кореневу теку NFS-ресурсів, стандартно /nfsshares (тільки драйвер hyperkit)", + "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "Чи використовувати зовнішній комутатор замість Стандартного комутатора, якщо віртуальний комутатор не вказано явно. (тільки драйвер hyperv)", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", + "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "З --network-plugin=cni вам потрібно буде надати власний CNI. Зверніться до прапорця --cni як до зручної альтернативи.", + "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "Ви, схоже, використовуєте проксі-сервер, але ваша змінна середовища NO_PROXY не містить IP-адресу minikube ({{.ip_address}}).", + "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "Ви намагаєтеся запустити бінарний файл Windows .exe у WSL. Для кращої інтеграції використовуйте бінарний файл Linux (завантажте за адресою https://minikube.sigs.k8s.io/docs/start/). Якщо ви все одно хочете це зробити, ви можете це зробити за допомогою --force.", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "Ви намагаєтеся запустити бінарний файл amd64 на системі M1. Замість цього спробуйте запустити бінарний файл darwin/arm64. Завантажте його за адресою {{.url}}.", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "Ви використовуєте драйвер QEMU без виділеної мережі, яка не підтримує команди `minikube service` \u0026 `minikube tunnel`.", + "You can create one using 'minikube start'.\n\t\t": "Ви можете створити його за допомогою команди 'minikube start'.\n\t\t", + "You can delete them using the following command(s): ": "Ви можете видалити їх за допомогою наступної команди (команд): ", + "You can force an unsupported Kubernetes version via the --force flag": "Ви можете примусово запустити непідтримувану версію Kubernetes за допомогою прапорця --force.", + "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "Ви не можете додавати або видаляти додаткові диски для наявного кластера minikube. Спочатку видаліть кластер.", + "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "Ви не можете змінити CPU для поточного кластера minikube. Спочатку видаліть кластер.", + "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "Ви не можете змінити розмір диска для поточного кластера minikube. Спочатку видаліть кластер.", + "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "Ви не можете змінити розмір памʼяті для поточного кластера minikube. Спочатку видаліть кластер.", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "Ви не можете змінити кількість вузлів для поточного кластера minikube. Використайте команду 'minikube node add', щоб додати вузли до поточного кластера.", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "Ви не можете змінити статичну IP-адресу поточного кластера minikube. Спочатку видаліть кластер.", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "Ви не можете ввімкнути надбудови в кластері без Kubernetes. Щоб увімкнути Kubernetes у вашому кластері, виконайте: minikube start --kubernetes-version=stable", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "Ви пройшли автентифікацію за допомогою службового облікового запису, який не має повʼязаного файлу JSON. Для продовження роботи надбудови GCP Auth необхідні облікові дані з файлом JSON.", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "Ви вирішили вимкнути CNI, але для роботи контейнера \"{{.name}}\" потрібен CNI.", + "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "Ви вибрали драйвер \"virtualbox\", але є кращі варіанти!\nДля кращої продуктивності та підтримки розгляньте можливість використання іншого драйвера: {{.drivers}}.\n\nЩоб вимкнути це попередження, виконайте:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nЩоб дізнатися більше про драйвери minikube, перейдіть за посиланням https://minikube.sigs.k8s.io/docs/drivers/\nЩоб переглянути тести продуктивності, перейдіть за посиланням https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n", + "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "Можливо, вам доведеться вручну видалити віртуальну машину \"{{.name}}\" з гіпервізора.", + "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "Можливо, вам доведеться зупинити Hyper-V Manager і знову запустити `minikube delete`.", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "Можливо, ви використовуєте версію minikube для amd64 на компʼютері Apple Silicon Mac. Замість цього використовуйте версію minikube для arm64.", + "You must specify service name(s) or --all": "Ви повинні вказати назву(и) сервісів або --all", + "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "Ваші облікові дані GCP тепер будуть змонтовані в кожен под, створений у кластері {{.name}}.", + "Your cgroup does not allow setting memory.": "Ваша cgroup не дозволяє встановлювати memory.", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "Ваш брандмауер блокує bootpd, який необхідний для цієї конфігурації. Для розблокування bootpd будуть виконані наступні команди:\n\n{{.commands}}\n", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "Ваш брандмауер, ймовірно, блокує bootpd. Щоб розблокувати його, виконайте: \n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd", + "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "Ваш хост не підтримує віртуалізацію KVM. Переконайтеся, що qemu-kvm встановлено, і запустіть 'virt-host-validate', щоб усунути проблему.", + "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "Ваш хост не підтримує віртуалізацію. Якщо ви запускаєте minikube у віртуальній машині, спробуйте '--driver=docker'. В іншому випадку увімкніть віртуалізацію у BIOS.", + "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "Ваш хост не може маршрутизувати пакети до віртуальної машини minikube. Якщо у вас є програмне забезпечення VPN, спробуйте вимкнути його або налаштувати так, щоб воно не перенаправляло трафік на IP-адресу віртуальної машини. Якщо ні, перевірте параметри маршрутизації середовища віртуальної машини.", + "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "Ваша конфігурація minikube посилається на драйвер, який не підтримується. Видаліть ~/.minikube і спробуйте ще раз.", + "Your minikube vm is not running, try minikube start.": "Ваша віртуальна машина minikube не працює, спробуйте виконати команду minikube start.", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "Вашому користувачеві бракує дозволів для доступу до теки профілю minikube. Виконайте: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' , щоб виправити ситуацію.", + "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "[ПОПЕРЕДЖЕННЯ] Для повної функціональності надбудова 'csi-hostpath-driver' вимагає увімкнення надбудови 'volumesnapshots'.\n\nВи можете увімкнути надбудову 'volumesnapshots', виконавши команду: 'minikube addons enable volumesnapshots'\n", + "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "Надбудову '{{.name}} наразі не ввімкнено. Щоб увімкнути цю надбудову, виконайте:\nminikube addons enable {{.name}}", + "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "Надбудова '{{.name}}' не є дійсною надбудовою, що входить до складу minikube.\nЩоб переглянути список доступних надбудов, виконайте команду:\nminikube addons list", + "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "addons змініює файли надбудов використовуючи команди на кшталт \"minikube addons enable dashboard\"", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "Драйвери arm64 VM наразі не підтримують середовище виконання контейнерів crio. Детальнішу інформацію див. на сторінці https://github.com/kubernetes/minikube/issues/14146.", + "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "Надбудова auto-pause є альфа-версією і все ще перебуває на ранній стадії розробки. Будь ласка, повідомляйте про проблеми, щоб допомогти нам її вдосконалити.", + "bash completion failed": "Збій доповнення команд в bash", + "bash completion.": "Доповнення команд в bash.", + "call with cleanup=true to remove old tunnels": "Виклик з cleanup=true видаляє старі тунелі", + "cancel any existing scheduled stop requests": "Скасувує всі заплановані запити на зупинку", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "Не можна вказати --kubernetes-version з --no-kubernetes,\nщоб скасувати глобальну конфігурацію, виконайте:\n\n$ minikube config unset kubernetes-version", + "config file does not exist": "Файл конфігурації не існує", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "config змінює файли конфігурації minikube за допомогою підкоманд, таких як \"minikube config set driver kvm2\"\nПоля, для налаштування: \n\n", + "config view failed": "Збій config view", + "dashboard": "", + "dashboard service is not running: {{.error}}": "сервіс інфопанелі не працює: {{.error}}", + "delete ctx": "", + "deleting node": "Вилучення вузла", + "disable failed": "Збій disable", + "dry-run mode. Validates configuration, but does not mutate system state": "Режим dry-run. Перевіряє конфігурацію, але не змінює стан системи.", + "dry-run validation complete!": "Перевірку dry-run завершено!", + "enable failed": "Збій enable", + "enabled failed": "Збій enable", + "error creating clientset": "помилка при створенні clientset", + "error creating urls": "помилка при створенні URL-адрес", + "error fetching Kubernetes version list from GitHub": "помилка під час отримання списку версій Kubernetes з GitHub", + "error getting control-plane node": "помилка під час отримання вузла панелі управління", + "error getting defaults: {{.error}}": "помилка під час отримання стандартних значень: {{.error}}", + "error getting ssh port": "помилка під час отримання порту ssh", + "error initializing tracing: {{.Error}}": "помилка під час ініціалізації трасування: {{.Error}}", + "error parsing the input ip address for mount": "помилка при аналізі вхідної IP-адреси для монтування", + "error provisioning guest": "помилка при наданні гостьового доступу", + "error starting tunnel": "помилка під час запуску тунелю", + "error: --output must be 'text', 'yaml' or 'json'": "помилка: --output має бути 'text', 'yaml' або 'json'", + "error: --output must be 'yaml' or 'json'": "помилка: --output має бути 'yaml' або 'json'", + "experimental": "", + "extra waiting: {{.error}}": "надмірне очікування: {{.error}}", + "failed to acquire lock due to unexpected error": "не вдалося отримати блокування через несподівану помилку", + "failed to add node": "не вдалося додати вузол", + "failed to load profile: {{.error}}": "не вдалося завантажити профіль: {{.error}}", + "failed to open browser: {{.error}}": "не вдалося відкрити вебоглядач: {{.error}}", + "failed to restart auto-pause: {{.error}}": "не вдалося перезапустити auto-pause: {{.error}}", + "failed to save config": "не вдалося зберегти конфігурацію", + "failed to set extra option": "не вдалося встановити додаткову опцію", + "failed to start node": "не вдалося запустити вузол", + "failed to validate {{.network}} network: {{.reason}}": "не вдалося перевірити мережу {{.network}}: {{.reason}}", + "false": "", + "fish completion failed": "Збій доповнення команд в fish", + "fish completion.": "Доповнення команд в fish.", + "if true, will embed the certs in kubeconfig.": "Якщо true, вбудує сертифікати в kubeconfig.", + "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "Якщо ви хочете створити профіль, ви можете це зробити за допомогою цієї команди: minikube start -p {{.profile_name}}", + "initialization failed, will try again: {{.error}}": "ініціалізація не вдалася, спробуємо ще раз: {{.error}}", + "invalid kubernetes version": "недійсна версія Kubernetes", + "ip not found": "ip не знайдено", + "json encoding failure": "помилка кодування json", + "keep the kube-context active after cluster is stopped. Defaults to false.": "Залишати kube-context активним після зупинки кластера. Стандартне значення — false.", + "kubeadm certificates have expired. Generating new ones...": "Сертифікати kubeadm прострочено. Створюються нові...", + "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm виявив конфлікт TCP-порту з іншим процесом: ймовірно, іншою локальною інсталяцією Kubernetes. Виконайте lsof -p\u003cport\u003e щоб визначити процес та припинити його роботу", + "kubectl and minikube configuration will be stored in {{.home_folder}}": "Конфігурацію kubectl та minikube буде збережено в {{.home_folder}}", + "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl не знайдено. Якщо це необхідно, спробуйте: 'minikube kubectl -- get pods -A'", + "kubectl proxy": "", + "libmachine failed": "збій libmachine", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "list показує всі дійсні стандартні налаштування для PROPERTY_NAME\nПрийнятні поля: \n\n", + "list versions of all components included with minikube. (the cluster must be running)": "Виводить перелік версій усіх компонентів, що входять до складу minikube. (кластер повинен бути запущений)", + "loading profile": "завантаження профілю", + "max time to wait per Kubernetes or host to be healthy.": "Максимальний час очікування для Kubernetes або хоста, щоб стати працездатним.", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "minikube addons images ADDON_NAME --output OUTPUT. Де OUTPUT — table, json", + "minikube addons list --output OUTPUT. json, list": "minikube addons list --output OUTPUT. Де OUTPUT — json, list", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "minikube не може отримати образ kicbase з жодного реєстру Docker і намагається завантажити архів kicbase з сторінки release на GitHub через HTTP.", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "minikube ще не підтримує драйвер сховища BTRFS, але є обхідний шлях: додайте до команди запуску наступний прапорець `--feature-gates=\"LocalStorageCapacityIsolation=false\"`", + "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "minikube не має файлів, що стосуються вашого гостьового середовища. Це можна виправити, виконавши команду 'minikube delete'", + "minikube is not meant for production use. You are opening non-local traffic": "minikube не призначений для використання у промислових цілях. Ви відкриваєте нелокальний трафік.", + "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "minikube не може отримати доступ до реєстру контейнерів Google. Можливо, вам доведеться налаштувати його для використання HTTP-проксі.", + "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "minikube не може підключитися до віртуальної машини: {{.error}}\n\n\tЦе, ймовірно, повʼязано з однією з двох причин:\n\n\t- Втручання VPN або брандмауера\n\t- Проблема з конфігурацією мережі {{.hypervisor}}\n\n\tРекомендовані способи вирішення проблеми:\n\n\t- Вимкніть локальне програмне забезпечення VPN або брандмауер\n\t- Налаштуйте локальне програмне забезпечення VPN або брандмауер, щоб дозволити доступ до {{.ip}}\n\t- Перезапустіть або перевстановіть {{.hypervisor}}\n\t- Використовуйте альтернативний --vm-driver\n\t- Використовуйте --force, щоб замінити цю перевірку підключення\n\t", + "minikube mount is not currently implemented with the builtin network on QEMU": "minikube mount наразі не реалізовано з вбудованою мережею в QEMU", + "minikube profile was successfully set to {{.profile_name}}": "Профіль minikube успішно встановлено як {{.profile_name}}", + "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube створює та управляє локальними кластерами Kubernetes, оптимізованими для процесу розробки.", + "minikube quickly sets up a local Kubernetes cluster": "minikube швидко створює локальний кластер Kubernetes", + "minikube service is not currently implemented with the builtin network on QEMU": "Сервіс minikube наразі не реалізований із вбудованою мережею в QEMU.", + "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "minikube пропускає різні перевірки, коли вказано --force; це може призвести до несподіваної поведінки", + "minikube status --output OUTPUT. json, text": "", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "minikube tunnel наразі не реалізовано з вбудованою мережею в QEMU", + "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} доступний! Завантажте його: {{.url}}", + "mkcmp is used to compare performance of two minikube binaries": "mkcmp використовується для порівняння продуктивності двох бінарних файлів minikube.", + "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "аргумент монтування \"{{.value}}\"» повинен мати такий вигляд: \u003cтека джерела\u003e:\u003cтека призначення\u003e", + "mount could not connect": "монтування не може підʼєднатись", + "mount failed": "збій монтування", + "namespaces to pause": "Простори імен для призупинки роботи", + "namespaces to unpause": "Простори імен для відновлення роботи", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "Мережа для запуску minikube. Використовується драйверами docker/podman, qemu, kvm та vfkit. Якщо поле залишити порожнім, minikube створить нову мережу.", + "none driver does not support multi-node clusters": "жоден з драйверів не підтримуж багатовузлові кластери", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "недостатньо аргументів ({{.ArgCount}}).\nвикористання: minikube config set PROPERTY_NAME PROPERTY_VALUE", + "numa node is only supported on k8s v1.18 and later": "вузли numa підтримуються тільки в k8s v1.18 і далі", + "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "формат виводу (ЕКСПЕРИМЕНТАЛЬНИЙ, тільки JSON): 'nodes' або 'cluster'", + "pause Kubernetes": "Призупиняє роботу Kubernetes", + "powershell completion failed": "Збій доповнення команд в powershell", + "powershell completion.": "Доповнення команд в powershell.", + "preload extraction failed: \"No space left on device\"": "збій розпаковування preload \"Немає вільного місця на пристрої\"", + "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "profile встановлює поточний профіль minikube або отримує поточний профіль, якщо аргументи не вказані. Ця команда використовується для запуску та управління декількома екземплярами minikube. Ви можете повернутися до стандартного профілю minikube, виконавши команду `minikube profile default`.", + "provisioning host for node": "хост для надання ресурсів для вузла", + "reload cached images.": "Перезавантажити кешовані образи.", + "reloads images previously added using the 'cache add' subcommand": "Перезавантажує образи, раніше додані за допомогою підкоманди 'cache add'", + "retrieving node": "отримання вузла", + "scheduled stop is not supported on the none driver, skipping scheduling": "запланована зупинка не підтримується драйвером none, пропускання планування", + "service not available": "сервіс недоступний", + "service {{.namespace_name}}/{{.service_name}} has no node port": "сервіс {{.namespace_name}}/{{.service_name}} не має порту вузла", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "встановлює адресу привʼязки тунелю, порожнє поле або '*' означає, що тунель повинен бути доступним для всіх інтерфейсів", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "socket_vmnet було встановлено з неправильною групою, видаліть цей кластер 'minikube delete' та оновіть групу 'sudo chown root:$(id -ng) /var/run/socket_vmnet' і спробуйте ще раз.", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "socket_vmnet не знайдено в системі, вирішіть проблему таким чином:\n\n\t\tВаріант 1) Встановіть socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tВаріант 2) Використання мережі користувача:\n\n\t\t minikube start{{.profile}} --driver qemu --network user", + "stat failed": "Збій stat", + "status json failure": "status json невдача", + "status text failure": "status text невдача", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "забагато аргументів ({{.ArgCount}}).\nвикористання: minikube config set PROPERTY_NAME PROPERTY_VALUE", + "true": "", + "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "tunnel створює маршрут до сервісів, розгорнутих з типом LoadBalancer, і встановлює їх Ingress рівним їх ClusterIP. Детальний приклад дивіться за посиланням https://minikube.sigs.k8s.io/docs/tasks/loadbalancer", + "unable to bind flags": "неможливо привʼязати прапорці", + "unable to daemonize: {{.err}}": "неможливо запустити в режимі демона: {{.err}}", + "unable to delete minikube config folder": "неможливо видалити теку конфігурації minikube", + "unpause Kubernetes": "Відновлює роботу Kubernetes", + "unset failed": "Збій unset", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "Скидає PROPERTY_NAME у файлі конфігурації minikube. Може бути перезаписано прапорцями або змінними середовища", + "unsets an individual value in a minikube config file": "Скидає певне значення у файлі конфігурації minikube", + "unsupported or missing driver: {{.name}}": "Непідтримуваний або відсутній драйвер: {{.name}}", + "update config": "", + "usage: minikube addons configure ADDON_NAME": "використання: minikube addons configure ADDON_NAME", + "usage: minikube addons disable ADDON_NAME": "використання: minikube addons disable ADDON_NAME", + "usage: minikube addons enable ADDON_NAME": "використання: minikube addons enable ADDON_NAME", + "usage: minikube addons images ADDON_NAME": "використання: minikube addons images ADDON_NAME", + "usage: minikube addons list": "використання: minikube addons list", + "usage: minikube addons open ADDON_NAME": "використання: minikube addons open ADDON_NAME", + "usage: minikube config list PROPERTY_NAME": "використання: minikube config list PROPERTY_NAME", + "usage: minikube config unset PROPERTY_NAME": "використання: minikube config unset PROPERTY_NAME", + "usage: minikube delete": "використання: minikube delete", + "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "використання: minikube profile [MINIKUBE_PROFILE_NAME]", + "version json failure": "version json невдача", + "version yaml failure": "version yaml невдача", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "vmnet-helper не знайдено в системі.\n\n\t\tВстановіть vmnet-helper, дотримуючись цих інструкцій:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash", + "yaml encoding failure": "помилка кодування yaml", + "zsh completion failed": "Збій доповнення команд в zsh", + "zsh completion.": "Доповнення команд в zsh.", + "{{ .name }}: Suggestion: {{ .suggestion}}": "{{ .name }}: Пропозиція: {{ .suggestion}}", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "{{.Driver}} наразі використовує драйвер зберігання {{.StorageDriver}}, встановлюючи preload=false", + "{{.addon}} does not currently have an associated maintainer.": "{{.addon}} наразі не має супровідника.", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "{{.addon}} є сторонньою надбудовою і не підтримується та не перевіряється розробниками minikube, тому вмикайте її на власний ризик.", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "{{.addon}} — це надбудова, яка підтримується {{.maintainer}}. З будь-яких питань звертайтеся до minikube на GitHub.\nПерелік розробників minikube можна переглянути за адресою: https://github.com/kubernetes/minikube/blob/master/OWNERS", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "{{.addon}} підтримується {{.maintainer}}. З будь-яких питань звертайтеся до {{.verifiedMaintainer}} на GitHub.", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "{{if eq .count 1}}Зупинено 1 вузол{{else}}Зупинено {{.count}} вузли(ів){{end}}.", + "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} відсутній, його буде перестворено.", + "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "{{.driver_name}} не зміг продовжити роботу, оскільки сервіс {{.driver_name}} не працює належним чином.", + "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "{{.driver_name}} має менше ніж 2 доступних CPU, але Kubernetes вимагає, щоб було доступно щонайменше 2.", + "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "{{.driver_name}} має лише {{.container_limit}}МБ памʼяті, але ви вказали {{.specified_memory}}МБ.", + "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "{{.driver}} має в наявності лише {{.size}}MiB, що менше необхідних {{.req}}MiB для Kubernetes.", + "{{.env}}={{.value}}": "", + "{{.name}} doesn't have images.": "{{.name}} не має образів.", + "{{.name}} has no available configuration options": "{{.name}} не має доступних опцій конфігурації", + "{{.name}} has the following images:": "{{.name}} має наступні образи:", + "{{.name}} is already running": "{{.name}} вже працює", + "{{.name}} was successfully configured": "{{.name}} було успішно налаштовано", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} майже вичерпано місце на диску, що може призвести до збою розгортання! ({{.p}}% ємності). Ви можете вказати '--force', щоб пропустити цю перевірку.", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} не вистачає місця на диску! (/var заповнений на {{.p}}% від загальної ємності). Ви можете вказати '--force', щоб пропустити цю перевірку.", + "{{.ociBin}} rmi {{.images}}": "", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} відповідає надзвичайно довго, розгляньте можливість перезапуску {{.ocibin}}", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "{{.path}} — це версія {{.client_version}}, яка може бути несумісною з Kubernetes {{.cluster_version}}.", + "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.prefix}}minikube {{.version}} на {{.platform}}", + "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} профіль недійсний: {{.err}}", + "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} ще не є підтримуваною файловою системою. Ми все одно спробуємо!", + "{{.url}} is not accessible: {{.error}}": "{{.url}} недоступний: {{.error}}" +} diff --git a/translations/zh-CN.json b/translations/zh-CN.json index a0fa529346c8..8fa5913eef63 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -1,11 +1,14 @@ { + "\n\n": "\n\n", + "\"'{{.minikube_addon}}' is not a valid minikube addon": "'{{.minikube_addon}}' 不是有效的 minikube 插件", "\"The '{{.minikube_addon}}' addon is disabled": "'{{.minikube_addon}}' 插件已被禁用", - "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "", + "\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\" 将在即将发布的版本中弃用,请切换至 \"minikube image load\"", + "\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "\"{{.context}}\" 上下文已更新,指向 {{.hostname}}:{{.port}}", "\"{{.machineName}}\" does not exist, nothing to stop": "\"{{.machineName}}\" 不存在,没有什么可供停止的", "\"{{.minikube_addon}}\" was successfully disabled": "已成功禁用 \"{{.minikube_addon}}\"", "\"{{.name}}\" cluster does not exist. Proceeding ahead with cleanup.": "\"{{.name}}\" 集群不存在,将继续清理", "\"{{.name}}\" profile does not exist": "“{{.name}}”配置文件不存在", - "\"{{.name}}\" profile does not exist, trying anyways.": "", + "\"{{.name}}\" profile does not exist, trying anyways.": "“{{.name}}”配置文件不存在时,仍然会尝试", "\"{{.profile_name}}\" VM does not exist, nothing to stop": "\"{{.profile_name}}\" 虚拟机不存在,没有什么可供停止的", "\"{{.profile_name}}\" host does not exist, unable to show an IP": "\"{{.profile_name}}\" 主机不存在,无法显示其IP", "\"{{.profile_name}}\" stopped.": "\"{{.profile_name}}\" 已停止", @@ -13,20 +16,34 @@ "'none' driver does not support 'minikube mount' command": "'none' 驱动不支持 'minikube mount' 命令", "'none' driver does not support 'minikube podman-env' command": "'none' 驱动不支持 'minikube podman-env' 命令", "'none' driver does not support 'minikube ssh' command": "'none' 驱动不支持 'minikube ssh' 命令", - "'none' driver does not support 'minikube ssh-host' command": "", + "'none' driver does not support 'minikube ssh-host' command": "'none' 驱动不支持 'minikube ssh-host' 命令", "'{{.driver}}' driver reported an issue: {{.error}}": "'{{.driver}}' 驱动程序报告了一个问题: {{.error}}", - "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "", - "- Docs https://docs.docker.com/docker-for-mac/#resources": "", - "- Docs https://docs.docker.com/docker-for-windows/#resources": "", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube docker-env\" to point your docker-cli to the docker inside minikube.\n- \"minikube image\" to build images without docker.": "- 使用 \"minikube ssh\" 命令以 SSH 连接到 minikube 的节点。\n- 使用 \"minikube docker-env\" 命令将你的 docker-cli 配置为使用 minikube 中的 Docker。\n- 使用 \"minikube image\" 命令在不使用 Docker 的情况下构建镜像。", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube image\" to build images without docker.": "- 使用 \"minikube ssh\" 命令以 SSH 连接到 minikube 的节点。\n- 使用 \"minikube image\" 命令在不使用 Docker 的情况下构建镜像。", + "- \"minikube ssh\" to SSH into minikube's node.\n- \"minikube podman-env\" to point your podman-cli to the podman inside minikube.\n- \"minikube image\" to build images without docker.": "- 使用 \"minikube ssh\" 命令以 SSH 连接到 minikube 的节点。\n- 使用 \"minikube podman-env\" 命令将你的 podman-cli 配置为使用 minikube 中的 Podman。\n- 使用 \"minikube image\" 命令在不使用 Docker 的情况下构建镜像。", + "- Delete and recreate minikube cluster\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}": "- 删除并重新创建 minikube 集群\n\t\tminikube delete\n\t\tminikube start --driver={{.driver_name}}", + "- Docs https://docs.docker.com/docker-for-mac/#resources": "- 文档地址 https://docs.docker.com/docker-for-mac/#resources", + "- Docs https://docs.docker.com/docker-for-windows/#resources": "- 文档地址 https://docs.docker.com/docker-for-windows/#resources", "- Ensure your {{.driver_name}} daemon has access to enough CPU/memory resources.": "- 确保你的 {{.driver_name}} 守护程序有权访问足够的 CPU 和内存资源。", - "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "", + "- Prune unused {{.driver_name}} images, volumes, networks and abandoned containers.\n\n\t\t\t\t{{.driver_name}} system prune --volumes": "- 清理未使用的 {{.driver_name}} 镜像、卷、网络和废弃的容器。\n\n\t\t\t\t使用 {{.driver_name}} system prune --volumes 命令", "- Restart your {{.driver_name}} service": "- 重启你的 {{.driver_name}} 服务", - "- {{.logPath}}": "", - "--kvm-numa-count range is 1-8": "", - "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "", - "\u003ctarget file absolute path\u003e must be an absolute Path. Relative Path is not allowed (example: \"/home/docker/copied.txt\")": "", - "==\u003e Audit \u003c==": "", - "==\u003e Last Start \u003c==": "", + "--container-runtime must be set to \"containerd\" or \"cri-o\" for rootless": "--container-runtime 必须被设置为 \"containerd\" 或者 \"cri-o\" 以实现非 root 运行", + "--kvm-numa-count range is 1-8": "--kvm-numa-count 取值范围为 1-8", + "--network flag is only valid with the docker/podman and KVM drivers, it will be ignored": "--network 标识仅对 docker/podman 和 KVM 驱动程序有效,它将被忽略", + "--network flag is only valid with the docker/podman, KVM and Qemu drivers, it will be ignored": "--network 标识仅对 docker/podman KVM 和 Qemu 驱动程序有效,它将被忽略", + "--network flag is only valid with the docker/podman, qemu, kvm, and vfkit drivers, it will be ignored": "--network 参数仅适用于 docker/podman、qemu、kvm 和 vfkit 驱动,(当前)将被忽略。", + "--network with QEMU must be 'builtin' or 'socket_vmnet'": "与 QEMU 使用时,--network (参数)必须是 'builtin' 或 'socket_vmnet'", + "--network with vfkit must be 'nat' or 'vmnet-shared'": "与 vfkit 使用时,--network(参数)必须是 'nat' 或 'vmnet-shared'", + "--static-ip is only implemented on Docker and Podman drivers, flag will be ignored": "--static-ip 只在 Docker 和 Podman 驱动上实现,flag 将被忽略", + "--static-ip overrides --subnet, --subnet will be ignored": "--static-ip 重写 --subnet,--subnet 将被忽略", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) 使用以下命令使用 Kubernetes {{.new}} 重新创建集群:\n\t \n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t2) 使用以下命令创建第二个具有 Kubernetes {{.new}} 的集群:\n\t \n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\t \n\t\t3) 使用以下命令使用现有的 Kubernetes {{.old}} 版本的集群:\n\t \n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}", + "1) Recreate the cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) Create a second cluster with Kubernetes {{.new}}, by running:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) Use the existing cluster at version Kubernetes {{.old}}, by running:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t": "1) 运行以下命令,使用 Kubernetes {{.new}} 重新创建集群:\n\n\t\t minikube delete{{.profile}}\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t2) 运行以下命令,使用 Kubernetes {{.new}} 创建第二个集群:\n\n\t\t minikube start -p {{.suggestedName}} --kubernetes-version={{.prefix}}{{.new}}\n\n\t\t3) 运行以下命令,使用 Kubernetes {{.old}} 版本的现有集群:\n\n\t\t minikube start{{.profile}} --kubernetes-version={{.prefix}}{{.old}}\n\t\t", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. 点击 \"Docker for Desktop\" 菜单图标\n\t\t\t2. 点击 \"Preferences\"\n\t\t\t3. 点击 \"Resources\"\n\t\t\t4. 将 \"CPUs\" 滑动条调整到 2 或更高\n\t\t\t5. 点击 \"Apply \u0026 Restart\"", + "1. Click on \"Docker for Desktop\" menu icon\n\t\t\t2. Click \"Preferences\"\n\t\t\t3. Click \"Resources\"\n\t\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t\t5. Click \"Apply \u0026 Restart\"": "1. 点击 \"Docker for Desktop\" 菜单图标\n\t\t\t2. 点击 \"Preferences\"\n\t\t\t3. 点击 \"Resources\"\n\t\t\t4. 将 \"Memory\" 滑动条调整到 {{.recommend}} 或更高\n\t\t\t5. 点击 \"Apply \u0026 Restart\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"CPUs\" slider bar to 2 or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. 通过点击系统托盘中的 Docker 图标打开 \"Docker Desktop\" 菜单\n\t\t2. 点击 \"Settings\"\n\t\t3. 点击 \"Resources\"\n\t\t4. 将 \"CPUs\" 滑动条调整到 2 或更高\n\t\t5. 点击 \"Apply \u0026 Restart\"", + "1. Open the \"Docker Desktop\" menu by clicking the Docker icon in the system tray\n\t\t2. Click \"Settings\"\n\t\t3. Click \"Resources\"\n\t\t4. Increase \"Memory\" slider bar to {{.recommend}} or higher\n\t\t5. Click \"Apply \u0026 Restart\"": "1. 通过点击系统托盘中的 Docker 图标打开 \"Docker Desktop\" 菜单\n\t\t2. 点击 \"Settings\"\n\t\t3. 点击 \"Resources\"\n\t\t4. 将 \"Memory\" 滑动条调整到 {{.recommend}} 或更高\n\t\t5. 点击 \"Apply \u0026 Restart\"", + "==\u003e Audit \u003c==": "==\u003e 审计日志 \u003c==", + "==\u003e Last Start \u003c==": "==\u003e 上次启动 \u003c==", "A VPN or firewall is interfering with HTTP access to the minikube VM. Alternatively, try a different VM driver: https://minikube.sigs.k8s.io/docs/start/": "VPN 或者防火墙正在干扰对 minikube 虚拟机的 HTTP 访问。或者,您可以使用其它的虚拟机驱动:https://minikube.sigs.k8s.io/docs/start/", "A firewall is blocking Docker the minikube VM from reaching the image repository. You may need to select --image-repository, or use a proxy.": "防火墙正在阻止 minikube 虚拟机中的 Docker 访问镜像仓库。您可能需要选择 --image-repository 或使用代理", "A firewall is blocking Docker the minikube VM from reaching the internet. You may need to configure it to use a proxy.": "防火墙正在阻止 minikube 虚拟机中的 Docker 访问互联网。您可能需要对其进行配置为使用代理", @@ -40,57 +57,75 @@ "A set of key=value pairs that describe configuration that may be passed to different components.\nThe key should be '.' separated, and the first part before the dot is the component to apply the configuration to.\nValid components are: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler\nValid kubeadm parameters:": "一组用于描述可传递给不同组件的配置的键值对。\n其中键应以英文句点“.”分隔,英文句点前面的第一个部分是应用该配置的组件。\n有效组件包括:kubelet、kubeadm、apiserver、controller-manager、etcd、proxy、scheduler\n有效 kubeadm 参数包括:", "A set of key=value pairs that describe feature gates for alpha/experimental features.": "一组用于描述 alpha 版功能/实验性功能的功能限制的键值对。", "Access the Kubernetes dashboard running within the minikube cluster": "访问在 minikube 集群中运行的 kubernetes dashboard", - "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "", - "Add SSH identity key to SSH authentication agent": "", + "Access to ports below 1024 may fail on Windows with OpenSSH clients older than v8.1. For more information, see: https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission": "在 Windows 上使用 v8.1以上版本的OpenSSH客户端,访问 1024 以下端口可能会失败。更多信息请参阅:https://minikube.sigs.k8s.io/docs/handbook/accessing/#access-to-ports-1024-on-windows-requires-root-permission", + "Add SSH identity key to SSH authentication agent": "将SSH身份密钥添加到SSH身份验证代理", + "Add an image into minikube as a local cache, or delete, reload the cached images": "将 image 作为本地缓存添加到 minikube 中,或删除、重新加载缓中的 images", "Add an image to local cache.": "将 image 添加到本地缓存。", - "Add host key to SSH known_hosts file": "", - "Add image to cache for all running minikube clusters": "", + "Add host key to SSH known_hosts file": "在SSH known_hosts文件中添加主机密钥", + "Add image to cache for all running minikube clusters": "为所有正在运行的 minikube 集群添加镜像到缓存", "Add machine IP to NO_PROXY environment variable": "将机器IP添加到环境变量 NO_PROXY 中", "Add or delete an image from the local cache.": "在本地缓存中添加或删除 image。", - "Add, delete, or push a local image into minikube": "", - "Add, remove, or list additional nodes": "", + "Add, remove, or list additional nodes": "添加,删除或者列出其他的节点", + "Adding a control-plane node is not yet supported, setting control-plane flag to false": "不支持添加控制平面节点,将控制平面标志设置为false", + "Adding a control-plane node to a non-HA (non-multi-control plane) cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "目前不支持向非 HA(非多控制平面)集群添加控制平面节点。请先删除集群,然后使用“minikube start --ha”创建新集群。", "Adding node {{.name}} to cluster {{.cluster}}": "添加节点 {{.name}} 至集群 {{.cluster}}", + "Adding node {{.name}} to cluster {{.cluster}} as {{.roles}}": "将节点 {{.name}} 作为 {{.roles}} 添加到集群 {{.cluster}}", "Additional help topics": "其他帮助", "Additional mount options, such as cache=fscache": "其他挂载选项,例如:cache=fscache", "Adds a node to the given cluster config, and starts it.": "将节点添加到给定的集群配置中,然后启动它", "Adds a node to the given cluster.": "将节点添加到给定的集群", "Advanced Commands:": "高级命令:", - "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "", + "After the addon is enabled, please run \"minikube tunnel\" and your ingress resources would be available at \"127.0.0.1\"": "插件启用后,请运行 \"minikube tunnel\" 您的 ingress 资源将在 \"127.0.0.1\"", "Aliases": "别名", - "All existing scheduled stops cancelled": "", + "All existing scheduled stops cancelled": "取消所有已计划的停止", + "Allow pods to use your GPUs. Options include: [all,nvidia,amd] (Docker driver with Docker container-runtime only)": "允许 pods 使用您的 GPUs。选项包括:[all,nvidia,amd](仅支持Docker容器运行时的Docker驱动程序)", "Allow user prompts for more information": "允许用户提示以获取更多信息", - "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "用于从中拉取 docker 镜像的备选镜像存储库。如果您对 gcr.io 的访问受到限制,则可以使用该镜像存储库。将镜像存储库设置为“auto”可让 minikube 为您选择一个存储库。对于中国大陆用户,您可以使用本地 gcr.io 镜像,例如 registry.cn-hangzhou.aliyuncs.com/google_containers", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \"auto\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "用于从中拉取 docker 镜像的备选镜像存储库。如果您对 gcr.io 的访问受到限制,则可以使用该镜像存储库。将镜像存储库设置为“auto”可让 minikube 为您选择一个存储库。对于中国大陆用户,您可以使用本地 gcr.io 镜像,例如 registry.cn-hangzhou.aliyuncs.com/google_containers", + "Alternatively you could install one of these drivers:": "或者你也可以安装以下驱动程序:", "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "为 minikube 虚拟机分配的 RAM 容量(格式:\u003c数字\u003e[\u003c单位\u003e],其中单位 = b、k、m 或 g)", "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "为 minikube 虚拟机分配的 RAM 容量(格式:\u003c数字\u003e[\u003c单位\u003e],其中单位 = b、k、m 或 g)。", "Amount of RAM to allocate to Kubernetes (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "为 Kubernetes 分配的 RAM 容量(格式:\u003c数字\u003e[\u003c单位\u003e],其中单位 = b、k、m 或 g)。", "Amount of time to wait for a service in seconds": "等待服务的时间(单位秒)", "Amount of time to wait for service in seconds": "等待服务的时间(单位秒)", - "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "", - "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --vm-driver to switch to it.": "另外一个管理程序与 KVM 产生了冲突,如 VirtualBox。请停止其他的管理程序", - "Another minikube instance is downloading dependencies... ": "", - "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "", - "At least needs control plane nodes to enable addon": "", + "An optional configuration file to read addon specific configs from instead of being prompted each time.": "一个可选的配置文件,用于读取插件特定的配置,从而无需每次都进行交互提示。", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --driver to switch to it.": "另外一个管理程序与 KVM 产生了冲突,如 VirtualBox。请停止其他的管理程序,或者使用 --driver 切换到其他程序。", + "Another hypervisor, such as VirtualBox, is conflicting with KVM. Please stop the other hypervisor, or use --vm-driver to switch to it.": "另外一个管理程序与 KVM 产生了冲突,如 VirtualBox。请停止其他的管理程序,或者使用 --vm-driver 切换到其他程序。", + "Another minikube instance is downloading dependencies... ": "另一个 minikube 实例正在下载依赖项…", + "Another program is using a file required by minikube. If you are using Hyper-V, try stopping the minikube VM from within the Hyper-V manager": "另一个程序正在使用 minikube 所需的文件。如果您正在使用 Hyper-V,请尝试从 Hyper-V 管理器中停止 minikube VM", + "Another tunnel process is already running, terminate the existing instance to start a new one": "另一个隧道进程已在运行,请终止现有实例以启动新的实例", + "At least needs control plane nodes to enable addon": "至少需要控制平面节点来启用插件", + "Auto-pause is already enabled.": "自动暂停已经启用。", "Automatically selected the '{{.driver}}' driver": "自动选择 '{{.driver}}' 驱动", "Automatically selected the '{{.driver}}' driver (alternates: {{.alternates}})": "自动选择 '{{.driver}}' 驱动(可选项:{{.alternates}})", "Automatically selected the {{.driver}} driver": "自动选择 {{.driver}} 驱动", "Automatically selected the {{.driver}} driver. Other choices: {{.alternates}}": "自动选择 {{.driver}} 驱动。其他选项:{{.alternates}}", + "Automatically selected the {{.network}} network": "自动选择 {{.network}} 网络", "Available Commands": "可用命令", "Basic Commands:": "基本命令:", - "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "", + "Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.": "因为你正在使用 {{.operating_system}} 上的 Docker 驱动程序,所以需要打开终端才能运行它。", "Bind Address: {{.Address}}": "绑定地址:{{.Address}}", "Block until the apiserver is servicing API requests": "阻塞直到 apiserver 为 API 请求提供服务", - "Booting up control plane ...": "", - "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "", - "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "", - "Build a container image in minikube": "", - "Build a container image, using the container runtime.": "", - "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "", - "Cache image from docker daemon": "", - "Cache image from remote registry": "", - "Cannot find directory {{.path}} for copy": "", + "Booting up control plane ...": "正在启动控制平面...", + "Both driver={{.driver}} and vm-driver={{.vmd}} have been set.\n\n Since vm-driver is deprecated, minikube will default to driver={{.driver}}.\n\n If vm-driver is set in the global config, please run \"minikube config unset vm-driver\" to resolve this warning.\n\t\t\t": "已设置 driver={{.driver}} 和 vm-driver={{.vmd}}。\n\n 由于 vm-driver 已弃用,minikube 将默认使用 driver={{.driver}}。\n\n 如果在全局配置中设置了 vm-driver,请运行 \"minikube config unset vm-driver\" 以解决此警告。", + "Bridge CNI is incompatible with multi-node clusters, use a different CNI": "桥接 CNI 与多节点集群不兼容,请使用不同的 CNI", + "Build a container image in minikube": "在 minikube 中构建一个容器镜像", + "Build a container image, using the container runtime.": "使用容器运行时构建容器映像。", + "Build image on all nodes.": "在所有节点上构建映像。", + "CGroup allocation is not available in your environment, You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "您的环境中没有 CGroup 分配,您可能在嵌套容器中运行 minikube。尝试运行:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CGroup allocation is not available in your environment. You might be running minikube in a nested container. Try running:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t": "你的环境中不支持 CGroup 分配。可能是因为你在嵌套容器中运行 minikube。尝试运行以下命令:\n\t\t\t\n\tminikube start --extra-config=kubelet.cgroups-per-qos=false --extra-config=kubelet.enforce-node-allocatable=\"\"\n\n\t\t\t\n\t\t\t", + "CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet, or path to a CNI manifest (default: auto)": "使用 CNI 插件。可选包括:auto、bridge、calico、cilium、flannel、kindnet 或 CNI 配置清单的路径(默认值:auto)", + "Cache image from docker daemon": "从 docker daemon 中缓存镜像", + "Cache image from remote registry": "远程仓库中缓存镜像", + "Cache image to docker daemon": "缓存镜像到 docker daemon", + "Cache image to remote registry": "缓存镜像到远程仓库", + "Cannot find directory {{.path}} for copy": "找不到用来复制的 {{.path}} 目录", "Cannot find directory {{.path}} for mount": "找不到用来挂载的 {{.path}} 目录", "Cannot use both --output and --format options": "不能同时使用 --output 和 --format 选项", - "Check if you have unnecessary pods running by running 'kubectl get po -A": "", + "Cannot use the option --no-kubernetes on the {{.name}} driver": "无法使用 {{.name}} 驱动程序上的 -no-kubernetes 选项", + "Certificate {{.certPath}} has expired. Generating a new one...": "证书 {{.certPath}} 已过期,生成一个新证书...", + "Changing the API server port of an existing minikube HA (multi-control plane) cluster is not currently supported. Please first delete the cluster.": "目前不支持更改现有 minikube HA(多控制平面)集群的 API 服务器端口。请先删除集群。", + "Changing the HA (multi-control plane) mode of an existing minikube cluster is not currently supported. Please first delete the cluster and use 'minikube start --ha' to create new one.": "目前不支持更改现有 minikube 集群的 HA(多控制平面)模式。请先删除该集群,然后使用 'minikube start --ha' 创建新集群。", + "Check if you have unnecessary pods running by running 'kubectl get po -A": "通过运行 'kubectl get po -A' 检查是否有不必要的pod正在运行", "Check output of 'journalctl -xeu kubelet', try passing --extra-config=kubelet.cgroup-driver=systemd to minikube start": "检查 'journalctl -xeu kubelet' 的输出,尝试启动 minikube 时添加参数 --extra-config=kubelet.cgroup-driver=systemd", "Check that SELinux is disabled, and that the provided apiserver flags are valid": "检查 SELinux 是否禁用,且提供的 apiserver 标志是否有效", "Check that libvirt is setup properly": "检查 libvirt 是否正确设置", @@ -99,95 +134,108 @@ "Check that the provided apiserver flags are valid, and that SELinux is disabled": "检查提供的 apiserver 标志是有效的,且禁用了 SELinux", "Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "检测您的 --kubernetes-version 前面是否有 'v', 例如:'v1.1.14", "Check that your apiserver flags are valid, or run 'minikube delete'": "请检查您的 apiserver 标志是否有效,或者允许 'minikube delete'", - "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "", + "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --driver=none": "检查防火墙规则是否有干扰,并运行 'virt-host-validate' 检查 KVM 配置问题。如果你在虚拟机中运行 minikube,请考虑使用 --driver=none", "Check your firewall rules for interference, and run 'virt-host-validate' to check for KVM configuration issues. If you are running minikube within a VM, consider using --vm-driver=none": "检查您的防火墙规则是否存在干扰,然后运行 'virt-host-validate' 以检查 KVM 配置问题,如果在虚拟机中运行minikube,请考虑使用 --vm-driver=none", "Choose a smaller value for --memory, such as 2000": "为 --memory 选择一个更小的值,例如 2000", "ChromeOS is missing the kernel support necessary for running Kubernetes": "ChromeOS 缺少运行 Kubernetes 所需的内核支持", - "Cluster was created without any CNI, adding a node to it might cause broken networking.": "", + "Cluster was created without any CNI, adding a node to it might cause broken networking.": "在没有任何 CNI 的情况下创建集群,向其中添加节点可能会导致网络中断。", "Configuration and Management Commands:": "配置和管理命令:", "Configure a default route on this Linux host, or use another --driver that does not require it": "为当前 Linux 主机配置一个默认的路由, 或者使用另一个不需要他的 --driver", "Configure a default route on this Linux host, or use another --vm-driver that does not require it": "为当前 Linux 主机配置一个默认的路由, 或者使用另一个不需要他的 --vm-driver", "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "根据官方文档配置外部网络交换机,然后添加 `--hyperv-virtual-switch=\u003cswitch-name\u003e` 到 `minikube start`", "Configure environment to use minikube's Docker daemon": "配置环境以使用 minikube's Docker daemon", "Configure environment to use minikube's Podman service": "配置环境以使用 minikube's Podman service", + "Configure vmnet-helper to run without a password.\n\n\t\tPlease install a vmnet-helper sudoers rule using these instructions:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "配置 vmnet-helper 以免密运行。\n\n\t\t请按照以下说明安装 vmnet-helper sudoers 规则:\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash", "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list": "在 minikube 中配置插件 w/ADDON_NAME(例如:minikube addons configure registry-creds)。查看相关可用的插件列表,请使用:minikube addons list", - "Configuring RBAC rules ...": "", + "Configuring RBAC rules ...": "配置 RBAC 规则 ...", "Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "开始为Kubernetes {{.k8sVersion}},{{.runtime}} {{.runtimeVersion}} 配置环境变量", "Configuring local host environment ...": "开始配置本地主机环境...", - "Configuring {{.name}} (Container Networking Interface) ...": "", + "Configuring {{.name}} (Container Networking Interface) ...": "配置 {{.name}} (Container Networking Interface) ...", "Confirm that you have a working internet connection and that your VM has not run out of resources by using: 'minikube logs'": "使用 'minikube logs' 确认您的互联网连接正常,并且您的虚拟机没有耗尽资源", "Confirm that you have supplied the correct value to --hyperv-virtual-switch using the 'Get-VMSwitch' command": "使用 'Get-VMSwitch' 命令确认已经为 --hyperv-virtual-switch 提供了正确的值", "Connect to LoadBalancer services": "连接到 LoadBalancer 服务", - "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "", - "Consider increasing Docker Desktop's memory size.": "", - "Continuously listing/getting the status with optional interval duration.": "", - "Control Plane could not update, try minikube delete --all --purge": "", - "Copy the specified file into minikube": "", - "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\\nExample Command : \\\"minikube cp a.txt /home/docker/b.txt\\\"\\n \\\"minikube cp a.txt minikube-m02:/home/docker/b.txt\\\"\\n": "", - "Could not determine a Google Cloud project, which might be ok.": "", - "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "", + "Consider creating a cluster with larger memory size using `minikube start --memory SIZE_MB` ": "考虑使用`minikube start --memory SIZE_MB` 命令创建一个内存更大的集群", + "Consider increasing Docker Desktop's memory size.": "考虑增加 Docker Desktop 的内存大小。", + "Continuously listing/getting the status with optional interval duration.": "持续以可选的时间间隔连续列出/获取状态。", + "Control Plane could not update, try minikube delete --all --purge": "无法更新控制平面,请尝试执行 minikube delete --all --purge", + "Copy the specified file into minikube": "将指定的文件复制到 minikube", + "Copy the specified file into minikube, it will be saved at path \u003ctarget file absolute path\u003e in your minikube.\nDefault target node controlplane and If \u003csource node name\u003e is omitted, It will trying to copy from host.\n\nExample Command : \"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"": "将指定文件复制到 minikube,它将保存在 minikube 中的路径 \u003ctarget file absolute path\u003e。\n默认目标节点为 controlplane,如果省略 \u003csource node name\u003e,则会尝试从主机复制。\n\n示例命令:\"minikube cp a.txt /home/docker/b.txt\" +\n \"minikube cp a.txt minikube-m02:/home/docker/b.txt\"\n \"minikube cp minikube-m01:a.txt minikube-m02:/home/docker/b.txt\"", + "Could not determine a Google Cloud project, which might be ok.": "无法确定 Google Cloud 项目,这可能是可以接受的。", + "Could not find any GCP credentials. Either run `gcloud auth application-default login` or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the path of your credentials file.": "找不到任何 GCP 凭据。要么运行 `gcloud auth application-default login` 命令,要么将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为凭据文件的路径。", "Could not get profile flag": "无法获取配置文件标志", "Could not process error from failed deletion": "无法处理删除失败的错误", "Could not process errors from failed deletion": "无法处理删除失败的错误", - "Could not resolve IP address": "", + "Could not resolve IP address": "无法解析 IP 地址", "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn.": "需要使用的镜像镜像的国家/地区代码。留空以使用全球代码。对于中国大陆用户,请将其设置为 cn。", + "Create Highly Available Multi-Control Plane Cluster with a minimum of three control-plane nodes that will also be marked for work.": "创建高可用的多控制平面集群,其中至少包含三个控制平面节点,同时这些节点也做为工作节点。", "Created a new profile : {{.profile_name}}": "创建了新的配置文件:{{.profile_name}}", "Creating Kubernetes in {{.driver_name}} container with (CPUs={{.number_of_cpus}}), Memory={{.memory_size}}MB ({{.host_memory_size}}MB available) ...": "正在 {{.driver_name}} 容器中 创建 Kubernetes,(CPUs={{.number_of_cpus}}), 内存={{.memory_size}}MB ({{.host_memory_size}}MB 可用", "Creating a new profile failed": "创建新的配置文件失败", "Creating mount {{.name}} ...": "正在创建装载 {{.name}}…", "Creating {{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "正在创建 {{.driver_name}} 虚拟机(CPUs={{.number_of_cpus}},Memory={{.memory_size}}MB, Disk={{.disk_size}}MB)...", - "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "", - "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB) ...": "正在创建 {{.driver_name}} {{.machine_type}}(CPUs={{.number_of_cpus}},内存={{.memory_size}}MB)...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "正在创建 {{.driver_name}} {{.machine_type}}(CPUs={{.number_of_cpus}},内存={{.memory_size}}MB,磁盘={{.disk_size}}MB)...", + "Creating {{.driver_name}} {{.machine_type}} (CPUs={{if not .number_of_cpus}}no-limit{{else}}{{.number_of_cpus}}{{end}}, Memory={{if not .memory_size}}no-limit{{else}}{{.memory_size}}MB{{end}}) ...": "创建 {{.driver_name}} {{.machine_type}}(CPU={{if not .number_of_cpus}}无限制{{else}}{{.number_of_cpus}}{{end}},内存={{if not .memory_size}}无限制{{else}}{{.memory_size}}MB{{end}})...", "Current context is \"{{.context}}\"": "当前的上下文为 \"{{.context}}\"", - "DEPRECATED, use `driver` instead.": "", - "DEPRECATED: Replaced by --cni=bridge": "", + "DEPRECATED, use `driver` instead.": "已弃用,请改用 `driver`。", + "DEPRECATED: Replaced by --cni": "已弃用,改用 --cni 来代替", + "DEPRECATED: Replaced by --cni=bridge": "已弃用,改用 --cni=bridge", "Default group id used for the mount": "用于挂载默认的 group id", "Default user id used for the mount": "用于挂载默认的 user id", "Delete an image from the local cache.": "从本地缓存中删除 image。", - "Deletes a local Kubernetes cluster": "", - "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "", + "Delete the existing '{{.name}}' cluster using: '{{.delcommand}}', or start the existing '{{.name}}' cluster using: '{{.command}} --driver={{.old}}'": "使用 '{{.delcommand}}' 删除现有的 '{{.name}}' 集群,或使用 '{{.command}} --driver={{.old}}' 启动现有的 '{{.name}}' 集群", + "Deletes a local Kubernetes cluster": "删除本地的 Kubernetes 集群", + "Deletes a local Kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "删除本地 Kubernetes 集群。此命令还将删除虚拟机并移除所有\n相关文件。", "Deletes a local kubernetes cluster": "删除本地的 kubernetes 集群", "Deletes a local kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "删除本地的 kubernetes 集群。此命令还将删除虚拟机,并删除所有的\n相关文件", "Deletes a local kubernetes cluster. This command deletes the VM, and removes all associated files.": "删除本地 kubernetes 集群。此命令会删除虚拟机并移除所有关联的文件。", "Deletes a node from a cluster.": "从集群中删除节点。", "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "正在删除 {{.driver_name}} 中的“{{.profile_name}}”…", "Deleting container \"{{.name}}\" ...": "正在删除容器 \"{{.name}}\" ...", - "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "", + "Deleting existing cluster {{.name}} with different driver {{.driver_name}} due to --delete-on-failure flag set by the user. ": "由于用户设置了 --delete-on-failure 标志,正在删除具有不同驱动程序 {{.driver_name}} 的现有集群 {{.name}}。", "Deleting node {{.name}} from cluster {{.cluster}}": "正在从集群 {{.cluster}} 中删除节点 {{.name}}", + "Directory to mount in the guest using format '/host-path:/guest-path'.": "要挂载到客户机的目录,格式为 '/host-path:/guest-path'。", + "Directory to output licenses to": "输出许可证的目录", "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox driver only)": "禁用在启动虚拟机之前检查硬件虚拟化的可用性(仅限 virtualbox 驱动程序)", "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "禁用虚拟机管理器中的动态内存,或者使用 --memory 传入更大的值", "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list": "在 minikube 中禁用插件 w/ADDON_NAME(例如:minikube addons disable dashboard)。查看相关可用的插件列表,请使用:minikube addons list", - "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "禁用 minikube 中的 ADDON_NAME 插件(示例:minikube addons disable dashboard)。要获取可用插件的列表,请使用 minikube addons list", "Disables the filesystem mounts provided by the hypervisors": "停用由管理程序提供的文件系统装载", "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "分配给 minikube 虚拟机的磁盘大小(格式:\u003c数字\u003e[\u003c单位\u003e],其中单位 = b、k、m 或 g)", "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g).": "分配给 minikube 虚拟机的磁盘大小(格式:\u003c数字\u003e[\u003c单位\u003e],其中单位 = b、k、m 或 g)。", "Display dashboard URL instead of opening a browser": "显示 dashboard URL,而不是打开浏览器", - "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "", - "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "", - "Display the kubernetes addons URL in the CLI instead of opening it in the default browser": "在终端中显示 kubernetes addons URL,而不是在默认浏览器中打开它", - "Display the kubernetes service URL in the CLI instead of opening it in the default browser": "在终端中显示 kubernetes service URL,而不是在默认浏览器中打开它", + "Display the Kubernetes addons URL in the CLI instead of opening it in the default browser": "在 CLI 中显示 Kubernetes 插件的 URL,而不是在默认浏览器中打开", + "Display the Kubernetes service URL in the CLI instead of opening it in the default browser": "在 CLI 中显示 Kubernetes 服务的 URL,而不是在默认浏览器中打开", + "Display the kubernetes addons URL in the CLI instead of opening it in the default browser": "在终端中显示 kubernetes 插件 URL,而不是在默认浏览器中打开它", + "Display the kubernetes service URL in the CLI instead of opening it in the default browser": "在终端中显示 kubernetes 服务 URL,而不是在默认浏览器中打开它", "Display values currently set in the minikube config file": "显示当前在 minikube 配置文件中设置的值", "Display values currently set in the minikube config file.": "显示当前在 minikube 配置文件中设置的值。", - "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "", - "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "", - "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "", - "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "", - "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", + "Display values currently set in the minikube config file.\n\tThe output format can be customized using the --format flag, which accepts a Go template. \n\tThe config file is typically located at \"~/.minikube/config/config.json\".": "显示 minikube 配置文件中当前设置的值。\n\t输出格式可通过 --format 标志自定义,该标志接受 Go 模板。\n\t配置文件通常位于 \"~/.minikube/config/config.json\"。", + "Docker Desktop has less than 2 CPUs configured, but Kubernetes requires at least 2 to be available": "Docker Desktop 少于 2 个 CPUs 可用, 但是 Kubernetes 需要至少 2 个 CPUs 可用", + "Docker Desktop is configured for Windows containers, but Linux containers are required for minikube": "Docker Desktop 配置为 Windows 容器,但 minikube 需要 Linux 容器", + "Docker Desktop only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "Docker Desktop 仅有 {{.size}}MiB 存储可用, 少于 Kubernetes 要求的 {{.req}}MiB", + "Docker Desktop only has {{.size}}MiB available, you may encounter application deployment failures.": "Docker Desktop 只有 {{.size}}MiB 可用空间,你可能会遇到应用部署失败的问题。", + "Docker container exited prematurely after it was created, consider investigating Docker's performance/health.": "Docker 容器在创建后过早退出,请考虑调查 Docker 的性能/健康状况。", + "Docker has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "Docker 可用的 CPU 少于 2 个,但 Kubernetes 至少需要 2 个可用的 CPU", "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "虚拟机中的 Docker 不可用,尝试运行 'minikube delete' 来重置虚拟机。", "Docs have been saved at - {{.path}}": "文档已保存在 - {{.path}}", "Documentation: {{.url}}": "文档:{{.url}}", "Done! kubectl is now configured to use \"{{.name}}\"": "完成!kubectl 已经配置至 \"{{.name}}\"", - "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "", + "Done! kubectl is now configured to use \"{{.name}}\" cluster and \"{{.ns}}\" namespace by default": "完成!kubectl 现在已配置,默认使用\"{{.name}}\"集群和\"{{.ns}}\"命名空间", "Done! kubectl is now configured to use {{.name}}": "完成!kubectl已经配置至{{.name}}", + "Done! minikube is ready without Kubernetes!": "完成!minikube 已准备就绪,无需 Kubernetes!", "Download complete!": "下载完成!", - "Downloading Kubernetes {{.version}} preload ...": "", + "Downloading Kubernetes {{.version}} preload ...": "正在下载 Kubernetes {{.version}} 的预加载文件...", "Downloading VM boot image ...": "正在下载 VM boot image...", "Downloading driver {{.driver}}:": "正在下载驱动 {{.driver}}:", "Downloading {{.name}} {{.version}}": "正在下载 {{.name}} {{.version}}", - "Due to networking limitations of driver {{.driver_name}} on {{.os_name}}, {{.addon_name}} addon is not supported.\nAlternatively to use this addon you can use a vm-based driver:\n\n\t'minikube start --vm=true'\n\nTo track the update on this work in progress feature please check:\nhttps://github.com/kubernetes/minikube/issues/7332": "", - "Due to networking limitations of driver {{.driver_name}}, {{.addon_name}} addon is not fully supported. Try using a different driver.": "", - "ERROR creating `registry-creds-acr` secret": "", + "Due to DNS issues your cluster may have problems starting and you may not be able to pull images\nMore details available at: https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues": "由于 DNS 问题,你的集群可能在启动时遇到问题,你可能无法拉取镜像\n更多详细信息请参阅:https://minikube.sigs.k8s.io/docs/drivers/qemu/#known-issues", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "由于 macOS 13+ 的变更,minikube 目前不支持 VirtualBox。您可以使用替代驱动程序,例如 'vfkit'、'qemu' 或 'docker'。\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n 有关此问题的更多详细信息,请参阅:https://github.com/kubernetes/minikube/issues/15274\n", + "Due to changes in macOS 13+ minikube doesn't currently support VirtualBox. You can use alternative drivers such as docker or {{.driver}}.\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}/\n\n For more details on the issue see: https://github.com/kubernetes/minikube/issues/15274\n": "由于 macOS 13+ 的变化,minikube 目前不支持 VirtualBox。你可以使用 docker 或 {{.driver}} 等替代驱动程序。\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}/\n\n 有关此问题的更多详细信息,请参阅:https://github.com/kubernetes/minikube/issues/15274\n", + "Duration of inactivity before the minikube VM is paused (default 1m0s)": "在 minikube 虚拟机暂停之前的不活动时间(默认为1分钟)", + "Duration of inactivity before the minikube VM is paused (default 1m0s). To disable, set to 0s": "在 minikube 虚拟机暂停之前的不活动时间(默认为1分钟)。要禁用,请设置为0秒。", + "Duration until minikube certificate expiration, defaults to three years (26280h).": "minikube 证书有效期,默认为三年(26280小时)。", + "ERROR creating `registry-creds-acr` secret": "创建 `registry-creds-acr` secret 时出错", "ERROR creating `registry-creds-dpr` secret": "创建 `registry-creds-dpr` secret 时出错", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "创建 `registry-creds-ecr` secret 时出错:{{.error}}", "ERROR creating `registry-creds-gcr` secret: {{.error}}": "创建 `registry-creds-gcr` secret 时出错:{{.error}}", @@ -196,35 +244,36 @@ "Enable experimental NVIDIA GPU support in minikube": "在 minikube 中启用实验性 NVIDIA GPU 支持", "Enable host resolver for NAT DNS requests (virtualbox driver only)": "为 NAT DNS 请求启用主机解析器(仅限 virtualbox 驱动程序)", "Enable istio needs {{.minMem}} MB of memory and {{.minCpus}} CPUs.": "启用 istio 需要至少 {{.minMem}} MB 内存 以及 {{.minCpus}} CPUs", - "Enable or disable a minikube addon": "", + "Enable one or more addons, in a comma-separated format. See `minikube addons list` for a list of valid addon names.": "启用一个或多个插件,使用逗号分隔格式。请参阅 `minikube addons list` 查看有效插件名称列表。", + "Enable or disable a minikube addon": "启用或禁用 minikube 插件", "Enable proxy for NAT DNS requests (virtualbox driver only)": "为 NAT DNS 请求启用代理(仅限 virtualbox 驱动程序)", "Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\": "启用默认 CNI 插件 (/etc/cni/net.d/k8s.conf)。与“--network-plugin=cni”结合使用", "Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\\".": "启用默认 CNI 插件 (/etc/cni/net.d/k8s.conf)。与“--network-plugin=cni”结合使用。", - "Enabled addons: {{.addons}}": "", + "Enabled addons: {{.addons}}": "启用插件: {{.addons}}", "Enables the addon w/ADDON_NAME within minikube (example: minikube addons enable dashboard). For a list of available addons use: minikube addons list": "启动 minikube 插件 w/ADDON_NAME(例如:minikube addons enable dashboard)。查看相关可用的插件列表,请使用:minikube addons list", - "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "", - "Enabling '{{.name}}' returned an error: {{.error}}": "", + "Enables the addon w/ADDON_NAME within minikube. For a list of available addons use: minikube addons list ": "在 minikube 中启用 ADDON_NAME 插件。要获取可用插件的列表,请使用 minikube addons list", + "Enabling '{{.name}}' returned an error: {{.error}}": "启用 '{{.name}}' 返回了错误: {{.error}}", "Enabling dashboard ...": "正在开启 dashboard ...", "Ensure that CRI-O is installed and healthy: Run 'sudo systemctl start crio' and 'journalctl -u crio'. Alternatively, use --container-runtime=docker": "确保 CRI-O 已安装且正常运行:执行 'sudo systemctl start crio' and 'journalctl -u crio'。或者使用 --container-runtime=docker", - "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "", + "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --driver": "确保 Docker 已安装并处于健康状态:运行 'sudo systemctl start docker' 和 'journalctl -u docker'。或者,选择另一个 --driver 的值", "Ensure that Docker is installed and healthy: Run 'sudo systemctl start docker' and 'journalctl -u docker'. Alternatively, select another value for --vm-driver": "确保 Docker 已安装且正常运行: 执行 'sudo systemctl start docker' and 'journalctl -u docker'。或者为 --vm-driver 指定另外的值", - "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "", + "Ensure that the required 'pids' cgroup is enabled on your host: grep pids /proc/cgroups": "确保你的主机上已启用所需的 'pids' cgroup:grep pids /proc/cgroups", "Ensure that the user listed in /etc/libvirt/qemu.conf has access to your home directory": "确保 /etc/libvirt/qemu.conf 中列出的用户具备访问您 home 目录的权限", - "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "", + "Ensure that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)": "确保你是适当的 libvirt 组的成员(记得重新登录以使组更改生效!)", "Ensure that your value for HTTPS_PROXY points to an HTTPS proxy rather than an HTTP proxy": "确保您配置的 HTTPS_PROXY 指向了 HTTPS 代理而不是 HTTP 代理", - "Ensure the tmp directory path is writable to the current user.": "", - "Ensure you have at least 20GB of free disk space.": "", - "Ensure your {{.driver_name}} is running and is healthy.": "", + "Ensure the tmp directory path is writable to the current user.": "确保当前用户可以写入 tmp 目录路径。", + "Ensure you have at least 20GB of free disk space.": "确保你至少有 20GB 的可用磁盘空间。", + "Ensure your {{.driver_name}} is running and is healthy.": "确保你的 {{.driver_name}} 正在运行且处于健康状态。", "Environment variables to pass to the Docker daemon. (format: key=value)": "传递给 Docker 守护进程的环境变量。(格式:键值对)", - "Environment variables to pass to the build. (format: key=value)": "", + "Environment variables to pass to the build. (format: key=value)": "传递给构建过程的环境变量。(格式为:key=value)", "Error checking driver version: {{.error}}": "检查驱动程序版本时出错:{{.error}}", - "Error code docs have been saved at - {{.path}}": "", + "Error code docs have been saved at - {{.path}}": "错误代码文档已保存在 - {{.path}}", "Error converting status to json": "转换状态为 json 时出错", "Error creating list template": "创建 list template 时出错", "Error creating minikube directory": "创建 minikube 目录时出错", "Error creating status template": "创建 status template 时出错", "Error creating view template": "创建 view template 时出错", - "Error detecting shell": "", + "Error detecting shell": "检测 shell 时发生错误", "Error executing list template": "执行 list template 时出错", "Error executing status template": "执行 status template 时出错", "Error executing template": "执行 template 时出错", @@ -241,12 +290,13 @@ "Error getting cluster bootstrapper": "获取 cluster bootstrapper 时出错", "Error getting cluster config": "获取 cluster config 时出错", "Error getting config": "获取 config 时出错", + "Error getting control-plane node": "获取 control-plane node 时出错", "Error getting host": "获取 host 时出错", "Error getting host status": "获取 host status 时出错", "Error getting machine logs": "获取 machine logs 时出错", "Error getting machine status": "获取 machine status 时出错", - "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "", - "Error getting primary control plane": "", + "Error getting port binding for '{{.driver_name}} driver: {{.error}}": "获取 '{{.driver_name}}' 驱动程序的端口绑定时出错:{{.error}}", + "Error getting primary control plane": "获取主控制平面时出错", "Error getting profiles to delete": "获取待删除配置文件时出错", "Error getting service status": "获取 service status 时出错", "Error getting service with namespace: {{.namespace}} and labels {{.labelName}}:{{.addonName}}: {{.error}}": "使用 namespace: {{.namespace}} 和 labels {{.labelName}}:{{.addonName}} 获取 service 时出错:{{.error}}", @@ -260,7 +310,7 @@ "Error opening service": "开启 service 时出错", "Error parsing Driver version: {{.error}}": "解析 Driver 版本时出错:{{.error}}", "Error parsing minikube version: {{.error}}": "解析 minikube 版本时出错:{{.error}}", - "Error parsing {{.name}}={{.value}}, {{.err}}": "", + "Error parsing {{.name}}={{.value}}, {{.err}}": "解析 {{.name}}={{.value}} 时出错,{{.err}}", "Error reading {{.path}}: {{.error}}": "读取 {{.path}} 时出错:{{.error}}", "Error restarting cluster": "重启 cluster 时出错", "Error setting shell variables": "设置 shell 变量时出错", @@ -269,814 +319,1009 @@ "Error unsetting shell variables": "取消设置 shell 变量时出错", "Error while setting kubectl current context : {{.error}}": "设置 kubectl 上下文时出错 :{{.error}}", "Error while setting kubectl current context: {{.error}}": "设置 kubectl 上下文时出错:{{.error}}", - "Error with ssh-add": "", + "Error with ssh-add": "ssh-add 出错", "Error writing mount pid": "写入 mount pid 时出错", "Error: You have selected Kubernetes v{{.new}}, but the existing cluster for your profile is running Kubernetes v{{.old}}. Non-destructive downgrades are not supported, but you can proceed by performing one of the following options:\n\n* Recreate the cluster using Kubernetes v{{.new}}: Run \"minikube delete {{.profile}}\", then \"minikube start {{.profile}} --kubernetes-version={{.new}}\"\n* Create a second cluster with Kubernetes v{{.new}}: Run \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\"\n* Reuse the existing cluster with Kubernetes v{{.old}} or newer: Run \"minikube start {{.profile}} --kubernetes-version={{.old}}\"": "错误:您已选择 Kubernetes v{{.new}},但您的配置文件的现有集群正在运行 Kubernetes v{{.old}}。非破坏性降级不受支持,但若要继续操作,您可以执行以下选项之一:\n\n* 使用 Kubernetes v{{.new}} 重新创建现有集群:运行“minikube delete {{.profile}}”,然后运行“minikube start {{.profile}} --kubernetes-version={{.new}}”\n* 使用 Kubernetes v{{.new}} 再创建一个集群:运行“minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}”\n* 通过 Kubernetes v{{.old}} 或更高版本重复使用现有集群:运行“minikube start {{.profile}} --kubernetes-version={{.old}}”", "Error: You have selected Kubernetes v{{.new}}, but the existing cluster for your profile is running Kubernetes v{{.old}}. Non-destructive downgrades are not supported, but you can proceed by performing one of the following options:\n* Recreate the cluster using Kubernetes v{{.new}}: Run \"minikube delete {{.profile}}\", then \"minikube start {{.profile}} --kubernetes-version={{.new}}\"\n* Create a second cluster with Kubernetes v{{.new}}: Run \"minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}\"\n* Reuse the existing cluster with Kubernetes v{{.old}} or newer: Run \"minikube start {{.profile}} --kubernetes-version={{.old}}": "错误:您已选择 Kubernetes v{{.new}},但您的配置文件的现有集群正在运行 Kubernetes v{{.old}}。非破坏性降级不受支持,但若要继续操作,您可以执行以下选项之一:\n* 使用 Kubernetes v{{.new}} 重新创建现有集群:运行“minikube delete {{.profile}}”,然后运行“minikube start {{.profile}} --kubernetes-version={{.new}}”\n* 使用 Kubernetes v{{.new}} 再创建一个集群:运行“minikube start -p \u003cnew name\u003e --kubernetes-version={{.new}}”\n* 通过 Kubernetes v{{.old}} 或更高版本重复使用现有集群:运行“minikube start {{.profile}} --kubernetes-version={{.old}}”", "Error: [{{.id}}] {{.error}}": "错误:[{{.id}}] {{.error}}", "Examples": "示例", - "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "", - "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "", + "Executing \"{{.command}}\" took an unusually long time: {{.duration}}": "执行 \"{{.command}}\" 花费了异常长的时间:{{.duration}}", + "Existing disk is missing new features ({{.error}}). To upgrade, run 'minikube delete'": "现有磁盘缺少新功能({{.error}})。要升级,请运行 'minikube delete'", "Exiting": "正在退出", "Exiting due to driver incompatibility": "由于驱动程序不兼容而退出", - "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "", + "Exiting due to {{.fatal_code}}: {{.fatal_msg}}": "因 {{.fatal_code}} 错误而退出:{{.fatal_msg}}", "Exiting.": "正在退出。", - "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "", - "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "", - "Fail check if container paused": "", - "Failed runtime": "", - "Failed to build image": "", + "Exposed port of the proxyfied dashboard. Set to 0 to pick a random port.": "代理 dashboard 的暴露端口。设置为 0 将选择一个随机端口。", + "External Adapter on which external switch will be created if no external switch is found. (hyperv driver only)": "如果找不到外部交换机,将在外部适配器上创建外部交换机。(仅适用于 hyperv 驱动程序)", + "Fail check if container paused": "如果容器已挂起,则检查失败", + "Failed removing pid from pidfile: {{.error}}": "从 pidfile 中删除 pid 失败:{{.error}}", + "Failed runtime": "运行时失败", + "Failed to build image": "构建镜像失败", "Failed to cache ISO": "缓存ISO 时失败", "Failed to cache and load images": "缓存以及导入镜像失败", "Failed to cache binaries": "缓存二进制文件失败", "Failed to cache images": "缓存镜像时失败", "Failed to cache images to tar": "缓存镜像到 tar 压缩包时出错", - "Failed to cache kubectl": "", + "Failed to cache kubectl": "缓存 kubectl 失败", "Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "未能更改 {{.minikube_dir_path}} 的权限:{{.error}}", "Failed to check if machine exists": "无法检测机器是否存在", - "Failed to check main repository and mirrors for images": "", + "Failed to check main repository and mirrors for images": "无法检查主仓库和镜像的图像", "Failed to check main repository and mirrors for images for images": "无法检测主仓库和镜像仓库中的镜像", - "Failed to configure metallb IP {{.profile}}": "", - "Failed to create file": "", - "Failed to create runtime": "", - "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "", - "Failed to delete cluster {{.name}}.": "", + "Failed to configure auto-pause {{.profile}}": "配置自动暂停 {{.profile}} 失败", + "Failed to configure metallb IP {{.profile}}": "配置 metallb IP {{.profile}} 失败", + "Failed to configure registry-aliases {{.profile}}": "配置 registry-aliases {{.profile}} 失败", + "Failed to create file": "文件创建失败", + "Failed to create runtime": "运行时创建失败", + "Failed to delete cluster {{.name}}, proceeding with retry anyway.": "删除集群 {{.name}} 失败,仍然进行重试。", + "Failed to delete cluster {{.name}}.": "删除集群 {{.name}} 失败。", "Failed to delete cluster: {{.error}}": "未能删除集群:{{.error}}", "Failed to delete cluster: {{.error}}__1": "未能删除集群:{{.error}}", "Failed to delete images": "删除镜像时失败", "Failed to delete images from config": "无法删除配置的镜像", + "Failed to delete profile(s): {{.error}}": "删除配置文件失败:{{.error}}", "Failed to download kubectl": "下载 kubectl 失败", - "Failed to enable container runtime": "", + "Failed to download licenses": "licenses 下载失败", + "Failed to enable container runtime": "容器运行时启用失败", + "Failed to extract integer in minutes to pause.": "无法提取要用于暂停的分钟数。", "Failed to generate config": "无法生成配置", "Failed to get bootstrapper": "获取 bootstrapper 失败", - "Failed to get command runner": "", + "Failed to get command runner": "获取命令运行程序失败", "Failed to get driver URL": "获取 driver URL 失败", - "Failed to get image map": "", + "Failed to get image map": "获取镜像映射失败", + "Failed to get service URL - check that minikube is running and that you have specified the correct namespace (-n flag) if required: {{.error}}": "获取服务 URL 失败 - 请检查 minikube 是否正在运行,并确保已经指定了正确的命名空间(如果需要,请使用 -n 标志):{{.error}}", "Failed to get service URL: {{.error}}": "获取 service URL 失败:{{.error}}", + "Failed to get temp": "获取临时目录失败", "Failed to kill mount process: {{.error}}": "未能终止装载进程:{{.error}}", "Failed to list cached images": "无法列出缓存镜像", - "Failed to list images": "", - "Failed to load image": "", - "Failed to persist images": "", - "Failed to pull image": "", + "Failed to list images": "列出镜像失败", + "Failed to load image": "加载镜像失败", + "Failed to persist images": "持久化镜像失败", + "Failed to pull image": "拉取镜像失败", + "Failed to pull images": "拉取镜像失败", + "Failed to push images": "推送镜像失败", + "Failed to read temp": "无法读取临时文件", "Failed to reload cached images": "重新加载缓存镜像失败", - "Failed to remove image": "", + "Failed to remove image": "删除镜像失败", + "Failed to remove images for profile {{.pName}} {{.error}}": "删除配置文件镜像失败 {{.pName}} {{.error}}", "Failed to remove profile": "无法删除配置文件", "Failed to save config": "无法保存配置", - "Failed to save config {{.profile}}": "", - "Failed to save dir": "", - "Failed to save stdin": "", + "Failed to save config {{.profile}}": "无法保存配置 {{.profile}}", + "Failed to save dir": "保存目录失败", + "Failed to save image": "无法保存镜像", + "Failed to save stdin": "保存标准输入失败", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}": "未能设置 NO_PROXY 环境变量。请使用“export NO_PROXY=$NO_PROXY,{{.ip}}”", "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,{{.ip}}`.": "未能设置 NO_PROXY 环境变量。请使用“export NO_PROXY=$NO_PROXY,{{.ip}}”。", "Failed to setup certs": "设置 certs 失败", "Failed to setup kubeconfig": "设置 kubeconfig 失败", - "Failed to start container runtime": "", - "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "", - "Failed to stop node {{.name}}": "", + "Failed to start container runtime": "容器运行时启动失败", + "Failed to start {{.driver}} {{.driver_type}}. Running \"{{.cmd}}\" may fix it: {{.error}}": "启动 {{.driver}} {{.driver_type}} 失败。运行 \"{{.cmd}}\" 可能需要修复它: {{.error}} ", + "Failed to stop node {{.name}}": "停止节点 {{.name}} 失败", + "Failed to stop node {{.name}}: {{.error}}": "停止节点 {{.name}} 失败:{{.error}}", + "Failed to stop ssh-agent process: {{.error}}": "停止 ssh-agent 程序失败:{{.error}}", + "Failed to tag images": "无法打标签给镜像", "Failed to update cluster": "更新 cluster 失败", "Failed to update config": "更新 config 失败", "Failed unmount: {{.error}}": "unmount 失败:{{.error}}", + "Failing to connect to {{.curlTarget}} from inside the minikube {{.type}}": "从 Minikube 的 {{.type}} 内部连接到 {{.curlTarget}} 失败", "File permissions used for the mount": "用于 mount 的文件权限", - "Filter to use only VM Drivers": "", + "Filter to use only VM Drivers": "仅用于 VM 驱动程序的筛选器", "Flags": "标志", "Follow": "跟踪", + "For an improved experience it's recommended to use Docker Engine instead of Docker Desktop.\nDocker Engine installation instructions: https://docs.docker.com/engine/install/#server": "为获得更好的体验,建议使用 Docker Engine 替代 Docker Desktop。\nDocker Engine 安装说明:https://docs.docker.com/engine/install/#server", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "为获得最佳结果,请安装 kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl/", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/__1": "为获得最佳结果,请安装 kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl/", - "For improved {{.driver}} performance, {{.fix}}": "", - "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "", - "For more information, see:": "如需了解详情,请参阅:", - "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", - "For more information, see: {{.url}}": "", + "For improved {{.driver}} performance, {{.fix}}": "为了提高 {{.driver}} 驱动的性能,{{.fix}}", + "For more information see: https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}": "更多信息,请参阅 https://minikube.sigs.k8s.io/docs/drivers/{{.driver}}", + "For more information, see:": "更多信息,请参阅:", + "For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "更多信息,请参阅:https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "For more information, see: {{.url}}": "更多信息,请参阅:{{.url}}", "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "强制为指定的 shell 配置环境:[fish, cmd, powershell, tcsh, bash, zsh],默认为 auto-detect", "Force minikube to perform possibly dangerous operations": "强制 minikube 执行可能有风险的操作", - "Format to print stdout in. Options include: [text,json]": "", - "Found docker, but the docker service isn't running. Try restarting the docker service.": "", - "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "", + "Format output. One of: short|table|json|yaml": "格式化输出。可选值为:short、table、json、yaml", + "Format to print stdout in. Options include: [text,json]": "标准输出的格式。可选项包括:[text,json]", + "Forwards all services in a namespace (defaults to \"false\")": "转发命名空间中的所有服务(默认为\"false\")", + "Found docker, but the docker service isn't running. Try restarting the docker service.": "找到 Docker,但 Docker 服务没有运行。尝试重新启动 Docker 服务。", + "Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.": "找到个驱动程序,但没有一个是健康的。有关如何修复已安装的驱动程序的建议,请参阅上文。", "Found network options:": "找到的网络选项:", "Found {{.number}} invalid profile(s) !": "找到 {{.number}} 个无效的配置文件!", - "Found {{.number}} invalid profile(s) ! ": "", - "Generate command completion for a shell": "", - "Generate command completion for bash.": "", - "Generate command completion for fish .": "", - "Generate command completion for zsh.": "", - "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "", - "Generate unable to parse memory '{{.memory}}': {{.error}}": "", - "Generating certificates and keys ...": "", - "Get or list the current profiles (clusters)": "", + "Found {{.number}} invalid profile(s) ! ": "找到 {{.number}} 个无效的配置文件!", + "Generate command completion for PowerShell.": "生成命令补全的 PowerShell 脚本。", + "Generate command completion for a shell": "生成命令补全的 shell 脚本", + "Generate command completion for bash.": "生成命令补全的 bash 脚本。", + "Generate command completion for fish .": "生成命令补全的 fish 脚本。", + "Generate command completion for zsh.": "生成命令补全的 zsh 脚本。", + "Generate unable to parse disk size '{{.diskSize}}': {{.error}}": "无法生成解析磁盘大小 '{{.diskSize}}': {{.error}}", + "Generate unable to parse memory '{{.memory}}': {{.error}}": "无法生成解析内存 '{{.memory}}': {{.error}}", + "Generating certificates and keys ...": "正在生成证书和密钥...", + "Get or list the current profiles (clusters)": "获取或列出当前配置文件(集群)", "Gets the kubernetes URL(s) for the specified service in your local cluster": "获取本地集群中指定服务的 kubernetes URL", "Gets the kubernetes URL(s) for the specified service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "获取本地集群中指定服务的 kubernetes URL。如果有多个 URL,他们将一次打印一个", "Gets the logs of the running instance, used for debugging minikube, not user code.": "获取正在运行的实例日志,用于调试 minikube,不是用户代码", - "Gets the status of a local Kubernetes cluster": "", - "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "", + "Gets the status of a local Kubernetes cluster": "获取本地 Kubernetes 集群状态", + "Gets the status of a local Kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and Kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for Kubernetes NOK)": "获取本地 Kubernetes 集群的状态。\n\t退出状态包含了 minikube 的虚拟机、集群和 Kubernetes 状态的编码,从右到左依次表示。\n\t例如:7 表示:1(表示 minikube 不正常)+ 2(表示集群不正常)+ 4(表示 Kubernetes 不正常)", "Gets the status of a local kubernetes cluster": "获取本地 kubernetes 集群状态", - "Gets the value of PROPERTY_NAME from the minikube config file": "", + "Gets the value of PROPERTY_NAME from the minikube config file": "从 minikube 配置文件中获取 PROPERTY_NAME 的值", "Getting machine config failed": "获取机器配置失败", - "Global Flags": "", - "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", - "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", - "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", - "Group ID: {{.groupID}}": "", + "Global Flags": "全局标识", + "Go template format string for the cache list output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "用于缓存列表输出的 Go 模板格式字符串。Go 模板的格式可以在此处找到:https://pkg.go.dev/text/template\n有关模板中可访问的变量列表,请参见此处的结构值:https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate", + "Go template format string for the config view output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list of accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "Go模板格式字符串,用于配置视图输出。Go模板的格式可以在此链接找到:https://pkg.go.dev/text/template\n要查看模板中可访问的变量列表,请参见此链接中的结构值:https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate", + "Go template format string for the status output. The format for Go templates can be found here: https://pkg.go.dev/text/template\nFor the list accessible variables for the template, see the struct values here: https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status": "状态输出的 Go 模板格式字符串。Go 模板的格式可以在此处找到:https://pkg.go.dev/text/template\n关于模板中可访问的变量列表,请参阅此处的定义:https://pkg.go.dev/k8s.io/minikube/cmd/minikube/cmd#Status", + "Group ID: {{.groupID}}": "组 ID:{{.groupID}}", + "HA (multi-control plane) clusters require 3 or more control-plane nodes": "HA(多控制平面)集群需要 3 个或更多控制平面节点", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "Headlamp 在安装了 metrics-server 后可以显示更详细的信息。要安装它,请运行:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n\n", + "Headlamp can display more detailed information when metrics-server is installed. To install it, run:\n\nminikube{{.profileArg}} addons enable metrics-server\t\n\n": "安装metrics-server后,Headlamp可以显示更详细的信息。 要安装它,请运行:\n\nminikube{{.profileArg}} addons enable metrics-server\t\n\n", "Hide the hypervisor signature from the guest in minikube (kvm2 driver only)": "向 minikube 中的访客隐藏管理程序签名(仅限 kvm2 驱动程序)", - "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", + "Hyper-V requires that memory MB be an even number, {{.memory}}MB was specified, try passing `--memory {{.suggestMemory}}`": "Hyper-V 要求内存的 MB 值是偶数,{{.memory}}MB 被指定,尝试传递 `--memory {{.suggestMemory}}`", + "Hyperkit driver will be removed in the next minikube release, we have other drivers that work on macOS such as docker or qemu, vfkit. Please consider switching to one of them. For more information, please visit: https://minikube.sigs.k8s.io/docs/drivers/hyperkit/": "Hyperkit 驱动将在下一个 minikube 版本中移除,macOS 上还有其他可用的驱动程序,例如 docker、qemu 或 vfkit。请考虑切换到其中之一。如需更多信息,请访问:https://minikube.sigs.k8s.io/docs/drivers/hyperkit/", + "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "Hyperkit 已损坏。升级到最新的 hyperkit 版本以及/或者 Docker 桌面版。或者,你可以通过 --driver 切换其他选项", "Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --vm-driver": "Hyperkit 已损坏。升级到最新的 hyperkit 版本以及/或者 Docker 桌面版。或者,你可以通过 --vm-driver 切换其他选项", - "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver": "", - "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --vm-driver": "Hyperkit 的网络挂了。升级到最新的 hyperkit 版本以及/或者 Docker 桌面版。或者,你可以通过 --vm-driver 切换其他选项", - "IP Address to use to expose ports (docker and podman driver only)": "", - "IP address (ssh driver only)": "", - "If present, writes to the provided file instead of stdout.": "", - "If set, automatically updates drivers to the latest version. Defaults to true.": "如果设置了,将自动更新驱动到最新版本。默认为 true。", - "If set, delete the current cluster if start fails and try again. Defaults to false.": "", - "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "", - "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "", - "If set, install addons. Defaults to true.": "", - "If set, pause all namespaces": "", - "If set, unpause all namespaces": "", - "If the above advice does not help, please let us know:": "", - "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "", + "Hyperkit networking is broken. Try disabling Internet Sharing: System Preference \u003e Sharing \u003e Internet Sharing. \nAlternatively, you can try upgrading to the latest hyperkit version, or using an alternate driver.": "Hyperkit 网络已损坏。 尝试禁用 Internet 共享:系统偏好设置 \u003e 共享 \u003e Internet 共享。\n 或者,您可以尝试升级到最新的 hyperkit 版本,或使用备用驱动程序。", + "Hyperkit networking is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --vm-driver": "Hyperkit 网络已损坏。升级到最新的 hyperkit 版本以及/或者 Docker 桌面版。或者,你可以通过 --vm-driver 切换其他选项", + "IP Address to use to expose ports (docker and podman driver only)": "用于暴露端口的IP地址(仅适用于docker和podman驱动程序)", + "IP address (ssh driver only)": "ssh 主机IP地址(仅适用于SSH驱动程序)", + "If present, writes to the provided file instead of stdout.": "如果存在,则写入所提供的文件,而不是标准输出。", + "If set, added node will be available as worker. Defaults to true.": "如果设置,则添加的节点将作为 worker 可用。默认值为 true。", + "If set, added node will become a control-plane. Defaults to false. Currently only supported for existing HA (multi-control plane) clusters.": "如果设置,则添加的节点将成为控制平面。默认值为 false。目前仅支持现有的 HA(多控制平面)集群。", + "If set, automatically updates drivers to the latest version. Defaults to true.": "如果设置为 true,将自动更新驱动到最新版本。默认为 true。", + "If set, delete the current cluster if start fails and try again. Defaults to false.": "如果设置为 true,则在启动失败时删除当前群集,然后重试。默认为 false。", + "If set, disable CoreDNS verbose logging. Defaults to false.": "", + "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "如果设置为 true,则禁用指标报告(CPU和内存使用率),这可以提高 CPU 利用率。默认为 false。", + "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "如果设置为 true,则禁用为本地 Kubernetes 做设置的优化,包括将 CoreDNS 副本数从2减少到1。默认值为false。", + "If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "如果设置为true,则在可用时下载预加载映像的tarball,以提高启动时间。默认为true。", + "If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "如果设置为 true,则强制容器运行时使用 systemd 作为 cgroup 管理器。默认为false。", + "If set, install addons. Defaults to true.": "如果设置为 true,则安装插件。默认为true。", + "If set, minikube VM/container will start without starting or configuring Kubernetes. (only works on new clusters)": "如果设置为 true,minikube虚拟机/容器将在不启动或配置Kubernetes的情况下启动。(只适用于新集群)", + "If set, pause all namespaces": "如果设置为 true,则暂停所有 namespace", + "If set, unpause all namespaces": "如果设置为 true,取消暂停所有 namespace", + "If the above advice does not help, please let us know:": "如果上述建议无法帮助解决问题,请告知我们:", + "If the host has a firewall:\n\t\t\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "如果主机有防火墙:\n\n1. 允许防火墙通过一个端口\n2. 对于 'minikube mount',指定 '--port=\u003c端口号\u003e'", + "If the host has a firewall:\n\n\t\t1. Allow a port through the firewall\n\t\t2. Specify \"--port=\u003cport_number\u003e\" for \"minikube mount\"": "如果主机有防火墙:\n\n1. 允许防火墙通过一个端口\n2. 对于 'minikube mount',指定 '--port=\u003c端口号\u003e'", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none.": "如果设置为 true,则缓存当前引导程序的 docker 镜像并加载到机器中。当使用--driver=none时,始终为false。", "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "如果为 true,请缓存当前引导程序的 docker 镜像并将其加载到机器中。在 --vm-driver=none 情况下始终为 false。", "If true, only download and cache files for later use - don't install or start anything.": "如果为 true,仅会下载和缓存文件以备后用 - 不会安装或启动任何项。", - "If true, pods might get deleted and restarted on addon enable": "", - "If true, returns list of profiles faster by skipping validating the status of the cluster.": "", - "If true, the added node will be marked for work. Defaults to true.": "", - "If true, the node added will also be a control plane in addition to a worker.": "", - "If true, will perform potentially dangerous operations. Use with discretion.": "", - "If you are running minikube within a VM, consider using --driver=none:": "", - "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "", - "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "", - "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "", - "Ignoring empty custom image {{.name}}": "", - "Ignoring invalid pair entry {{.pair}}": "", - "Ignoring unknown custom image {{.name}}": "", - "Ignoring unknown custom registry {{.name}}": "", - "Images Commands:": "", - "Images used by this addon. Separated by commas.": "", - "In order to use the fall back image, you need to log in to the github packages registry": "", - "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", + "If true, pods might get deleted and restarted on addon enable": "如果为 true,pods可能会被删除并在启用插件时重新启动", + "If true, print web links to addons' documentation if using --output=list (default).": "如果为 true,则使用 --output=list(默认值)输出 web 链接到插件文档。", + "If true, returns a detailed list of profiles.": "如果为 true,则返回详细的配置文件列表。", + "If true, returns list of profiles faster by skipping validating the status of the cluster.": "如果为 true,则通过跳过验证群集的状态从而更快地返回配置文件列表。", + "If true, the added node will be marked for work. Defaults to true.": "如果为true,则添加的节点将标记为 work,默认为 true。", + "If true, will perform potentially dangerous operations. Use with discretion.": "如果为 true,将执行潜在的危险操作。谨慎使用。", + "If you are running minikube within a VM, consider using --driver=none:": "如果您在VM中运行 minikube,请考虑使用 --driver=none:", + "If you are still interested to make {{.driver_name}} driver work. The following suggestions might help you get passed this issue:": "如果您仍然有兴趣使 {{.driver_name}} 驱动工作。以下建议可能会帮助您解决此问题:", + "If you don't want your credentials mounted into a specific pod, add a label with the `gcp-auth-skip-secret` key to your pod configuration.": "如果您不希望将凭据挂载到特定的 Pod 中,请在 Pod 配置中添加带有 `gcp-auth-skip-secret` 键的标签。", + "If you want existing pods to be mounted with credentials, either recreate them or rerun addons enable with --refresh.": "如果您希望现有的 Pod 使用凭据挂载,请重新创建它们或使用 --refresh 重新运行 addons enable。", + "Ignoring empty custom image {{.name}}": "忽略空的自定义镜像 {{.name}}", + "Ignoring invalid pair entry {{.pair}}": "忽略无效的配对条目 {{.pair}}", + "Ignoring unknown custom image {{.name}}": "忽略未知的自定义镜像 {{.name}}", + "Ignoring unknown custom registry {{.name}}": "忽略未知的自定义仓库 {{.name}}", + "Image was not built for the current minikube version. To resolve this you can delete and recreate your minikube cluster using the latest images. Expected minikube version: {{.imageMinikubeVersion}} -\u003e Actual minikube version: {{.minikubeVersion}}": "此镜像不适用于当前的 minikube 版本。要解决此问题,您可以删除并重新创建您的 minikube 集群,使用最新的镜像。预期的 minikube 版本:{{.imageMinikubeVersion}} -\u003e 实际的 minikube 版本:{{.minikubeVersion}}", + "Images Commands:": "镜像命令", + "Images used by this addon. Separated by commas.": "这个插件使用的镜像。以逗号分隔。", + "In order to use the fall back image, you need to log in to the github packages registry": "为使用后备镜像,你需要登录到 github packages registry", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "传递给 Docker 守护进程的不安全 Docker Registry。 系统会自动添加默认 service CIDR 范围。", "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "传递给 Docker 守护进程的不安全 Docker 注册表。系统会自动添加默认服务 CIDR 范围。", - "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "", - "Install the latest hyperkit binary, and run 'minikube delete'": "", - "Invalid Container Runtime: \"{{.runtime}}\". Valid runtimes are: {{.validOptions}}": "", - "Invalid port": "", - "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "", - "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "", - "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "", - "Kill the mount process spawned by minikube start": "", - "Kubelet network plug-in to use (default: auto)": "", - "Kubernetes requires at least 2 CPU's to start": "", + "Install VirtualBox and ensure it is in the path, or select an alternative value for --driver": "安装 VirtualBox 并确保它在路径中,或选择一个替代的值作为 --driver。", + "Install the latest hyperkit binary, and run 'minikube delete'": "安装最新的 hyperkit 二进制文件,然后运行 'minikube delete'", + "Interval is an invalid duration: {{.error}}": "'Interval' 是无效的持续时间:{{.error}}", + "Interval must be greater than 0s": "'Interval' 必须大于0", + "Invalid port": "无效的端口", + "Istio needs {{.minCPUs}} CPUs -- your configuration only allocates {{.cpus}} CPUs": "Istio 需要 {{.minCPUs}} 个CPU核心,但您的配置只分配了 {{.cpus}} 个CPU核心。", + "Istio needs {{.minMem}}MB of memory -- your configuration only allocates {{.memory}}MB": "Istio 需要 {{.minMem}}MB 内存,而你的配置只分配了 {{.memory}}MB", + "It seems that you are running in GCE, which means authentication should work without the GCP Auth addon. If you would still like to authenticate using a credentials file, use the --force flag.": "看起来您正在 GCE 中运行,这意味着身份验证应该可以在没有 GCP Auth 插件的情况下工作。如果您仍然想使用凭据文件进行身份验证,请使用 --force 标志。", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configuration is:": "您很有可能遇到了网络问题。请确保您至少可以通过 HTTP(直连或代理)访问互联网。当前您的代理配置为:", + "It's very likely that you have an internet issue. Please ensure that you can access the internet at least via HTTP, directly or with proxy. Currently your proxy configure is:": "很可能您遇到了网络问题。请确保您可以通过 HTTP 访问互联网,直接连接或使用代理。当前您的代理配置为:", + "Kept for backward compatibility, value is ignored.": "为向后兼容而保留,该值将被忽略。", + "Kicbase images have not been deleted. To delete images run:": "Kicbase 镜像未被删除。要删除镜像,请运行:", + "Kill the mount process spawned by minikube start": "终止由 minikube start 生成的挂载进程", + "Kubernetes requires at least 2 CPU's to start": "Kubernetes至少需要2个CPU才能启动", + "Kubernetes version not found in GitHub version list. You can force a Kubernetes version via the --force flag": "在GitHub版本列表中找不到Kubernetes版本。您可以通过--force标志强制使用Kubernetes版本", + "Kubernetes version {{.specified}} found in GitHub version list": "在 GitHub 版本列表中找到了 Kubernetes 版本 {{.specified}}。", + "Kubernetes version {{.specified}} found in version list": "在版本列表中找到了 Kubernetes 版本 {{.specified}}。", + "Kubernetes version {{.version}} is not supported by this release of minikube": "Kubernetes 版本 {{.version}} 不受此版本的 minikube 支持", "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.new}}": "Kubernetes {{.new}} 现在可用了。如果您想升级,请指定 --kubernetes-version={{.new}}", - "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "", - "Kubernetes {{.version}} is not supported by this release of minikube": "当前版本的 minukube 不支持 Kubernetes {{.version}}", + "Kubernetes {{.new}} is now available. If you would like to upgrade, specify: --kubernetes-version={{.prefix}}{{.new}}": "Kubernetes {{.new}} 现在可用。如果您想要升级,请指定:--kubernetes-version={{.prefix}}{{.new}}", + "Kubernetes {{.version}} is not supported by this release of minikube": "当前版本的 minikube 不支持 Kubernetes {{.version}}", + "Kubernetes: Stopping ...": "Kubernetes:正在停止。。。", + "Kubernetes: {{.status}}": "Kubernetes: {{.status}}", "Launching Kubernetes ... ": "正在启动 Kubernetes ... ", - "Launching proxy ...": "", - "List all available images from the local cache.": "", - "List existing minikube nodes.": "", - "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "", - "List images": "", - "List nodes.": "", + "Launching proxy ...": "正在启动代理...", + "List all available images from the local cache.": "列出本地缓存中所有可用的镜像。", + "List existing minikube nodes.": "列出现有的minikube节点。", + "List image names the addon w/ADDON_NAME used. For a list of available addons use: minikube addons list": "列出使用 w/ADDON_NAME 插件的镜像名称。有关可用插件的列表,请使用: minikube addons list", + "List images": "列出镜像", + "List nodes.": "列出节点。", "List of guest VSock ports that should be exposed as sockets on the host (hyperkit driver only)": "应在主机上公开为套接字的访客 VSock 端口列表(仅限 hyperkit 驱动程序)", - "List of ports that should be exposed (docker and podman driver only)": "", - "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "", - "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "", - "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "", - "Lists all minikube profiles.": "", - "Lists all valid default values for PROPERTY_NAME": "", - "Lists all valid minikube profiles and detects all possible invalid profiles.": "", - "Lists the URLs for the services in your local cluster": "", - "Load a image into minikube": "", + "List of ports that should be exposed (docker and podman driver only)": "应该公开的端口列表(仅适用于 docker 和 podman 驱动)", + "Listening to 0.0.0.0 on external docker host {{.host}}. Please be advised": "在外部docker主机 {{.host}} 上监听0.0.0.0。请注意", + "Listening to {{.listenAddr}}. This is not recommended and can cause a security vulnerability. Use at your own risk": "监听 {{.listenAddr}}。不建议这样做,可能会造成安全漏洞。请自行决定是否使用", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "列出所有可用的minikube插件及其当前状态 (enabled/disabled)", + "Lists all minikube profiles.": "列出所有 minikube 配置文件。", + "Lists all valid default values for PROPERTY_NAME": "列出 PROPERTY_NAME 所有有效的默认值", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "列出所有有效的 minikube 配置文件并检测所有可能的无效配置文件。", + "Lists the URLs for the services in your local cluster": "列出本地集群中服务的 url", + "Load an image into minikube": "将镜像加载到 minikube 中", "Local folders to share with Guest via NFS mounts (hyperkit driver only)": "通过 NFS 装载与访客共享的本地文件夹(仅限 hyperkit 驱动程序)", - "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "", + "Local proxy ignored: not passing {{.name}}={{.value}} to docker env.": "本地代理被忽略:没有传递 {{.name}}={{.value}} 给 docker 环境。", "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock (hyperkit driver only)": "用于网络连接的 VPNKit 套接字的位置。如果为空,则停用 Hyperkit VPNKitSock;如果为“auto”,则将 Docker 用于 Mac VPNKit 连接;否则使用指定的 VSock(仅限 hyperkit 驱动程序)", "Location of the minikube iso": "minikube iso 的位置", - "Locations to fetch the minikube ISO from.": "", - "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", - "Log into the minikube environment (for debugging)": "", - "Manage images": "", - "Message Size: {{.size}}": "", + "Location to fetch kubectl, kubelet, \u0026 kubeadm binaries from.": "kubectl、kubelet、kubeadm 二进制文件源。", + "Locations to fetch the minikube ISO from.": "minikube ISO镜像源。", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "使用SSH登录或在机器上运行命令;类似于 'docker-machine ssh'。", + "Log into the minikube environment (for debugging)": "登录到 minikube 环境(用于调试)", + "Logs file created ({{.logPath}}), remember to include it when reporting issues!": "日志文件已创建({{.logPath}}),在报告问题时请记得将其包含在内!", + "Manage cache for images": "管理 images 缓存", + "Manage images": "管理 images", + "Message Size: {{.size}}": "消息大小:{{.size}}", "Minikube is a CLI tool that provisions and manages single-node Kubernetes clusters optimized for development workflows.": "Minikube 是一个命令行工具,它提供和管理针对开发工作流程优化的单节点 Kubernetes 集群。", + "Minimum VirtualBox Version supported: {{.vers}}, current VirtualBox version: {{.cvers}}": "支持的最低 VirtualBox 版本:{{.vers}},当前的 VirtualBox 版本:{{.cvers}}", "Modify minikube config": "修改 minikube 配置", "Modify minikube's kubernetes addons": "修改 minikube 的 kubernetes 插件", - "Modify persistent configuration values": "", - "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "", - "Most users should use the newer 'docker' driver instead, which does not require root!": "", - "Mount type: {{.name}}": "", - "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", + "Modify persistent configuration values": "修改持久配置值", + "More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities": "更多信息请参阅:https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities", + "Most users should use the newer 'docker' driver instead, which does not require root!": "大多数用户应该使用更新后的“docker”驱动程序,该驱动程序不需要root用户运行!", + "Mount type: {{.name}}": "挂载类型: {{.name}}", + "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "将主机路径 {{.sourcePath}} 挂载到虚拟机中作为 {{.destinationPath}} ...", "Mounts the specified directory into minikube": "将指定的目录挂载到 minikube", "Mounts the specified directory into minikube.": "将指定的目录挂载到 minikube。", "Multiple errors deleting profiles": "删除配置文件时出现多个错误", + "Multiple errors encountered:": "遇到了多个错误:", "Multiple minikube profiles were found -": "发现了多个 minikube 配置文件 -", - "Multiple minikube profiles were found - ": "", + "Multiple minikube profiles were found - ": "找到多个 minikube 配置文件 - ", "NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "网卡类型仅用于主机网络。Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM 之一,或 virtio(仅限 VirtualBox 驱动程序)", - "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "", - "NOTE: This process must stay alive for the mount to be accessible ...": "", + "NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "用于 nat 网络的 NIC 类型。 Am79C970A、Am79C973、82540EM、82543GC、82545EM 或 virtio 之一(仅限 virtualbox 驱动程序)", + "NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "注意:请不要关闭此终端,因为此进程必须保持活动状态才能访问隧道......", + "NOTE: This process must stay alive for the mount to be accessible ...": "注意:此进程必须保持活动状态才能访问安装......", "Networking and Connectivity Commands:": "网络和连接命令:", - "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "", - "No changes required for the \"{{.context}}\" context": "", - "No minikube profile was found. ": "", - "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "", - "No such addon {{.name}}": "", - "Node {{.name}} failed to start, deleting and trying again.": "", - "Node {{.name}} was successfully deleted.": "", - "Node {{.nodeName}} does not exist.": "", - "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "", + "No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "未提供 IP 地址。尝试指定 --ssh-ip-address,或参见 https://minikube.sigs.k8s.io/docs/drivers/ssh/", + "No changes required for the \"{{.context}}\" context": "不需要对“{{.context}}”上下文进行任何更改", + "No control-plane nodes found.": "未找到控制平面节点。", + "No minikube profile was found.": "未找到 minikube 配置文件。", + "No minikube profile was found. ": "未找到 minikube 配置文件。", + "No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "未检测到可用的驱动程序。尝试指定 --driver,或查看 https://minikube.sigs.k8s.io/docs/start/", + "No services were found in the '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service --all -n \u003cnamespace\u003e'": "在 '{{.namespace}}' 命名空间中未找到服务。\n您可以通过使用 'minikube service --all -n \u003cnamespace\u003e' 选择另一个命名空间。", + "No such addon {{.name}}": "没有此类插件 {{.name}}", + "No valid URL found for tunnel.": "未找到有效的隧道URL。", + "No valid port found for tunnel.": "没有找到隧道的有效端口。", + "Node {{.name}} failed to start, deleting and trying again.": "节点 {{.name}} 启动失败,删除后重试。", + "Node {{.name}} was successfully deleted.": "节点 {{.name}} 已成功删除。", + "Node {{.nodeName}} does not exist.": "节点 {{.nodeName}} 不存在。", + "None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "无法访问任何已知的仓库。请考虑使用 --image-repository 标志指定备用的镜像仓库", "None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "您所在位置的已知存储库都无法访问。正在将 {{.image_repository_name}} 用作后备存储库。", "None of the known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "已知存储库都无法访问。请考虑使用 --image-repository 标志指定备选镜像存储库", - "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "", - "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "", + "Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "注意,您在此终端上的 {{.driver_name}} 驱动上已激活 docker-env:", + "Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "注意,您在此终端上的 {{.driver_name}} 驱动上已激活 podman-env:", "Number of CPUs allocated to the minikube VM": "分配给 minikube 虚拟机的 CPU 的数量", - "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit driver)": "", - "Number of lines back to go within the log": "", - "OS release is {{.pretty_name}}": "", - "One of 'yaml' or 'json'.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "", - "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "", - "Open the addons URL with https instead of http": "", - "Open the service URL with https instead of http (defaults to \\\"false\\\")": "", - "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, and qemu2 drivers)": "创建并附加到 minikube VM 的额外磁盘数(当前仅支持 hyperkit、kvm2 和 qemu2 驱动程序)", + "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit, kvm2, qemu2, vfkit, and krunkit drivers)": "创建并附加到 minikube VM 的额外磁盘数(当前仅支持 hyperkit、kvm2、 qemu2、vfkit 和 krunkit 驱动程序)", + "Number of lines back to go within the log": "在日志中回退的行数", + "OS release is {{.pretty_name}}": "操作系统版本是 {{.pretty_name}}", + "One of 'text', 'yaml' or 'json'.": "可选项:'text','yaml' 或 'json'。", + "One of 'yaml' or 'json'.": "'yaml'或'json'中的一个。", + "Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "仅允许字母数字和破折号'-'。最少1个字符,以字母数字开头。", + "Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "仅允许字母数字和破折号'-'。最少2个字符,以字母数字开头。", + "Open the addons URL with https instead of http": "使用 https 替代 http 打开插件的 URL", + "Open the service URL with https instead of http (defaults to \"false\")": "使用 https 替代 http 打开服务的 URL(默认为 \"false\")。", + "Opening Kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "正通过默认浏览器打开 Kubernetes 服务 {{.namespace_name}}/{{.service_name}}...", "Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "正通过默认浏览器打开服务 {{.namespace_name}}/{{.service_name}}...", - "Opening {{.url}} in your default browser...": "", - "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", - "Operations on nodes": "", - "Options: {{.options}}": "", - "Output format. Accepted values: [json]": "", - "Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "", - "Overwrite image even if same image:tag name exists": "", - "Path to the Dockerfile to use (optional)": "", + "Opening {{.url}} in your default browser...": "正在使用默认浏览器打开 {{.url}} ...", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "在 minikube 中打开带有 ADDON_NAME 的插件(例如:minikube addons open dashboard)。要获取可用插件的列表,请使用:minikube addons list", + "Operations on nodes": "节点操作", + "Options: {{.options}}": "选项:{{.options}}", + "Output format. Accepted values: [json, yaml]": "输出格式。可接受的值:[json, yaml]", + "Outputs minikube shell completion for the given shell (bash, zsh, fish or powershell)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tWindows:\n\t\t## Save completion code to a script and execute in the profile\n\t\tPS\u003e minikube completion powershell \u003e $HOME\\.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME\\.minikube-completion.ps1'\n\n\t\t## Execute completion code in the profile\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "为给定的 shell(bash、zsh、fish 或 powershell)输出 minikube 的 shell 自动完成\n\n\t这取决于 bash-completion 二进制文件。以下是示例安装说明:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # 对于 bash 用户\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # 对于 zsh 用户\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # 对于 fish 用户\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # 对于 bash 用户\n\t\t$ source \u003c(minikube completion zsh) # 对于 zsh 用户\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # 对于 fish 用户\n\n\t此外,您可能希望将自动完成输出到一个文件,并在您的 .bashrc 中进行导入\n\n\tWindows:\n\t\t## 将完成代码保存到一个脚本中,并在配置文件中执行\n\t\tPS\u003e minikube completion powershell \u003e $HOME.minikube-completion.ps1\n\t\tPS\u003e Add-Content $PROFILE '. $HOME.minikube-completion.ps1'\n\n\t\t## 在配置文件中执行完成代码\n\t\tPS\u003e Add-Content $PROFILE 'if (Get-Command minikube -ErrorAction SilentlyContinue) {\n\t\t minikube completion powershell | Out-String | Invoke-Expression\n\t\t }'\n\n\tzsh 用户注意:[1] 仅支持 zsh 版本 \u003e= 5.2 的 zsh 自动完成\n\tFish 用户注意:[2] 请参考此文档获取更多详细信息:https://fishshell.com/docs/current/#tab-completion\n", + "Outputs the licenses of dependencies to a directory": "将依赖项的 licenses 输出到一个目录", + "Overwrite image even if same image:tag name exists": "即使存在相同的镜像 image:tag 也要覆盖镜像", + "Path to socket vmnet binary (QEMU driver only)": "vmnet 二进制文件的路径(仅适用于 QEMU 驱动程序)", + "Path to the Dockerfile to use (optional)": "Dockerfile 的路径(可选)", + "Path to the qemu firmware file. Defaults: For Linux, the default firmware location. For macOS, the brew installation location. For Windows, C:\\Program Files\\qemu\\share": "qemu 固件文件的路径。默认值:对于 Linux,使用默认固件位置。对于 macOS,使用 brew 安装位置。对于 Windows,使用 C:\\Program Files\\qemu\\share", + "Path to the socket vmnet client binary (QEMU driver only)": "vmnet 客户端二进制文件的路径(仅适用于 QEMU 驱动程序)", "Pause": "暂停", "Paused kubelet and {{.count}} containers": "已暂停 kubelet 和 {{.count}} 个容器", "Paused kubelet and {{.count}} containers in: {{.namespaces}}": "已暂停 {{.namespaces}} 中的 kubelet 和 {{.count}} 个容器", - "Paused {{.count}} containers": "", - "Paused {{.count}} containers in: {{.namespaces}}": "", - "Pausing node {{.name}} ... ": "", + "Paused {{.count}} containers": "已暂停 {{.count}} 个容器", + "Paused {{.count}} containers in: {{.namespaces}}": "已暂停命名空间:{{.namespaces}} 中 {{.count}} 个容器", + "Pausing node {{.name}} ... ": "正在暂停节点 {{.name}} ...", "Permissions: {{.octalMode}} ({{.writtenMode}})": "权限: {{.octalMode}} ({{.writtenMode}})", - "Please attach the following file to the GitHub issue:": "", - "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "", - "Please either authenticate to the registry or use --base-image flag to use a different registry.": "", + "Please also attach the following file to the GitHub issue:": "请同时将以下文件附加到 GitHub 问题中:", + "Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "请使用以下命令创建一个磁盘更大的集群:minikube start --disk SIZE_MB", + "Please either authenticate to the registry or use --base-image flag to use a different registry.": "请对注册表进行身份验证,或使用 --base-image 标志使用不同的注册表", "Please enter a value:": "请输入一个值:", - "Please free up disk or prune images.": "", - "Please increse Desktop's disk size.": "", - "Please install the minikube hyperkit VM driver, or select an alternative --driver": "", - "Please install the minikube kvm2 VM driver, or select an alternative --driver": "", - "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", - "Please provide a path or url to build": "", - "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "", - "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "", - "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "", - "Please see {{.documentation_url}} for more details": "", - "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", - "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "", - "Please try purging minikube using `minikube delete --all --purge`": "", + "Please free up disk or prune images.": "请释放磁盘空间或者清理镜像。", + "Please increase Desktop's disk size.": "请增加 Desktop 的磁盘大小。", + "Please install the minikube hyperkit VM driver, or select an alternative --driver": "请安装 minikube hyperkit VM 驱动程序,或选择备用驱动程序 --driver", + "Please install the minikube kvm2 VM driver, or select an alternative --driver": "请安装 minikube kvm2 VM 驱动程序,或选择备用驱动程序 --driver", + "Please make sure the service you are looking for is deployed or is in the correct namespace.": "请确保您要查找的服务已部署或位于正确的命名空间中。", + "Please provide a path or url to build": "请提供一个构建的路径或URL", + "Please provide an image in the container runtime to save from minikube via \u003cminikube image save IMAGE_NAME\u003e": "请在容器运行时中提供一个镜像,以通过\u003cminikube image save IMAGE_NAME\u003e从 minikube 保存", + "Please provide an image in your local daemon to load into minikube via \u003cminikube image load IMAGE_NAME\u003e": "请在本地 Docker 守护程序中提供一个镜像,以通过 \u003cminikube image load IMAGE_NAME\u003e 加载到 minikube 中", + "Please provide source and target image": "请提供源镜像和目标镜像。", + "Please re-eval your docker-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t": "请重新评估您的 docker-env,以确保您的环境变量已更新端口:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t", + "Please re-eval your podman-env, To ensure your environment variables have updated ports:\n\n\t'minikube -p {{.profile_name}} podman-env'\n\n\t": "请重新评估您的 podman-env,以确保您的环境变量已更新端口:\n\n\t'minikube -p {{.profile_name}} docker-env'\n\n\t", + "Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.": "请运行 minikube logs --file=logs.txt 命令,并将生成的 logs.txt 文件附加到 GitHub 问题中。", + "Please see {{.documentation_url}} for more details": "请参阅 {{.documentation_url}} 了解更多详情", + "Please specify the directory to be mounted:\n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "请指定要挂载的目录:\n\tminikube mount \u003c源文件路径\u003e:\u003c目标文件绝对路径\u003e (示例:\"/host-home:/vm-home\")", + "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "请指定要挂载的目录:\n\tminikube mount \u003c源文件路径\u003e:\u003c目标文件绝对路径\u003e (示例:\"/host-home:/vm-home\")", + "Please specify the path to copy:\n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "请指定要复制的路径:\n\tminikube cp \u003c源文件路径\u003e \u003c目标文件绝对路径\u003e (示例:\"minikube cp a/b.txt /copied.txt\")", + "Please specify the path to copy: \n\tminikube cp \u003csource file path\u003e \u003ctarget file absolute path\u003e (example: \"minikube cp a/b.txt /copied.txt\")": "请指定要复制的路径:\n\tminikube cp \u003c源文件路径\u003e \u003c目标文件绝对路径\u003e (示例:\"minikube cp a/b.txt /copied.txt\")", + "Please try purging minikube using `minikube delete --all --purge`": "请尝试使用 `minikube delete --all --purge` 清除 minikube", "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "请升级“{{.driver_executable}}”。{{.documentation_url}}", - "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "", - "Populates the specified folder with documentation in markdown about minikube": "", - "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "", + "Please visit the following link for documentation around this:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "请查看以下链接以获取相关文档:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n", + "Please visit the following link for documentation around this: \n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n": "请查看以下链接以获取相关文档:\n\thttps://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages\n", + "Populates the specified folder with documentation in markdown about minikube": "用关于 minikube 的 markdown 文档填充指定文件夹", + "PowerShell is running in constrained mode, which is incompatible with Hyper-V scripting.": "PowerShell 正在受限模式下运行,这与 Hyper-V 脚本不兼容。", "Powering off \"{{.profile_name}}\" via SSH ...": "正在通过 SSH 关闭“{{.profile_name}}”…", "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "正在 {{.runtime}} {{.runtimeVersion}} 中准备 Kubernetes {{.k8sVersion}}…", - "Print current and latest version number": "打印当前和最新版本版本", - "Print just the version number.": "", + "Preparing {{.runtime}} {{.runtimeVersion}} ...": "正在准备 {{.runtime}} {{.runtimeVersion}} ...", + "Print current and latest version number": "打印当前版本和最新版本", + "Print just the version number.": "仅打印版本号。", "Print the version of minikube": "打印 minikube 版本", "Print the version of minikube.": "打印 minikube 版本。", "Problems detected in {{.entry}}:": "在 {{.entry}} 中 检测到问题:", "Problems detected in {{.name}}:": "在 {{.name}} 中 检测到问题:", - "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "", + "Profile \"{{.cluster}}\" not found. Run \"minikube profile list\" to view all profiles.": "未找到配置文件 \"{{.cluster}}\"。运行 \"minikube profile list\" 命令查看所有配置文件。", "Profile gets or sets the current minikube profile": "获取或设置当前的 minikube 配置文件", "Profile name \"{{.profilename}}\" is minikube keyword. To delete profile use command minikube delete -p \u003cprofile name\u003e": "配置文件名称 \"{{.profilename}}\" 是 minikube 的一个关键字。使用 minikube delete -p \u003cprofile name\u003e 命令 删除配置文件", - "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "", - "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "", - "Profile name '{{.name}}' is not valid": "", - "Profile name '{{.profilename}}' is not valid": "", - "Profile name should be unique": "", + "Profile name \"{{.profilename}}\" is reserved keyword. To delete this profile, run: \"{{.cmd}}\"": "配置文件名称 \"{{.profilename}}\" 是保留关键字。要删除该配置文件,请执行命令:\"{{.cmd}}\"", + "Profile name '{{.name}}' is duplicated with machine name '{{.machine}}' in profile '{{.profile}}'": "配置文件名称 '{{.name}}' 与机器名称 '{{.machine}}' 在 '{{.profile}}' 配置文件中重复", + "Profile name '{{.name}}' is not valid": "配置文件名称 '{{.name}}' 无效", + "Profile name '{{.profilename}}' is not valid": "配置文件名称 '{{.profilename}}' 无效", + "Profile name should be unique": "配置文件名称应该是唯一的", "Provide VM UUID to restore MAC address (hyperkit driver only)": "提供虚拟机 UUID 以恢复 MAC 地址(仅限 hyperkit 驱动程序)", - "Pull the remote image (no caching)": "", - "Pulling base image ...": "", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)": "提供将终端的 docker-cli 指向 minikube 内部 Docker Engine 的说明。(用于直接在 minikube 内构建 docker 镜像)", + "Provides instructions to point your terminal's docker-cli to the Docker Engine inside minikube. (Useful for building docker images directly inside minikube)\n\nFor example, you can do all docker operations such as docker build, docker run, and docker ps directly on the docker inside minikube.\n\nNote: You need the docker-cli to be installed on your machine.\ndocker-cli install instructions: https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps": "提供将终端的 docker-cli 指向 minikube 内部 Docker Engine 的说明。(用于直接在 minikube 内构建 docker 镜像)\n\n例如,您可以在 minikube 内的 docker 上执行所有 docker 操作,如 docker build、docker run 和 docker ps。\n\n注意:您需要在计算机上安装 docker-cli。\n\ndocker-cli 安装指南:https://minikube.sigs.k8s.io/docs/tutorials/docker_desktop_replacement/#steps", + "Pull images": "拉取镜像", + "Pull the remote image (no caching)": "拉取远程镜像(禁用缓存)", + "Pulling base image ...": "正在拉取基础镜像 ...", + "Pulling base image {{.kicVersion}} ...": "正在拉取基础镜像 {{.kicVersion}} ...", "Pulling images ...": "拉取镜像 ...", - "Push the new image (requires tag)": "", + "Push images": "推送镜像", + "Push the new image (requires tag)": "推送新的镜像(需要标签)", "Reboot to complete VirtualBox installation, verify that VirtualBox is not blocked by your system, and/or use another hypervisor": "重启以完成 VirtualBox 安装,检查 VirtualBox 未被您的操作系统禁用,或者使用其他的管理程序。", - "Rebuild libvirt with virt-network support": "", + "Rebuild libvirt with virt-network support": "重新构建带有 virt-network 支持的 libvirt", "Received {{.name}} signal": "收到 {{.name}} 信号", "Reconfiguring existing host ...": "重新配置现有主机", - "Registries used by this addon. Separated by commas.": "", - "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "", + "Recreate the cluster by running:\n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}": "运行以下命令重新创建集群:n\t\tminikube delete {{.profileArg}}\n\t\tminikube start {{.profileArg}}", + "Registries used by this addon. Separated by commas.": "此插件使用的注册表。以逗号分隔。", + "Registry addon with {{.driver}} driver uses port {{.port}} please use that instead of default port 5000": "注册表插件 {{.driver}} Driver 使用端口 {{.port}} 代替默认端口 5000", "Registry mirrors to pass to the Docker daemon": "传递给 Docker 守护进程的注册表镜像", - "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "", - "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", - "Related issue: {{.url}}": "", + "Reinstall VirtualBox and reboot. Alternatively, try the kvm2 driver: https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/": "重新安装 VirtualBox 并重新启动。或者,尝试 kvm2 驱动程序:https://minikube.sigs.k8s.io/docs/reference/drivers/kvm2/", + "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "重新安装 VirtualBox 并验证未被阻止:系统偏好设置 -\u003e 安全与隐私 -\u003e 常规 -\u003e 某些系统软件被阻止加载", + "Related issue: {{.url}}": "相关问题:{{.url}}", "Related issues:": "相关问题:", "Relaunching Kubernetes using {{.bootstrapper}} ...": "正在使用 {{.bootstrapper}} 重新启动 Kubernetes…", - "Remove one or more images": "", - "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "", - "Removed all traces of the \"{{.name}}\" cluster.": "", + "Remove one or more images": "移除一个或多个镜像", + "Remove the invalid --docker-opt or --insecure-registry flag if one was provided": "如果提供了无效的 --docker-opt 或 --insecure-registry 标志,请将其移除", + "Removed all traces of the \"{{.name}}\" cluster.": "已删除所有关于 \"{{.name}}\" 集群的痕迹。", "Removing {{.directory}} ...": "正在移除 {{.directory}}…", - "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "", + "Requested cpu count {{.requested_cpus}} is greater than the available cpus of {{.avail_cpus}}": "请求的 CPU 数量 {{.requested_cpus}} 大于可用的 CPU 值 {{.avail_cpus}}", "Requested cpu count {{.requested_cpus}} is less than the minimum allowed of {{.minimum_cpus}}": "请求的 CPU 数量 {{.requested_cpus}} 小于允许的最小值 {{.minimum_cpus}}", "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "请求的磁盘大小 {{.requested_size}} 小于最小值 {{.minimum_size}}", "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "请求的内存分配 ({{.memory}}MB) 小于默认内存分配 {{.default_memorysize}}MB。请注意 minikube 可能无法正常运行或可能会意外崩溃。", - "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "", + "Requested memory allocation ({{.requested}}MB) is less than the recommended minimum {{.recommend}}MB. Deployments may fail.": "请求的内存分配({{.requested}}MB)小于推荐的最小值 {{.recommend}}MB。部署可能失败。", "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "请求的内存分配 {{.requested_size}} 小于允许的 {{.minimum_size}} 最小值", - "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "", - "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "", - "Reset Docker to factory defaults": "", - "Restart Docker": "", - "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "", - "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "", - "Restarting the {{.name}} service may improve performance.": "", - "Retrieve the ssh host key of the specified node": "", - "Retrieve the ssh host key of the specified node.": "", + "Requested memory allocation {{.requested}}MB is more than your system limit {{.system_limit}}MB.": "请求的内存分配 {{.requested}}MB 超过了系统限制 {{.system_limit}}MB。", + "Requested memory allocation {{.requested}}MiB is less than the usable minimum of {{.minimum_memory}}MB": "请求的内存分配 {{.requested}}MiB 小于可用的最低 {{.minimum_memory}}MB", + "Reset Docker to factory defaults": "将 Docker 重置为出厂默认设置。", + "Restart Docker": "重启 Docker", + "Restart Docker, Ensure docker is running and then run: 'minikube delete' and then 'minikube start' again": "重启 Docker,确保 Docker 正在运行,然后运行:'minikube delete',然后再次运行:'minikube start'", + "Restarting existing {{.driver_name}} {{.machine_type}} for \"{{.cluster}}\" ...": "正在为\"{{.cluster}}\"重启现有的 {{.driver_name}} {{.machine_type}} ...", + "Restarting the {{.name}} service may improve performance.": "重新启动 {{.name}} 服务可能会改善性能。", + "Retrieve the ssh host key of the specified node": "检索指定节点的 ssh 主机密钥", + "Retrieve the ssh host key of the specified node.": "检索指定节点的 ssh 主机密钥。", "Retrieve the ssh identity key path of the specified cluster": "检索指定集群的 ssh 密钥路径", "Retrieve the ssh identity key path of the specified cluster.": "检索指定集群的 ssh 密钥路径。", - "Retrieve the ssh identity key path of the specified node": "", - "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "", + "Retrieve the ssh identity key path of the specified node": "检索指定节点的 ssh 密钥路径", + "Retrieve the ssh identity key path of the specified node, and writes it to STDOUT.": "检索指定节点的 ssh 密钥路径,并将其写到 STDOUT 。", "Retrieves the IP address of the running cluster": "检索正在运行的群集的 IP 地址", - "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "", - "Retrieves the IP address of the specified node": "", - "Retrieves the IP address of the specified node, and writes it to STDOUT.": "", - "Returns a URL to connect to a service": "", - "Returns logs to debug a local Kubernetes cluster": "", - "Returns the Kubernetes URL for a service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", - "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", - "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "", - "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "检索运行集群的 IP 地址,将其与 kubeconfig 中的 IP 进行比较,并在有误时纠正 kubeconfig。", + "Retrieves the IP address of the specified node": "检索指定节点的IP地址", + "Retrieves the IP address of the specified node, and writes it to STDOUT.": "检索指定节点的IP地址,并将其写到 STDOUT 。", + "Returns a URL to connect to a service": "返回用于连接到 service 的 URL", + "Returns logs to debug a local Kubernetes cluster": "返回用于调试本地 Kubernetes 集群的日志", + "Returns the Kubernetes URL(s) for service(s) in your local cluster. In the case of multiple URLs they will be printed one at a time.": "返回本地集群中服务的 Kubernetes URL。如果存在多个 URL,则每次将打印一个 URL。", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "从 minikube 配置文件返回 PROPERTY_NAME 的值。可以在运行时通过标志或环境变量进行覆盖。", + "Right-click the PowerShell icon and select Run as Administrator to open PowerShell in elevated mode.": "右键单击 PowerShell 图标, 然后选择以管理员身份运行以在 elevated 模式下打开 PowerShell。", + "Run 'kubectl describe pod coredns -n kube-system' and check for a firewall or DNS conflict": "运行 'kubectl describe pod coredns -n kube-system' 并检查防火墙或 DNS 冲突", "Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with": "执行 'minikube delete' 以删除过时的虚拟机,或者确保 minikube 以与您发出此命令的用户相同的用户身份运行", - "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "", - "Run a kubectl binary matching the cluster version": "", + "Run 'sudo sysctl fs.protected_regular=0', or try a driver which does not require root, such as '--driver=docker'": "运行 'sudo sysctl fs.protected_regular=0',或尝试不需要 root 的驱动程序,例如 '--driver=docker'", + "Run a kubectl binary matching the cluster version": "运行与集群版本匹配的 kubectl 二进制文件", "Run kubectl": "运行 kubectl", - "Run minikube from the C: drive.": "", - "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "", - "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All'": "", + "Run minikube from the C: drive.": "从 C: 盘运行 minikube。", + "Run the Kubernetes client, download it if necessary. Remember -- after kubectl!\n\nThis will run the Kubernetes client (kubectl) with the same version as the cluster\n\nNormally it will download a binary matching the host operating system and architecture,\nbut optionally you can also run it directly on the control plane over the ssh connection.\nThis can be useful if you cannot run kubectl locally for some reason, like unsupported\nhost. Please be aware that when using --ssh all paths will apply to the remote machine.": "运行 Kubernetes 客户端,如有必要,请下载。记住 -- 在 kubectl 之后!\n\n这将以与集群相同的版本运行 Kubernetes 客户端 (kubectl)\n\n通常它会下载与主机操作系统和架构匹配的二进制文件,但也可以选择通过 ssh 连接直接在控制平面上运行它。\n如果您由于某些原因无法在本地运行 kubectl(例如不支持的主机),这可能会很有用。请注意,使用 --ssh 时,所有路径都将应用于远程机器。", + "Run the following:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload": "运行以下命令:\n$ sudo mkdir -p /etc/systemd/system/user@.service.d\n$ cat \u003c\u003cEOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\n$ sudo systemctl daemon-reload", + "Run: 'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'": "运行:'Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All'", "Run: 'chmod 600 $HOME/.kube/config'": "执行 'chmod 600 $HOME/.kube/config'", - "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "", - "Run: 'minikube delete --all' to clean up all the abandoned networks.": "", - "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "", - "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "", - "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", - "SSH key (ssh driver only)": "", - "SSH port (ssh driver only)": "", - "SSH user (ssh driver only)": "", - "Select a valid value for --dnsdomain": "", + "Run: 'kubectl delete clusterrolebinding kubernetes-dashboard'": "运行:'kubectl delete clusterrolebinding kubernetes-dashboard'", + "Run: 'minikube delete --all' to clean up all the abandoned networks.": "运行:'minikube delete --all' 来清理所有被弃用的网络。", + "Run: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'": "运行: 'sudo chown $USER $HOME/.kube/config \u0026\u0026 chmod 600 $HOME/.kube/config'", + "Run: 'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'": "运行:'sudo mkdir /sys/fs/cgroup/systemd \u0026\u0026 sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd'", + "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "正在本地主机上运行(CPU={{.number_of_cpus}},内存={{.memory_size}}MB,磁盘={{.disk_size}}MB)...", + "Running remotely (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "正在远程运行中(CPU={{.number_of_cpus}},内存={{.memory_size}}MB,磁盘={{.disk_size}}MB)...", + "SSH key (ssh driver only)": "SSH 密钥(仅适用于SSH驱动程序)", + "SSH port (ssh driver only)": "SSH 端口(仅适用于SSH驱动程序)", + "SSH user (ssh driver only)": "SSH 用户名(仅适用于SSH驱动程序)", + "Save a image from minikube": "从 minikube 中保存一个镜像", + "Searching the internet for Kubernetes version...": "在互联网上搜索 Kubernetes 版本...", + "Select a valid value for --dnsdomain": "为 --dnsdomain 选择一个有效值", "Selecting '{{.driver}}' driver from existing profile (alternates: {{.alternates}})": "从现有配置文件中选择 '{{.driver}}' 驱动程序 (可选:{{.alternates}})", "Selecting '{{.driver}}' driver from user configuration (alternates: {{.alternates}})": "从用户配置中选择 {{.driver}}' 驱动程序(可选:{{.alternates}})", - "Send trace events. Options include: [gcp]": "", - "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "", - "Set failed": "", + "Send trace events. Options include: [gcp]": "发送跟踪事件。包含的选项:[gcp]", + "Service '{{.service}}' was not found in '{{.namespace}}' namespace.\nYou may select another namespace by using 'minikube service {{.service}} -n \u003cnamespace\u003e'. Or list out all the services using 'minikube service list'": "在 '{{.namespace}}' 命名空间中未找到服务 '{{.service}}'。\n您可以通过使用 'minikube service {{.service}} -n \u003cnamespace\u003e' 选择另一个命名空间。或使用 'minikube service list' 列出所有服务", + "Services {{.svc_names}} have type \"ClusterIP\" . Minikube allows you to access them only for testing": "{{.svc_names}} 均为 \"ClusterIP\" 类型,正常情况仅供集群内访问。Minikube提供的外部访问手段仅可供测试使用", + "Services {{.svc_names}} have type \"ClusterIP\" not meant to be exposed, however for local development minikube allows you to access this !": "服务 {{.svc_names}} 的类型为 \"ClusterIP\",不适合暴露。不过,为了本地开发,Minikube 允许您访问这些服务!", + "Set a static IP for the minikube cluster, the IP must be: private, IPv4, and the last octet must be between 2 and 254, for example 192.168.200.200 (Docker and Podman drivers only)": "为 minikube 集群设置静态IP,该IP必须是私有IPv4地址,最后一位必须介于2和254之间,例如:192.168.200.200(仅适用于 Docker 和 Podman 驱动程序)", + "Set failed": "设置失败", "Set flag to delete all profiles": "设置标志以删除所有配置文件", - "Set flag to stop all profiles (clusters)": "", - "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "", + "Set flag to stop all profiles (clusters)": "设置标志以停止所有配置文件(集群)", + "Set flag to stop cluster after a set amount of time (e.g. --schedule=5m)": "设置标志以在一定时间后停止集群(例如:--schedule=5m)", "Set this flag to delete the '.minikube' folder from your user directory.": "设置这个标志来删除您用户目录下的 '.minikube' 文件夹。", - "Sets an individual value in a minikube config file": "", - "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", + "Sets an individual value in a minikube config file": "在 minikube 配置文件中设置单个值", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "设置 PROPERTY_NAME 配置值为 PROPERTY_VALUE。这些值可以在运行时被标志或环境变量覆盖。", "Sets up docker env variables; similar to '$(docker-machine env)'": "设置 docker env 变量;类似于 '$(docker-machine env)'", "Sets up docker env variables; similar to '$(docker-machine env)'.": "设置 docker env 变量;类似于 '$(docker-machine env)'。", "Sets up podman env variables; similar to '$(podman-machine env)'": "设置 podman env 变量;类似于 '$(podman-machine env)'", "Sets up podman env variables; similar to '$(podman-machine env)'.": "设置 podman env 变量;类似于 '$(podman-machine env)'。", "Setting profile failed": "设置配置文件失败", "Show a list of global command-line options (applies to all commands).": "显示全局命令行选项列表 (应用于所有命令)。", - "Show only log entries which point to known problems": "", - "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", - "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "", - "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "", - "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "", - "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "", - "Sorry, completion support is not yet implemented for {{.name}}": "", - "Sorry, please set the --output flag to one of the following valid options: [text,json]": "", - "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "", - "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "", + "Show only log entries which point to known problems": "仅显示指向已知问题的日志条目", + "Show only the audit logs": "仅显示审计日志", + "Show only the last start logs.": "仅显示最近的启动日志。", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "仅显示最近的日志条目,并持续打印新添加到日志中的条目。", + "Simulate numa node count in minikube, supported numa node count range is 1-8 (kvm2 driver only)": "在 minikube 中模拟 numa 节点数量,支持的 numa 节点数量范围为 1-8 (仅支持 kvm2 驱动程序)", + "Skipped switching kubectl context for {{.profile_name}} because --keep-context was set.": "跳过切换 {{.profile_name}} 的kubectl 上下文,因为 --keep-context 已设置。", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n": "某些 dashboard 功能需要启用 metrics-server 插件。为了启用所有功能,请运行以下命令:\n\n\tminikube{{.profileArg}} addons enable metrics-server\t\n\n", + "Some dashboard features require the metrics-server addon. To enable all features please run:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n": "某些仪表板功能需要 metrics-server 插件。要启用所有功能,请运行:\n\n\tminikube{{.profileArg}} addons enable metrics-server\n", + "Sorry, Kubernetes {{.k8sVersion}} requires conntrack to be installed in root's path": "抱歉, Kubernetes {{.k8sVersion}} 要求在 root 路径安装 conntrack", + "Sorry, Kubernetes {{.k8sVersion}} requires crictl to be installed in root's path": "抱歉, Kubernetes {{.k8sVersion}} 要求在 root 路径安装 crictl", + "Sorry, completion support is not yet implemented for {{.name}}": "抱歉, 尚未完成实现对 {{.name}} 的支持", + "Sorry, please set the --output flag to one of the following valid options: [text,json]": "抱歉, 请将 --output 标志设置为以下有效选项之一: [text,json]", + "Sorry, the IP provided with the --listen-address flag is invalid: {{.listenAddr}}.": "抱歉,使用 --listen-address 标志提供的 IP 无效:{{.listenAddr}}。", + "Sorry, the address provided with the --insecure-registry flag is invalid: {{.addr}}. Expected formats are: \u003cip\u003e[:\u003cport\u003e], \u003chostname\u003e[:\u003cport\u003e] or \u003cnetwork\u003e/\u003cnetmask\u003e": "抱歉,使用 --insecure-registry 标志提供的地址无效:{{.addr}}。预期格式为:\u003cip\u003e[:\u003cport\u003e]、\u003chostname\u003e[:\u003cport\u003e] 或 \u003cnetwork\u003e/\u003cnetmask\u003e", "Sorry, the kubeadm.{{.parameter_name}} parameter is currently not supported by --extra-config": "抱歉,--extra-config 目前不支持 kubeadm.{{.parameter_name}} 参数", "Sorry, the url provided with the --registry-mirror flag is invalid: {{.url}}": "抱歉,通过 --registry-mirror 标志提供的网址无效:{{.url}}", - "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "", - "Source {{.path}} can not be empty": "", - "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}": "", - "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", - "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", + "Sorry, {{.driver}} does not allow mounts to be changed after container creation (previous mount: '{{.old}}', new mount: '{{.new}})'": "抱歉,{{.driver}} 不允许在容器创建后更改挂载(之前的挂载:'{{.old}}',新挂载:'{{.new}}')", + "Source {{.path}} can not be empty": "源路径 {{.path}} 不能为空", + "Specified Kubernetes version {{.specified}} is less than the oldest supported version: {{.oldest}}. Use `minikube config defaults kubernetes-version` for details.": "指定的 Kubernetes 版本 {{.specified}} 小于支持的最低版本 {{.oldest}}。有关详细信息,请使用 `minikube config defaults kubernetes-version`", + "Specified Kubernetes version {{.specified}} is newer than the newest supported version: {{.newest}}. Use `minikube config defaults kubernetes-version` for details.": "指定的 Kubernetes 版本 {{.specified}} 较新,比支持的最新版本 {{.newest}} 还要新。请使用 `minikube config defaults kubernetes-version` 查看详情。", + "Specified Kubernetes version {{.specified}} not found in Kubernetes version list": "在 Kubernetes 版本列表中找不到指定的 Kubernetes 版本 {{.specified}}", + "Specified Major version of Kubernetes {{.specifiedMajor}} is newer than the newest supported Major version: {{.newestMajor}}": "指定的 Kubernetes 主版本 {{.specifiedMajor}} 新于支持的最新主版本 {{.newestMajor}}", + "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "请以 v\u003cmajor\u003e.\u003cminor\u003e.\u003cbuild\u003e 的格式指定 --kubernetes-version。例如:'v1.1.14'", + "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "指定备用的 --host-only-cidr 值,例如 172.16.0.1/24", "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "指定要传递给 Docker 守护进程的任意标志。(格式:key=value)", - "Specify arbitrary flags to pass to the build. (format: key=value)": "", - "Specify the 9p version that the mount should use": "", - "Specify the ip that the mount should be setup on": "", - "Specify the mount filesystem type (supported types: 9p)": "", - "Specify the port that the mount should be setup on, where 0 means any free port.": "", - "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "", - "StartHost failed, but will try again: {{.error}}": "", - "Starting control plane node {{.name}} in cluster {{.cluster}}": "", - "Starting node {{.name}} in cluster {{.cluster}}": "", - "Starting tunnel for service {{.service}}.": "", - "Starts a local Kubernetes cluster": "", + "Specify arbitrary flags to pass to the build. (format: key=value)": "指定传递给构建过程的任意标志。(format: key=value)", + "Specifying extra disks is currently only supported for the following drivers: {{.supported_drivers}}. If you can contribute to add this feature, please create a PR.": "当前仅支持以下驱动程序指定额外磁盘:{{.supported_drivers}}。如果您能够贡献以添加此功能,请创建一个 PR。", + "StartHost failed, but will try again: {{.error}}": "StartHost 失败,将要重试: {{.error}}", + "Starting \"{{.node}}\" {{.role}} node in \"{{.cluster}}\" cluster": "在集群中 \"{{.cluster}}\" 启动节点 \"{{.node}}\" {{.role}}", + "Starting control plane node {{.name}} in cluster {{.cluster}}": "正在集群 {{.cluster}} 中启动控制平面节点 {{.name}}", + "Starting minikube without Kubernetes in cluster {{.cluster}}": "在集群 {{.cluster}} 中启动 minikube 但不使用 Kubernetes", + "Starting tunnel for service {{.service}}.": "为服务 {{.service}} 启动隧道。", + "Starts a local Kubernetes cluster": "启动本地 Kubernetes 集群", "Starts a local kubernetes cluster": "启动本地 kubernetes 集群", - "Starts a node.": "", - "Starts an existing stopped node in a cluster.": "", - "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "", - "Stopping node \"{{.name}}\" ...": "", - "Stopping tunnel for service {{.service}}.": "", - "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "", - "Stops a node in a cluster.": "", - "Stops a running local Kubernetes cluster": "", + "Starts a node.": "启动一个节点。", + "Starts an existing stopped node in a cluster.": "在集群中启动一个已停止的现有节点。", + "Startup with {{.old_driver}} driver failed, trying with alternate driver {{.new_driver}}: {{.error}}": "使用 {{.old_driver}} 驱动程序启动失败,尝试使用备用驱动程序 {{.new_driver}}:{{.error}}", + "Stopped tunnel for service {{.service}}.": "停止了服务 {{.service}} 的隧道。", + "Stopping node \"{{.name}}\" ...": "正在停止节点 \"{{.name}}\" ...", + "Stopping tunnel for service {{.service}}.": "停止服务 {{.service}} 的隧道。", + "Stops a local Kubernetes cluster. This command stops the underlying VM or container, but keeps user data intact. The cluster can be started again with the \"start\" command.": "停止本地 Kubernetes 集群。此命令会停止底层的虚拟机或容器,但会保留用户数据。可以使用 \"start\" 命令重新启动集群。", + "Stops a node in a cluster.": "停止集群中的一个节点。", + "Stops a running local Kubernetes cluster": "停止正在运行的本地 Kubernetes 集群", "Stops a running local kubernetes cluster": "停止正在运行的本地 kubernetes 集群", - "Successfully added {{.name}} to {{.cluster}}!": "", + "Subnet to be used on kic cluster. If left empty, minikube will choose subnet address, beginning from 192.168.49.0. (docker and podman driver only)": "在 kic 集群上使用的子网。如果留空,minikube 将从 192.168.49.0 开始选择子网地址。(仅适用于 docker 和 podman 驱动程序)", + "Successfully added {{.name}} to {{.cluster}}!": "已成功将 {{.name}} 添加到 {{.cluster}}!", "Successfully deleted all profiles": "成功删除所有配置文件", "Successfully deleted profile \\\"{{.name}}\\\"": "成功删除配置文件 \\\"{{.name}}\\\"", - "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", + "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "成功将 {{.sourcePath}} 挂载到 {{.destinationPath}}", "Successfully powered off Hyper-V. minikube driver -- {{.driver}}": "成功关闭 Hyper-V。minikube 驱动 -- {{.driver}}", - "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "成功清理 [{{.minikubeDirectory}}] 下的 minukube 目录", - "Successfully started node {{.name}}!": "", - "Successfully stopped node {{.name}}": "", + "Successfully purged minikube directory located at - [{{.minikubeDirectory}}]": "成功清理 [{{.minikubeDirectory}}] 下的 minikube 目录", + "Successfully started node {{.name}}!": "成功启动节点 {{.name}}!", + "Successfully stopped node {{.name}}": "成功停止节点 {{.name}}", + "Successfully unblocked bootpd process from firewall, retrying": "成功解除对 bootpd 进程的防火墙阻止,正在重试...", "Suggestion: {{.advice}}": "建议:{{.advice}}", "Suggestion: {{.fix}}": "建议:{{.fix}}", - "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "Tag to apply to the new image (optional)": "", - "Target directory {{.path}} must be an absolute path": "", - "Target {{.path}} can not be empty": "", - "Test docs have been saved at - {{.path}}": "", + "System only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "系统仅有 {{.size}}MiB 可用,低于 Kubernetes 所需的 {{.req}}MiB。", + "Tag images": "为镜像打标签", + "Tag to apply to the new image (optional)": "要应用于新镜像的标签(可选)", + "Target \u003cremote file path\u003e must be an absolute Path. Relative Path is not allowed (example: \"minikube:/home/docker/copied.txt\")": "目标 \u003c远程文件路径\u003e 必须是绝对路径。不允许使用相对路径(例如:\"minikube:/home/docker/copied.txt\")", + "Target directory {{.path}} must be an absolute path": "目标目录 {{.path}} 必须是绝对路径", + "Target {{.path}} can not be empty": "目标 {{.path}} 不能为空", + "Test docs have been saved at - {{.path}}": "测试文档已保存在 - {{.path}}", "The \"{{.driver_name}}\" driver requires root privileges. Please run minikube using 'sudo minikube --vm-driver={{.driver_name}}": "“{{.driver_name}}”驱动程序需要根权限。请使用“sudo minikube --vm-driver={{.driver_name}}”运行 minikube", - "The \"{{.driver_name}}\" driver should not be used with root privileges.": "", + "The \"{{.driver_name}}\" driver should not be used with root privileges.": "{{.driver_name}} 驱动不应使用 root 权限。", + "The \"{{.driver_name}}\" driver should not be used with root privileges. If you wish to continue as root, use --force.": "\"{{.driver_name}}\" 驱动程序不应与 root 权限一起使用。如果您希望以 root 身份继续,请使用 --force。", "The \"{{.name}}\" cluster has been deleted.": "“{{.name}}”集群已删除。", "The \"{{.name}}\" cluster has been deleted.__1": "“{{.name}}”集群已删除。", + "The \"{{.name}}\" container runtime requires CNI": "\"{{.name}}\" 容器运行时需要 CNI", + "The 'hyperkit' driver is deprecated and will be removed in a future release.\n You can use alternative drivers such as 'vfkit', 'qemu', or 'docker'.\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t": "'hyperkit' 驱动已被弃用,并将在未来的版本中移除。\n 您可以使用替代驱动程序,例如 'vfkit'、'qemu' 或 'docker'。\n https://minikube.sigs.k8s.io/docs/drivers/vfkit/\n https://minikube.sigs.k8s.io/docs/drivers/qemu/\n https://minikube.sigs.k8s.io/docs/drivers/docker/\n\t", "The 'none' driver does not respect the --cpus flag": "'none' 驱动程序不遵循 --cpus 标志", "The 'none' driver does not respect the --memory flag": "'none' 驱动程序不遵循 --memory 标志", - "The 'none' driver is designed for experts who need to integrate with an existing VM": "", + "The 'none' driver is designed for experts who need to integrate with an existing VM": "'none' 驱动程序专为需要与现有虚拟机集成的专业人士而设计。", "The 'none' driver provides limited isolation and may reduce system security and reliability.": "“none”驱动程序提供有限的隔离功能,并且可能会降低系统安全性和可靠性。", "The '{{.addonName}}' addon is enabled": "启动 '{{.addonName}}' 插件", - "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\\n\\n{{ .example }}\\n": "'{{.driver}}' 驱动程序需要提升权限,将执行以下命令:\\n\\n{{ .example }}\\n", - "The '{{.driver}}' provider was not found: {{.error}}": "", - "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "", - "The '{{.name}}' driver does not respect the --cpus flag": "", - "The '{{.name}}' driver does not respect the --memory flag": "", - "The --image-repository flag your provided contains Scheme: {{.scheme}}, which will be removed automatically": "", - "The --image-repository flag your provided ended with a trailing / that could cause conflict in kuberentes, removed automatically": "", + "The '{{.driver}}' driver requires elevated permissions. The following commands will be executed:\n\n{{ .example }}\n": "'{{.driver}}' 驱动程序需要提升权限,将执行以下命令:\n\n{{ .example }}\n", + "The '{{.driver}}' provider was not found: {{.error}}": "未找到 '{{.driver}}' 驱动程序提供程序:{{.error}}", + "The '{{.name}} driver does not support multiple profiles: https://minikube.sigs.k8s.io/docs/reference/drivers/none/": "'{{.name}}' 驱动程序不支持多个配置文件: https://minikube.sigs.k8s.io/docs/reference/drivers/none/", + "The '{{.name}}' driver does not respect the --cpus flag": "'{{.name}}' 驱动程序不支持 --cpus 标志", + "The '{{.name}}' driver does not respect the --memory flag": "'{{.name}}' 驱动程序不支持 --memory 标志", + "The '{{.name}}' driver does not support --cpus=no-limit": "{{.name}}' 驱动程序不支持 --cpus=no-limit", + "The '{{.name}}' driver does not support --memory=no-limit": "{{.name}}' 驱动程序不支持 --memory=no-limit", + "The --image-repository flag you provided contains Scheme: {{.scheme}}, which will be removed automatically": "您提供的 --image-repository 标志包含方案:{{.scheme}},这将自动移除", + "The --image-repository flag your provided ended with a trailing / that could cause conflict in kubernetes, removed automatically": "您提供的 --image-repository 标志以尾随 / 结束,可能会在 Kubernetes 中引起冲突,已自动移除", "The CIDR to be used for service cluster IPs.": "需要用于服务集群 IP 的 CIDR。", "The CIDR to be used for the minikube VM (virtualbox driver only)": "需要用于 minikube 虚拟机的 CIDR(仅限 virtualbox 驱动程序)", "The KVM QEMU connection URI. (kvm2 driver only)": "KVM QEMU 连接 URI。(仅限 kvm2 驱动程序)", - "The KVM default network name. (kvm2 driver only)": "", - "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", + "The KVM default network name. (kvm2 driver only)": "KVM 默认 network 名称(仅适用于 kvm2 驱动程序)", + "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "KVM 驱动程序无法恢复此旧 VM。请运行 `minikube delete` 来删除它,然后重试。", "The KVM network name. (kvm2 driver only)": "KVM 网络名称。(仅限 kvm2 驱动程序)", - "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "", - "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", - "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "", - "The \\\"{{.name}}\\\" container runtime requires CNI": "", + "The OLM addon has stopped working, for more details visit: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534": "OLM插件已停止工作,有关更多详细信息,请访问: https://github.com/operator-framework/operator-lifecycle-manager/issues/2534", + "The VM driver crashed. Run 'minikube start --alsologtostderr -v=8' to see the VM driver error message": "VM 驱动程序崩溃。运行 'minikube start --alsologtostderr -v=8' 来查看 VM 驱动程序的错误消息", + "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "VM 驱动程序退出时出错,可能已损坏。运行 'minikube start' 并带上 --alsologtostderr -v=8 以查看错误", + "The VM that minikube is configured for no longer exists. Run 'minikube delete'": "minikube 配置的虚拟机已不存在。请运行 'minikube delete'", + "The ambassador addon has stopped working as of v1.23.0, for more details visit: https://github.com/datawire/ambassador-operator/issues/73": "ambassador 插件自 v1.23.0 起停止工作,更多详情请访问:https://github.com/datawire/ambassador-operator/issues/73", "The apiserver listening port": "apiserver 侦听端口", "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "在为 kubernetes 生成的证书中使用的 apiserver 名称。如果您希望将此 apiserver 设置为可从机器外部访问,则可以使用这组 apiserver 名称", "The argument to pass the minikube mount command on start": "用于在启动时传递 minikube 装载命令的参数", - "The argument to pass the minikube mount command on start.": "", - "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "", - "The base image to use for docker/podman drivers. Intended for local development.": "", - "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "", - "The cluster dns domain name used in the Kubernetes cluster": "", + "The argument to pass the minikube mount command on start.": "传递 minikube mount 命令的参数。", + "The authoritative apiserver hostname for apiserver certificates and connectivity. This can be used if you want to make the apiserver available from outside the machine": "用于 apiserver 证书和连接的权威 apiserver 主机名。如果您希望使 apiserver 从计算机外部可用,可以使用此选项", + "The base image to use for docker/podman drivers. Intended for local development.": "Docker/Podman 驱动程序使用的基础映像。用于本地部署。", + "The certificate hostname provided appears to be invalid (may be a minikube bug, try 'minikube delete')": "提供的证书主机名似乎无效(可能是 minikube 的 bug,请尝试 'minikube delete')", + "The cluster dns domain name used in the Kubernetes cluster": "Kubernetes 集群中使用的集群 dns 域名", "The cluster dns domain name used in the kubernetes cluster": "kubernetes 集群中使用的集群 dns 域名", - "The cluster {{.cluster}} already exists which means the --nodes parameter will be ignored. Use \"minikube node add\" to add nodes to an existing cluster.": "", "The container runtime to be used (docker, crio, containerd)": "需要使用的容器运行时(docker、crio、containerd)", - "The control plane for \"{{.name}}\" is paused!": "", - "The control plane node \"{{.name}}\" does not exist.": "", - "The control plane node is not running (state={{.state}})": "", - "The control plane node must be running for this command": "", + "The control plane node must be running for this command": "执行此命令需要运行控制平面节点", + "The control-plane node {{.name}} apiserver is not running (will try others): (state={{.state}})": "", + "The control-plane node {{.name}} apiserver is not running: (state={{.state}})": "控制平面节点 {{.name}} 的 apiserver 未运行:(状态={{.state}})", + "The control-plane node {{.name}} apiserver is paused": "控制平面节点 {{.name}} apiserver已暂停", + "The control-plane node {{.name}} apiserver is paused (will try others)": "控制平面节点 {{.name}} apiserver已暂停 (将尝试其他节点)", + "The control-plane node {{.name}} host does not exist": "控制平面节点 {{.name}} 不存在", + "The control-plane node {{.name}} host does not exist (will try others)": "控制平面节点 {{.name}} 不存在 (将尝试其他节点)", + "The control-plane node {{.name}} host is not running (will try others): state={{.state}}": "控制平面节点 {{.name}} 主机未运行(将尝试其他节点):状态={{.state}}", + "The control-plane node {{.name}} host is not running: state={{.state}}": "", "The cri socket path to be used": "需要使用的 cri 套接字路径", - "The cri socket path to be used.": "", + "The cri socket path to be used.": "需要使用的 cri 套接字路径。", "The docker-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "", + "The docker-env command is only compatible with the \"docker\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "docker-env 命令仅兼容 \"docker\" 运行时,但该集群被配置为使用 \"{{.runtime}}\" 运行时。", "The driver '{{.driver}}' is not supported on {{.os}}/{{.arch}}": "{{.os}} 不支持驱动程序“{{.driver}}/{{.arch}}”", "The existing \"{{.name}}\" cluster was created using the \"{{.old}}\" driver, which is incompatible with requested \"{{.new}}\" driver.": "", "The existing node configuration appears to be corrupt. Run 'minikube delete'": "", + "The following services are clusterIP services: {{.svc_names}}, which are supposed to be accessable inside the cluster only. Minikube allows you to access them by opening an SSH tunnel, which is only for test purpose and must not be used in production environment": "以下服务为ClusterIP类型:{{.svc_names}}. 这些服务正常情况下只能从集群内部访问。Minikube通过ssh隧道的方式使你可以从本机访问这些服务,但此功能仅供测试用途严禁生产环境中使用", "The heapster addon is depreciated. please try to disable metrics-server instead": "", + "The host does not support filesystem 9p.": "主机不支持 9p 文件系统。", "The hyperv virtual switch name. Defaults to first found. (hyperv driver only)": "hyperv 虚拟交换机名称。默认为找到的第一个 hyperv 虚拟交换机。(仅限 hyperv 驱动程序)", "The hypervisor does not appear to be configured properly. Run 'minikube start --alsologtostderr -v=1' and inspect the error code": "管理程序似乎配置的不正确。执行 'minikube start --alsologtostderr -v=1' 并且检查错误代码", + "The image '{{.imageName}}' does not match arch of the container runtime, use a multi-arch image instead": "", "The image '{{.imageName}}' was not found; unable to add it to cache.": "", - "The initial time interval for each check that wait performs in seconds": "", - "The kubeadm binary within the Docker container is not executable": "", + "The initial time interval for each check that wait performs in seconds": "等待执行的每次检查的初始时间间隔(以秒为单位)", + "The kubeadm binary within the Docker container is not executable": "Docker 容器内的 kubeadm 二进制文件不可执行", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "minikube 虚拟机将使用的 kubernetes 版本(例如 v1.2.3)", "The machine-driver specified is failing to start. Try running 'docker-machine-driver-\u003ctype\u003e version'": "指定的设备驱动启动失败。尝试执行 'docker-machine-driver-\u003ctype\u003e version'", "The minikube VM is offline. Please run 'minikube start' to start it again.": "", "The minikube {{.driver_name}} container exited unexpectedly.": "", - "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "", + "The minimum required version for podman is \"{{.minVersion}}\". your version is \"{{.currentVersion}}\". minikube might not work. use at your own risk. To install latest version please see https://podman.io/getting-started/installation.html": "podman 的最低要求版本是 \"{{.minVersion}}\"。您的版本是 \"{{.currentVersion}}\"。minikube 可能无法工作,请自行承担风险。要安装最新版本,请参阅 https://podman.io/getting-started/installation.html", "The name of the network plugin": "网络插件的名称", - "The named space to activate after start": "", - "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "", - "The node to get IP. Defaults to the primary control plane.": "", - "The node to get logs from. Defaults to the primary control plane.": "", - "The node to get ssh-key path. Defaults to the primary control plane.": "", - "The node to ssh into. Defaults to the primary control plane.": "", - "The node {{.name}} has ran out of available PIDs.": "", - "The node {{.name}} has ran out of disk space.": "", - "The node {{.name}} has ran out of memory.": "", - "The node {{.name}} network is not available. Please verify network settings.": "", - "The none driver is not compatible with multi-node clusters.": "", - "The number of bytes to use for 9p packet payload": "", - "The number of nodes to spin up. Defaults to 1.": "", + "The named space to activate after start": "启动后要激活的命名空间", + "The node to build on. Defaults to the primary control plane.": "要构建的节点,默认为主控制平面", + "The node to check status for. Defaults to control plane. Leave blank with default format for status on all nodes.": "要检查状态的节点,默认为控制平面。默认格式为所有节点上的状态保留为空", + "The node to get IP. Defaults to the primary control plane.": "要获取IP的节点,默认为主控制平面", + "The node to get logs from. Defaults to the primary control plane.": "要从中获取日志的节点,默认为主控制平面", + "The node to get ssh-key path. Defaults to the primary control plane.": "获取ssh密钥路径的节点,默认为主控制平面", + "The node to ssh into. Defaults to the primary control plane.": "要ssh访问的节点,默认为主控制平面", + "The node {{.name}} has ran out of available PIDs.": "节点 {{.name}} 已用完可用PID", + "The node {{.name}} has ran out of disk space.": "节点 {{.name}} 磁盘空间不足", + "The node {{.name}} has ran out of memory.": "节点 {{.name}} 内存不足", + "The node {{.name}} network is not available. Please verify network settings.": "节点 {{.name}} 网络不可用,请检查网络设置", + "The none driver is not compatible with multi-node clusters.": "'none' 驱动与多节点集群不兼容。", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Kubernetes v1.24+ 和 docker 容器运行时的 none 驱动需要 cri-dockerd。\n\n请使用以下说明安装 cri-dockerd:\n\n\thttps://github.com/Mirantis/cri-dockerd", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Kubernetes v1.24+ 和 docker 容器运行时的 none 驱动需要 dockerd。\n\n请使用以下说明安装 dockerd:\n\n\thttps://docs.docker.com/engine/install/", + "The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "", + "The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "", + "The nvidia-gpu-device-plugin addon is deprecated and it's functionality is merged inside of nvidia-device-plugin addon. It will be removed in a future release. Please use the nvidia-device-plugin addon instead. For more details, visit: https://github.com/kubernetes/minikube/issues/19114.": "", "The output format. One of 'json', 'table'": "输出的格式。'json' 或者 'table'", - "The path on the file system where the docs in markdown need to be saved": "", - "The path on the file system where the error code docs in markdown need to be saved": "", - "The path on the file system where the testing docs in markdown need to be saved": "", - "The podman service within '{{.cluster}}' is not active": "", - "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "", - "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "", - "The service namespace": "", - "The service {{.service}} requires privileged ports to be exposed: {{.ports}}": "", - "The services namespace": "", - "The time interval for each check that wait performs in seconds": "", - "The value passed to --format is invalid": "", - "The value passed to --format is invalid: {{.error}}": "", + "The path on the file system where the docs in markdown need to be saved": "Markdown 文档需要保存的文件系统路径。", + "The path on the file system where the error code docs in markdown need to be saved": "错误代码文档(markdown 格式)需要保存在文件系统上的路径", + "The path on the file system where the testing docs in markdown need to be saved": "markdown 测试文档需要保存的文件系统路径", + "The podman service within '{{.cluster}}' is not active": "'{{.cluster}}' 中的 Podman 服务未激活。", + "The podman-env command is incompatible with multi-node clusters. Use the 'registry' add-on: https://minikube.sigs.k8s.io/docs/handbook/registry/": "podman-env 命令与多节点集群不兼容。请使用 'registry' 插件:https://minikube.sigs.k8s.io/docs/handbook/registry/", + "The podman-env command is only compatible with the \"crio\" runtime, but this cluster was configured to use the \"{{.runtime}}\" runtime.": "podman-env 命令仅兼容 \"crio\" 运行时,但该集群被配置为使用 \"{{.runtime}}\" 运行时。", + "The requested memory allocation of {{.requested}}MiB does not leave room for system overhead (total system memory: {{.system_limit}}MiB). You may face stability issues.": "请求的内存分配 {{.requested}}MiB 不足以留出系统开销的空间(总系统内存:{{.system_limit}}MiB)。可能会遇到稳定性问题。", + "The service namespace": "service的命名空间", + "The service/ingress {{.resource}} requires privileged ports to be exposed: {{.ports}}": "service/ingress 的{{.resource}})需要暴露特权端口:{{.ports}}。", + "The services namespace": "服务命名空间", + "The socket_vmnet network is only supported on macOS": "The socket_vmnet network is only supported on macOS", + "The time interval for each check that wait performs in seconds": "wait 执行每次检查的时间间隔,以秒为单位。", + "The total number of nodes to spin up. Defaults to 1.": "要启动的节点总数。默认值为 1。", + "The value passed to --format is invalid": "传递给 --format 的值无效。", + "The value passed to --format is invalid: {{.error}}": "传递给 --format 的值无效:{{.error}}。", + "The vfkit driver is only supported on macOS": "", + "The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "", "The {{.driver_name}} driver should not be used with root privileges.": "不应以根权限使用 {{.driver_name}} 驱动程序。", + "There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "", "There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "“{{.driver_executable}}”有一个新版本。请考虑升级。{{.documentation_url}}", "These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "", - "These changes will take effect upon a minikube delete and then a minikube start": "", - "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", + "These changes will take effect upon a minikube delete and then a minikube start": "这些更改将在执行 minikube delete 后生效,然后执行 minikube start", + "Things to try without Kubernetes ...": "没有 Kubernetes 的尝试方法...", + "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "此插件没有为 'addons open' 命令定义端点。\n你可以通过在服务上添加标签 {{.labelName}}:{{.addonName}} 来添加一个端点。", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "此操作还可通过设置环境变量 CHANGE_MINIKUBE_NONE_USER=true 自动完成", - "This control plane is not running! (state={{.state}})": "", + "This cluster was created before minikube v1.26.0 and doesn't have cri-docker installed. Please run 'minikube delete' and then start minikube again": "此集群是在 minikube v1.26.0 之前创建的,并且未安装 cri-docker。请运行 'minikube delete' 然后重新启动 minikube", + "This control plane is not running! (state={{.state}})": "此控制平面未运行!(状态={{.state}})", "This driver does not yet work on your architecture. Maybe try --driver=none": "", - "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "", - "This is unusual - you may want to investigate using \"{{.command}}\"": "", + "This is a known issue with BTRFS storage driver, there is a workaround, please checkout the issue on GitHub": "这是 BTRFS 存储驱动程序的已知问题,有一个解决方法,请在 GitHub 上查看此问题", + "This is unusual - you may want to investigate using \"{{.command}}\"": "这很不寻常 - 您可能想要使用 \"{{.command}}\" 进行调查", "This will keep the existing kubectl context and will create a minikube context.": "这将保留现有 kubectl 上下文并创建 minikube 上下文。", "This will start the mount daemon and automatically mount files into minikube": "这将启动装载守护进程并将文件自动装载到 minikube 中", - "This will start the mount daemon and automatically mount files into minikube.": "", - "This {{.type}} is having trouble accessing https://{{.repository}}": "", - "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "", + "This will start the mount daemon and automatically mount files into minikube.": "这将启动装载守护进程并将文件自动装载到 minikube 中。", + "This {{.type}} is having trouble accessing https://{{.repository}}": "此 {{.type}} 访问 https://{{.repository}} 时遇到问题", + "Tip: To remove this root owned cluster, run: sudo {{.cmd}}": "提示:要删除此 root 拥有的集群,请运行:sudo {{.cmd}}", "Tip: To remove this root owned cluster, run: sudo {{.cmd}} delete": "提示:要移除这个由根用户拥有的集群,请运行 sudo {{.cmd}} delete", + "To access Headlamp, use the following command:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n": "要访问 Headlamp,请使用以下命令:\n\n\tminikube{{.profileArg}} service headlamp -n headlamp\n", + "To access YAKD - Kubernetes Dashboard, wait for Pod to be ready and run the following command:\n\n\tminikube{{.profileArg}} service yakd-dashboard -n yakd-dashboard\n": "", + "To configure vment-helper to run without a password, please check the documentation:": "", "To connect to this cluster, use: --context={{.name}}": "", "To connect to this cluster, use: kubectl --context={{.name}}": "如需连接到此集群,请使用 kubectl --context={{.name}}", "To connect to this cluster, use: kubectl --context={{.name}}__1": "如需连接到此集群,请使用 kubectl --context={{.name}}", - "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", - "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "", - "To disable this notice, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\\n": "", - "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "", - "To see addons list for other profiles use: `minikube addons -p name list`": "", - "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "", - "To start a cluster, run: \"{{.command}}\"": "", - "To start minikube with Hyper-V, Powershell must be in your PATH`": "", + "To connect to this cluster, use: kubectl --context={{.profile_name}}": "如需连接到此集群,请使用 kubectl --context={{.profile_name}}", + "To disable beta notices, run: 'minikube config set WantBetaUpdateNotification false'": "要禁用测试版通知,请运行: 'minikube config set WantBetaUpdateNotification false'", + "To disable this notice, run: 'minikube config set WantUpdateNotification false'\n": "要禁用此通知,请运行:'minikube config set WantUpdateNotification false'", + "To disable update notices in general, run: 'minikube config set WantUpdateNotification false'\n": "要禁用更新通知,请运行:'minikube config set WantUpdateNotification false'\n", + "To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/": "要获取新的外部镜像,可能需要配置代理:https://minikube.sigs.k8s.io/docs/reference/networking/proxy/", + "To see addons list for other profiles use: `minikube addons -p name list`": "要查看其他配置文件的插件列表,请使用: `minikube addons -p name list`", + "To set your Google Cloud project, run:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\nor set the GOOGLE_CLOUD_PROJECT environment variable.": "要设置您的 Google Cloud 项目,请运行:\n\n\t\tgcloud config set project \u003cproject name\u003e\n\n或设置 GOOGLE_CLOUD_PROJECT 环境变量。", + "To start a cluster, run: \"{{.command}}\"": "要启动一个集群,请运行: \"{{.command}}\"", + "To start minikube with Hyper-V, Powershell must be in your PATH`": "要使用 Hyper-V 启动 minikube,Powershell 必须在您的 PATH 中", "To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:": "如需以您自己的用户身份使用 kubectl 或 minikube 命令,您可能需要重新定位该命令。例如,如需覆盖您的自定义设置,请运行:", - "Troubleshooting Commands:": "故障排除命令ƒ", - "Try 'minikube delete' to force new SSL certificates to be installed": "", - "Try 'minikube delete', and disable any conflicting VPN or firewall software": "", + "Troubleshooting Commands:": "故障排除命令", + "Try 'minikube delete' to force new SSL certificates to be installed": "尝试 'minikube delete' 强制安装新的 SSL 证书", + "Try 'minikube delete', and disable any conflicting VPN or firewall software": "尝试 'minikube delete',并禁用任何冲突的VPN或防火墙软件", + "Try one or more of the following to free up space on the device:\n\t\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "尝试以下一种或多种方法以释放设备上的空间:\n\t\n\t\t\t1. 运行 \"docker system prune\" 以删除未使用的 Docker 数据(可选 \"-a\")\n\t\t\t2. 通过点击以下路径增加分配给 Docker for Desktop 的存储空间:\n\t\t\t\tDocker 图标 \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. 如果使用 Docker 容器运行时,运行 \"minikube ssh -- docker system prune\"", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"docker system prune\" to remove unused Docker data (optionally with \"-a\")\n\t\t\t2. Increase the storage allocated to Docker for Desktop by clicking on:\n\t\t\t\tDocker icon \u003e Preferences \u003e Resources \u003e Disk Image Size\n\t\t\t3. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", + "Try one or more of the following to free up space on the device:\n\n\t\t\t1. Run \"sudo podman system prune\" to remove unused podman data\n\t\t\t2. Run \"minikube ssh -- docker system prune\" if using the Docker container runtime": "", "Trying to delete invalid profile {{.profile}}": "尝试删除无效的配置文件 {{.profile}}", + "Tunnel successfully started": "隧道成功启动", "Unable to bind flags": "无法绑定标志", - "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "", + "Unable to create dedicated network, this might result in cluster IP change after restart: {{.error}}": "无法创建专用网络,这可能会导致重启后集群 IP 发生变化:{{.error}}", + "Unable to delete profile(s): {{.error}}": "无法删除配置文件: {{.error}}", + "Unable to detect the latest patch release for specified major.minor version v{{.majorminor}}": "无法检测到指定主次版本 v{{.majorminor}} 的最新补丁版本。", "Unable to determine a default driver to use. Try specifying --vm-driver, or see https://minikube.sigs.k8s.io/docs/start/": "无法确定要使用的默认驱动。尝试通过 --vm-dirver 指定,或者查阅 https://minikube.sigs.k8s.io/docs/start/", - "Unable to enable dashboard": "", - "Unable to fetch latest version info": "", - "Unable to find control plane": "", - "Unable to generate docs": "", - "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "", - "Unable to get CPU info: {{.err}}": "", + "Unable to enable dashboard": "无法启用仪表盘", + "Unable to fetch latest version info": "无法获取最新版本信息", + "Unable to find any control-plane nodes": "无法找到任何控制平面节点", + "Unable to find control plane": "无法找到控制平面", + "Unable to generate docs": "无法生成文档", + "Unable to generate the documentation. Please ensure that the path specified is a directory, exists \u0026 you have permission to write to it.": "无法生成文档。请确保指定的路径是一个目录,存在 \u0026 您有权限写入它。", + "Unable to get CPU info: {{.err}}": "无法获取 CPU 信息: {{.err}}", "Unable to get bootstrapper: {{.error}}": "无法获取引导程序:{{.error}}", - "Unable to get command runner": "", - "Unable to get control plane status: {{.error}}": "", - "Unable to get current user": "", - "Unable to get forwarded endpoint": "", - "Unable to get machine status": "", - "Unable to get runtime": "", + "Unable to get command runner": "无法获取命令执行器", + "Unable to get control plane status: {{.error}}": "无法获取控制平面状态:{{.error}}", + "Unable to get control-plane node {{.name}} apiserver status (will try others): {{.error}}": "无法获取控制平面节点 {{.name}} apiserver 的状态 (将尝试其他节点): {{.error}}", + "Unable to get control-plane node {{.name}} apiserver status: {{.error}}": "无法获取控制平面节点 {{.name}} apiserver 的状态: {{.error}}", + "Unable to get control-plane node {{.name}} endpoint (will try others): {{.err}}": "无法获取控制平面节点 {{.name}} endpoint 的状态 (将尝试其他节点): {{.err}}", + "Unable to get control-plane node {{.name}} endpoint: {{.err}}": "无法获取控制平面节点 {{.name}} endpoint 的状态: {{.err}}", + "Unable to get control-plane node {{.name}} host command runner (will try others): {{.err}}": "无法获取控制平面节点 {{.name}} 主机运行命令的状态 (将尝试其他节点): {{.err}}", + "Unable to get control-plane node {{.name}} host command runner: {{.err}}": "无法获取控制平面节点 {{.name}} 主机运行命令 的状态: {{.err}}", + "Unable to get control-plane node {{.name}} host status (will try others): {{.err}}": "无法获取控制平面节点 {{.name}} 主机的状态 (将尝试其他节点): {{.err}}", + "Unable to get control-plane node {{.name}} host status: {{.err}}": "无法获取控制平面节点 {{.name}} 主机状态:{{.err}}", + "Unable to get current user": "无法获取当前用户", + "Unable to get forwarded endpoint": "无法获取转发的端点", + "Unable to get machine status": "获取机器状态失败", + "Unable to get runtime": "无法获取运行时", "Unable to get the status of the {{.name}} cluster.": "无法获取 {{.name}} 集群状态。", - "Unable to kill mount process: {{.error}}": "", - "Unable to list profiles: {{.error}}": "", + "Unable to kill mount process: {{.error}}": "无法终止挂载进程:{{.error}}", + "Unable to list profiles: {{.error}}": "无法列出配置文件: {{.error}}", "Unable to load cached images from config file.": "无法从配置文件中加载缓存的镜像。", - "Unable to load cached images: {{.error}}": "", + "Unable to load cached images: {{.error}}": "无法加载缓存的镜像:{{.error}}", "Unable to load config: {{.error}}": "无法加载配置:{{.error}}", - "Unable to load host": "", - "Unable to load profile: {{.error}}": "", + "Unable to load control-plane node {{.name}} host (will try others): {{.err}}": "无法加载控制平台节点主机 {{.name}}(将尝试其他主机): {{.err}}", + "Unable to load control-plane node {{.name}} host: {{.err}}": "无法加载控制平台节点主机 {{.name}}: {{.err}}", + "Unable to load profile: {{.error}}": "无法加载配置文件: {{.error}}", "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "无法解析“{{.kubernetes_version}}”:{{.error}}", "Unable to parse default Kubernetes version from constants: {{.error}}": "无法从常量中解析默认的 Kubernetes 版本号: {{.error}}", "Unable to parse memory '{{.memory}}': {{.error}}": "", "Unable to parse oldest Kubernetes version from constants: {{.error}}": "无法从常量中解析最旧的 Kubernetes 版本号: {{.error}}", - "Unable to pick a default driver. Here is what was considered, in preference order:": "", + "Unable to parse version.json: {{.error}}, json: {{.json}}": "无法解析 version.json: {{.error}}, json: {{.json}}", + "Unable to pick a default driver. Here is what was considered, in preference order:": "无法选择默认驱动程序。以下是按优先顺序考虑的内容:", "Unable to pull images, which may be OK: {{.error}}": "无法拉取镜像,有可能是正常状况:{{.error}}", - "Unable to push cached images: {{.error}}": "", - "Unable to remove machine directory": "", - "Unable to restart cluster, will reset it: {{.error}}": "", - "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "", + "Unable to push cached images: {{.error}}": "无法推送缓存镜像: {{.error}}", + "Unable to remove machine directory": "无法删除machine目录", + "Unable to restart cluster, will reset it: {{.error}}": "无法重启集群,将进行重置:{{.error}}", + "Unable to restart control-plane node(s), will reset cluster: {{.error}}": "无法重启 control-plane 节点,将重置集群: {{.error}}", + "Unable to run vmnet-helper without a password": "", + "Unable to safely downgrade existing Kubernetes v{{.old}} cluster to v{{.new}}": "无法安全地将现有的 Kubernetes v{{.old}} 集群降级为 v{{.new}}", "Unable to start VM. Please investigate and run 'minikube delete' if possible": "无法启动虚拟机。可能的话请检查后执行 'minikube delete'", "Unable to stop VM": "无法停止虚拟机", - "Unable to update {{.driver}} driver: {{.error}}": "", + "Unable to update {{.driver}} driver: {{.error}}": "无法更新 {{.driver}} 驱动: {{.error}}", "Unable to verify SSH connectivity: {{.error}}. Will retry...": "无法验证 SSH 连接: {{.error}}。即将重试...", - "Unfortunately, could not download the base image {{.image_name}} ": "", + "Unfortunately, could not download the base image {{.image_name}} ": "很遗憾,无法下载基础镜像 {{.image_name}}", "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "正在使用 {{.bootstrapper_name}} 卸载 Kubernetes {{.kubernetes_version}}…", - "Unmounting {{.path}} ...": "", - "Unpause": "", - "Unpaused {{.count}} containers": "", - "Unpaused {{.count}} containers in: {{.namespaces}}": "", - "Unpausing node {{.name}} ... ": "", - "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "", - "Unset variables instead of setting them": "", - "Update Docker to the latest minor version, this version is unsupported": "", - "Update kubeconfig in case of an IP or port change": "", - "Update server returned an empty list": "", - "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "", - "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", + "Unmounting {{.path}} ...": "取消挂载 {{.path}} ...", + "Unpause": "取消暂停", + "Unpaused {{.count}} containers": "已取消暂停 {{.count}} 个容器", + "Unpaused {{.count}} containers in: {{.namespaces}}": "已取消暂停在命名空间:{{.namespaces}} 中 {{.count}} 个容器", + "Unpausing node {{.name}} ... ": "取消暂停节点 {{.name}} ...", + "Unset the KUBECONFIG environment variable, or verify that it does not point to an empty or otherwise invalid path": "取消 KUBECONFIG 环境变量的设置,或者验证它没有指向空路径或无效路径", + "Unset variables instead of setting them": "取消设置变量,而不是设置它们", + "Update Docker to the latest minor version, this version is unsupported": "将 Docker 更新到最新的小版本,此版本不受支持", + "Update kubeconfig in case of an IP or port change": "IP或端口更改的情况下更新 kubeconfig 配置文件", + "Update server returned an empty list": "更新服务器返回了一个空列表", + "Updating the running {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...": "正在更新运行中的 {{.driver_name}} \"{{.cluster}}\" {{.machine_type}} ...", + "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "升级到 QEMU v3.1.0+,运行 'virt-host-validate',或者确保您不是在嵌套的 VM 环境中运行", "Upgrading from Kubernetes {{.old}} to {{.new}}": "正在从 Kubernetes {{.old}} 升级到 {{.new}}", "Usage": "使用方法", "Usage: minikube completion SHELL": "使用方法:minikube completion SHELL", "Usage: minikube delete": "使用方法:minikube delete", "Usage: minikube delete --all --purge": "使用方法:minikube delete --all --purge", "Usage: minikube node [add|start|stop|delete]": "使用方法:minikube node [add|start|stop|delete]", - "Usage: minikube node [add|start|stop|delete|list]": "", - "Usage: minikube node delete [name]": "", - "Usage: minikube node list": "", - "Usage: minikube node start [name]": "", - "Usage: minikube node stop [name]": "", + "Usage: minikube node [add|start|stop|delete|list]": "用法:minikube node [add|start|stop|delete|list]", + "Usage: minikube node delete [name]": "用法:minikube node delete [name]", + "Usage: minikube node list": "用法:minikube node list", + "Usage: minikube node start [name]": "用法:minikube node start [name]", + "Usage: minikube node stop [name]": "用法:minikube node stop [name]", "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "使用 \"{{.CommandPath}} [command] --help\" 可以获取有关命令的更多信息", - "Use 'kubect get po -A' to find the correct and namespace name": "使用 'kubect get po -A' 来查询正确的命名空间名称", + "Use 'kubectl get po -A' to find the correct and namespace name": "使用 'kubectl get po -A' 来查询正确的命名空间名称", "Use -A to specify all namespaces": "使用 -A 指定所有 namespaces", - "Use SSH connection instead of HTTPS (port 2376)": "", - "Use SSH for running kubernetes client on the node": "", + "Use SSH connection instead of HTTPS (port 2376)": "使用 SSH 连接而不是 HTTPS 连接(端口2376)", + "Use SSH for running kubernetes client on the node": "使用 SSH 在节点上运行 kubernetes 客户端", "Use VirtualBox to remove the conflicting VM and/or network interfaces": "使用 VirtualBox 删除有冲突的 虚拟机 和/或 网络接口", - "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "", + "Use native Golang SSH client (default true). Set to 'false' to use the command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when they will not start with 'Waiting for SSH'.": "使用原生的Golang SSH客户端(默认为true)。将其设置为 'false' 以在访问 Docker 机器时使用命令行的 'ssh' 命令。对于那些不以 'Waiting for SSH' 开头的机器驱动程序来说非常有用。", "User ID: {{.userID}}": "用户 ID: {{.userID}}", - "User name '{{.username}}' is not valid": "", - "User name must be 60 chars or less.": "", - "Userspace file server is shutdown": "", - "Userspace file server: ": "", + "User name '{{.username}}' is not valid": "用户名 '{{.username}}' 不是有效的", + "User name must be 60 chars or less.": "用户名必须为 60 个字符或更少。", + "Userspace file server is shutdown": "用户空间文件服务器已关闭", + "Userspace file server: ": "用户空间文件服务器", + "Using Kubernetes v1.24+ with the Docker runtime requires cri-docker to be installed": "基于 Docker 运行时使用 Kubernetes v1.24+ 需要安装 cri-doker", + "Using Kubernetes {{.version}} since patch version was unspecified": "使用 Kubernetes {{.version}},因为未指定修补程序版本", "Using image repository {{.name}}": "正在使用镜像存储库 {{.name}}", - "Using image {{.registry}}{{.image}}": "", - "Using image {{.registry}}{{.image}} (global image repository)": "", + "Using image {{.registry}}{{.image}}": "正在使用镜像 {{.registry}}{{.image}}", + "Using image {{.registry}}{{.image}} (global image repository)": "使用镜像 {{.registry}}{{.image}}(全局镜像仓库)", + "Using rootless Docker driver was required, but the current Docker does not seem rootless. Try 'docker context use rootless' .": "使用 rootless Docker 驱动是必需的,但当前的 Docker 似乎不是 rootless 的。尝试 'docker context use rootless' 。", + "Using rootless driver was required, but the current driver does not seem rootless": "使用 rootless Docker 驱动是必需的,但当前的驱动似乎不是 rootless 的", + "Using rootless {{.driver_name}} driver": "使用 rootless {{.driver_name}} 驱动", "Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!": "同时使用 'none' 驱动以及 '{{.runtime}}' 运行时是未经测试过的配置!", + "Using the docker-env command with the containerd runtime is a highly experimental feature, please provide feedback or contribute to make it better": "在 containerd 运行时中使用 docker-env 命令是一个高度实验性的功能,请提供反馈或贡献以使其更好", "Using the running {{.driver_name}} \"{{.profile_name}}\" VM ...": "使用正在运行的 {{.driver_name}} \"{{.profile_name}}\" 虚拟机", "Using the {{.driver}} driver based on existing profile": "根据现有的配置文件使用 {{.driver}} 驱动程序", "Using the {{.driver}} driver based on user configuration": "根据用户配置使用 {{.driver}} 驱动程序", + "Using {{.driver_name}} driver with root privileges": "使用具有 root 权限的 {{.driver_name}} 驱动程序", "VM driver is one of: %v": "虚拟机驱动程序是以下项之一:%v", "VM is unable to access {{.repository}}, you may need to configure a proxy or set --image-repository": "虚拟机无权访问 {{.repository}},或许您需要配置代理或者设置 --image-repository", "VM may be unable to resolve external DNS records": "虚拟机可能无法解析外部 DNS 记录", - "Valid components are: {{.valid_extra_opts}}": "", - "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "", - "Validation unable to parse disk size '{{.diskSize}}': {{.error}}": "", + "Valid components are: {{.valid_extra_opts}}": "有效的组件包括:{{.valid_extra_opts}}", + "Validate your KVM networks. Run: virt-host-validate and then virsh net-list --all": "验证您的 KVM 网络。运行:virt-host-validate,然后运行 virsh net-list --all", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "验证是否正确设置了 HTTP_PROXY 和 HTTPS_PROXY 环境变量。", "Verify the IP address of the running cluster in kubeconfig.": "在 kubeconfig 中验证正在运行的集群 IP 地址。", - "Verifying Kubernetes components...": "", + "Verifying Kubernetes components...": "正在验证 Kubernetes 组件...", "Verifying dashboard health ...": "正在验证 dashboard 运行情况 ...", "Verifying proxy health ...": "正在验证 proxy 运行状况 ...", - "Verifying {{.addon_name}} addon...": "", + "Verifying {{.addon_name}} addon...": "正在验证 {{.addon_name}} 插件...", "Verifying:": "正在验证:", "Version: {{.version}}": "版本: {{.version}}", - "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "", - "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "", - "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "", - "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "", + "VirtualBox and Hyper-V are having a conflict. Use '--driver=hyperv' or disable Hyper-V using: 'bcdedit /set hypervisorlaunchtype off'": "VirtualBox 和 Hyper-V 存在冲突。 使用 '--driver=hyperv' 参数或者使用一下命令禁用 Hyper-V : 'bcdedit /set hypervisorlaunchtype off'", + "VirtualBox cannot create a network, probably because it conflicts with an existing network that minikube no longer knows about. Try running 'minikube delete'": "VirtualBox 无法创建网络,可能是因为该网络与现有网络冲突,而 Minikube 不知道该网络的存在。请运行以下命令以删除冲突的网络:'minikube delete'", + "VirtualBox is broken. Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "VirtualBox 出现问题。禁用实时防病毒软件,重新启动,并在问题继续时重新安装 VirtualBox。", + "VirtualBox is broken. Reinstall VirtualBox, reboot, and run 'minikube delete'.": "VirtualBox 损坏。重新安装 VirtualBox,重启并运行 'minikube delete'。", "VirtualBox is unable to find its network interface. Try upgrading to the latest release and rebooting.": "VirtualBox 无法找到他的网络接口。尝试升级到最新版本并重启。", - "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "", + "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--driver=docker'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "您的计算机禁用了虚拟化支持。如果您正在虚拟机内运行 minikube, 尝试 '--driver=docker'。否则,请参阅系统BIOS手册了解如何启用虚拟化。", "Virtualization support is disabled on your computer. If you are running minikube within a VM, try '--vm-driver=none'. Otherwise, consult your systems BIOS manual for how to enable virtualization.": "您的计算机禁用了虚拟化支持。如果您正在虚拟机内运行 minikube, 尝试 '--vm-driver=none'。否则,请参阅系统BIOS手册了解如何启用虚拟化。", - "Wait failed: {{.error}}": "", + "Wait failed: {{.error}}": "等待失败:{{.error}}", "Wait until Kubernetes core services are healthy before exiting": "等到 Kubernetes 核心服务正常运行再退出", "Waiting for cluster to come online ...": "等待集群上线...", "Waiting for the host to be provisioned ...": "等待主机就绪...", - "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "", + "Want kubectl {{.version}}? Try 'minikube kubectl -- get pods -A'": "想要使用 kubectl {{.version}} 吗?尝试使用 'minikube kubectl -- get pods -A' 命令", "Warning: Your kubectl is pointing to stale minikube-vm.\\nTo fix the kubectl context, run `minikube update-context`": "警告:您的 kubectl 指向了过时的 minikube-vm。执行 `minikube update-context` 来修复 kubectl 上下文。", "Where to root the NFS Shares, defaults to /nfsshares (hyperkit driver only)": "NFS 共享的根目录位置,默认为 /nfsshares(仅限 hyperkit 驱动程序)", - "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "", - "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "", - "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "", + "Whether to use external switch over Default Switch if virtual switch not explicitly specified. (hyperv driver only)": "是否在未显式指定虚拟开关时使用外部开关而不是默认开关。仅适用于 hyperv 驱动程序。", + "Which source to download the preload from (valid options: gcs, github, auto). Defaults to auto (try both).": "", + "With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative": "使用 --network-plugin=cni,您需要提供自己的 CNI。查看 --cni 标志作为用户友好的替代方法", + "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}).": "您似乎在使用代理,但您的 NO_PROXY 环境不包含 minikube IP ({{.ip_address}})。", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see {{.documentation_url}} for more details": "您似乎正在使用代理,但您的 NO_PROXY 环境不包含 minikube IP ({{.ip_address}})。如需了解详情,请参阅 {{.documentation_url}}", - "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "", - "You are trying to run amd64 binary on M1 system. Please consider running darwin/arm64 binary instead (Download at {{.url}}.)": "", - "You can delete them using the following command(s): ": "", - "You can force an unsupported Kubernetes version via the --force flag": "", - "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "", - "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "", - "You have chosen to disable the CNI but the \\\"{{.name}}\\\" container runtime requires CNI": "", + "You are trying to run a windows .exe binary inside WSL. For better integration please use a Linux binary instead (Download at https://minikube.sigs.k8s.io/docs/start/.). Otherwise if you still want to do this, you can do it using --force": "您正在尝试在 WSL 中运行 Windows .exe 二进制文件。为了更好的集成,请改为使用 Linux 二进制文件(在 https://minikube.sigs.k8s.io/docs/start/ 下载)。如果仍然想要执行此操作,您可以使用 --force。", + "You are trying to run the amd64 binary on an M1 system.\nPlease consider running the darwin/arm64 binary instead.\nDownload at {{.url}}": "你正在尝试在 M1 系统上运行 amd64 二进制文件。\n请考虑改用 darwin/arm64 二进制文件。\n下载地址:{{.url}}", + "You are using the QEMU driver without a dedicated network, which doesn't support `minikube service` \u0026 `minikube tunnel` commands.": "", + "You can create one using 'minikube start'.\n\t\t": "您可以使用 'minikube start' 创建一个.\n\t\t", + "You can delete them using the following command(s): ": "您可以使用以下命令删除他们:", + "You can force an unsupported Kubernetes version via the --force flag": "你可以通过 --force 标志强制使用不支持的 Kubernetes 版本", + "You cannot add or remove extra disks for an existing minikube cluster. Please first delete the cluster.": "您不能为已存在的 minikube 集群添加或删除额外的磁盘。请先删除集群。", + "You cannot change the CPUs for an existing minikube cluster. Please first delete the cluster.": "您不能对已存在的 minikube 集群修改 CPU。请先删除集群。", + "You cannot change the disk size for an existing minikube cluster. Please first delete the cluster.": "您不能更改现有 minikube 集群的磁盘大小。请先删除集群。", + "You cannot change the memory size for an existing minikube cluster. Please first delete the cluster.": "您无法更改现有 minikube 集群的内存大小。请先删除集群。", + "You cannot change the number of nodes for an existing minikube cluster. Please use 'minikube node add' to add nodes to an existing cluster.": "您不能更改现有 minikube 集群的节点数。请使用 'minikube node add' 向现有集群添加节点。", + "You cannot change the static IP of an existing minikube cluster. Please first delete the cluster.": "您不能更改现有 minikube 集群的静态 IP。请先删除集群。", + "You cannot enable addons on a cluster without Kubernetes, to enable Kubernetes on your cluster, run: minikube start --kubernetes-version=stable": "您不能在没有 Kubernetes 的集群上启用插件,要在你的集群上启用 Kubernetes,运行:minikube start --kubernetes-version=stable", + "You have authenticated with a service account that does not have an associated JSON file. The GCP Auth addon requires credentials with a JSON file in order to continue.": "您已经使用一个没有关联 JSON 文件的服务帐户进行了身份验证。GCP 认证插件需要凭据和 JSON 文件才能继续。", + "You have chosen to disable the CNI but the \"{{.name}}\" container runtime requires CNI": "您已选择禁用 CNI,但是 {{.name}} 容器运行时需要 CNI", "You have selected \"virtualbox\" driver, but there are better options !\nFor better performance and support consider using a different driver: {{.drivers}}\n\nTo turn off this warning run:\n\n\t$ minikube config set WantVirtualBoxDriverWarning false\n\n\nTo learn more about on minikube drivers checkout https://minikube.sigs.k8s.io/docs/drivers/\nTo see benchmarks checkout https://minikube.sigs.k8s.io/docs/benchmarks/cpuusage/\n\n": "", "You may need to manually remove the \"{{.name}}\" VM from your hypervisor": "您可能需要从管理程序中手动移除“{{.name}}”虚拟机", - "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "", - "You might be using an amd64 version of minikube on a M1 Mac, use the arm64 version of minikube instead": "", - "You must specify a service name": "", - "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "", - "Your cgroup does not allow setting memory.": "", - "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "", - "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "", - "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", - "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "", - "Your minikube vm is not running, try minikube start.": "", - "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "", - "\\\"minikube cache\\\" will be deprecated in upcoming versions, please switch to \\\"minikube image load\\\"": "", - "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", - "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", + "You may need to stop the Hyper-V Manager and run `minikube delete` again.": "您可能需要停止 Hyper-V 管理器并再次运行 `minikube delete`。", + "You might be using an amd64 version of minikube on a Apple Silicon Mac, use the arm64 version of minikube instead": "您可能在 Apple Silicon Mac 上使用了 amd64 版本的 minikube,请使用 arm64 版本的 minikube", + "You must specify service name(s) or --all": "您必须指定服务的名称或 --all", + "Your GCP credentials will now be mounted into every pod created in the {{.name}} cluster.": "你的 GCP 凭证现在将被挂载到 {{.name}} 集群中创建的每个 Pod 中。", + "Your cgroup does not allow setting memory.": "您的 cgroup 不允许设置内存", + "Your firewall is blocking bootpd which is required for socket_vmnet. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "您的防火墙正在阻止 socket_vmnet 所需的 bootpd。将执行以下命令来解除对 bootpd 的阻塞:\n\n{{.commands}}\n", + "Your firewall is blocking bootpd which is required for this configuration. The following commands will be executed to unblock bootpd:\n\n{{.commands}}\n": "", + "Your firewall is likely blocking bootpd, to unblock it run:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd": "您的防火墙可能阻止了 bootpd,要解除阻止,请运行:\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd\n\tsudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd", + "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "您的主机不支持 KVM 虚拟化。确保已安装 qemu-kvm,并运行 'virt-host-validate' 来调试问题", + "Your host does not support virtualization. If you are running minikube within a VM, try '--driver=docker'. Otherwise, enable virtualization in your BIOS": "你的主机不支持虚拟化。如果你在虚拟机内运行 minikube,请尝试使用 '--driver=docker'。否则,请在 BIOS 中启用虚拟化", + "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "您的主机未能将数据包路由到 minikube VM。如果您有 VPN 软件,请尝试关闭它或将其配置为不重新路由到 VM IP。如果没有,请检查您的 VM 环境路由选项。", + "Your minikube config refers to an unsupported driver. Erase ~/.minikube, and try again.": "您的 minikube 配置引用了一个不受支持的驱动程序。删除 ~/.minikube,然后重试。", + "Your minikube vm is not running, try minikube start.": "您的 minikube 虚拟机未运行,请尝试运行 minikube start。", + "Your user lacks permissions to the minikube profile directory. Run: 'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' to fix": "您的用户缺少 minikube 配置文件目录的权限。运行:'sudo chown -R $USER $HOME/.minikube; chmod -R u+wrx $HOME/.minikube' 来修复", + "[WARNING] For full functionality, the 'csi-hostpath-driver' addon requires the 'volumesnapshots' addon to be enabled.\n\nYou can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'\n": "[警告] 为了实现完整功能,'csi-hostpath-driver' 插件需要启用 'volumesnapshots' 插件。\n\n您可以通过运行 'minikube addons enable volumesnapshots' 来启用 'volumesnapshots' 插件。", + "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "插件 '{{.name}}' 当前未启用。\n要启用此插件,请运行:minikube addons enable {{.name}}", + "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "插件 '{{.name}}' 不是 minikube 打包的有效插件。\n要查看可用插件列表,请运行:minikube addons list", "addon enable failed": "启用插件失败", "addons modifies minikube addons files using subcommands like \"minikube addons enable dashboard\"": "插件使用诸如 \"minikube addons enable dashboard\" 的子命令修改 minikube 的插件文件", - "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "", - "bash completion failed": "", - "bash completion.": "", - "call with cleanup=true to remove old tunnels": "", - "cancel any existing scheduled stop requests": "", - "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \\n\\n": "", - "config view failed": "", - "containers paused status: {{.paused}}": "", - "dashboard service is not running: {{.error}}": "", - "delete ctx": "", - "deleting node": "", + "arm64 VM drivers do not currently support the crio container runtime. See https://github.com/kubernetes/minikube/issues/14146 for details.": "arm64 VM 驱动程序目前不支持 crio 容器运行时。详情请参见:https://github.com/kubernetes/minikube/issues/14146。", + "auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.": "auto-pause 插件是一个 Alpha 版功能,仍处于早期开发阶段。请提交问题以帮助我们改进它。", + "bash completion failed": "bash 自动补全失败", + "bash completion.": "bash 自动补全", + "call with cleanup=true to remove old tunnels": "使用 cleanup=true 参数调用以删除旧的隧道", + "cancel any existing scheduled stop requests": "取消任何已存在的计划停止请求", + "cannot specify --kubernetes-version with --no-kubernetes,\nto unset a global config run:\n\n$ minikube config unset kubernetes-version": "不能同时指定 --kubernetes-version 和 --no-kubernetes,要取消全局配置,请运行:$ minikube config unset kubernetes-version", + "config file does not exist": "", + "config modifies minikube config files using subcommands like \"minikube config set driver kvm2\"\nConfigurable fields: \n\n": "config 使用子命令(如 \"minikube config set driver kvm2\")修改 minikube 配置文件。\n可配置字段:", + "config view failed": "配置查看失败", + "dashboard": "仪表盘", + "dashboard service is not running: {{.error}}": "dashboard 服务未运行:{{.error}}", + "delete ctx": "删除上下文", + "deleting node": "正在删除节点", "disable failed": "禁用失败", - "dry-run mode. Validates configuration, but does not mutate system state": "", - "dry-run validation complete!": "", + "dry-run mode. Validates configuration, but does not mutate system state": "dry-run 模式。仅验证配置,不改变系统状态", + "dry-run validation complete!": "dry-run 验证完成!", "enable failed": "开启失败", - "error creating clientset": "", - "error getting primary control plane": "", - "error getting ssh port": "", - "error initializing tracing: {{.Error}}": "", + "enabled failed": "开启失败", + "error creating clientset": "clientset 创建失败", + "error creating urls": "url 创建失败", + "error fetching Kubernetes version list from GitHub": "", + "error getting control-plane node": "", + "error getting defaults: {{.error}}": "获取默认值时出错: {{.error}}", + "error getting primary control plane": "获取主控制平面时出错", + "error getting ssh port": "获取 ssh 端口号时出错", + "error initializing tracing: {{.Error}}": "初始化 trace 时出错: {{.Error}}", "error parsing the input ip address for mount": "", - "error provisioning guest": "", - "error starting tunnel": "", - "error stopping tunnel": "", - "error: --output must be 'yaml' or 'json'": "", - "experimental": "", - "failed to add node": "", - "failed to open browser: {{.error}}": "", - "failed to save config": "", - "failed to start node": "", - "fish completion failed": "", - "fish completion.": "", - "if true, will embed the certs in kubeconfig.": "", - "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "", - "initialization failed, will try again: {{.error}}": "", - "invalid kubernetes version": "", - "keep the kube-context active after cluster is stopped. Defaults to false.": "", + "error provisioning guest": "错误的虚拟机配置", + "error starting tunnel": "启动隧道时出错", + "error: --output must be 'text', 'yaml' or 'json'": "错误: --output 必须是 'text', 'yaml' 或 'json'", + "error: --output must be 'yaml' or 'json'": "错误: --output 必须是 'yaml' 或 'json'", + "experimental": "实验性功能", + "extra waiting: {{.error}}": "", + "failed to acquire lock due to unexpected error": "由于意外错误,无法获取锁", + "failed to add node": "添加节点失败", + "failed to load profile: {{.error}}": "", + "failed to open browser: {{.error}}": "打开浏览器失败:{{.error}}", + "failed to restart auto-pause: {{.error}}": "", + "failed to save config": "保存配置失败", + "failed to set extra option": "设置额外选项失败", + "failed to start node": "启动节点失败", + "failed to validate {{.network}} network: {{.reason}}": "", + "false": "false", + "fish completion failed": "fish 完成失败", + "fish completion.": "fish 完成。", + "if true, will embed the certs in kubeconfig.": "如果为 true,将在 kubeconfig 中嵌入证书。", + "if you want to create a profile you can by this command: minikube start -p {{.profile_name}}": "如果你想创建一个配置文件,你可以执行此命令:minikube start -p {{.profile_name}}", + "initialization failed, will try again: {{.error}}": "初始化失败,将再次重试:{{.error}}", + "invalid kubernetes version": "无效的 Kubernetes 版本", + "ip not found": "找不到对应的 IP", + "json encoding failure": "JSON 编码失败", + "keep the kube-context active after cluster is stopped. Defaults to false.": "在集群停止后保持 kube-context 处于活动状态。默认值为 false。", + "kubeadm certificates have expired. Generating new ones...": "kubeadm 证书已经过期。正在生成新的...", "kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm 检测一个到与其他进程的 TCP 端口冲突:或许是另外的本地安装的 Kubernetes 导致。执行 lsof -p\u003cport\u003e 查找并杀死这些进程", "kubectl and minikube configuration will be stored in {{.home_folder}}": "kubectl 和 minikube 配置将存储在 {{.home_folder}} 中", - "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "", - "kubectl proxy": "", - "libmachine failed": "", - "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \\n\\n": "", - "list versions of all components included with minikube. (the cluster must be running)": "", - "loading profile": "", + "kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl 未找到。如果你需要使用它,请尝试:'minikube kubectl -- get pods -A'", + "kubectl proxy": "kubectl 代理", + "libmachine failed": "libmachine 失败", + "list displays all valid default settings for PROPERTY_NAME\nAcceptable fields: \n\n": "list 显示 PROPERTY_NAME 的所有有效默认设置\n可接受的字段:\n\n", + "list versions of all components included with minikube. (the cluster must be running)": "列出minikube包含的所有组件的版本。(集群必须正在运行)", + "loading profile": "加载配置文件", "max time to wait per Kubernetes core services to be healthy.": "每个 Kubernetes 核心服务保持健康所需的最长时间。", - "max time to wait per Kubernetes or host to be healthy.": "", - "minikube addons list --output OUTPUT. json, list": "", + "max time to wait per Kubernetes or host to be healthy.": "Kubernetes 或主机正常运行前的最大等待时间。", + "minikube addons images ADDON_NAME --output OUTPUT. table, json": "", + "minikube addons list --output OUTPUT. json, list": "minikube addons list --output OUTPUT. json, list", + "minikube cannot pull kicbase image from any docker registry, and is trying to download kicbase tarball from github release page via HTTP.": "", + "minikube does not support the BTRFS storage driver yet, there is a workaround, add the following flag to your start command `--feature-gates=\"LocalStorageCapacityIsolation=false\"`": "minikube 尚不支持 BTRFS 存储驱动程序,有一个解决方法,将以下标志添加到你的启动命令 `--feature-gates=\"LocalStorageCapacityIsolation=false\"`", "minikube is exiting due to an error. If the above message is not useful, open an issue:": "由于出错 minikube 正在退出。如果以上信息没有帮助,请提交问题反馈:", - "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "", - "minikube is not meant for production use. You are opening non-local traffic": "", - "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", - "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "", + "minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'": "Minikube 缺少与客户环境相关的文件。这可以通过运行 'minikube delete' 来修复。", + "minikube is not meant for production use. You are opening non-local traffic": "minikube 不适用于生产环境。您正在打开非本地流量", + "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "minikube 无法访问 Google 容器仓库。您可能需要将其配置为使用 HTTP 代理。", + "minikube is unable to connect to the VM: {{.error}}\n\n\tThis is likely due to one of two reasons:\n\n\t- VPN or firewall interference\n\t- {{.hypervisor}} network configuration issue\n\n\tSuggested workarounds:\n\n\t- Disable your local VPN or firewall software\n\t- Configure your local VPN or firewall to allow access to {{.ip}}\n\t- Restart or reinstall {{.hypervisor}}\n\t- Use an alternative --vm-driver\n\t- Use --force to override this connectivity check\n\t": "minikube 无法连接到虚拟机:{{.error}}\n\n\t可能是以下两个原因之一:\n\n\t- VPN 或防火墙干扰\n\t- {{.hypervisor}} 网络配置问题\n\n\t建议解决方法:\n\n\t- 禁用本地 VPN 或防火墙软件\n\t- 配置本地 VPN 或防火墙以允许访问 {{.ip}}\n\t- 重新启动或重新安装 {{.hypervisor}}\n\t- 使用替代 --vm-driver\n\t- 使用 --force 覆盖此连接性检查\n\t", "minikube is unable to connect to the VM: {{.error}}\n\nThis is likely due to one of two reasons:\n\n- VPN or firewall interference\n- {{.hypervisor}} network configuration issue\n\nSuggested workarounds:\n\n- Disable your local VPN or firewall software\n- Configure your local VPN or firewall to allow access to {{.ip}}\n- Restart or reinstall {{.hypervisor}}\n- Use an alternative --vm-driver": "minikube 无法连接到虚拟机:{{.error}}\n\n可能是由于以下两个原因之一导致:\n\n-VPN 或防火墙冲突\n- {{.hypervisor}} 网络配置问题\n建议的方案:\n\n- 禁用本地的 VPN 或者防火墙软件\n- 配置本地 VPN 或防火墙软件,放行 {{.ip}}\n- 重启或者重装 {{.hypervisor}}\n- 使用另外的 --vm-driver", - "minikube profile was successfully set to {{.profile_name}}": "", - "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "", - "minikube quickly sets up a local Kubernetes cluster": "", - "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "", - "minikube status --output OUTPUT. json, text": "", - "minikube {{.version}} is available! Download it: {{.url}}": "", + "minikube mount is not currently implemented with the builtin network on QEMU": "minikube 挂载目前没有在 QEMU 的内置网络中实现", + "minikube profile was successfully set to {{.profile_name}}": "minikube 配置文件已成功设置为 {{.profile_name}}", + "minikube provisions and manages local Kubernetes clusters optimized for development workflows.": "minikube 提供并管理针对开发工作流程优化的本地 Kubernetes 集群。", + "minikube quickly sets up a local Kubernetes cluster": "minikube 可以快速设置本地 Kubernetes 集群", + "minikube service is not currently implemented with the builtin network on QEMU": "minikube 服务目前未在 QEMU 的内置网络上实现", + "minikube skips various validations when --force is supplied; this may lead to unexpected behavior": "当提供 --force 参数时,minikube 将跳过各种验证,这可能会导致意外行为", + "minikube status --output OUTPUT. json, text": "minikube status --output OUTPUT 可以使用 json 或 text 作为输出格式", + "minikube tunnel is not currently implemented with the builtin network on QEMU": "minikube tunnel 目前还未与QEMU上的内置网络一起实现", + "minikube {{.version}} is available! Download it: {{.url}}": "minikube {{.version}} 现已发布!下载地址:{{.url}}", "mkcmp is used to compare performance of two minikube binaries": "mkcmp 用于对比两个 minikube 二进制的性能", "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", - "mount could not connect": "", - "mount failed": "", - "namespaces to pause": "", - "namespaces to unpause": "", - "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "", - "none driver does not support multi-node clusters": "", - "not enough arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", - "numa node is only supported on k8s v1.18 and later": "", - "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "", - "pause Kubernetes": "", + "mount could not connect": "mount 无法连接", + "mount failed": "挂载失败", + "namespaces to pause": "需要暂停的命名空间", + "namespaces to unpause": "需要取消暂停的命名空间", + "network to run minikube with. Now it is used by docker/podman and KVM drivers. If left empty, minikube will create a new network.": "运行 minikube 的网络。现在它被 docker/podman 和 KVM 驱动程序使用。如果留空,minikube 将创建一个新的网络。", + "network to run minikube with. Used by docker/podman, qemu, kvm, and vfkit drivers. If left empty, minikube will create a new network.": "", + "none driver does not support multi-node clusters": "none 驱动程序不支持多节点集群", + "not enough arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "参数不足 ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE", + "numa node is only supported on k8s v1.18 and later": "numa 节点仅在 k8s v1.18 及更高版本上受支持", + "output layout (EXPERIMENTAL, JSON only): 'nodes' or 'cluster'": "输出布局(实验性功能,仅限 JSON):'nodes' 或 'cluster'", + "pause Kubernetes": "暂停 Kubernetes", "pause containers": "暂停容器", - "preload extraction failed: \\\"No space left on device\\\"": "", - "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", - "provisioning host for node": "", + "powershell completion failed": "powershell 未完成", + "powershell completion.": "PowerShell 完成。", + "preload extraction failed: \"No space left on device\"": "预加载提取失败:\"设备上没有剩余空间\"", + "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "profile 命令用于设置当前的 minikube 配置文件,如果没有提供参数,则获取当前配置文件。这用于运行和管理多个 minikube 实例。你可以通过运行 `minikube profile default` 返回默认 minikube 配置文件", + "provisioning host for node": "正在为节点配置主机", "reload cached images.": "重新加载缓存的镜像", "reloads images previously added using the 'cache add' subcommand": "重新加载之前通过子命令 'cache add' 添加的镜像", - "retrieving node": "", - "scheduled stop is not supported on the none driver, skipping scheduling": "", - "service {{.namespace_name}}/{{.service_name}} has no node port": "", - "stat failed": "", - "status json failure": "", - "status text failure": "", - "toom any arguments ({{.ArgCount}}).\\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "", - "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "", + "retrieving node": "检索节点", + "scheduled stop is not supported on the none driver, skipping scheduling": "none 驱动程序不支持计划停止,跳过调度", + "service not available": "service 不可用", + "service {{.namespace_name}}/{{.service_name}} has no node port": "service {{.namespace_name}}/{{.service_name}} 没有 NodePort", + "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "设置隧道绑定地址,'' 或 '*' 表示隧道应该对所有接口都可用", + "socket_vmnet was installed with an incorrect group, delete this cluster 'minikube delete' and update the group 'sudo chown root:$(id -ng) /var/run/socket_vmnet' and try again.": "socket_vmnet 安装时使用了错误的组,请删除此集群 'minikube delete' 并更新组 'sudo chown root:$(id -ng) /var/run/socket_vmnet',然后重试。", + "socket_vmnet was not found on the system, resolve by:\n\n\t\tOption 1) Installing socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\tOption 2) Using the user network:\n\n\t\t minikube start{{.profile}} --driver qemu --network user": "在系统上找不到 socket_vmnet,请通过以下方法解决:\n\n\t\t选项 1) 安装 socket_vmnet:\n\n\t\t https://minikube.sigs.k8s.io/docs/drivers/qemu/#networking\n\n\t\t选项 2) 使用用户网络:\n\n\t\t minikube start{{.profile}} --driver qemu --network user", + "stat failed": "stat 失败", + "status json failure": "json 状态错误", + "status text failure": "text 状态错误", + "too many arguments ({{.ArgCount}}).\nusage: minikube config set PROPERTY_NAME PROPERTY_VALUE": "参数过多({{.ArgCount}})。\n用法:minikube config set PROPERTY_NAME PROPERTY_VALUE", + "true": "true", + "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP. for a detailed example see https://minikube.sigs.k8s.io/docs/tasks/loadbalancer": "tunnel 创建到以 LoadBalancer 类型部署的服务的路由中,并将其入口设置为其 ClusterIP。有关详细示例,请参阅 https://minikube.sigs.k8s.io/docs/tasks/loadbalancer", "tunnel makes services of type LoadBalancer accessible on localhost": "隧道使本地主机上可以访问 LoadBalancer 类型的服务", - "unable to bind flags": "", - "unable to daemonize: {{.err}}": "", + "unable to bind flags": "无法绑定标注", + "unable to daemonize: {{.err}}": "无法进行后台处理: {{.err}}", "unable to delete minikube config folder": "无法删除 minikube 配置目录", "unpause Kubernetes": "恢复 Kubernetes", - "unset failed": "", - "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "", - "unsets an individual value in a minikube config file": "", + "unset failed": "设置失败", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "从 minikube 配置文件中取消设置 PROPERTY_NAME。可以通过标志或环境变量进行覆盖", + "unsets an individual value in a minikube config file": "从 minikube 配置文件中取消设置单个值", "unsupported or missing driver: {{.name}}": "不支持或者缺失驱动:{{.name}}", "update config": "更新配置", - "usage: minikube addons configure ADDON_NAME": "", - "usage: minikube addons disable ADDON_NAME": "", - "usage: minikube addons enable ADDON_NAME": "", - "usage: minikube addons images ADDON_NAME": "", - "usage: minikube addons list": "", - "usage: minikube addons open ADDON_NAME": "", - "usage: minikube config unset PROPERTY_NAME": "", - "usage: minikube delete": "", - "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", - "using metrics-server addon, heapster is deprecated": "", - "version json failure": "", - "version yaml failure": "", - "zsh completion failed": "", - "zsh completion.": "", - "{{ .name }}: Suggestion: {{ .suggestion}}": "", - "{{ .name }}: {{ .rejection }}": "", - "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "", - "{{.count}} nodes stopped.": "", - "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "", - "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "", - "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "", - "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "", + "usage: minikube addons configure ADDON_NAME": "用法: minikube addons configure ADDON_NAME", + "usage: minikube addons disable ADDON_NAME": "用法: minikube addons disable ADDON_NAME", + "usage: minikube addons enable ADDON_NAME": "用法: minikube addons enable ADDON_NAME", + "usage: minikube addons images ADDON_NAME": "用法: minikube addons images ADDON_NAME", + "usage: minikube addons list": "用法: minikube addons list", + "usage: minikube addons open ADDON_NAME": "用法: minikube addons open ADDON_NAME", + "usage: minikube config list PROPERTY_NAME": "用法: minikube config list PROPERTY_NAME", + "usage: minikube config unset PROPERTY_NAME": "用法: minikube config unset PROPERTY_NAME", + "usage: minikube delete": "用法: minikube delete", + "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "用法: minikube profile [MINIKUBE_PROFILE_NAME]", + "version json failure": "json 版本错误", + "version yaml failure": "yaml 版本错误", + "vmnet-helper was not found on the system.\n\n\t\tPlease install vmnet-helper using these instructions:\n\n\t\t\tcurl -fsSL https://github.com/minikube-machine/vmnet-helper/releases/latest/download/install.sh | bash": "", + "yaml encoding failure": "yaml 编码失败", + "zsh completion failed": "zsh 自动补全失败", + "zsh completion.": "zsh 自动补全。", + "{{ .name }}: Suggestion: {{ .suggestion}}": "{{ .name }}:建议:{{ .suggestion }}", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "{{.Driver}} 当前正在使用 {{.StorageDriver}} 存储驱动程序,请考虑切换到 overlay2 以获得更好的性能", + "{{.Driver}} is currently using the {{.StorageDriver}} storage driver, setting preload=false": "{{.Driver}} 当前正在使用 {{.StorageDriver}} 存储驱动, 设置 preload=false", + "{{.addon}} does not currently have an associated maintainer.": "{{.addon}} 目前没有相关的维护者。", + "{{.addon}} is a 3rd party addon and is not maintained or verified by minikube maintainers, enable at your own risk.": "{{.addon}} 是第三方插件,不由 minikube 维护者进行维护或验证,启用需自担风险。", + "{{.addon}} is an addon maintained by {{.maintainer}}. For any concerns contact minikube on GitHub.\nYou can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS": "{{.addon}} 是由 {{.maintainer}} 维护的插件。如有任何问题,请在 GitHub 上联系 minikube。\n您可以在以下链接查看 minikube 的维护者列表:https://github.com/kubernetes/minikube/blob/master/OWNERS", + "{{.addon}} is maintained by {{.maintainer}} for any concerns contact {{.verifiedMaintainer}} on GitHub.": "{{.addon}} 由 {{.maintainer}} 维护,如有任何问题,请在 GitHub 上联系 {{.verifiedMaintainer}}。", + "{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "{{.count}} 个节点已停止。", + "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "{{.driver_name}} \"{{.cluster}}\" 缺失 {{.machine_type}},将重新创建。", + "{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "由于 {{.driver_name}} 服务不健康,{{.driver_name}} 无法继续进行。", + "{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "{{.driver_name}} 可用 CPU 数量不足 2 个,但 Kubernetes 要求至少有 2 个可用 CPU", + "{{.driver_name}} has only {{.container_limit}}MB memory but you specified {{.specified_memory}}MB": "{{.driver_name}} 只有 {{.container_limit}}MB 内存可用,但您指定了 {{.specified_memory}}MB", "{{.driver}} does not appear to be installed": "似乎并未安装 {{.driver}}", "{{.driver}} does not appear to be installed, but is specified by an existing profile. Please run 'minikube delete' or install {{.driver}}": "似乎并未安装 {{.driver}},但已被当前的配置文件指定。请执行 'minikube delete' 或者安装 {{.driver}}", - "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "", - "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", - "{{.name}} doesn't have images.": "", - "{{.name}} has following images:": "", - "{{.name}} has no available configuration options": "", - "{{.name}} is already running": "", - "{{.name}} was successfully configured": "", - "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "", - "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "", - "{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "", + "{{.driver}} only has {{.size}}MiB available, less than the required {{.req}}MiB for Kubernetes": "{{.driver}} 仅有 {{.size}}MiB 可用,少于 Kubernetes 所需的 {{.req}}MiB", + "{{.env}}={{.value}}": "", + "{{.name}} doesn't have images.": "{{.name}} 没有镜像", + "{{.name}} has following images:": "{{.name}} 有以下镜像", + "{{.name}} has no available configuration options": "{{.name}} 没有可用的配置选项", + "{{.name}} has the following images:": "", + "{{.name}} is already running": "{{.name}} 已经在运行", + "{{.name}} was successfully configured": "{{.name}} 成功配置", + "{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} 的磁盘空间即将耗尽,可能导致部署失败!(已使用容量的{{.p}}%)。您可以传递 '--force' 参数来跳过此检查。", + "{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "{{.n}} 的磁盘空间已满!(/var 目录已使用 {{.p}}% 的容量)。您可以传递 '--force' 参数跳过此检查。", + "{{.ociBin}} rmi {{.images}}": "{{.ociBin}} rmi {{.images}}", + "{{.ocibin}} is taking an unusually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} 的响应时间过长,请考虑重新启动 {{.ocibin}}", "{{.path}} is version {{.client_version}}, and is incompatible with Kubernetes {{.cluster_version}}. You will need to update {{.path}} or use 'minikube kubectl' to connect with this cluster": "{{.path}} 的版本是 {{.client_version}},且与 Kubernetes {{.cluster_version}} 不兼容。您需要更新 {{.path}} 或者使用 'minikube kubectl' 连接到这个集群", - "{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "", + "{{.path}} is version {{.client_version}}, which may have incompatibilities with Kubernetes {{.cluster_version}}.": "{{.path}} 的版本为 {{.client_version}},可能与 Kubernetes {{.cluster_version}} 不兼容。", "{{.prefix}}minikube {{.version}} on {{.platform}}": "{{.platform}} 上的 {{.prefix}}minikube {{.version}}", - "{{.profile}} profile is not valid: {{.err}}": "", - "{{.type}} is not yet a supported filesystem. We will try anyways!": "", - "{{.url}} is not accessible: {{.error}}": "" -} \ No newline at end of file + "{{.profile}} profile is not valid: {{.err}}": "{{.profile}} 配置文件无效:{{.err}}", + "{{.type}} is not yet a supported filesystem. We will try anyways!": "{{.type}} 还不是一个受支持的文件系统。无论如何我们都会尝试!", + "{{.url}} is not accessible: {{.error}}": "{{.url}} 不可访问:{{.error}}" +} diff --git a/ver.md b/ver.md new file mode 100644 index 000000000000..40432cbd6a10 --- /dev/null +++ b/ver.md @@ -0,0 +1,141 @@ +## Version 1.35.0 - 2025-01-15 + +Features: +* Add support for AMD GPUs via --gpus=amd [#19749](https://github.com/kubernetes/minikube/pull/19749) +* Support latest Kubernetes v1.32.0 [#20091](https://github.com/kubernetes/minikube/pull/20091) +* Adds support for kubeadm.k8s.io/v1beta4 available since k8s v1.31 [#19790](https://github.com/kubernetes/minikube/pull/19790) +* Download kicbase from github assets as a fail over option [#19464](https://github.com/kubernetes/minikube/pull/19464) + +Improvements: +* Merge nvidia-gpu-device-plugin and nvidia-device-plugin. [#19545](https://github.com/kubernetes/minikube/pull/19545) +* cilium: remove appArmorProfile for k8s