首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多主机模式下运行Kubernetes

在多主机模式下运行Kubernetes
EN

Stack Overflow用户
提问于 2017-07-26 18:24:47
回答 2查看 811关注 0票数 1

我已经设置了一个kubernetes (版本1.6.1)集群,在控制平面中有三个服务器。Apiserver使用以下配置运行:

代码语言:javascript
复制
/usr/bin/kube-apiserver \
  --admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota \
  --advertise-address=x.x.x.x \
  --allow-privileged=true \
  --audit-log-path=/var/lib/k8saudit.log \
  --authorization-mode=ABAC \
  --authorization-policy-file=/var/lib/kubernetes/authorization-policy.jsonl \
  --bind-address=0.0.0.0 \
  --etcd-servers=https://kube1:2379,https://kube2:2379,https://kube3:2379 \
  --etcd-cafile=/etc/etcd/ca.pem \
  --event-ttl=1h \
  --insecure-bind-address=0.0.0.0 \
  --kubelet-certificate-authority=/var/lib/kubernetes/ca.pem \
  --kubelet-client-certificate=/var/lib/kubernetes/kubernetes.pem \
  --kubelet-client-key=/var/lib/kubernetes/kubernetes-key.pem \
  --kubelet-https=true \
  --service-account-key-file=/var/lib/kubernetes/ca-key.pem \
  --service-cluster-ip-range=10.32.0.0/24 \
  --service-node-port-range=30000-32767 \
  --tls-cert-file=/var/lib/kubernetes/kubernetes.pem \
  --tls-private-key-file=/var/lib/kubernetes/kubernetes-key.pem \
  --token-auth-file=/var/lib/kubernetes/token.csv \
  --v=2 \
  --apiserver-count=3 \
  --storage-backend=etcd2

现在我使用以下配置运行kubelet:

代码语言:javascript
复制
/usr/bin/kubelet \
  --api-servers=https://kube1:6443,https://kube2:6443,https://kube3:6443 \
  --allow-privileged=true \
  --cluster-dns=10.32.0.10 \
  --cluster-domain=cluster.local \
  --container-runtime=docker \
  --network-plugin=kubenet \
  --kubeconfig=/var/lib/kubelet/kubeconfig \
  --serialize-image-pulls=false \
  --register-node=true \
  --cert-dir=/var/lib/kubelet \
  --tls-cert-file=/var/lib/kubernetes/kubelet.pem \
  --tls-private-key-file=/var/lib/kubernetes/kubelet-key.pem \
  --hostname-override=node1 \
  --v=2

只要kube1还在运行,这个功能就很好用。如果我关闭kube1,节点将不会与kube2或kube3通信。它始终占用传递给--api-servers标志的第一个apiserver,并且不会在第一个apiserver崩溃的情况下进行故障转移。当其中一个apiserver出现故障时,正确的故障转移方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-27 10:07:37

--api-servers标志已弃用。它不再在documentation中了。kubeconfig是将kubelet指向kube-apiserver的全新方式。

现在更好的做法是在每个工作节点上部署一个带有nginx的Pod (即。运行kubelet的服务器),在3个kube-apiserver之间进行负载平衡。nginx会知道当一个主机关闭时,不会将流量路由到它;这是它的工作。库贝斯普雷项目使用了这种方法。

第二个不是很好的方法,是使用DNS RR。为3个主机的IP创建DNS "A“记录。将kubelet指向此RR主机名,而不是3x IP。每次kubelet联系主机时,它都会被路由到RR列表中的IP。这种技术并不健壮,因为流量仍将路由到停机的节点,因此群集将经历间歇性中断。

第三个,也是更复杂的方法imho,是使用keepalived。keepalived使用VRRP确保至少有一个节点拥有虚拟IP (VIP)。如果一个主机宕机,另一个主机将劫持VIP以确保连续性。这种方法的缺点是负载平衡不是默认的。所有流量将被路由到1个主服务器(即主VRRP节点),直到它发生故障。则辅助VRRP节点将接管。您可以看到nice write-up I contributed at this page :)

有关kube-apiserver HA here的更多详细信息。祝好运!

票数 1
EN

Stack Overflow用户

发布于 2017-07-31 23:13:49

目前,在1.8之前,最好的解决方案似乎是使用负载均衡器,正如已经建议的那样。

参见https://github.com/sipb/homeworld/issues/10

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45324234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档