etcd就不说了,奇数个副本,可以坏(n-1)/2个,但是不可能同时坏那么多,这里不讨论etcd单独不单独跑。推荐文档
先说说k8s组件,kubelet和kube-proxy啥的肯定写LB或者VIP:HA_port,如官方的图scheduler和controller连接的apiserver地址我看网上有写127的也有写LB或者VIP:HA_port的,刚看到官方文档说两种都行 。
官方文档这说得基本有疑
apiserver这块介绍比较少,但是可以根据kubeadm部署的推理一些猜测。
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: stable
apiServer:
certSANs:
- "LOAD_BALANCER_DNS"
controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"
controlPlaneEndpoint
:应匹配负载均衡器的地址或DNS和端口
而这个controlPlaneEndpoint
实际上最终会取ip(注意不带端口)写到kube-apiserver的选项--advertise-address
作为值。
默认情况下--advertise-address
不配置将会和--bind-address
一样。它的作用就是宣告,在etcd启动后kube-apiserver初次起来后会创建一个svc名叫kubernetes
,而--advertise-address
的ip,port则是apiserver的--secure-port
。假设用户配置的--secure-port
为6443,所以一般云上SLB的话那这个宣告可以填写LB的ip,然后默认的kubernetes的endpoints是<SLB_IP>:6443。
截止到现在似乎都没有啥坑,但是这几天写生产环境的部署方案的时候,因为考虑到多网卡,而kubeadm部署的默认很多组件是bind 0.0.0.0的会导致所有网卡的ip的请求都会监听。于是我--bind-address
写网卡ip例如三台分别是172.16.1.2、3、4,HA用的keepalived+haproxy,vip是5。因为master上6443被apiserver监听了,所以haproxy是另一个端口我是用的8443。
而坑就是宣告,我仿照官方意见--advertise-address
写了VIP(带不了端口,否则报错)。启动了apiserver后默认宣告kubernetes的ep是VIP:6443,发现后面例如flannel的pod要请求apiserver的时候走它根本不通。因为apiserver是bind的网卡ip,而haproxy是bind 0.0.0.0:8443,没有任何进程是bind vip:6443,所以请求走vip:6443是不通的。于是我patch了ep改为了8443。但是后面发现只要一重启kube-apiserver就宣告的ep的port就成了6443。之前apiserver是bind 0.0.0.0是没问题的,所以如果是多网卡还用的VIP这种ha下,宣告还是写node自己的网卡ip或者不写,虽然集群内pod访问apiserver走的是svc的负载均衡,但是你要是不想负载在svc那就花钱上LB宣告LB的ip呗。
写node的网卡ip后,apiserver存活期间会去更新ep的ttl,只要apiserver 宕了它的ep会因为
[[email protected] ~]# systemctl stop kube-apiserver
[[email protected] ~]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 172.16.1.3:6443,172.16.1.4:6443 24h
[[email protected] ~]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 172.16.1.3:6443,172.16.1.4:6443 24h
[[email protected] ~]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 172.16.1.3:6443,172.16.1.4:6443 24h
[[email protected] ~]# systemctl restart kube-apiserver
[[email protected] ~]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 172.16.1.10:6443,172.16.1.3:6443,172.16.1.4:6443 24h
参考文献
https://github.com/etcd-io/etcd/tree/master/Documentation/op-guide
版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!
https://kubernetes.io/zh/docs/admin/high-availability/#%E8%BF%9B%E8%A1%8Cmaster%E9%80%89%E4%B8%B版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作! E%E7%9A%84%E7%BB%84%E4%BB%B6
https://kubernetes.io/docs/setup/independent/high-availability/
正看得欢 , 发现看到末尾戛然而止