Shipyard has many advanced features to use in consuming projects.
To utilize an advanced feature in a project consuming Shipyard, a good practice is to change the project’s Makefile to have the advanced logic that is always needed. Any variable functionality can then be passed as desired in the command line.
Shipyard ships an image building script build_image.sh
which can be used to build the image(s) that you require. The script has built in
caching capabilities to speed up local and pull request CI builds, by utilizing docker’s ability to reuse layers from a cached image.
The script accepts several flags:
For example, to build the submariner image use:
${SCRIPTS_DIR}/build_image.sh -i submariner -f package/Dockerfile
Shipyard supports specifying different settings for each deployed cluster. A default cluster_settings
is supplied in the image, so any
custom settings override those. The settings are sent to supporting scripts using a --cluster_settings
flag.
Currently, the following settings are supported:
clusters: An array of the clusters to deploy.
clusters=(cluster1,cluster2)
cluster_nodes: A map of cluster names to a space separated string, representing a list of nodes to deploy. Supported values are
control-plane
and worker
.
cluster_nodes[cluster1]="control-plane worker"
cluster_nodes[cluster2]="control-plane worker worker"
cluster_subm: A map of cluster names to values specifying if Submariner should be installed. Set to true
to have Submariner
installed, or to false
to skip the installation.
cluster_subm[cluster1]="false"
cluster_subm[cluster2]="true"
As an example, in order to customize the clusters to have two workers, and no submariner on the 1st cluster, create a cluster_settings
file in the project:
cluster_nodes['cluster1']="control-plane"
cluster_nodes['cluster2']="control-plane worker worker"
cluster_nodes['cluster3']="control-plane worker worker"
cluster_subm['cluster1']="false"
Then, to apply these settings, add this snippet to the Makefile:
CLUSTER_SETTINGS_FLAG = --cluster_settings $(DAPPER_SOURCE)/path/to/cluster_settings
CLUSTERS_ARGS += $(CLUSTER_SETTINGS_FLAG)
DEPLOY_ARGS += $(CLUSTER_SETTINGS_FLAG)
The path to cluster_settings
should be specified relative to the project root; this ends up available in the build container in the
directory referenced by $DAPPER_SOURCE
.
It’s possible to supply extra flags when calling make clusters
via a make variable CLUSTERS_ARGS
(or an environment variable with the
same name). These flags affect how the clusters are deployed (and possibly influence how Submariner works).
Flags of note:
k8s_version: Allows to specify the Kubernetes version that kind will deploy. Available versions can be found here.
make clusters CLUSTERS_ARGS='--k8s_version 1.18.0'
globalnet: When set, deploys the clusters with overlapping Pod & Service CIDRs to simulate this scenario.
make clusters CLUSTERS_ARGS='--globalnet'
It’s possible to supply extra flags when calling make deploy
via a make variable DEPLOY_ARGS
(or an environment variable with the same
name). These flags affect how Submariner is deployed on the clusters.
Since deploy
relies on clusters
then effectively you could also specify CLUSTERS_ARGS
to control the cluster deployment (provided the
cluster hasn’t been deployed yet).
Flags of note:
deploytool: Specifies the deployment tool to use: operator
(default) or helm
.
make deploy DEPLOY_ARGS='--deploytool operator'
deploytool_broker_args: Any extra arguments to pass to the deploy tool when deploying the broker.
make deploy DEPLOY_ARGS='--deploytool operator --deploytool_broker_args "--service-discovery"'
deploytool_submariner_args: Any extra arguments to pass to the deploy tool when deploying Submariner.
make deploy DEPLOY_ARGS='--deploytool operator --deploytool_submariner_args "--cable-driver wireguard"'
globalnet: When set, deploys Submariner with the globalnet controller, and assigns a unique Global CIDR to each cluster.
make deploy DEPLOY_ARGS='--globalnet'
As an example, in order to deploy with Lighthouse and support both Operator and Helm deployments, one can add this snippet to the Makefile:
ifeq ($(deploytool),operator)
DEPLOY_ARGS += --deploytool operator --deploytool_broker_args '--service-discovery'
else
DEPLOY_ARGS += --deploytool helm --deploytool_broker_args '--set submariner.serviceDiscovery=true' --deploytool_submariner_args '--set submariner.serviceDiscovery=true,lighthouse.image.repository=localhost:5000/lighthouse-agent,serviceAccounts.lighthouse.create=true'
endif
In such a case, the call to deploy the environment would look like this:
make deploy [deploytool=operator]
Note that deploytool
is a variable used to determine the tool to use, but isn’t passed to or used by Shipyard.