代码之家  ›  专栏  ›  技术社区  ›  Aditya Patawari

在多主模式下运行Kubernetes

  •  1
  • Aditya Patawari  · 技术社区  · 7 年前

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

    /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
    

    /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发生故障,正确的故障切换方法是什么?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Eugene Chow    7 年前

    --api-servers documentation kubeconfig是将kubelet指向kube apiserver的全新方式。

    今天的犹太方式是在每个工作节点(即运行kubelet的节点)上部署一个带有nginx的Pod,以在3个kube apis服务器之间实现负载平衡。nginx将知道一个主机何时停机,而不会将流量路由到该主机;这就是它的工作。kubespray项目使用这种方法。

    第三种更复杂的方法imho是使用keepalive。Keepalive使用VRRP确保至少有一个节点拥有虚拟IP(VIP)。如果一个主人倒下,另一个主人将劫持VIP以确保连续性。这种方法的缺点是负载平衡不是默认的。所有流量将路由到1个主节点(即主VRRP节点),直到停止。然后,辅助VRRP节点将接管。你可以看到 nice write-up I contributed at this page :)

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

        2
  •  0
  •   Salva    7 年前