Repository: kubernetes/minikube
Pull request #19364 (2024-08-02 08:41:04)

Add "-o json" option for "minikube addon images"
I wanted to be able to programmatically consume the output of `minikube addon images ADDON_NAME`.

The normal behavior is unchanged:

```shell
$ minikube addons images gvisor
    ▪ gvisor has the following images:
|-------------|----------------------------------------------------------------------------------------------------------|------------------|
| IMAGE NAME  |                                              DEFAULT IMAGE                                               | DEFAULT REGISTRY |
|-------------|----------------------------------------------------------------------------------------------------------|------------------|
| GvisorAddon | k8s-minikube/gvisor-addon:v0.0.1@sha256:d29adbddc7a44dab4c675c0eaea398907fe1f33f5f723274b0d40195b3076cae | gcr.io           |
|-------------|----------------------------------------------------------------------------------------------------------|------------------|
```

But now you can do `-o json`:

```shell
$ minikube addons images gvisor -o json
["gcr.io/k8s-minikube/gvisor-addon:v0.0.1@sha256:d29adbddc7a44dab4c675c0eaea398907fe1f33f5f723274b0d40195b3076cae"]
```

Also fixed the grammar of the existing message from "has following images" to "has the following images."


k8s-ci-robot: Hi @thomasjm. Thanks for your PR.

I'm waiting for a [kubernetes](https://github.com/orgs/kubernetes/people) member to verify that this patch is reasonable to test. If it is, they should reply with `/ok-to-test` on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should [join the org](https://git.k8s.io/community/community-membership.md#member) to skip this step.

Once the patch is verified, the new status will be reflected by the `ok-to-test` label.

I understand the commands that are listed [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Fminikube).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository.
</details>

k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes/minikube/pull/19364#" title="Author self-approved">thomasjm</a>*
**Once this PR has been reviewed and has the lgtm label**, please assign [prezha](https://github.com/prezha) for approval. For more information see [the Kubernetes Code Review Process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process).

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Fminikube).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/kubernetes/minikube/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["prezha"]} -->
minikube-bot: Can one of the admins verify this patch?

Patch:
diff --git a/cmd/minikube/cmd/config/images.go b/cmd/minikube/cmd/config/images.go
index 2ed24814e..d1bcb4459 100644
--- a/cmd/minikube/cmd/config/images.go
+++ b/cmd/minikube/cmd/config/images.go
@@ -17,7 +17,10 @@ limitations under the License.
 package config
 
 import (
+	"encoding/json"
+	"fmt"
 	"os"
+	"strings"
 
 	"github.com/olekukonko/tablewriter"
 	"github.com/spf13/cobra"
@@ -27,6 +30,8 @@ import (
 	"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",
@@ -38,33 +43,65 @@ var addonsImagesCmd = &cobra.Command{
 		}
 
 		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.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.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/netlify.toml b/netlify.toml
index 122abd864..e1ef5ba20 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -5,7 +5,7 @@ command = "pwd && cd themes/docsy && npm install && git submodule update -f --in
 
 [build.environment]
 NODE_VERSION = "20.16.0"
-HUGO_VERSION = "v0.129.0"
+HUGO_VERSION = "v0.131.0"
 
 [context.production.environment]
 HUGO_ENV = "production"
diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go
index aa2737ea4..b1604523e 100644
--- a/pkg/minikube/assets/addons.go
+++ b/pkg/minikube/assets/addons.go
@@ -779,7 +779,7 @@ var Addons = map[string]*Addon{
 		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-clusterrolebinding.yaml", vmpath.GuestAddonsDir, "headlamp-clusterrolebinding.yaml", "0640"),
 	}, false, "headlamp", "3rd party (kinvolk.io)", "yolossn", "https://minikube.sigs.k8s.io/docs/handbook/addons/headlamp/",
 		map[string]string{
-			"Headlamp": "headlamp-k8s/headlamp:v0.24.1@sha256:1c3f42aacd8eee1d3f1c63efb5a3b42da387ca1d87b77b0f486e8443201fcb37",
+			"Headlamp": "headlamp-k8s/headlamp:v0.25.0@sha256:899d106eeb55b0afc4ee6e51c03bc4418de0bd0e79c39744d4d0d751aae6a971",
 		},
 		map[string]string{
 			"Headlamp": "ghcr.io",
diff --git a/pkg/minikube/bootstrapper/images/images.go b/pkg/minikube/bootstrapper/images/images.go
index 44f73a985..dec3c8798 100644
--- a/pkg/minikube/bootstrapper/images/images.go
+++ b/pkg/minikube/bootstrapper/images/images.go
@@ -179,7 +179,7 @@ func KindNet(repo string) string {
 	if repo == "" {
 		repo = "docker.io/kindest"
 	}
-	return path.Join(repo, "kindnetd:v20240719-e7903573")
+	return path.Join(repo, "kindnetd:v20240730-75a5af0c")
 }
 
 // all calico images are from https://github.com/projectcalico/calico/blob/master/manifests/calico.yaml
diff --git a/pkg/minikube/constants/constants.go b/pkg/minikube/constants/constants.go
index 4d85733c9..32bc7bebe 100644
--- a/pkg/minikube/constants/constants.go
+++ b/pkg/minikube/constants/constants.go
@@ -37,7 +37,7 @@ const (
 	DefaultKubernetesVersion = "v1.30.3"
 	// NewestKubernetesVersion is the newest Kubernetes version to test against
 	// NOTE: You may need to update coreDNS & etcd versions in pkg/minikube/bootstrapper/images/images.go
-	NewestKubernetesVersion = "v1.31.0-beta.0"
+	NewestKubernetesVersion = "v1.31.0-rc.0"
 	// OldestKubernetesVersion is the oldest Kubernetes version to test against
 	OldestKubernetesVersion = "v1.20.0"
 	// NoKubernetesVersion is the version used when users does NOT want to install kubernetes
diff --git a/site/content/en/docs/commands/addons.md b/site/content/en/docs/commands/addons.md
index a850f2e97..7fc106349 100644
--- a/site/content/en/docs/commands/addons.md
+++ b/site/content/en/docs/commands/addons.md
@@ -219,6 +219,12 @@ minikube addons images ADDON_NAME [flags]
 minikube addons images ingress
 ```
 
+### Options
+
+```
+  -o, --output string   minikube addons images ADDON_NAME --output OUTPUT. table, json (default "table")
+```
+
 ### Options inherited from parent commands
 
 ```
diff --git a/site/content/en/docs/commands/start.md b/site/content/en/docs/commands/start.md
index 6534fc7f0..e092deff2 100644
--- a/site/content/en/docs/commands/start.md
+++ b/site/content/en/docs/commands/start.md
@@ -74,7 +74,7 @@ minikube start [flags]
       --interactive                       Allow user prompts for more information (default true)
       --iso-url strings                   Locations to fetch the minikube ISO from. The list depends on the machine architecture.
       --keep-context                      This will keep the existing kubectl context and will create a minikube context.
-      --kubernetes-version string         The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.30.3, 'latest' for v1.31.0-beta.0). Defaults to 'stable'.
+      --kubernetes-version string         The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.30.3, 'latest' for v1.31.0-rc.0). Defaults to 'stable'.
       --kvm-gpu                           Enable experimental NVIDIA GPU support in minikube
       --kvm-hidden                        Hide the hypervisor signature from the guest in minikube (kvm2 driver only)
       --kvm-network string                The KVM default network name. (kvm2 driver only) (default "default")
diff --git a/translations/de.json b/translations/de.json
index 943998208..1d18602db 100644
--- a/translations/de.json
+++ b/translations/de.json
@@ -1069,6 +1069,7 @@
 	"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 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\\\"`",
@@ -1159,6 +1160,7 @@
 	"{{.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",
diff --git a/translations/es.json b/translations/es.json
index fe87c3a98..a9e430454 100644
--- a/translations/es.json
+++ b/translations/es.json
@@ -1028,6 +1028,7 @@
 	"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 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'": "",
@@ -1113,8 +1114,8 @@
 	"{{.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": "",
 	"{{.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). You can pass '--force' to skip this check.": "",
diff --git a/translations/fr.json b/translations/fr.json
index 7355b6588..62b9c12f8 100644
--- a/translations/fr.json
+++ b/translations/fr.json
@@ -1054,6 +1054,7 @@
 	"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 images ADDON_NAME --output OUTPUT. table, json": "",
 	"minikube addons list --output OUTPUT. json, list": "liste des modules minikube --output OUTPUT. json, liste",
 	"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'",
@@ -1150,6 +1151,7 @@
 	"{{.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}} 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é)",
diff --git a/translations/ja.json b/translations/ja.json
index f29a183bf..97800cd79 100644
--- a/translations/ja.json
+++ b/translations/ja.json
@@ -1005,6 +1005,7 @@
 	"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 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' を実行することで修正できます",
@@ -1096,6 +1097,7 @@
 	"{{.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' を指定するとこのチェックをスキップできます。",
diff --git a/translations/ko.json b/translations/ko.json
index 9eaeb0a50..fac638614 100644
--- a/translations/ko.json
+++ b/translations/ko.json
@@ -1043,6 +1043,7 @@
 	"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 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'": "",
@@ -1133,6 +1134,7 @@
 	"{{.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.": "",
diff --git a/translations/pl.json b/translations/pl.json
index c945571cc..afaf67cc6 100644
--- a/translations/pl.json
+++ b/translations/pl.json
@@ -1039,6 +1039,7 @@
 	"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 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'": "",
@@ -1128,6 +1129,7 @@
 	"{{.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)",
diff --git a/translations/ru.json b/translations/ru.json
index bf4fecbe0..a19fc189b 100644
--- a/translations/ru.json
+++ b/translations/ru.json
@@ -957,6 +957,7 @@
 	"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 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'": "",
@@ -1041,8 +1042,8 @@
 	"{{.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": "",
 	"{{.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}} заканчивается место на диске, что может привести к проблемам в работе! ({{.p}}% занято)",
diff --git a/translations/strings.txt b/translations/strings.txt
index e20082c3e..44dc2f7f9 100644
--- a/translations/strings.txt
+++ b/translations/strings.txt
@@ -955,6 +955,7 @@
 	"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 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'": "",
@@ -1039,8 +1040,8 @@
 	"{{.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": "",
 	"{{.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). You can pass '--force' to skip this check.": "",
diff --git a/translations/zh-CN.json b/translations/zh-CN.json
index c641d40f3..c1e747b09 100644
--- a/translations/zh-CN.json
+++ b/translations/zh-CN.json
@@ -1177,6 +1177,7 @@
 	"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.": "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 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 正在退出。如果以上信息没有帮助，请提交问题反馈：",
@@ -1270,6 +1271,7 @@
 	"{{.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' 参数来跳过此检查。",


Test patch:
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd-api-port.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd-api-port.yaml
index a61fa8041..121d80f80 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd-api-port.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd-api-port.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.31.0-beta.0
+kubernetesVersion: v1.31.0-rc.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd-pod-network-cidr.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd-pod-network-cidr.yaml
index 0fe7dad51..4462641f6 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd-pod-network-cidr.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd-pod-network-cidr.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.31.0-beta.0
+kubernetesVersion: v1.31.0-rc.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "192.168.32.0/20"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd.yaml
index a35e33824..03e2ff681 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/containerd.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.31.0-beta.0
+kubernetesVersion: v1.31.0-rc.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/crio-options-gates.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/crio-options-gates.yaml
index 86a5b6c29..283cb0d4e 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/crio-options-gates.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/crio-options-gates.yaml
@@ -44,7 +44,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.31.0-beta.0
+kubernetesVersion: v1.31.0-rc.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/crio.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/crio.yaml
index f3fa4a381..563af1e64 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/crio.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/crio.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.31.0-beta.0
+kubernetesVersion: v1.31.0-rc.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/default.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/default.yaml
index 79b08b1fc..d01a10746 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/default.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/default.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.31.0-beta.0
+kubernetesVersion: v1.31.0-rc.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/dns.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/dns.yaml
index db42b71f7..e350a140f 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/dns.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/dns.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.31.0-beta.0
+kubernetesVersion: v1.31.0-rc.0
 networking:
   dnsDomain: minikube.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/image-repository.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/image-repository.yaml
index 9e06890ed..9d0f40c12 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/image-repository.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/image-repository.yaml
@@ -39,7 +39,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.31.0-beta.0
+kubernetesVersion: v1.31.0-rc.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/options.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/options.yaml
index eb34e8548..83cd1beeb 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/options.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.31/options.yaml
@@ -41,7 +41,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.31.0-beta.0
+kubernetesVersion: v1.31.0-rc.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"