部署标准集群
使用k8e快速部署Kubernetes集群服务
On this page
作为一名 YAML 工程师,我们经常需要使用 Kubernetes 集群来验证很多技术场景。因此,快速搭建一个完整且标准化的集群至关重要。市面上有很多快速部署 Kubernetes 集群的工具,例如官方推荐的 kubeadm 工具和云原生社区的一键部署工具 sealos。这些工具都非常实用,但是并不是每个 YAML 工程师都需要深入了解集群组件的搭配。因此,我想向大家推荐一款基于单体文件的免配置 k8s 集群引擎 k8e(可以叫做 “kube yee” 或 K8易),它不像 kubeadm 和 sealos 那样依赖于 Kubernetes 官方组件镜像,同时 k8e 还将 Kubernetes 相关的核心扩展组件集成到了此单体文件中以便于分发部署,从而减少环境依赖。k8e 是基于当前主流上游 Kubernetes 发行版 k3s 进行了优化封装和裁剪,去除了对 IoT 的依赖,目标是打造最佳的服务器版本发行版。同时,它与上游项目保持一致,可以自由扩展。
K8e v1 组件架构图:
- 准备主机(2Core/4G RAM是最小标配)清单如下:
主机名 | 配置 | 数量 | 网络 | 类型 |
---|---|---|---|---|
k8e-test1 | 2Core vCPU/8G RAM | 1 | 172.25.1.56 | master/etcd |
k8e-test2 | 2Core vCPU/8G RAM | 1 | 172.25.1.57 | master/etcd |
k8e-test3 | 2Core vCPU/8G RAM | 1 | 172.25.1.58 | master/etcd |
k8e-test4 | 2Core vCPU/8G RAM | 1 | 172.25.1.59 | agent |
以下端口需要在主机上开放: (https://kubernetes.io/docs/reference/ports-and-protocols/)
Control plane
Protocol | Direction | Port Range | Purpose | Used By |
---|---|---|---|---|
TCP | Inbound | 6443 | Kubernetes API server | All |
TCP | Inbound | 2379-2380 | etcd server client API | kube-apiserver, etcd |
TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
TCP | Inbound | 10251 | kube-scheduler | Self |
TCP | Inbound | 10252 | kube-controller-manager | Self |
UDP | Inbound | 8472 | cilium | vxlan overlay |
Worker node(s)
Protocol | Direction | Port Range | Purpose | Used By |
---|---|---|---|---|
TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
TCP | Inbound | 30000-32767 | NodePort Services | All |
UDP | Inbound | 8472 | cilium | vxlan overlay |
k8e 默认支持 kubernetes LTS版本, 以下操作默认在root帐号下操作:
号外 : k8e支持用Dockerd容器引擎来替换containerd来支持容器,需要在执行命令中加入参数--docker
就可以切换成功,后面Pod内的容器就是由docker来执行。如下:
$ yum install docker-ce
$ systemctl start docker
# --docker这个参数就是切换容器引擎到docker,范例如下:
$ curl -sfL https://getk8e.com/install.sh | K8E_TOKEN=ilovek8e K8E_URL=https://172.25.1.56:6443 INSTALL_K8E_EXEC="server --write-kubeconfig-mode=666 --docker" sh -s -
高可用集群部署步骤如下:
- 启动 k8s 集群过程:
注意主机环境Kernel版本 : 主机系统必须满足:Linux kernel >= 4.19.57,方便k8e集群支持eBPF容器网络
-
第一台,是引导服务(注意:默认第一台主机IP就是api-server的IP,k8e内置了tunnel可以同步api-server地址来做LB, 如果使用KUBE-APIServer VIP需要自行配置)
-
定义环境变量
- K8E_TOKEN 集群token,用来传输tls证书使用
- K8E_NODE_NAME 主机hostname,用来表示etcd中的唯一别名
- K8E_CLUSTER_INIT 启用内置etcd做为存储
- API_SERVER_IP cilium cni插件需要指定api-server的IP, 必须是主机IP
curl -sfL https://getk8e.com/install.sh | API_SERVER_IP=172.25.1.56 K8E_TOKEN=ilovek8e INSTALL_K8E_EXEC="server --cluster-init --write-kubeconfig-mode=666" sh -
此时,单机版的k8s集群就启动完毕,做技术验证环境足够。但是如果你需要搭建高可用版本的k8s集群,遵循CAP原理 高可用集群,需要配置3台以上的etcd实例才能保证集群状态的一致性。所以 k8s 集群需要启用3台master节点,按以下配置增加master节点支持高可用集群:
第二台master节点配置如下:
curl -sfL https://getk8e.com/install.sh | K8E_TOKEN=ilovek8e K8E_URL=https://172.25.1.56:6443 INSTALL_K8E_EXEC="server --write-kubeconfig-mode=666" sh -s -
第三台master节点配置如下
curl -sfL https://getk8e.com/install.sh | K8E_TOKEN=ilovek8e K8E_URL=https://172.25.1.56:6443 INSTALL_K8E_EXEC="server --write-kubeconfig-mode=666" sh -s -
此时,3台master节点配置完毕,在主机命令行通过执行kubelet get node
获得节点情况。
- 添加工作负载节点agent,支持多台
curl -sfL https://getk8e.com/install.sh | K8E_TOKEN=ilovek8e K8E_URL=https://172.25.1.56:6443 sh -
初始化网络 内置Cilium 安装工具
查看cilium网络状态
[root@ip-172-31-24-246 ~]# KUBECONFIG=/etc/k8e/k8e.yaml && cilium status
/¯¯\
/¯¯\__/¯¯\ Cilium: OK
\__/¯¯\__/ Operator: OK
/¯¯\__/¯¯\ Hubble: disabled
\__/¯¯\__/ ClusterMesh: disabled
\__/
DaemonSet cilium Desired: 2, Ready: 2/2, Available: 2/2
Deployment cilium-operator Desired: 1, Ready: 1/1, Available: 1/1
Containers: cilium Running: 2
cilium-operator Running: 1
Cluster Pods: 3/3 managed by Cilium
Image versions cilium quay.io/cilium/cilium:v1.10.5: 2
cilium-operator quay.io/cilium/operator-generic:v1.10.5: 1
Note : 主控节点三台内置了LB,启动集群后,把第一台关闭,计算节点agent也可以自动切换到第二台。不用担心集群受到影响。对于外置的容器控制台如Dashboard想访问api-server地址,就需要通过反向代理软件如Haproxy汇聚三台master节点为一台VIP就可以。如果对Haproxy不感冒,也可以考虑采用kube-vip来实现VIP地址访问api-server服务。
注意:默认kubeconfig放在 /etc/k8e/k8e.yaml中。
Note : 对于 k8s 高可用集群场景下,一般我们会使用VIP访问kube-api-server,这里需要注意:因为k8e是默认自动生成TLS证书并在6443端口上提供TLS支持,如果想让外部正常通过VIP端口访问内部k8s集群的6443端口,我们就需要把VIP地址也添加到TLS证书中。TLS SAN配置如下:
# --tls-san value (listener) Add additional hostname or IP as a Subject Alternative Name in the TLS cert
# bootstrap server和其它server都需要配置如下参数:
curl -sfL https://getk8e.com/install.sh | INSTALL_K8E_EXEC="--tls-san 192.168.1.1" sh -
Note : 清理k8e,请使用k8e内置提供的脚本来清理。默认以上安装在root下安装才可以顺利清理k8e文件 清理k8e点这里 →