kubelet - Running Kubernetes in multimaster mode -


i have set kubernetes (version 1.6.1) cluster 3 servers in control plane. apiserver running following config:

/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 

now running kubelet following config:

/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 

this works great long kube1 running. if take kube1 down, node not communicate kube2 or kube3. takes first apiserver passed --api-servers flag , not failover in case first apiserver crashes. correct way failover in case 1 of apiserver fails?

the --api-servers flag deprecated. it's no longer in documentation. kubeconfig brand new way point kubelet kube-apiserver.

the kosher way today deploy pod nginx on each worker node (ie. ones running kubelet) load-balances between 3 kube-apiservers. nginx know when 1 master goes down , not route traffic it; that's job. kubespray project uses method.

the 2nd, not way, use dns rr. create dns "a" record ips of 3 masters. point kubelet rr hostname instead of 3x ips. each time kubelet contacts master, routed ip in rr list. technique isn't robust because traffic still routed downed node, cluster experience intermittent outage.

the 3rd, , more complex method imho, use keepalived. keepalived uses vrrp ensure @ least 1 node owns virtual ip (vip). if master goes down, master hijack vip ensure continuity. bad thing method load-balancing doesn't come default. traffic routed 1 master (ie. primary vrrp node) until goes down. secondary vrrp node take over. can see nice write-up contributed @ page :)

more details kube-apiserver ha here. luck!


Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -