我对此还很陌生,但我正在建立一个多主机、高可用性的Kubernetes集群,该集群至少有3个主机和可变数量的节点。我试着在不使用kube喷雾或任何其他工具的情况下做到这一点,以便了解真正的来龙去脉。我觉得除了一点之外,我已经记下了大部分内容:
我的理解是:
- NodePort为特定服务分配端口
- 负载平衡器是允许外部访问的外部资源
- 入口控制器允许您配置到服务和端口的特定路径
关于我的集群的一些要点:
- 我部署的pod可以在集群中的任何机器上运行,不需要外部访问
- 我的master也是worker节点,可以运行pod
- etcd在每个主机上运行
我的问题是,我需要NodePort/LB/Ingress控制器吗?我正在努力理解为什么我需要上面的任何一个。如果一个主机与另一个主机一起加入到一个现有集群,那么pod就分布在它们之间,对吧?这不是我所需要的吗?请帮助我理解,因为我觉得我错过了一个关键概念。
首先,NodePort、LoadBalancer和Ingress与kubernetes集群的设置无关。这三个工具可以将您的应用程序暴露给外部世界,这样您就可以从kubernetes集群之外访问这些应用程序。
这里有两个部分:
- 使用三个主机设置高可用的kubernetes集群。我写了一篇关于它的博客,如何设置一个多主机kubernetes集群,它将给你关于如何在Kubernete中设置多主机集群的简要想法
https://velotio.com/blog/2018/6/15/kubernetes-high-availability-kubeadm
- 现在,一旦你准备好了你的kubernetes集群,你就可以开始在它上部署你的应用程序(pod、服务等(。你部署的那些应用程序可能需要暴露在外部世界,例如,一个托管在你的kubernetes集群上的网站,需要从互联网上访问。然后这些NodePort、Loadbalancer或Ingress就出现了。NodePort、LoadBalancer和Ingress之间的区别以及何时使用什么?在这篇文章中解释得很好
https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0
希望这能给你一些澄清。
编辑:此编辑适用于1.13版的kubeadm配置文件(见注释(
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: stable
apiServer:
certSANs:
- "VIRTUAL IP"
controlPlaneEndpoint: "VIRTUAL IP"
etcd:
external:
endpoints:
- https://ETCD_0_IP:2379
- https://ETCD_1_IP:2379
- https://ETCD_2_IP:2379
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key