【发布时间】:2018-12-17 03:59:51
【问题描述】:
我正在尝试使用 kubeadm 实现 k8s 的高可用性。我正在关注文档k8s HA using kubeadm
官方文档中建议kube-apiserver有failover机制/负载均衡器。我尝试了 keepalived,但是如果在 aws/gcp 实例上进行设置,它会陷入裂脑情况,因为不支持多播,因此我不允许使用它。有没有办法解决这个问题?
【问题讨论】:
标签: kubernetes kubectl kubeadm
我正在尝试使用 kubeadm 实现 k8s 的高可用性。我正在关注文档k8s HA using kubeadm
官方文档中建议kube-apiserver有failover机制/负载均衡器。我尝试了 keepalived,但是如果在 aws/gcp 实例上进行设置,它会陷入裂脑情况,因为不支持多播,因此我不允许使用它。有没有办法解决这个问题?
【问题讨论】:
标签: kubernetes kubectl kubeadm
Kubernetes 是一个容器编排系统,用于自动部署、扩展和管理容器化应用程序。 Kubernetes 在高可用和负载平衡环境中发挥最佳。
正如@jaxxstorm 提到的,云提供商为您提供了使用本机负载均衡器的可能性,我也建议这样做 高可用性尝试的良好杆位。您可能对GCP 文档感兴趣。
Kubernetes 自制环境上的 Kubeadm 需要一些额外的工作,在我看来,这很好 设置Kubernetes The Hardway 然后开始使用Kubeadm。
好的,我假设安装服务器已经准备好。要创建一个不复杂的多主集群安装,您需要 3 个主节点 (10.0.0.50-52) 和负载均衡器 (10.0.0.200)。
生成令牌并将输出保存到文件:
kubeadm token generate
创建一个 kubeadm 配置文件:
apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
etcd:
endpoints:
- "http://10.0.0.50:2379"
- "http://10.0.0.51:2379"
- "http://10.0.0.52:2379"
apiServerExtraArgs:
apiserver-count: "3"
apiServerCertSANs:
- "10.0.0.50"
- "10.0.0.51"
- "10.0.0.52"
- "10.0.0.200"
- "127.0.0.1"
token: "YOUR KUBEADM TOKEN"
tokenTTL: "0"
将配置文件复制到所有节点。
在第一个主实例上进行初始化:
kubeadm init --config /path/to/config.yaml
新的主实例将拥有我们的主集群所需的所有证书和密钥。
将目录结构/etc/kubernetes/pki复制到其他master到同一位置。
在其他主服务器上:
kubeadm init --config /path/to/config.yaml
现在让我们开始设置负载均衡器:
将/etc/kubernetes/admin.conf复制到$HOME/.kube/config
接下来,编辑$HOME/.config并替换
服务器:10.0.0.50
与
服务器:10.0.0.200
检查节点是否工作正常:
kubectl get nodes
在所有工作人员上执行:
kubeadm join --token YOUR_CLUSTER_TOKEN 10.0.0.200:6443 --discovery-token-ca-cert-hash sha256:89870e4215b92262c5093b3f4f6d57be8580c3442ed6c8b00b0b30822c41e5b3
就是这样!如果一切都设置得很干净,那么您现在应该拥有一个高度可用的集群。
我发现 "HA Kubernetes cluster via Kubeadm" 教程很有用,感谢 @Nate Baker 的启发。
【讨论】:
不,您需要一个负载均衡器才能通过 kubeadm 实现 HA。
如果您使用的是 AWS/GCP,为什么不考虑在这些环境中使用本机负载均衡器,例如 ELB 或 Google Cloud Load Balancer?
【讨论】:
你绝对需要 nginx/haproxy + keepalived 来实现故障转移和高可用性
【讨论】: