使用 Kubespray 安装 Kubernetes 集群

创建于 2020 年 1 月 20 日。本文档介绍如何使用 kubespray 安装 Kubernetes (K8s) 集群。本指南假设以下条件:硬件

文档目录

创建于 2020 年 1 月 20 日

简介

本文档介绍如何使用 kubespray 安装 Kubernetes (K8s) 集群。

本指南假设以下条件:

  • 硬件

    所有部署使用的服务器具有相同的硬件规格,并配备 Mellanox ConnectX 网卡。

  • 软件

    所有服务器均安装 Ubuntu Server 18.04 操作系统,并包含 OpenSSH 服务器软件包。

  • 网络

    DHCP 服务器和 DNS 服务器是 IT 基础设施的一部分。 每台服务器的名称和 IP 地址已在 DHCP 服务器上预留。 部署中使用的所有服务器通过单根 100GbE 以太网铜缆连接到以太网交换机,并具有互联网访问权限。

注意: 此部署与硬件无关,我们以 Mellanox 设备为例。

参考

解决方案概述

设备

对于 K8s 集群部署,应使用相同类型的服务器。 更多信息请参考 Kubespray 要求

解决方案逻辑设计

管理节点仅用于通过 Node1-Node5 部署 K8s 集群。

image2020-4-30_11-40-36.png

网络配置

服务器名称及网络配置如下表所示:

image2020-1-21_13-4-48.png

主机配置

所有服务器均安装 Ubuntu Server 18.04 操作系统,并包含 OpenSSH 服务器软件包。 请运行以下命令更新/升级 Ubuntu 软件包并安装最新的 HWE 内核:

服务器控制台

# apt-get update
# apt-get -y install linux-image-generic-hwe-18.04
# reboot

部署指南

K8s 集群部署与配置

SSH 私钥与无密码登录

请以 root 用户登录管理服务器,并运行以下命令创建 SSH 私钥以配置无密码认证:

# ssh-keygen

将您的 SSH 私钥(例如 ~/.ssh/id_rsa)复制到部署中的所有节点,运行以下命令:

# ssh-copy-id root@nodename

Kubespray 配置

请在管理服务器上安装运行 Kubespray 与 Ansible 所需的依赖:

# cd ~
# apt -y install python3-pip
# git clone https://github.com/kubernetes-sigs/kubespray.git
# cd kubespray
# pip3 install -r requirements.txt

创建新的集群配置:

# cp -rfp inventory/sample inventory/mycluster
# declare -a IPS=(192.168.222.111 192.168.222.101 192.168.222.102 192.168.222.103 192.168.222.104)
# CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

检查并修改主机配置文件 inventory/mycluster/hosts.yaml

示例:

inventory/mycluster/hosts.yaml

all:
  hosts:
    node1:
      ansible_host: 192.168.222.111
      ip: 192.168.222.111
      access_ip: 192.168.222.111
    node2:
      ansible_host: 192.168.222.101
      ip: 192.168.222.101
      access_ip: 192.168.222.101
    node3:
      ansible_host: 192.168.222.102
      ip: 192.168.222.102
      access_ip: 192.168.222.102
    node4:
      ansible_host: 192.168.222.103
      ip: 192.168.222.103
      access_ip: 192.168.222.103
    node5:
      ansible_host: 192.168.222.104
      ip: 192.168.222.104
      access_ip: 192.168.222.104
  children:
    kube-master:
      hosts:
        node1:
    kube-node:
      hosts:
        node2:
        node3:
        node4:
        node5:
    etcd:
      hosts:
        node1:
    k8s-cluster:
      children:
        kube-master:
        kube-node:
    calico-rr:
      hosts:

检查并修改 inventory/mycluster/group_vars 下的集群安装参数:

# cat inventory/mycluster/group_vars/all/all.yml
# cat inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml

注意: 可以通过在 inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml 中设置所需的 kube_network_plugin 参数来更改默认的 Kubernetes CNI。

使用 Ansible Playbook 安装 K8s 集群

使用 Kubespray Ansible Playbook 部署 K8s 集群:

# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml

此步骤的执行时间可能较长。

Playbook 成功完成的示例:

...
PLAY RECAP *********************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0
node1                      : ok=611  changed=137  unreachable=0    failed=0
node2                      : ok=442  changed=92   unreachable=0    failed=0
node3                      : ok=404  changed=88   unreachable=0    failed=0
node4                      : ok=404  changed=88   unreachable=0    failed=0
node5                      : ok=404  changed=88   unreachable=0    failed=0

Wednesday 15 January 2020  10:39:14 +0200 (0:00:00.164)       0:16:20.903 *****
===============================================================================
container-engine/docker : ensure docker packages are installed --------------------------------------------------------------------------------------------------------------------- 65.67s
download : download_file | Download item ------------------------------------------------------------------------------------------------------------------------------------------- 53.43s
download : download_file | Download item ------------------------------------------------------------------------------------------------------------------------------------------- 50.71s
kubernetes/master : kubeadm | Initialize first master ------------------------------------------------------------------------------------------------------------------------------ 45.96s
kubernetes/kubeadm : Join to cluster ----------------------------------------------------------------------------------------------------------------------------------------------- 42.65s
download : download_file | Download item ------------------------------------------------------------------------------------------------------------------------------------------- 28.74s
download : download_container | Download image if required -------------------------------------------------------------------------------------------------------------------------

使用 Kubespray 安装 Kubernetes 集群

创建于 2020 年 1 月 20 日

简介

本文档介绍如何使用 kubespray 安装 Kubernetes (K8s) 集群。本指南假设以下硬件条件:

部署验证

通过在主节点上执行以下命令验证 Kubernetes 集群是否正常运行:

root@node1:~# kubectl get nodes -o wide
NAME    STATUS   ROLES    AGE    VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
node1   Ready    master   4h   v1.16.3   192.168.222.111   <none>        Ubuntu 18.04.3 LTS   5.0.0-37-generic   docker://18.9.7
node2   Ready    <none>   4h   v1.16.3   192.168.222.101   <none>        Ubuntu 18.04.3 LTS   5.0.0-37-generic   docker://18.9.7
node3   Ready    <none>   4h   v1.16.3   192.168.222.102   <none>        Ubuntu 18.04.3 LTS   5.0.0-37-generic   docker://18.9.7
node4   Ready    <none>   4h   v1.16.3   192.168.222.103   <none>        Ubuntu 18.04.3 LTS   5.0.0-37-generic   docker://18.9.7
node5   Ready    <none>   4h   v1.16.3   192.168.222.104   <none>        Ubuntu 18.04.3 LTS   5.0.0-37-generic   docker://18.9.7

完成!