初识Kubernetes的理论基础

 1.k8s的由来及其技术运用

k8s的简介 


  Kubernetes,词根源于希腊语的 舵手、飞行员。在国内又称k8s(因为k和s之间有8个字母,所以得名。“国内程序员的幽默”)。用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具。

K8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。

云原生基金会(CNCF)于2015年12月成立,隶属于Linux基金会。CNCF孵化的第一个项目就是Kubernetes,随着容器的广泛使用,Kubernetes已经成为容器编排工具的事实标准。

 官网:
https://kubernetes.io

GitHub:
https://github.com/kubernetes/kubernetes

传统后端部署与k8s 的对比

 传统部署


 传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。

此时一旦服务的请求量上来,已部署的服务响应不过来,传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。这样问题就出现了:从监控告警到部署服务,中间需要人力介入! 没有办法自动完成服务的部署、更新、卸载和扩容、缩容

k8s的部署 


  上述传统后端部署的问题,就是k8s所要解决的问题。自动化运维管理容器化(Docker)程序。K8S是Google开源的容器集群管理系统,在Docker等容器技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。 

k8s的作用

k8s最主要的作用就是简单,高效的部署容器化的应用。

  • 1.解决了docker的单机部署和无法集群化的特点
  • 2.解决了随着容器数量的增加,对应增加的管理成本。
  • 3.容器的高可用,提供了容器的自愈机制。
  • 4.解决了容器没有预设模板以及无法快速,大规模部署。以及大规模的容器调度。
  • 5.k8s提供了集中化配置管理的中心。
  • 6.解决了容器的生命周期的管理工具。
  • 7.提供了图形化工具对容器进行管理

k8s是基于开源的容器集群管理系统,在docker容器技术的基础之上。

为容器化应用提供部署,运行,资源调度,服务发现,动态伸缩等一系列完整的功能

k8s的特性

1.弹性伸缩:

  • 可以基于命令,或者图形化界面,以及cpu的使用情况,自动的对部署的程序进行扩容和缩容。以最小的成本运行服务

2.自我修复:

  • 如果出现节点故障时,可以自动重新启动失败的容器,替换和重新部署。

3.服务发现和负载均衡:

  • k8s为多个容器提供一个统一的访问入口(内部地址和一个内部的dns名称),自动负载均衡关联的所有容器。

4.自动发布和回滚:

  • k8s采用滚动的策略更新应用。如果更新过程中出现,可以根据回滚点来进行回滚。

5.集中化配置管理和密钥管理。

  • k8s集群内各个组件都是要进行密钥对验证的。(k8s安全性还是不够,核心组件不建议部署。自定义应用可以部署)

6.存储编排:

  • 1.可以自动化的把容器部署在节点上。
  • 2.也可以通过命令行或者yml文件(自定义pod)实现指定节点部署。
  • 3.也可以通过网络存储,NFS,GFS

7.任务进行批次处理。提供一次性的任务,定时任务,满足需要批量处理和分析的场景。

k8s的核心组件

K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责集群的调度、管理和运维,Slave 节点是集群中的运算工作负载节点。
在 K8S 中,主节点一般被称为 Master 节点,而从节点则被称为 Worker Node 节点,每个 Node 都会被 Master 分配一些工作负载。

Master 组件可以在群集中的任何计算机上运行,但建议 Master 节点占据一个独立的服务器。因为 Master 是整个集群的大脑,如果 Master 所在节点宕机或不可用,那么所有的控制命令都将失效。除了 Master,在 K8S 集群中的其他机器被称为 Worker Node 节点,当某个 Node 宕机时,其上的工作负载会被 Master 自动转移到其他节点上去。
 

k8s--master的核心组件

1.1.kuber-aplserver

k8s集群之中每个组件都要靠密钥对来进行验证,组件之间的通信aplserver。

API是应用接口服务,k8s的所有资源请求和调用操作都是kube-aplserver来完成。

所有对象的增,删,改,查和监听的操作都是kube-aplserver处理完之后交给etcd来进行。

apl-server是k8s所有请求的入口服务,apl-server接收k8s的所有请求(包括命令行和图形化界面),然后根据用户的具体请求通知对应的组件展示或者运行命令。

Apl-server相当于整个集群的大脑。

1.2.kube-controller-manager:

运行管理控制器。是k8s集群中处理常规任务的后台线程。是集群中所有资源对象的自动化控制中心。一个资源对应一个控制器,controller-manager负责管理这些控制器。

1.2.1.node controller(节点控制器):

  • 负责节点的发现以及节点故障时的发现和响应。

1.2.2replication controller(副本控制器):

  • 控制关联的pod副本数。可以随时扩缩容。

1.2.3.Endpoints controller(端点控制器),

  • 监听service和对应pod的副本变化。端点就是服务暴露出的访问点。要访问这个服务,必须要知道他的endpoint。就是内部每个服务的ip地址+端口

1.2.4.service account和roken controllers(服务控制和令牌控制):

  • namespace,为命名空间创建默认账户和API访问令牌。

1.2.5.resourcequota controller(资源控制器)

  • 可以对命名空间进行限制,也可以对pod的资源进行控制。

1.2.6.namespace controller(命名空间控制器)

  • 管理命名空间的生命周期。

1.2.7.service controller(服务节点控制器):

  • k8s集群和外部主机的接口控制器

1.3.kube-scheduler:资源调度组件

根据调度算法为新创建的pod选择一个合适的node节点。

可以理解为k8s的所有node节点的调度器,部署和调度node。

  • 预先策略:人工定制,指定的node节点上部署
  • 优先策略:限制条件

根据调度算法选择一个合适的node,node的节点的资源情况,node的资源控制的情况等等,选一个资源最富裕,负载最小的node来部署。

2.k8s的配置存储中心----ETCD:

 etcd是k8s的存储服务中心

 etcd 是分布式键值存储系统,存储了 K8S 的关键配置和用户配置,K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。

3.k8s中node的组件

1.kubelet:node节点的监视器,

Node 节点的监视器,以及与 Master 节点的通讯器。Kubelet 是 Master 节点安插在 Node 节点上的“眼线”,它会定时向 API Server 汇报自己 Node 节点上运行的服务的状态,并接受来自 Master 节点的指示采取调整措施。

  • kubelet会定时向APIserver汇报自己的node上的运行服务的状态,APIserver会把节点状态保存到etcd存储当中。
  • 从 Master 节点获取自己节点上 Pod 的期望状态(比如运行什么容器、运行的副本数量、网络或者存储如何配置等), 直接跟容器引擎交互实现容器的生命周期管理,如果自己节点上 Pod 的状态与期望状态不一致,则调用对应的容器平台接口(即 docker 的接口)达到这个状态。
  • 管理镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源。
     

2.kube-proxy

实现每个节点上的pod网络代理。负责节点上的网络规划,实现四层负载工作。负载写入(ipatables(快淘汰))ipvs实现服务映射

3.docker:容器引擎,运行容器,负载本机的容器创建和管理

k8s创建pod时,kube-scheduler调度到节点上(node节点),节点上的监控器kubeelet只是docker启动特点的容器。

kubelet把容器的信息收集,发送给主节点。只需要在主节点发布指令,节点上的kubelet就会指示docker对容器拉取镜像,启动或者停止容器。

k8s的核心概念

Kubernetes 包含多种类型的资源对象:Pod、Label、Service、Replication Controller 等。

所有的资源对象都可以通过 Kubernetes 提供的 kubectl 工具进行增、删、改、查等操作,并将其保存在 etcd 中持久化存储。

Kubernets其实是一个高度自动化的资源控制系统,通过跟踪对比etcd存储里保存的资源期望状态与当前环境中的实际资源状态的差异,来实现自动控制和自动纠错等高级功能。

pod的理解

pod运行在节点上,是k8s当中创建或者部署的最小/最简单的基本单位,一个pod代表集群上正在运行的一个进程。

可以把 Pod 理解成豌豆荚,而同一 Pod 内的每个容器是一颗颗豌豆。一个 Pod 由一个或多个容器组成,Pod 中容器共享网络、存储和计算资源,在同一台 Docker 主机上运行。

k8s创建pod的流程

(1)用户通过客户端发送创建pod的请求到master节点上的apiserver

 (2)apiserver会先把相关的请求信息写入到etcd中,再找controller-manager

          根据预设的资源模板创建pod清单

(3)然后controller-manager会通过apiserver去找scheduler

          为新创建的pod选择最适合的Node节点

(4)scheduler会通过调度算法的预选策略和优选策略筛选出最适合的Node节点

(5)然后再通过apiserver找到对应的Node节点上的kubelet去创建和管理pod

(6)kubelet会直接跟容器引擎交互来管理容器的生命周期

(7)用户通过创建承载在kube-proxy上的service资源,写入相关的网络规则,

           实现对pod的服务发现和负载均衡

如上图所示,谁是pod,谁是容器呢?

http和nginx是pod

http和nginx所指向的一共6个都是容器。

pod控制器

Pod 控制器是 Pod 启动的一种模版,用来保证在K8S里启动的 Pod 应始终按照用户的预期运行(副本数、生命周期、健康状态检查等)。

  

K8S 内提供了众多的 Pod 控制器,常用的有以下几种:

  • deployment:无状态应用部署,作用就是管理和控制pod,以及replcaset(运行几个容器)。管控他的运行状态
  • replcaset:保证pod的副本数了,受控于deloyment。

在k8s中,部署服务,实际上就是pod,deloyment部署就是pod,replicaset的就是来定义pod的容器数量。

可以保证pod的不可重复性。在当前命名空间不能重复。不同命名空间名称可以重复。

官方推荐使用deployment进行服务部署。

  • daemonset:确保所有节点运行同一类的pod。
  • statefulset:有状态应用部署。
  • job:可以在pod设置一次性任务,运行完即退出。
  • cronjod:一直在运行的周期性任务

service(可以理解为网关)

k8s集群当中,创建一个pod之后,都会给其中运行的容器分配一个集群内的ip地址,由于业务的变更,容器可能会发生变化,IP地址也会发生变化。service的作用就是提供整个pod对外统一的IP地址。

service就是一个网关(路由器),通过访问service就可以访问pod内部的容器集群。

service能实现负载均衡和代理---kube-proxy----来实现负载均衡

service是k8s微服务的核心,屏蔽了服务的细节,统一的对外暴露的端口,真正实现了”微服务“。

service的流量调度:userspace(用户空间,已经废弃),iptables(即将废弃)。ipvs(目前1.20都用)

label:标签

k8s的特色管理方式,分类管理资源对象。

NODE pod service

label标签可以自定义

label选择器:等于,不等于。使用定义的标签名

ingress(重点!!区别七层和四层)

k8s集群对外暴露提供访问的接口,属于应用层,七层代理,转发的是http请求,http/https。

service是四层转发,转发的是流量。

https://www.zzr.com:80------>ingress------>service-------pod--------容器

namespace

在k8s上可以通过namespace来实现资源隔离,项目隔离。

通过namespace可以把集群划分为多个资源部共享的虚拟机群组。

不同命名空间里面的资源名称可以重复的。

总结

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值