我需要创建具有 2 个主节点和 3 个工作节点的故障转移 k8s 集群,其中包含堆叠的控制平面和 etcd 节点,以及 calico 作为网络插件。主节点上有虚拟 ip 和 haproxy 平衡器。Kubernetes 版本是 1.15.1。
我曾经部署过单主 k8s 集群,将--pod-network-cidr
和--apiserver-advertise-address
其他参数作为 CLI 参数传递到kubeadm init
- 效果很好。
现在根据官方手册(https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) 我必须使用--config
yaml 配置文件,因为没有足够的 CLI 键来完成我需要的操作。手册显示了非常简单的配置示例,这对我来说还不够。由于无法--config
与参数混合,yaml 配置扩展为:
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "10.30.7.65"
bindPort: 6443
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controlPlaneEndpoint: "10.30.7.90:7443" # This is virtual ip of balancer
api:
advertiseAddress: 10.30.7.65
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
nodeName: srv1.demo2.prolabs.ai
kubernetesVersion: v1.15.1
apiServerCertSANs:
- "10.30.7.65"
- "10.30.7.66"
- "10.30.7.67"
- "10.30.7.90"
- "127.0.0.1"
token: "jw5mnd.26a22s2kg9mewtjv"
tokenTTL: "0"
运行后,kubeadm init --config=k8s.yaml --upload-certs
我发现没有应用任何网络设置:控制器 pod 位于 192.168.0.0/16 子网中,calico 和 etcd pod 绑定到服务器的外部 ip。
那么,问题是什么?如何使用特定子网、特定 API URL 和特定硬件节点接口来初始化多主集群?