gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:51:54 25 4
gpt4 key购买 nike

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

体系结构如下:

enter image description here

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

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

    问题是,如何实现?

    最佳答案

    要使用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密钥(私有(private)和公共(public)),并允许您在不提供密码的情况下登录不同的系统。 $ 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是否可以连接到所有虚拟机。为此,您需要做两件事:
  • 托管文件,其中包含有关主机(在这种情况下为虚拟机)的信息
  • 剧本文件,其中包含您需要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配置

    [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd"



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

    Kubernetes工具安装

    在集群部署之前,需要安装Kubernetes的一些核心组件。剧本 kubetools_install.yaml将:
  • 对于主节点和工作节点:
  • 为Kubernetes添加apt签名密钥
  • 添加Kubernetes存储库
  • 安装kubelet和kubeadm
  • 另外对于主节点:
  • 安装kubectl

  • 重启

    剧本 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 join命令:
    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

    部署容器网络接口(interface)(CNI)

    CNI负责Pod和节点之间的联网。有很多示例,例如:
  • 法兰绒
  • 印花棉布
  • 编织
  • Multus

  • 下面的命令将安装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现在可以部署在集群上了!

    关于kubernetes - 3个Kubernetes集群1基于本地机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745484/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com