It turns out that docker client only pays attention to the following
environment variables:
DOCKER_HOST to set the url to the docker server.
DOCKER_API_VERSION to set the version of the API to reach, leave empty for latest.
DOCKER_CERT_PATH to load the TLS certificates from.
DOCKER_TLS_VERIFY to enable or disable TLS verification, off by default.
A miss configured DOCKER_MACHINE_NAME won't affect docker client, so k3d
should just ignore the error.
We have been giving user warnings about --timeout going away for a
while. Now fully deprecate it.
Use -t for --wait option
Move -w from --wait to --workers. Many users of K3d generate multi-node
clusters, -w will make their life easier.
The APIs of createServer() and createWorker() takes too many arguments.
It is getting harder to maintain.
Use a new struct ClusterSpec to make API simpler. This also reduces
some code duplications.
When running on a docker machine, the default X598 certificate does not
allow access via docker machine's IP. This patch fixes this by adding
"--tls-san <docker machine IP>" to the K3S server argument list.
In addition to provide an interactive shell, this patch adds the
'--command' and '-c' options to allow user to issue a command in the
context of a cluster.
For example:
$ k3d bash -c 'kubectl cluster-info'
Add the basic frame work for supporting spawning a bash shell by cli
command.
With this change, we can spawn a bash shell in the context of a cluster
$ k3d create -n my-cluster
$ k3d bash -n my-cluster
[my-cluster] $>
// execute commands with KUBECONFIG already set up
[my-cluster] $> kubectl get pods
Co-authored-by: Thorsten Klein <iwilltry42@gmail.com>
@iwilltry42 pointed out that currnet error path calls os.Exit(1), which
does follow the normal CLI framework. This patch implements this
suggestion.
Add a closure fucntion deleteCluster() to reduce code duplication.
When creating clusters with the --auto-restart flag, any running cluster
will remain "running" up on docker daemon restart.
By default, without this flag, a "running" cluster becomes "stopped"
after docker daemon restart.
Clusters stopped with 'k3d stop' command will remain stopped after
docker daemon restart regardless the settings of this flag.
Before this commit, when creating a cluster was not successful, some
resource may be lingering behind. This commit fixes those cases.
Now the cluster creation model is easier to understand. Either a cluster
is successfully created, or all resources created will be cleaned up.
The intention is to keep the "atomic create" model going forward for
k3d.
This change improve the error message. It also avoids the tricky situation of
potentially destroying an existing clusters when the same name cluster
creation fails. For more details see issue #42.
Most k3d arguments are using in "stringSlice" style, allowing the
argument to supplied multiple times. Currently "volume" is an exception
to this style, require multiple arguments to be supplied in a single
argument, separated by comma.
This commit improve the k3d usability by improve the consistency of its
argument style.
MAke sure the cluster name is a RFC 1123 compliant host name, since the
cluster name is used as base for expanding into a auto generated
host names for k3s nodes.
All ports exposed by --publish will also be exported for all worker
nodes. The host port will be auto indexed based worker id.
For example: with the following command option:
k3d create --publish 80:80 --publish 90:90/udp --workers 1
The exposed ports will be:
host TCP port 80 -> k3s server TCP 80
host TCP port 90 -> k3s server TCP 90
host UDP port 81 -> k3s worker 0 UDP 80
host UDP port 91 -> k3s worker 0 UDP 90
Inspired by the docker CLI, --publish take same input as docker CLI and
provides similar functions. For the k3s cluster server node, it behaves
the same as docker cli; it exports the k3d server ports to the host
ports.
Handling for worker nodes will be added in the subsequent patches.
This option can be used mutiple times for exposing more ports.
--add-port is an alias to this option.
Before this change, command:
$ k3d create -name test
$ k3d get-kubeconfig
Produces the following error message:
panic: runtime error: index out of range
goroutine 1 [running]:
github.com/rancher/k3d/cli.GetKubeConfig(0xc00031a160, 0x0, 0x0)
/Users/azhou/projs/k3d/cli/commands.go:335 +0x105d
github.com/urfave/cli.HandleAction(0x13e7ca0, 0x148f0b0, 0xc00031a160, 0xc000304000, 0x0)
/Users/azhou/projs/rcloud/pkg/mod/github.com/urfave/cli@v1.20.0/app.go:490 +0xc8
github.com/urfave/cli.Command.Run(0x1477cb5, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1480cd8, 0x23, 0x0, ...)
/Users/azhou/projs/rcloud/pkg/mod/github.com/urfave/cli@v1.20.0/command.go:210 +0x996
github.com/urfave/cli.(*App).Run(0xc0000bc1a0, 0xc00000e060, 0x2, 0x2, 0x0, 0x0)
/Users/azhou/projs/rcloud/pkg/mod/github.com/urfave/cli@v1.20.0/app.go:255 +0x6af
main.main()
/Users/azhou/projs/k3d/main.go:185 +0x11e0
This patch improve the error message by avoid the panic. Now the output
becomes:
019/05/02 12:05:30 No server container for cluster k3s_default