如何使用kubeadm在国内网络环境搭建单主k8s集群
本教程简要阐述了使用kubeadm在国内网络环境搭建单主k8s集群的方法。
欢迎各种形式的建议、勘误及贡献。
Happy Hacking!
开始搭建
本教程使用的大部分bash脚本可以在Github仓库的script
文件夹中找到。
在使用脚本之前先通读本文,避免翻车。
如果遇到问题,可以先查阅常见问题和解决方案。
先决条件
实例
- 一个或更多运行Ubuntu 16.04+/CentOS 7/Debian 9,2 GB以上内存,2核以上CPU的实例;
- 实例之间有网络联通;
- 确保每个实例有唯一的
hostname
,MAC address
以及product_uuid
(这个条件一般都能满足):
|
|
hostname
k8s会使用实例的hostname作为节点名称,因此有必要为每个实例取一个描述性较好的名称。
实例的hostname
需要满足DNS-1123规范:
- 字符集:数字、小写字母、
.
、-
- 以小写字母开头和结尾
正则表达式为:
[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
修改hostname
方式如下(script/01_change_hostname.sh
):
|
|
禁用Swap
kubelet
要求宿主实例的交换空间(Swap)禁用以正常工作。
|
|
设置安全组
云上实例需要放行安全组中的下列指定TCP入方向(这里假设安全组的出方向TCP/UDP全部放行):
- 主节点(Master)
- 6443
- 2379-2380
- 10250-10252
- 从节点(Worker)
- 10250
- 30000-32767
以上为Kubernetes本身需要开放的端口。
注意,网络插件(CNI,容器网络接口)另有需要开放的端口,本教程使用Flannel(vxlan
模式)作为CNI,需要额外放行下列入方向端口:
- UDP 8472
安装容器运行时
本教程使用Docker作为容器运行时,请参阅这里进行安装。
安装kubeadm, kubelet 和 kubectl
由于一些原因,官方源无法在国内使用,这里使用国内镜像进行安装:
- Ubuntu(
script/02_install_kubeadm_ubuntu.sh
)
|
|
- CentOS(
script/02_install_kubeadm_centos.sh
)
|
|
启动主节点,启动集群
选定一个实例作为主节点,运行下列命令(script/03_boot_master.sh
):
|
|
如果一切无误,kubeadm最后会有形如以下的输出:
kubeadm join 192.168.100.200:6443 --token some_token_here \
--discovery-token-ca-cert-hash sha256:some_hash_here
记录上述输出,供从节点启动使用。
以一般用户运行下列命令,配置主节点所在实例的kubectl(script/04_config_kubectl.sh
):
|
|
配置CNI
我们使用flannel作为CNI(script/05_deploy_flannel.sh
):
|
|
(可选)让主节点也可以运行Pod
Kubernetes默认不在主节点上运行Pod,这里可以让调度器不再遵从这个策略。
这会提高资源利用率,代价是会降低主节点的安全性。
|
|
启动从节点,加入集群
在要作为从节点加入集群的实例上,运行上个步骤kubeadm的输出的加入命令:
|
|
检查节点状况
|
|
NAME STATUS ROLES AGE VERSION
master.localdomain Ready master 2m v1.14.0
worker.localdomain Ready <none> 2m v1.14.0
如果列表中几个节点状态都为Ready
,那么恭喜,你成功完成了本教程,部署了一个单主节点的k8s集群!
本教程的可执行脚本
可执行脚本在Github仓库的script
文件夹中,使用前请阅读script/README.md
。
下一步?
官方文档是下一个不错的起点,祝你好运!
参考文献/致谢
- 阿里巴巴开源镜像站
- https://kubernetes.io/docs/setup/independent/install-kubeadm/#check-required-ports
- https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
- https://serverfault.com/questions/684771/best-way-to-disable-swap-in-linux
- https://github.com/coreos/flannel/blob/master/Documentation/backends.md#recommended-backends
- https://blog.csdn.net/aixiaoyang168/article/details/78411511
- https://zhuanlan.zhihu.com/p/46341911
- https://kubernetes.feisky.xyz/ (很棒的学习资源)