版本选择
Kubernetes 版本
根据选定的 kubeadm 版本,安装对应的 Kubernetes。

Kubernetes 升级
Kubernetes 版本及版本倾斜支持策略:https://kubernetes.io/zh/docs/setup/release/version-skew-policy/"
附加组件
K8S v1.18.x 部署-Kubeadm方式-1:部署规划 原创 臣 Cloud Native
网络规划

  • 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 拓扑
本文以这种模式进行部署。

K8S v1.18.x 部署-Kubeadm方式-1:部署规划 原创 臣 Cloud Native
外部 etcd 拓扑
K8S v1.18.x 部署-Kubeadm方式-1:部署规划 原创 臣 Cloud Native
集群规划
OS: CentOS Linux release 7.8.2003 (Core), Kernel: 4.19.x(本文使用版本:4.19.12-1.el7.elrepo.x86_64)

CPU、Memory、Storage 生产环境上请根据需要进行进行调整,此处给出的配置是测试配置(因为内存有限)。

K8S v1.18.x 部署-Kubeadm方式-1:部署规划 原创 臣 Cloud NativeK8S v1.18.x 部署-Kubeadm方式-1:部署规划 原创 臣 Cloud Native

说明:建议采用浏览器查看该表格。

  • 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方式文章。