Kubernetes documentation

什么是 Kubernetes?

Kubernetes 是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。它提供了出色的社区,并与所有云提供商合作。因此,可以说 Kubernetes 不是一个容器化平台,而是一个多容器管理解决方案。

其目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

Kubernetes 如何简化容器化部署?

跨主机的容器都需要相互通信。因此,要做到这一点,需要一些能够负载平衡,扩展和监控容器的东西。由于 Kubernetes 与云无关并且可以在任何公共/私有提供商上运行,因此可以简化容器化部署程序。

什么是 kubectl?

Kubectl 是一个平台,可以使用该平台将命令传递给集群。因此,它基本上为CLI 提供了针对 Kubernetes 集群运行命令的方法,以及创建和管理 Kubernetes组件的各种方法。

什么是 kubelet?

kubelet是一个代理服务,它在每个节点上运行,并使从服务器与主服务器通信。因此,Kubelet 处理 PodSpec 中提供给它的容器的描述,并确保 PodSpec 中描述的容器运行正常。可以创建 pod、删除 pod。

k8s 有哪些组件?

  1. etcd 保存了整个集群的状态;
  2. apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
  3. controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  4. scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
  5. kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;
  6. Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
  7. kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡。

什么是 Ingress,它是如何工作的?

Ingress 网络是一组规则,充当 Kubernetes 集群的入口点。这允许入站连接,可以将其配置为通过可访问的 URL,负载平衡流量或通过提供基于名称的虚拟主机从外部提供服务。因此,Ingress 是一个 API 对象,通常通过 HTTP 管理集群中服务的外部访问,是暴露服务的最有效方式。

service的类型有哪几种

service的类型一般有4中,分别是:

  • ClusterIP:表示service仅供集群内部使用,默认值就是ClusterIP类型

  • NodePort:表示service可以对外访问应用,会在每个节点上暴露一个端口,这样外部浏览器访问地址为:任意节点的IP:NodePort就能连上service了

  • LoadBalancer:表示service对外访问应用,这种类型的service是公有云环境下的service,此模式需要外部云厂商的支持,需要有一个公网IP地址

  • ExternalName:这种类型的service会把集群外部的服务引入集群内部,这样集群内直接访问service就可以间接的使用集群外部服务了

一般情况下,service都是ClusterIP类型的,通过ingress接入的外部流量。

Pod到Service的通信?

  1. k8s在创建服务时为服务分配一个虚拟IP,客户端通过该IP访问服务,服务则负责将请求转发到后端Pod上;

  2. Service是通过kube-proxy服务进程实现,该进程在每个Node上均运行可以看作一个透明代理兼负载均衡器;

  3. 对每个TCP类型Service,kube-proxy都会在本地Node上建立一个SocketServer来负责接受请求,然后均匀发送到后端Pod默认采用Round Robin负载均衡算法;

  4. Service的Cluster IP与NodePort等概念是kube-proxy通过Iptables的NAT转换实现,kube-proxy进程动态创建与Service相关的Iptables规则;

  5. kube-proxy通过查询和监听API Server中Service与Endpoints的变化来实现其主要功能,包括为新创建的Service打开一个本地代理对象,接收请求针对针对发生变化的Service列表,kube-proxy会逐个处理;

更多k8s基础知识及问题解答见:

kuberntes架构师200题大全

K8S面试题

参考