版本选择
Kubernetes 版本
根据选定的 kubeadm 版本,安装对应的 Kubernetes。
Kubernetes 升级
Kubernetes 版本及版本倾斜支持策略:https://kubernetes.io/zh/docs/setup/release/version-skew-policy/"
附加组件
网络规划
- Core DNS: 10.96.0.10
- Pod IP CIDR: 10.244.0.0/16
- Cluster IP CIDR: 10.96.0.0/12
- Kubernetes API VIP: 192.168.122.40
- Kubernetes Ingress VIP: 192.168.122.50
如果单台 Master 的话 Kubernetes API 的 VIP 写 Master 节点的 IP 即可。
部署架构
堆叠(Stacked)etcd 拓扑
本文以这种模式进行部署。
外部 etcd 拓扑
集群规划
OS: CentOS Linux release 7.8.2003 (Core), Kernel: 4.19.x(本文使用版本:4.19.12-1.el7.elrepo.x86_64)
CPU、Memory、Storage 生产环境上请根据需要进行进行调整,此处给出的配置是测试配置(因为内存有限)。
说明:建议采用浏览器查看该表格。
- Master Component
kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、etcd、docker、flanel
- Node Component
kubelet、kube-proxy、docker、flannel、node-exporter
- LB Component
keepalived、haproxy、ingress
部署实践
另外 VIP: 为 192.168.122.40,由所有 Master 节点的 Keepalived、Haproxy 来选择 VIP 的归属保持高可用。
所有操作全部用 root 账户进行;
统一各节点上安装路径:/data/apps/;
高可用一般建议节点数量大于等于 3 台;
基于 VM 部署时,CPU 个数设置必须>=2;
本文命令全部是在 K8S-PROD-M1 上执行;
Kubernetes 要求集群中所有机器具有不同的 Mac 地址、产品 UUID、Hostname;
- Master 节点一定要部署 kube-proxy 和网络组件:calico 或者 flannel,具体原因:
kube-proxy 是维持 SVC 的 IP 到 Pod 的 IP 的负载均衡,而你流量想到 Pod 的 IP 需要 Calico 或者 Flannel 组件的 Overlay 网络下才可 以,后续学到 APIService 和 CRD 的时候,API Service 如果选中了 SVC,kube-apiserver 会把这个 API Service 的请求代理到 选中的 SVC 上,最后流量流到 SVC 选中的 Pod,该 Pod 要处理请求然后回应,这个时候就是 kube-apiserver 解析 SVC 的名字得到 SVC 的 IP,然后 kube-proxy 定向到 Pod 的 IP,Calico 或者 Flannel 把包发到目标机器上,这个时候如果 kube-proxy 和 Calico 或者 Flannel 没有,那你创建的 API Serivce 就没用了。API Server 的路由聚合没试过不知道可行不可行,本文中的 metrics- server 就是这样的工作流程,所以建议 Master 也跑 Pod,不然后续某些 CRD 用不了。
数据存储
需要一个可用的Ceph集群。请参考后期:Ceph 部署-Rook方式系列文章。
镜像仓库
需要一个可用的镜像仓库。参考:Harbor部署-Docker Compose方式文章。