Black lives matter.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
kubeadm 能帮助您建立一个小型的符合最佳实践的 Kubernetes 集群。通过使用 kubeadm, 您的集群会符合 Kubernetes 合规性测试的要求. Kubeadm 也支持其他的集群生命周期操作,比如升级、降级和管理启动引导令牌。
因为您可以在不同类型的机器(比如笔记本、服务器和树莓派等)上安装 kubeadm,因此它非常适合与 Terraform 或 Ansible 这类自动化管理系统集成。
kubeadm 的简单便捷为大家带来了广泛的用户案例:
kubeadm 的设计初衷是为新用户提供一种便捷的方式来首次试用 Kubernetes, 同时也方便老用户搭建集群测试他们的应用。 此外 kubeadm 也可以跟其它生态系统与/或安装工具集成到一起,提供更强大的功能。
您可以很方便地在支持 rpm 或 deb 软件包的操作系统上安装 kubeadm。对应 kubeadm 的 SIG, SIG Cluster Lifecycle, 提供了预编译的这类安装包,当然您也可以自己基于源码为其它操作系统来构造安装包。
功能 | 成熟程度 |
---|---|
命令行用户体验 | beta |
功能实现 | beta |
配置文件 API | alpha |
自托管 | alpha |
kubeadm alpha 子命令 | alpha |
CoreDNS | GA |
动态 Kubelet 配置 | alpha |
kubeadm 的整体功能目前还是 Beta 状态,然而很快在 2018 年就会转换成正式发布 (GA) 状态。
一些子功能,比如自托管或者配置文件 API 还在开发过程当中。
随着工具的发展,创建集群的方法可能会有所变化,但是整体部署方案还是比较稳定的。
在 kubeadm alpha
下面的任何命令都只是 alpha 状态,目前只提供初期阶段的服务。
Kubernetes 发布的版本通常只维护支持九个月,在维护周期内,如果发现有比较重大的 bug 或者安全问题的话,
可能会发布一个补丁版本。下面是 Kubernetes 的发布和维护周期,同时也适用于 kubeadm
。
Kubernetes 版本 | 发行月份 | 终止维护月份 |
---|---|---|
v1.6.x | 2017 年 3 月 | 2017 年 12 月 |
v1.7.x | 2017 年 6 月 | 2018 年 3 月 |
v1.8.x | 2017 年 9 月 | 2018 年 6 月 |
v1.9.x | 2017 年 12 月 | 2018 年 9 月 |
v1.10.x | 2018 年 3 月 | 2018 年 12 月 |
v1.11.x | 2018 年 6 月 | 2019 年 3 月 |
v1.12.x | 2018 年 9 月 | 2019 年 6 月 |
请查阅安装 kubeadm。
注意: 如果您的机器已经安装了 kubeadm, 请运行apt-get update && apt-get upgrade
或者yum update
来升级至最新版本的 kubeadm. 升级过程中,kubelet 会每隔几秒钟重启并陷入了不断循环等待 kubeadm 发布指令的状态。 这个死循环的过程是正常的,当升级并初始化完成您的主节点之后,kubelet 才会正常运行。
主节点是集群里运行控制面的机器,包括 etcd (集群的数据库)和 API 服务(kubectl CLI 与之交互)。
--Pod-network-cidr
来指定网络驱动的 CIDR。请参阅安装网络插件。kubeadm init
设置 --apiserver-advertise-address=<ip-address>
参数。如果需要部署
IPv6 的集群,则需要指定一个 IPv6 地址,比如 --apiserver-advertise-address=fd00::101
。kubeadm init
之前请先执行 kubeadm config images pull
来测试与 gcr.io 的连接。现在运行:
kubeadm init <args>
想了解更多关于 kubeadm init
的参数, 请参阅kubeadm 参考指南。
想了解完整的配置选项,请参阅配置文件。
如果想定制控制面组件,包括为活跃性探测和 etcd 服务提供 IPv6 支持以及为各组件提供额外参数,请参阅定制参数。
如果需要再次运行 kubeadm init
,您必须先卸载集群。
如果您需要将不同架构的节点加入您的集群,请单独在这类节点上为 kube-proxy
和 kube-dns
创建 Deployment 或 DaemonSet。
这是因为这些组件的 Docker 镜像并不支持多架构。
kubeadm init
首先会执行一系列的运行前检查来确保机器满足运行 Kubernetes 的条件。
这些检查会抛出警告并在发现错误的时候终止整个初始化进程。
然后 kubeadm init
会下载并安装集群的控制面组件,这可能会花费几分钟时间,其输出如下所示:
[init] Using Kubernetes version: vX.Y.Z
[preflight] Running pre-flight checks
[kubeadm] WARNING: starting in 1.8, tokens expire after 24 hours by default (if you require a non-expiring token use --token-ttl 0)
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [kubeadm-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.138.0.4]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated sa key and public key.
[certificates] Generated front-proxy-ca certificate and key.
[certificates] Generated front-proxy-client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "scheduler.conf"
[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] Waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests"
[init] This often takes around a minute; or longer if the control plane images have to be pulled.
[apiclient] All control plane components are healthy after 39.511972 seconds
[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[markmaster] Will mark node master as master by adding a label and a taint
[markmaster] Master master tainted and labelled with key/value: node-role.kubernetes.io/master=""
[bootstraptoken] Using token: <token>
[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run (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 addon options listed at:
http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
如果需要让普通用户可以运行 kubectl,请运行如下命令,其实这也是 kubeadm init
输出的一部分:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者,如果您是 root
用户,则可以运行:
export KUBECONFIG=/etc/kubernetes/admin.conf
请备份好 kubeadm init
输出中的 kubeadm join
命令,因为您会需要这个命令来给集群添加节点。
令牌是主节点和新添加的节点之间进行相互身份验证的,因此请确保其安全。任何人只要知道了这些令牌,就可以随便给您的集群添加节点。
可以使用 kubeadm token
命令来列出、创建和删除这类令牌。
请参阅kubeadm 参考指南。
警告: 注意: 这一节包含了安装和部署顺序的重要信息,执行之前请仔细阅读。
您必须先安装 Pod 网络插件,以便您的 Pod 可以互相通信。
网络必须在部署任何应用之前部署好。此外,在网络安装之前是 CoreDNS 不会启用的。 kubeadm 只支持基于容器网络接口(CNI)的网络而且不支持 kubenet 。
有一些项目为 Kubernetes 提供使用 CNI 的 Pod 网络,其中一些也支持网络策略. 请参阅插件页面了解可用网络插件的完整列表。
注意 kubeadm 默认会创建一个比较安全的集群并强制启用RBAC。 请确保您的网络方案支持 RBAC。
您可以使用下列命令安装网络插件:
kubectl apply -f <add-on.yaml>