本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • K8S
  • K8S教程(1)K8S集群与核心组件介绍

K8S教程(1)K8S集群与核心组件介绍

发布:TangLu2020-4-21 15:15分类: K8S 标签: docker k8s kubernetes

一、什么是K8S

K8S全称是Kubernetes,它是由谷歌基于borg开发的一款容器编排工具。由于其有自动调度、容器自我修复、水平自动扩展、服务发现、负载均衡、自动发布和回滚等特色功能,短短几年时间就占据了80%的使用份额。容器编排工具主要的作用就是让容器作为集群在分布式环境中工作,适用于现在的微服务架构,各个应用以服务的形式运行在各自的容器中。在容器技术诞生初期,使用的编排工具主要有docker compose和docker swarm,前者主要面向于单机编排,而docker swarm是docker官方开发的一款可以将多个docker放入一个资源池中,再让compose对这个资源池进行编排形成集群管理的工具。


在落地K8S前需要考虑和解决的问题:

1、交付到K8S中的程序或者服务如何对外提供服务

2、容器跨宿主机的通信问题

3、K8S监控和日志收集问题

4、CI/CD的实现

5、如何平滑迁移服务到K8S集群


二、K8S的工作模式与常用组件

K8S集群系统采用了Master / Node架构,由一个或多个中心节点(Masters)来对多个工作节点(Node)进行择优调度,实现资源整合并提供服务K8S并不会直接调度容器的运行,而是通过调度POD的方式来管理容器。POD是K8S的最小调度单位,可以把它理解为容器的外壳,POD把容器封装在了里面。而用户通过Service去访问这些资源,Service是K8S中一组提供相同服务的Pod的对外访问接口,有点像负载均衡的VIP。简单来说就是多个容器组成Pod,多个Pod组成Service,用户通过Service访问服务。


1、K8S资源介绍

· Pod:K8S中的最小部署单元,可以把它当做一个独立虚拟机来理解。一个Pod由一个或多个容器组成,这些容器通常互相协同工作。一个Pod管理一组相关的服务,比如可以把Nginx、MySQL、PHP放在一个Pod中形成LNMP架构。如果需要扩容缩容,只需要增加或减少Pod。在每个Pod内部还会有一个pause容器用于对Pod中的每个容器的网络和存储资源进行共享。

· Service提供相同服务的一个多或个Pod的访问入口叫做Service,这个Service会有一个集群VIP

· Lable:标签,用于区分Pod、Service等对象,每个Pod可以有多个标签,不同的标签也可以在不同的Pod上。通过标签选择器可以快速选择一个标签下的资源,即使它们没有在同一个Node

· Controller:控制器。用于控制Pod数量与预期一致,当容器异常退出会自动创建新的Pod来替代。控制器又分有Deployment、ReplicaSet、ReplicationControllerStatefulSet、DeamonSet等几种模型。其中ReplicaSet是ReplicationController的下一代;Deployment常用于无状态服务StatefulSet是为了解决有状态服务的问题;而DaemonSet可以确保全部Node上都运行某个Pod,适用于运行日志程序或者监控程序


2、K8S Master节点核心组件

· API Server:整个系统的对外接口,是所有服务访问统一入口

· Controller-Manager:集群大管家,管理所有Pod的运行状态,保证它们按照预定的配置去运行,比如Pod占用的资源、运行多长时间等

· ETCD:K8S集群的所有状态信息都存储在ETCD系统中,可以把ETCD理解为K8S的数据库或者注册中心,通常ETCD需要配置高可用并支持https

· Scheduler:负责对集群内部的资源进行调度,根据一个优选策略对Pod的分部进行调度


3、K8S Node节点核心组件

· kubelet:它会与API Server保持通信,获取到Pod对象的配置信息并确保它们处于期望的状态。然后定期向Master汇报资源情况,并通过cAdvisor监控容器和节点的资源占用情况

· kube-proxy:按需为Service生成ipvs或iptables转发规则,实现服务映射与负载均衡

· Docker:K8S底层调用了Docker,负责创建容器


4、其他组件

flannel:网络组件,让集群中的不同宿主所创建的容器都有一个全集群唯一的IP地址,实现Pod跨主机通信

· CoreDNS:为集群中的不同Pod提供一个名称并完成解析的服务

· Ingress:如果需要某些Pod能提供给外部用户访问,可以通过Ingress把K8S中的服务暴露。Ingress是一组路由规则的集合,这些规则通过Ingress发挥作用,目前可用的项目有Nginx、Haproxy、Traefik等。


5、Pod在生产环境中的访问流程

Pod相当于一个有着独立IP、独立hostname、利用namespace进行资源隔离的独立沙箱环境。Pod内部封装的是一个或多个相关的容器。Pod内部容器之间可以使用localhost访问,而对外提供服务的话由于没有对应的实体(物理机、物理网卡),所以客户端请求都是先到物理机的某个端口,然后将其请求发送给service,再由service通过iptables规则转发到对应的Pod中,具体需要转发到哪些Pod可以通过标签选择器来完成。

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《K8S教程(1)K8S集群与核心组件介绍
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-473.html  [生成短网址]

已有 0/3975 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~