Kubernetes集群部署

Kubernetes介绍

Kubernetes的概述及用途
是一个开源的Docker容器编排系统
源自于google的borg
2015年7月Kubernetes v1.0正式发布
调度计算集群节点,动态管理节点上的作业
使用【labels】和【pods】概念,将应用按逻辑单元分组
截止到目前为止最新稳定版本是v1.25

主要用途
自动化部署、扩展和管理容器应用
服务发现
资源调度
部署管理
服务发现
扩容缩容
监控

使用Kubernetes的好处
裸容器的不足
宿主机宕机造成宿主机上的容器不可用,无法自行恢复
容器的健康检查不到位,容器在运行,却无法访问
应用程序的部署、回滚、扩缩容困难
数千个容器和端口,难以维护

使用Kubernetes的好处
可以管理大量跨主机的容器
快速部署和扩展应用
无缝对接新的应用功能
节省资源,优化硬件资源的使用

Kubernetes组件
Master组件

master节点是kubernetes集群的控制节点,在生产环境中不建议部署集群核心组件外的任何容器(在kubeadm安装方式下,系统组件以容器方式运行在master节点的宿主机上;二进制安装方式下,系统组件以守护进程的方式运行,master节点可以不运行任何容器),公司业务程序的容器是不建议部署在master节点上,以免升级或者维护时对业务造成影响。
kube-apiserver

(1)API server

API server提供了集群网关,是整个集群的控制中枢,提供集群中各个模块之间的数据交换,并将集群信息存储到ETCD集群中。同事,它也是集群管理、资源配额、提供完备的集群安全机制的入口,为集群各类资源对象提供增删改查。API server在客户端对集群进行访问,客户端需要通过认证,并使用API server作为访问节点和pod(以及服务)的堡垒和代理/通道。

  • API服务器公开kubernetes API
  • REST/kubectl的入口点——它是kubernetes控制平面的前端。
  • 它跟踪所有集群组件的状态并管理他们之间的交互
  • 它旨在水平扩展
  • 它使用YAML/JSON manifest文件
  • 他验证和处理通过API发出的请求

Kube-scheduler

(2)Schedule

Scheduler主要功能是资源调度,将pod调度到对应的主机上。依据请求资源的可用性、服务请求的质量等约束条件,k8s也支持用户自己提供的调度器。

  • 它将pod调度到工作节点
  • 它监视api-server以查找没有分配节点的新创新的Pod,并选择一个健康的节点让他们运行
  • 如果没有合适的节点,则Pod将处于挂起状态,知道出现这样一个健康的节点。
  • 它监视API server的新工作任务。

Kube-controller-manager

(3)Controller Manager

Controller Manager负责维护集群的状态,比如检查故障检测、内存垃圾回收、回滚更新等,也执行API业务逻辑;K8s默认提供replication controller 、controller、daemonset controller等控制器。

  • 它监视它管理的对象的期望状态并通过API服务器监视它们的当前状态
  • 采取纠正措施以确保当前状态与所需状态相同
  • 它是控制器的控制器
  • 它运行控制器进程。从逻辑上讲,每个控制器都是一个单独的进程,但为了降低复杂性,他们都呗编译成一个二进制文件并在单个进程中运行。

(4) etcd

etcd用于可靠的存储集群的配置数据,是一种持久性、轻量型、分布式的键值数据存储组件。可以理解为一种分布式的非关系型数据库。etcd是集群的状态,k8s默认使用分布式的etcd集群整体存储用来实现发现服务和共享配置集群的所有状态都存储在etcd实例中,并具有监控的能力,因此当etcd中的信息发生变化时,能够快速地通知集群中相关的组件。

  • 它是一个一致的、分布式的、高度可用的键值存储
  • 它是有状态的持久存储,用于存储所有的kubernetes集群数据(集群状态和配置)
  • 它是集群的真相来源。
  • 它可以时控制平面的一部分,也可以在外部进行配置。

    节点控制器
    复制控制器
    端点控制器
    服务账户和令牌控制器

Node组件

Node节点也被称为worker节点,是主要负责部署容器的主机,集群中的灭个节点都必须具备容器的Runtime(运行时,)比如docker 

kubelet作为守护进程运行在Node节点上,负责监听该节点上所有的pod,同时负责上报该节点的所有pod的运行状态,确保节点上的所有容器都能正常运行。当Node节点宕机或故障时,该节点上运行的pod会被自动转移到其他节点上。

(1)容器运行时

docker引擎是本地的容器运行时环境,负责镜像管理以及pod和容器的真正运行。k8s本身并不提供容器运行时环境,但提供了接口,可以插入所选择的容器运行时环境,目前支持Docker和rkt。

  • 容器运行时是负责运行容器(在pod中)的软件
  • 为了运行容器,每个工作节点都有一个容器运行时引擎
  • 它从容器镜像注册表(container image registry)中提取镜像并启动和停止容器。

kubernetes支持多种容器运行时:

  • Docker
  • containerd
  • CRI-O
  • Kubernetes CRI(Container Runtime Interface,容器运行时接口)的任何实现。

(2)kubelet

kubelet是node节点上最主要的工作代理,用于汇报节点状态并负责维护pod的生命周期,也负责volume(CVI)和网络(CNI)的管理。kubelet是pod和节点API的主要实现者,负责驱动容器执行层。作为基本的执行单元,pod可以拥有多个容器和存储卷,能够方便地在每个容器中打包一个单一的应用,从而解耦了应用构建时和部署时所关心的事项,方便在物理或虚拟机之间进行迁移。

  • 它是在集群中的每个节点上运行的代理
  • 它充当API服务器和节点之间的管道
  • 他确保容器在pod中运行并且它们是健康的
  • 它实例化并执行Pod
  • 它监视API server的工作任务
  • 它从节点那里得到指令并报告给主节点。

(3)kube-proxy代理

kube-proxy代理对抽象的应用地址的访问,服务提供了一种访问一群pod的途径,kube-proxy负责为服务提供集群内部的服务发现和应用的负载均衡(通常利用iptables规则),实现服务到pod路由和转发。此方式通过创建一个虚拟IP来实现,客户端能够访问此IP,并能够讲服务透明地代理至pod。

  • 它是网络组件,在网络中骑着至关重要的作用
  • 它管理IP转换和路由
  • 它时运行在集群中每个节点上的网络代理
  • 它维护节点上的网络规则。这些网络规则允许从集群内部或外部与Pod进行网络通信
  • 它确保每个Pod获得唯一的IP地址
  • 这使得pod中所有容器共享一个IP为可能
  • 它促进了kubernetes网络服务和服务中所有pod的负载平衡
  • 它处理单个主机子网并确保服务可供外部各方防访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值