Skip to main content

Customizing a Kubernetes Cluster by Building Custom Images

This guide introduces how to use kubeadm config to build custom images for customizing a Kubernetes cluster.

Building Custom Images

To build a custom image, run the following commands:

$ mkdir -p /tmp/buildimage
cat > /tmp/buildimage/kubeadm.yml <<EOF
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
networking:
serviceSubnet: "100.55.0.0/16"
podSubnet: "10.160.0.0/12"
EOF

$ cat > /tmp/buildimage/Kubefile <<EOF
FROM labring/kubernetes-docker:v1.25.0
COPY kubeadm.yml etc/
EOF

$ sudo sealos build --debug -t hack:dev /tmp/buildimage

Attaching Application Configurations to Clusterfile

Next, we will attach application configurations in the Clusterfile. For example, if you want to change the CIDR range for Pods, you should change the spec.data.spec.calicoNetwork.ipPools.cidr field. The final Clusterfile would look like this:

apiVersion: apps.sealos.io/v1beta1
kind: Cluster
metadata:
name: default
spec:
hosts:
- ips:
- 192.168.0.2:22
- 192.168.0.3:22
- 192.168.0.4:22
roles:
- master
- amd64
- ips:
- 192.168.0.5:22
- 192.168.0.6:22
- 192.168.0.7:22
roles:
- node
- amd64
image:
- hack:dev
- labring/helm:v3.8.2
- labring/calico:v3.24.1
ssh:
passwd: xxx
pk: /root/.ssh/id_rsa
port: 22
user: root
status: {}
---
apiVersion: apps.sealos.io/v1beta1
kind: Config
metadata:
name: calico
spec:
path: charts/calico/values.yaml
strategy: merge
data: |
installation:
enabled: true
kubernetesProvider: ""
calicoNetwork:
ipPools:
- blockSize: 26
cidr: 10.160.0.0/12
encapsulation: IPIP
natOutgoing: Enabled
nodeSelector: all()
nodeAddressAutodetectionV4:
interface: "eth.*|en.*"

In this example, we have attached the configuration of the calico application to the Clusterfile. This configuration specifies the CIDR range for Pods and other options needed for the application to run.

Installing the Cluster

Finally, we can install the cluster using sealos apply -f Clusterfile. After installing the cluster, Clusterfile will be saved in the .sealos/default/Clusterfile directory. You can modify the Clusterfile to further customize the cluster.

⚠️ Note:

  • You can refer to the official documentation or use the kubeadm config print init-defaults command to print the kubeadm configuration.