mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Added new command clusterinfo to kubectl
This is first version of the command. It prints IPs of master and cluster services. Should be improved once generalized labels are implemented #341. It requires label kubernet.io/cluster-service=true set for cluster services. Follow up cl after discussion in #4417.
This commit is contained in:
parent
b583d4edb4
commit
e92192d379
@ -11,6 +11,7 @@ desiredState:
|
|||||||
k8s-app: kube-dns
|
k8s-app: kube-dns
|
||||||
podTemplate:
|
podTemplate:
|
||||||
labels:
|
labels:
|
||||||
|
name: kube-dns
|
||||||
k8s-app: kube-dns
|
k8s-app: kube-dns
|
||||||
kubernetes.io/cluster-service: "true"
|
kubernetes.io/cluster-service: "true"
|
||||||
desiredState:
|
desiredState:
|
||||||
|
46
docs/kubectl-clusterinfo.md
Normal file
46
docs/kubectl-clusterinfo.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
## kubectl clusterinfo
|
||||||
|
|
||||||
|
Display cluster info
|
||||||
|
|
||||||
|
### Synopsis
|
||||||
|
|
||||||
|
```
|
||||||
|
Display addresses of the master and services with label kubernetes.io/cluster-service=true
|
||||||
|
```
|
||||||
|
|
||||||
|
kubectl clusterinfo
|
||||||
|
|
||||||
|
### Options inherrited from parent commands
|
||||||
|
|
||||||
|
```
|
||||||
|
--alsologtostderr=false: log to standard error as well as files
|
||||||
|
--api-version="": The API version to use when talking to the server
|
||||||
|
-a, --auth-path="": Path to the auth info file. If missing, prompt the user. Only used if using https.
|
||||||
|
--certificate-authority="": Path to a cert. file for the certificate authority.
|
||||||
|
--client-certificate="": Path to a client key file for TLS.
|
||||||
|
--client-key="": Path to a client key file for TLS.
|
||||||
|
--cluster="": The name of the kubeconfig cluster to use
|
||||||
|
--context="": The name of the kubeconfig context to use
|
||||||
|
-h, --help=false: help for kubectl
|
||||||
|
--insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
||||||
|
--kubeconfig="": Path to the kubeconfig file to use for CLI requests.
|
||||||
|
--log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
|
||||||
|
--log_dir=: If non-empty, write log files in this directory
|
||||||
|
--log_flush_frequency=5s: Maximum number of seconds between log flushes
|
||||||
|
--logtostderr=true: log to standard error instead of files
|
||||||
|
--match-server-version=false: Require server version to match client version
|
||||||
|
--namespace="": If present, the namespace scope for this CLI request.
|
||||||
|
--password="": Password for basic authentication to the API server.
|
||||||
|
-s, --server="": The address and port of the Kubernetes API server
|
||||||
|
--stderrthreshold=2: logs at or above this threshold go to stderr
|
||||||
|
--token="": Bearer token for authentication to the API server.
|
||||||
|
--user="": The name of the kubeconfig user to use
|
||||||
|
--username="": Username for basic authentication to the API server.
|
||||||
|
--v=0: log level for V logs
|
||||||
|
--validate=false: If true, use a schema to validate the input before sending it
|
||||||
|
--vmodule=: comma-separated list of pattern=N settings for file-filtered logging
|
||||||
|
```
|
||||||
|
|
||||||
|
### SEE ALSO
|
||||||
|
* [kubectl](kubectl.md)
|
||||||
|
|
@ -45,6 +45,7 @@ kubectl
|
|||||||
|
|
||||||
### SEE ALSO
|
### SEE ALSO
|
||||||
* [kubectl-version](kubectl-version.md)
|
* [kubectl-version](kubectl-version.md)
|
||||||
|
* [kubectl-clusterinfo](kubectl-clusterinfo.md)
|
||||||
* [kubectl-proxy](kubectl-proxy.md)
|
* [kubectl-proxy](kubectl-proxy.md)
|
||||||
* [kubectl-get](kubectl-get.md)
|
* [kubectl-get](kubectl-get.md)
|
||||||
* [kubectl-describe](kubectl-describe.md)
|
* [kubectl-describe](kubectl-describe.md)
|
||||||
|
132
docs/man/man1/kubectl-clusterinfo.1
Normal file
132
docs/man/man1/kubectl-clusterinfo.1
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
.TH "KUBERNETES" "1" " kubernetes User Manuals" "Eric Paris" "Jan 2015" ""
|
||||||
|
|
||||||
|
|
||||||
|
.SH NAME
|
||||||
|
.PP
|
||||||
|
kubectl clusterinfo \- Display cluster info
|
||||||
|
|
||||||
|
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.PP
|
||||||
|
\fBkubectl clusterinfo\fP [OPTIONS]
|
||||||
|
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.PP
|
||||||
|
Display addresses of the master and services with label kubernetes.io/cluster\-service=true
|
||||||
|
|
||||||
|
|
||||||
|
.SH OPTIONS INHERITED FROM PARENT COMMANDS
|
||||||
|
.PP
|
||||||
|
\fB\-\-alsologtostderr\fP=false
|
||||||
|
log to standard error as well as files
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-api\-version\fP=""
|
||||||
|
The API version to use when talking to the server
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-a\fP, \fB\-\-auth\-path\fP=""
|
||||||
|
Path to the auth info file. If missing, prompt the user. Only used if using https.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-certificate\-authority\fP=""
|
||||||
|
Path to a cert. file for the certificate authority.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-client\-certificate\fP=""
|
||||||
|
Path to a client key file for TLS.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-client\-key\fP=""
|
||||||
|
Path to a client key file for TLS.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-cluster\fP=""
|
||||||
|
The name of the kubeconfig cluster to use
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-context\fP=""
|
||||||
|
The name of the kubeconfig context to use
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-h\fP, \fB\-\-help\fP=false
|
||||||
|
help for kubectl
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-insecure\-skip\-tls\-verify\fP=false
|
||||||
|
If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-kubeconfig\fP=""
|
||||||
|
Path to the kubeconfig file to use for CLI requests.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-log\_backtrace\_at\fP=:0
|
||||||
|
when logging hits line file:N, emit a stack trace
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-log\_dir\fP=""
|
||||||
|
If non\-empty, write log files in this directory
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-log\_flush\_frequency\fP=5s
|
||||||
|
Maximum number of seconds between log flushes
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-logtostderr\fP=true
|
||||||
|
log to standard error instead of files
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-match\-server\-version\fP=false
|
||||||
|
Require server version to match client version
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-namespace\fP=""
|
||||||
|
If present, the namespace scope for this CLI request.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-password\fP=""
|
||||||
|
Password for basic authentication to the API server.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-s\fP, \fB\-\-server\fP=""
|
||||||
|
The address and port of the Kubernetes API server
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-stderrthreshold\fP=2
|
||||||
|
logs at or above this threshold go to stderr
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-token\fP=""
|
||||||
|
Bearer token for authentication to the API server.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-user\fP=""
|
||||||
|
The name of the kubeconfig user to use
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-username\fP=""
|
||||||
|
Username for basic authentication to the API server.
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-v\fP=0
|
||||||
|
log level for V logs
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-validate\fP=false
|
||||||
|
If true, use a schema to validate the input before sending it
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\fB\-\-vmodule\fP=
|
||||||
|
comma\-separated list of pattern=N settings for file\-filtered logging
|
||||||
|
|
||||||
|
|
||||||
|
.SH SEE ALSO
|
||||||
|
.PP
|
||||||
|
\fBkubectl(1)\fP,
|
||||||
|
|
||||||
|
|
||||||
|
.SH HISTORY
|
||||||
|
.PP
|
||||||
|
January 2015, Originally compiled by Eric Paris (eparis at redhat dot com) based on the kubernetes source material, but hopefully they have been automatically generated since!
|
@ -128,7 +128,7 @@ Find more information at
|
|||||||
|
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.PP
|
.PP
|
||||||
\fBkubectl\-version(1)\fP, \fBkubectl\-proxy(1)\fP, \fBkubectl\-get(1)\fP, \fBkubectl\-describe(1)\fP, \fBkubectl\-create(1)\fP, \fBkubectl\-update(1)\fP, \fBkubectl\-delete(1)\fP, \fBkubectl\-config(1)\fP, \fBkubectl\-namespace(1)\fP, \fBkubectl\-log(1)\fP, \fBkubectl\-rollingupdate(1)\fP, \fBkubectl\-resize(1)\fP, \fBkubectl\-exec(1)\fP, \fBkubectl\-port\-forward(1)\fP, \fBkubectl\-run\-container(1)\fP, \fBkubectl\-stop(1)\fP, \fBkubectl\-expose(1)\fP, \fBkubectl\-label(1)\fP,
|
\fBkubectl\-version(1)\fP, \fBkubectl\-clusterinfo(1)\fP, \fBkubectl\-proxy(1)\fP, \fBkubectl\-get(1)\fP, \fBkubectl\-describe(1)\fP, \fBkubectl\-create(1)\fP, \fBkubectl\-update(1)\fP, \fBkubectl\-delete(1)\fP, \fBkubectl\-config(1)\fP, \fBkubectl\-namespace(1)\fP, \fBkubectl\-log(1)\fP, \fBkubectl\-rollingupdate(1)\fP, \fBkubectl\-resize(1)\fP, \fBkubectl\-exec(1)\fP, \fBkubectl\-port\-forward(1)\fP, \fBkubectl\-run\-container(1)\fP, \fBkubectl\-stop(1)\fP, \fBkubectl\-expose(1)\fP, \fBkubectl\-label(1)\fP,
|
||||||
|
|
||||||
|
|
||||||
.SH HISTORY
|
.SH HISTORY
|
||||||
|
72
pkg/kubectl/cmd/clusterinfo.go
Normal file
72
pkg/kubectl/cmd/clusterinfo.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 Google Inc. 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 (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/resource"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (f *Factory) NewCmdClusterInfo(out io.Writer) *cobra.Command {
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "clusterinfo",
|
||||||
|
Short: "Display cluster info",
|
||||||
|
Long: "Display addresses of the master and services with label kubernetes.io/cluster-service=true",
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
RunClusterInfo(f, out, cmd)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
func RunClusterInfo(factory *Factory, out io.Writer, cmd *cobra.Command) {
|
||||||
|
client, err := factory.ClientConfig(cmd)
|
||||||
|
checkErr(err)
|
||||||
|
fmt.Fprintf(out, "Kubernetes master is running at %v\n", client.Host)
|
||||||
|
|
||||||
|
mapper, typer := factory.Object(cmd)
|
||||||
|
cmdNamespace, err := factory.DefaultNamespace(cmd)
|
||||||
|
checkErr(err)
|
||||||
|
|
||||||
|
// TODO: use generalized labels once they are implemented (#341)
|
||||||
|
b := resource.NewBuilder(mapper, typer, factory.ClientMapperForCommand(cmd)).
|
||||||
|
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||||
|
SelectorParam("kubernetes.io/cluster-service=true").
|
||||||
|
ResourceTypeOrNameArgs(false, []string{"services"}...).
|
||||||
|
Latest()
|
||||||
|
b.Do().Visit(func(r *resource.Info) error {
|
||||||
|
services := r.Object.(*api.ServiceList).Items
|
||||||
|
for _, service := range services {
|
||||||
|
splittedLink := strings.Split(strings.Split(service.ObjectMeta.SelfLink, "?")[0], "/")
|
||||||
|
// insert "proxy" into the link
|
||||||
|
splittedLink = append(splittedLink, "")
|
||||||
|
copy(splittedLink[4:], splittedLink[3:])
|
||||||
|
splittedLink[3] = "proxy"
|
||||||
|
link := strings.Join(splittedLink, "/")
|
||||||
|
fmt.Fprintf(out, "%v is running at %v%v/\n", service.ObjectMeta.Labels["name"], client.Host, link)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
// TODO: consider printing more information about cluster
|
||||||
|
}
|
@ -197,6 +197,7 @@ Find more information at https://github.com/GoogleCloudPlatform/kubernetes.`,
|
|||||||
f.BindFlags(cmds.PersistentFlags())
|
f.BindFlags(cmds.PersistentFlags())
|
||||||
|
|
||||||
cmds.AddCommand(f.NewCmdVersion(out))
|
cmds.AddCommand(f.NewCmdVersion(out))
|
||||||
|
cmds.AddCommand(f.NewCmdClusterInfo(out))
|
||||||
cmds.AddCommand(f.NewCmdProxy(out))
|
cmds.AddCommand(f.NewCmdProxy(out))
|
||||||
|
|
||||||
cmds.AddCommand(f.NewCmdGet(out))
|
cmds.AddCommand(f.NewCmdGet(out))
|
||||||
|
Loading…
Reference in New Issue
Block a user