我想学习Kubernetes,并想在笔记本电脑上进行设置。
架构如下:
对于虚拟化,我使用的是Virtual Box。
问题是,如何实现?
答案 0 :(得分:4)
要使用Virtualbox和Kubeadm在Ubuntu服务器上设置Kubernetes集群,请执行以下步骤:
所有虚拟机都需要与Internet,主机和彼此通信。可以通过各种方式来完成,例如:桥接网络,虚拟主机适配器等。下面的网络方案示例可以调整。
您可以手动执行所有操作,但是可以使用Ansible等自动化工具来加快配置过程。可以将其安装在虚拟化主机,其他虚拟机等上。
$ sudo apt update
$ sudo apt install python3-pip
$ sudo pip3 install ansible
要不使用密码即可连接到虚拟机,您需要配置ssh密钥。下面的命令将创建一对ssh密钥(私有和公共),并允许您在不提供密码的情况下登录不同的系统。
$ ssh-keygen -t rsa -b 4096
这些密钥将在默认位置创建: /home/USER/.ssh
下一步是将新创建的ssh密钥上载到所有虚拟机。
对于每个虚拟机,您都需要调用:
$ ssh-copy-id USER@IP_ADDRESS
此命令会将您的公钥复制到authorized_keys文件中,并允许您无需密码即可登录。
默认情况下,仅密码无法使用ssh访问root帐户。可以使用ssh密钥(您之前创建的)对其进行访问。假设文件是默认配置,则可以将ssh目录从用户复制到根目录。
此步骤需要在所有虚拟机上调用:
$ sudo cp -r /home/USER/.ssh /root/
您可以通过在主机上运行以下命令来检查它:
$ ssh root@IP_ADDRESS
如果可以不使用密码进行连接,则表示密钥配置正确。
您需要检查Ansible是否可以连接到所有虚拟机。为此,您需要做两件事:
示例主机文件:
[kubernetes:children]
master
nodes
[kubernetes:vars]
ansible_user=root
ansible_port=22
[master]
kubernetes-master ansible_host=10.0.0.10
[nodes]
kubernetes-node1 ansible_host=10.0.0.11
kubernetes-node2 ansible_host=10.0.0.12
kubernetes-node3 ansible_host=10.0.0.13
主机文件包含2个主要的主机组:
特定于组的变量存储在 [kubernetes:vars] 部分中。
示例剧本:
- name: Playbook for checking connection between hosts
hosts: all
gather_facts: no
tasks:
- name: Task to check the connection
ping:
以上手册的主要目的是检查主机与虚拟机之间的连接。
您可以通过调用以下命令来测试连接:
$ ansible-playbook -i hosts_file ping.yaml
此命令的输出应如下所示:
PLAY [Playbook for checking connection between hosts] *****************************************************
TASK [Task to check the connection] ***********************************************************************
ok: [kubernetes-node1]
ok: [kubernetes-node2]
ok: [kubernetes-node3]
ok: [kubernetes-master]
PLAY RECAP ************************************************************************************************
kubernetes-master : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
kubernetes-node1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
kubernetes-node2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
kubernetes-node3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
上面的输出证明Ansible和虚拟机之间的连接已成功。
可以使用Ansible配置主机名。每个虚拟机应通过其主机名与每个虚拟机连接。 Ansible可以修改主机名以及/ etc / hosts文件。 剧本范例:hostname.yaml
使用Kubernetes时需要禁用掉期。 剧本范例:disable_swap.yaml
在配置之前需要一些软件包。所有这些都可以使用Ansible安装:
剧本范例:apt_install.yaml
在此示例中,您将安装Docker作为您的CRI。 剧本docker_install.yaml将:
[警告IsDockerSystemdCheck]:检测到“ cgroupfs”作为Docker cgroup驱动程序。推荐的驱动程序是“ systemd”
在部署Kubernetes集群时,kubeadm将给出有关Docker cgroup驱动程序的上述警告。创建了剧本docker_configure.yaml来解决此问题。
在集群部署之前,需要安装Kubernetes的一些核心组件。剧本kubetools_install.yaml将:
Playbook reboot.yaml将重新引导所有虚拟机。
成功完成上述所有步骤后,即可创建集群。以下命令将初始化集群:
$ kubeadm init --apiserver-advertise-address=IP_ADDRESS_OF_MASTER_NODE --pod-network-cidr=192.168.0.0/16
Kubeadm可以发出有关CPU数量的警告。可以通过将附加参数传递给kubeadm init命令来忽略它:
--ignore-preflight-errors=NumCPU
成功的kubeadm设置应输出类似以下内容:
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.0.0.10:6443 --token SECRET-TOKEN \
--discovery-token-ca-cert-hash sha256:SECRET-CA-CERT-HASH
复制所有工作节点的kubeadm连接命令:
kubeadm join 10.0.0.10:6443 --token SECRET-TOKEN \
--discovery-token-ca-cert-hash sha256:SECRET-CA-CERT-HASH
以普通用户身份运行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
CNI负责Pod和节点之间的联网。有很多示例,例如:
下面的命令将安装Calico:
$ kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml
从kubeadm init输出在所有工作节点上运行先前存储的命令:
kubeadm join 10.0.0.10:6443 --token SECRET-TOKEN \
--discovery-token-ca-cert-hash sha256:SECRET-CA-CERT-HASH
所有工作节点均应输出:
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
以常规用户身份在主节点上运行以下命令,以检查节点是否正确连接:
$ kubectl get nodes
此命令的输出:
NAME STATUS ROLES AGE VERSION
kubernetes-master Ready master 115m v1.16.2
kubernetes-node1 Ready <none> 106m v1.16.2
kubernetes-node2 Ready <none> 105m v1.16.2
kubernetes-node3 Ready <none> 105m v1.16.2
以上输出得出结论,所有节点均已正确配置。
现在可以将Pod部署在集群上!
答案 1 :(得分:1)
希望这会有所帮助。在尝试了几乎所有其他方法之后,我找到了最简单的方法。 Rancher 2.0是一个编排工具,可轻松开始专门为kubernetes创建集群并开始部署 您的第一次服务越快越好。这有助于通过自上而下的方式了解kubernetes的分钟。
Rancher提供了一个非常简单易用的用户友好型UI,可使用编写得当的指南进行操作。如果可视化内容可以帮助您,那么这是最好的方法。
这是我们拥有的架构的用例,并且可以通过Rancher RKE实现。
一些参考文献+还有视频。