3个Kubernetes集群1基于本地机器

时间:2019-11-07 09:19:25

标签: kubernetes virtual-machine

我想学习Kubernetes,并想在笔记本电脑上进行设置。

架构如下:

enter image description here

  • 在笔记本电脑上创建4个Ubuntu 18.04服务器VM实例
  • 4个虚拟机中的3个将是Kubernetes集群,而1个虚拟机将成为基础
  • 通过SSH访问基本VM

对于虚拟化,我使用的是Virtual Box。

问题是,如何实现?

2 个答案:

答案 0 :(得分:4)

要使用Virtualbox和Kubeadm在Ubuntu服务器上设置Kubernetes集群,请执行以下步骤:

先决条件:

  • 具有最低规格的虚拟机:
    • 2个核心和2GB RAM用于主节点
    • 1个核心,每个工作节点1GB
  • 在所有虚拟机上安装的Ubuntu Server 18.04
  • 在所有虚拟机上安装的OpenSSH Server

所有虚拟机都需要与Internet,主机和彼此通信。可以通过各种方式来完成,例如:桥接网络,虚拟主机适配器等。下面的网络方案示例可以调整。

Network scheme

Ansible:

您可以手动执行所有操作,但是可以使用Ansible等自动化工具来加快配置过程。可以将其安装在虚拟化主机,其他虚拟机等上。

在主机上复制的安装步骤

  • 刷新有关存储库中软件包的信息:
    $ sudo apt update
  • 安装Python3的软件包管理器:
    $ sudo apt install python3-pip
  • 安装Ansible软件包:
    $ sudo pip3 install ansible

配置基于SSH密钥的访问权限:

生成密钥对

要不使用密码即可连接到虚拟机,您需要配置ssh密钥。下面的命令将创建一对ssh密钥(私有和公共),并允许您在不提供密码的情况下登录不同的系统。
$ ssh-keygen -t rsa -b 4096
这些密钥将在默认位置创建: /home/USER/.ssh

虚拟机上的密钥授权

下一步是将新创建的ssh密钥上载到所有虚拟机。
对于每个虚拟机,您都需要调用:
$ ssh-copy-id USER@IP_ADDRESS
此命令会将您的公钥复制到authorized_keys文件中,并允许您无需密码即可登录。

SSH根访问权限

默认情况下,仅密码无法使用ssh访问root帐户。可以使用ssh密钥(您之前创建的)对其进行访问。假设文件是​​默认配置,则可以将ssh目录从用户复制到根目录。

此步骤需要在所有虚拟机上调用:
$ sudo cp -r /home/USER/.ssh /root/

您可以通过在主机上运行以下命令来检查它:
$ ssh root@IP_ADDRESS

如果可以不使用密码进行连接,则表示密钥配置正确。

检查虚拟机和Ansible之间的连接:

测试连接

您需要检查Ansible是否可以连接到所有虚拟机。为此,您需要做两件事:

  • 主机文件,其中包含有关主机(在这种情况下为虚拟机)的信息
  • Playbook 文件,其中包含您需要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个主要的主机组:

  • master-为主节点创建的组
  • 节点-为工作节点创建的组

特定于组的变量存储在 [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

禁用SWAP

使用Kubernetes时需要禁用掉期。 剧本范例:disable_swap.yaml

其他软件安装

在配置之前需要一些软件包。所有这些都可以使用Ansible安装:
剧本范例:apt_install.yaml

容器运行时界面

在此示例中,您将安装Docker作为您的CRI。 剧本docker_install.yaml将:

  • 为Docker添加apt签名键
  • 添加Docker的存储库
  • 安装具有特定版本的Docker(推荐最新版本)

Docker配置

  

[警告IsDockerSystemdCheck]:检测到“ cgroupfs”作为Docker cgroup驱动程序。推荐的驱动程序是“ systemd”

在部署Kubernetes集群时,kubeadm将给出有关Docker cgroup驱动程序的上述警告。创建了剧本docker_configure.yaml来解决此问题。

Kubernetes工具安装

在集群部署之前,需要安装Kubernetes的一些核心组件。剧本kubetools_install.yaml将:

  • 对于主节点和工作节点:
    • 为Kubernetes添加适当的签名密钥
    • 添加Kubernetes存储库
    • 安装kubelet和kubeadm
  • 另外对于主节点:
    • 安装kubectl

重新启动

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)

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实现。

enter image description here

一些参考文献+还有视频。