To provision a single node cluster which you can access from your host machine requires:

  • 4 CPU cores, 4 GB RAM virtual machine with DHCP reservation
  • CNI plugin to enable Core DNS

Create and Configure Single Node Cluster

If you do not have k8s-vm-tenplate follow steps from Create Kubernetes VM Template in Parallels post to create it.

  • Create single node virtual machine scorpius

    prlctl create scorpius --ostemplate k8s-vm-template
    prlctl set scorpius --cpus=4 --memsize=4G --startup-view headless --on-window-close keep-running --sync-vm-hostname on --device-set net0 --mac 00:00:00:00:01:01
    prlctl start scorpius
    # update hostname in hosts
    prlctl exec scorpius sed -i -e 's/vm-template/scorpius/g' /etc/hosts
    # configure DHCP client to use mac address for IP assignments
    prlctl exec scorpius netplan set ethernets.enp0s5.dhcp-identifier=mac
    prlctl exec scorpius netplan apply
    prlctl exec scorpius ip a
    # pull images
    prlctl exec scorpius kubeadm config images pull
    
  • Initialize kubernetes cluster

    # initialize kubernetes cluster
    prlctl exec scorpius kubeadm init --upload-certs
    # create kubernetes config
    prlctl exec scorpius --user cka mkdir -p /home/cka/.kube
    prlctl exec scorpius cp -i /etc/kubernetes/admin.conf /home/cka/.kube/config
    prlctl exec scorpius chown 1000:1000 /home/cka/.kube/config
    # install calico CNI
    prlctl exec scorpius --user cka kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.3/manifests/calico.yaml
    
  • The node you created is by default running as a control plane. To make it all in one single node remove taints from it

    # remove controle plane taint
    prlctl exec scorpius --user cka kubectl taint node scorpius node-role.kubernetes.io/control-plane:NoSchedule-
    # remove control plane label
    prlctl exec scorpius --user cka kubectl label node scorpius "node-role.kubernetes.io/control-plane-"