使用Ubuntu Multipass安装多节点Kubernetes集群

使用Ubuntu Multipass安装多节点Kubernetes集群

现在有大量的教程来安装Kubernetes,我喜欢在不使用外部工具的情况下安装Kubernetes,但是与minikube之类的替代方案相比,我依靠kubeadm并在VM中使用实际的Linux安装,它给了我更多的控制权,并帮助我了解了它的实际工作原理。

 

首先,我将使用Ubuntu Multipass创建3个VM。我选择它的原因是,它使按需创建虚拟机变得非常容易。它可以在后台与QEMU一起使用,但是通过配置网络桥接,磁盘映像和QEMU变量的无穷大列表,可以轻松管理它。它有可能成为创建虚拟机的Docker,但目前只有Ubuntu映像可用。或者,可以选择基于Firecracker MicroVM的Weave Ingite,但可以在后台使用OCI映像引导兼容的内核。这是一个有趣的项目,我会尽快进行。

 

以下脚本创建虚拟机。如果磁盘映像可用,则每个VM大约需要30秒才能使用。

 

$ multipass launch -c 4 -d 50G -m 8G -n node1

$ multipass launch -c 4 -d 50G -m 8G -n node2

$ multipass launch -c 4 -d 50G -m 8G -n node3

 

# Verify all worked correctly.

$ multipass info –all

Name:           node1

State:          Running

IPv4:           10.161.139.229

Release:        Ubuntu 18.04.4 LTS

Image hash:     fe3030939822 (Ubuntu 18.04 LTS)

Load:           0.08 0.02 0.01

Disk usage:     1006.5M out of 48.3G

Memory usage:   99.5M out of 7.8G

 

Name:           node2

State:          Running

IPv4:           10.161.139.12

Release:        Ubuntu 18.04.4 LTS

Image hash:     fe3030939822 (Ubuntu 18.04 LTS)

Load:           0.04 0.03 0.01

Disk usage:     1006.1M out of 48.3G

Memory usage:   102.0M out of 7.8G

 

Name:           node3

State:          Running

IPv4:           10.161.139.185

Release:        Ubuntu 18.04.4 LTS

Image hash:     fe3030939822 (Ubuntu 18.04 LTS)

Load:           0.09 0.04 0.01

Disk usage:     1007.7M out of 48.3G

Memory usage:   103.2M out of 7.8G

 

在撰写此博客时,我正在使用Ubuntu 20.04 Beta,但出于稳定性考虑,multipass默认为18.04。 在安装Kubernetes的官方文档之后,我选择了Docker作为容器运行时,可以在这里找到安装。

 

确保在每个节点上都安装了docker,kubeadm,kubectl之后,我们可以继续实际创建集群。 需要注意的是 为了创建正确的多节点网络,我们需要在创建集群之前选择一个网络附加组件。 它写在文档中,但很容易被忽略。 我选择了Calico,因为它是最简单的一种。 另外,我的家庭网络位于192.168.3.1/24上,并且为了确保它与我的家庭网络不冲突并且网络多次构建,我将在172.16.0.0/12中创建一个网络。 我可能不需要2 ^ 20 IP,但是不用了。

 

# Kick start the cluster creation in node1$ kubeadm init –pod-network-cidr=172.16.0.0/12…. Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user:   mkdir -p $HOME/.kube  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster.Run “kubectl apply -f [podnetwork].yaml” with one of the options listed at:  https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 10.161.139.229:6443 –token h6r5uv.3vwcmbxtlkzwpwow \  –discovery-token-ca-cert-hash sha256:bc23f307454945755ffe5ed542e2732d79baedcbefc95a92f856d13456333265

 

设置kubectl之后,您可以将node2和node3加入集群。 在第一个节点的kubeadm init输出中指定运行kubeadm join命令。 节点将提取相关的Docker映像,而kubelet将很快加入集群。

 

$ kubectl get nodeNAME    STATUS     ROLES    AGE     VERSIONnode1   NotReady   master   5m42s   v1.18.1node2   NotReady   <none>   5m15s   v1.18.1node3   NotReady   <none>   5m1s    v1.18.1

 

您会看到节点在那里,但是它们还没有准备好。 由于未安装网络附加组件,因此它们无法正常通信。 下载Calico网络清单,并记住更改并应用CIDR。

$ wget https://docs.projectcalico.org/v3.11/manifests/calico.yaml$ vi calico.yaml # Chagne 192.168.0.0/16 to 172.16.0.0/12$ kubectl apply -f calico.yaml# Wait a little$ kubectl get nodeNAME    STATUS   ROLES    AGE     VERSIONnode1   Ready    master   8m50s   v1.18.1node2   Ready    <none>   8m23s   v1.18.1node3   Ready    <none>   8m9s    v1.18.1

 

如您所见,安装速度非常快! 但是,我希望有机会在主机系统中管理我的集群,而不需要使用multipass程序来外壳入实例。 为此,我们需要复制kubeconfig文件。

$ mkdir ~/.kube$ multipass copy-files node1:.kube/config ~/.kube/$ kubectl get node

 

是的,一切正常!这是一个愉快的经历。大多数人认为安装Kubernetes很困难,但实际上并非如此。对于更简单的用例,Minikube效果很好。 Docker for Desktop在macOS和Windows上也足够好。对于我自己的实验,我需要原始Kubernetes安装,没有任何黑客攻击,也不能完全访问kubelet主机。 Kubeadm的工作速度非常快,并且所需的配置最少。当然,运行准备就绪的Kubernetes集群是一项复杂的任务,您最好使用托管的Kubernetes服务。我之所以安装在我的机器上,是因为我需要进行实验,而且我有很多内核和内存可以节省,而且价格便宜得多。

 

最后,我要大声疾呼Ubuntu开发multipass。它还适用于macOS和Windows。它比类似工具快。您可以通过multipass stop –all关闭虚拟机,然后通过multipass start –all重新启动它们。节点将获得相同的IP地址(需要确认总是这样),由于kubelet和etcd将启动,因此您可以继续工作。

 

https://mustafaakin.dev/posts/2020-04-11-installing-a-multi-node-kubernetes-cluster-with-ubuntu-multipass/