使用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将启动,因此您可以继续工作。