使用 kubeadm 创建一个单主集群

因为您可以在不同类型的机器(比如笔记本、服务器和树莓派等)上安装 kubeadm,因此它非常适合与 Terraform 或 Ansible 这类自动化管理系统集成。

kubeadm 的简单便捷为大家带来了广泛的用户案例:

  • 新用户可以从 kubeadm 开始来试用 Kubernetes。
  • 熟悉 Kubernetes 的用户可以使用 kubeadm 快速搭建集群并测试他们的应用。
  • 大型的项目可以将 kubeadm 和其他的安装工具一起形成一个比较复杂的系统。

kubeadm 的设计初衷是为新用户提供一种便捷的方式来首次试用 Kubernetes, 同时也方便老用户搭建集群测试他们的应用。 此外 kubeadm 也可以跟其它生态系统与/或安装工具集成到一起,提供更强大的功能。

您可以很方便地在支持 rpm 或 deb 软件包的操作系统上安装 _kubeadm_。对应 kubeadm 的 SIG, , 提供了预编译的这类安装包,当然您也可以自己基于源码为其它操作系统来构造安装包。

kubeadm 的整体功能目前还是 Beta 状态,然而很快在 2018 年就会转换成正式发布 (GA) 状态。 一些子功能,比如自托管或者配置文件 API 还在开发过程当中。 随着工具的发展,创建集群的方法可能会有所变化,但是整体部署方案还是比较稳定的。 在 下面的任何命令都只是 alpha 状态,目前只提供初期阶段的服务。

维护周期

Kubernetes 发布的版本通常只维护支持九个月,在维护周期内,如果发现有比较重大的 bug 或者安全问题的话, 可能会发布一个补丁版本。下面是 Kubernetes 的发布和维护周期,同时也适用于 kubeadm

Kubernetes 版本发行月份终止维护月份
v1.6.x2017 年 3 月2017 年 12 月
v1.7.x2017 年 6 月2018 年 3 月
v1.8.x2017 年 9 月2018 年 6 月
v1.9.x2017 年 12 月2018 年 9 月
v1.10.x2018 年 3 月2018 年 12 月
v1.11.x2018 年 6 月2019 年 3 月
v1.12.x2018 年 9 月2019 年 6 月
  • 一个或者多个兼容 deb 或者 rpm 软件包的操作系统,比如 Ubuntu 或者 CentOS
  • 主节点上 2 CPU 以上
  • 集群里所有的机器有完全的网络连接,公有网络或者私有网络都可以
  • 搭建一个单主 Kubernetes 集群或者高可用集群
  • 在集群上安装 Pod 网络组件以便 Pod 之间可以互相通信

请查阅。

初始化您的主节点

主节点是集群里运行控制面的机器,包括 etcd (集群的数据库)和 API 服务(kubectl CLI 与之交互)。

  1. 选择一个 Pod 网络插件,并检查是否在 kubeadm 初始化过程中需要传入什么参数。这个取决于 您选择的网络插件,您可能需要设置 --Pod-network-cidr 来指定网络驱动的 CIDR。请参阅安装网络插件
  2. (可选) 除非特别指定,kubeadm 会使用默认网关所在的网络接口广播其主节点的 IP 地址。若需使用其他网络接口,请 给 kubeadm init 设置 --apiserver-advertise-address=<ip-address> 参数。如果需要部署 IPv6 的集群,则需要指定一个 IPv6 地址,比如 。

现在运行:

想了解更多关于 kubeadm init 的参数, 请参阅。

想了解完整的配置选项,请参阅配置文件

如果想定制控制面组件,包括为活跃性探测和 etcd 服务提供 IPv6 支持以及为各组件提供额外参数,请参阅。

如果需要再次运行 kubeadm init,您必须先卸载集群

如果您需要将不同架构的节点加入您的集群,请单独在这类节点上为 kube-proxykube-dns 创建 Deployment 或 DaemonSet。 这是因为这些组件的 Docker 镜像并不支持多架构。

如果需要让普通用户可以运行 kubectl,请运行如下命令,其实这也是 kubeadm init 输出的一部分:

或者,如果您是 root 用户,则可以运行:

请备份好 kubeadm init 输出中的 kubeadm join 命令,因为您会需要这个命令来。

令牌是主节点和新添加的节点之间进行相互身份验证的,因此请确保其安全。任何人只要知道了这些令牌,就可以随便给您的集群添加节点。 可以使用 kubeadm token 命令来列出、创建和删除这类令牌。 请参阅kubeadm 参考指南

安装 Pod 网络插件

警告: 注意: 这一节包含了安装和部署顺序的重要信息,执行之前请仔细阅读。

您必须先安装 Pod 网络插件,以便您的 Pod 可以互相通信。

网络必须在部署任何应用之前部署好。此外,在网络安装之前是 CoreDNS 不会启用的。 kubeadm 只支持基于容器网络接口(CNI)的网络而且不支持 kubenet 。

有一些项目为 Kubernetes 提供使用 CNI 的 Pod 网络,其中一些也支持. 请参阅插件页面了解可用网络插件的完整列表。 - 也提供了 IPv6 的支持。 - CNI 网桥 和 是 Kubernetes 1.9 版本里提供的唯一支持 IPv6 的网络插件。

您可以使用下列命令安装网络插件: