1. 环境说明


2. 创建虚拟机

  1. 创建 Vagrant 项目目录

  2. 进入 Vagrant 项目目录

  3. 创建 Vagrantfile

  4. 启动虚拟机

以上操作创建两台虚拟机:

其中 k8s-101 作为 Kubernetes 的 master,k8s-102 作为 node。


3. 安装 Docker

  1. master 和 node 都需要安装 Docker
  2. 下文假设已经切换到 root 用户

安装 Docker:

验证:

为 Dockerd 设置代理(可选):

Docker 下载 Calico 等镜像时比较慢,可以给 dockerd 设置代理,也可以使用 registry-mirrors 的方式。我选择的是前者,我的宿主机的代理端口是 7890。

向 proxy.conf 中添加如下内容:

重启 Docker,并将其设置为开机启动:


4. 环境准备

  1. 在所有节点上执行

5. 部署 master

  1. 在 master 上执行

创建 kubeadm-config.yaml 文件,其内容如下:

其中:

5.1 初始化 master

因为我已经为 dockerd 配置代理,所以直接执行下面的命令:

初始化成功后得到类似下面的输出:

按照提示依次执行:

5.2 获取加入集群的命令

6. 加入集群

  1. 在 node 上执行

在 master 节点执行 kubeadm token create --print-join-command 获取加入集群的命令,然后在 node 上执行,比如:

成功后将得到类似下面的输出:


7. 安装 Calico 网络插件

  1. 在 master 上执行
  2. 修改 YAML 时要注意缩进和 Tab

查看 node 状态:

得到类似下面的输出:

查看 kubelet 的日志:

看到类似下面的错误:

下面开始安装 Calico 网络插件,以解决该问题。

7.1 下载 calico.yaml
7.2 修改 calico.yaml
  1. 修改 CIDR,使其与 kubeadm-config.yaml 中配置的 podSubnet 一致。

    将如下配置:

    修改为:

  2. 指定网卡,当有多块网卡时,如果不指定网卡,创建 Pod 时会报错。

    在下面的配置:

    后面添加:

    我的网络接口是:

    因此我配置的是 eth1,需要按照实际情况修改。

7.3 设置 Calico nodename

将所有节点自己的 IP 写进 /var/lib/calico/nodename。在我的测试环境中:

  1. 在 master 执行
  1. 在 node 上执行
7.4 部署

注意查看命令的输出,如果修改后的 YAML 文件有语法错误,那么需要更正。

7.5 等待拉起 Calico

等到所有 Pod 的状态都变成 Running。查看集群状态:

得到类似下面的输出:


8. 设置 kubelet 的启动参数

  1. 在所有节点上执行

在 Ubuntu 中打开 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,可以看到需要在 /etc/default/kubelet 中配置 KUBELET_EXTRA_ARGS

将所有节点的 kubelet 的启动参数中的 node-ip 设置为其自己的 IP。在我的测试环境中:

  1. 在 master 上执行

  2. 在 node 上执行

最后重启所有节点上的 kubelet:


9. 验证集群

查看状态:

等待到部署完成后,得到类似下面的输出:

注意 service/nginx 那列中的端口,下面将使用它。

在任意一台虚拟机或宿主机上访问:

可以看到 Nginx 的 Welcome 页面。

使用如下命令可以进入容器:


10. 补充

  1. 如果 Pull Calico 等镜像慢,可以先从国内源 Pull,然后再打 Tag;或者像我一样在虚拟机中使用宿主机上的代理。

参考文档

  1. https://blog.csdn.net/qq_39698985/article/details/123748820
  2. https://blog.csdn.net/qq_40279964/article/details/125429233
  3. https://blog.csdn.net/m0_61237221/article/details/125217833
  4. https://blog.csdn.net/shelutai/article/details/122721083