This is the source code for the demo done as part of the talk "Imperative, Declarative and Kubernetes" at the Kubernetes Community Days, Bengaluru 2021 conferernce.
To run the demo, you will need the following installed:
- Docker
- Go
go get -u github.com/MadhavJivrajani/kcdctl
Note: This will install the kcdctl
executable which can be used anywhere in the termnial provided $GOPATH/bin is in your PATH.
git clone https://github.com/MadhavJivrajani/kcdctl.git && cd kcdctl
go build -o kcdctl main.go
mv kcdctl /usr/local/bin # to make the executable available system wide
██╗ ██╗ ██████╗██████╗ ██████╗████████╗██╗
██║ ██╔╝██╔════╝██╔══██╗██╔════╝╚══██╔══╝██║
█████╔╝ ██║ ██║ ██║██║ ██║ ██║
██╔═██╗ ██║ ██║ ██║██║ ██║ ██║
██║ ██╗╚██████╗██████╔╝╚██████╗ ██║ ███████╗
╚═╝ ╚═╝ ╚═════╝╚═════╝ ╚═════╝ ╚═╝ ╚══════╝
A tool to help demo imperative and declarative systems as part of the KCD Bangalore Conference
Usage:
kcdctl [command]
Available Commands:
apply applies a configuarion to the system
cleanup cleanup removes all containers that were created as part of a given configuration file
help Help about any command
spawn spawn creates containers
Flags:
--config string config file (default is $HOME/.kcdctl.yaml)
-h, --help help for kcdctl
Use "kcdctl [command] --help" for more information about a command.
applies a configuarion to the system
Usage:
kcdctl apply [flags]
Flags:
-f, --file string file is the yaml configuarion file that the user wants to apply on the system
-h, --help help for apply
-m, --mode string mode is the mode the system should be run in: imperative/declarative (default "declarative")
Global Flags:
--config string config file (default is $HOME/.kcdctl.yaml)
An example of a configuration file can be found here.
# don't really need to mention mode for declarative.
kcdctl apply -f examples/cluster.yaml --mode=declarative
kcdctl apply -f examples/cluster.yaml --mode=imperative
The first step in either of the mode
s is BootstrapHost
, in which:
- A docker network called
kcd-bangalore-demo
is created and the load balancer container is attached to this network. - A load balancer is created in accordance with the config provided by the user.
If an excess number of containers than the desired state are created, nothing is done, excess container deletion isn't taken care of, but ideally should happen.
spawn creates containers
Usage:
kcdctl spawn [flags]
Flags:
-d, --diff int diff is the number of containers to spawn (right now, assumed to be +ve) (default 1)
-f, --file string file is the yaml configuarion file that the user wants to apply on the system
-h, --help help for spawn
Global Flags:
--config string config file (default is $HOME/.kcdctl.yaml)
spawn
is assumed to be used when in an imperative
mode. In a declarative
mode, spawning of containers is handled automatically.
cleanup removes all containers that were created as part of a given configuration file
Usage:
kcdctl cleanup [flags]
Flags:
-f, --file string file is the yaml configuarion file using which containers will be cleaned up
-h, --help help for cleanup
Global Flags:
--config string config file (default is $HOME/.kcdctl.yaml)
cleanup
performs the following steps:
- First stop containers that are running the application.
- Next stop the load balancer container.
- Finally delete the docker network that was created during
BootstrapHost