Kubernetes——基础概念

Posted 封玖FJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes——基础概念相关的知识,希望对你有一定的参考价值。

Kubernetes介绍

什么是Kubernetes

  1. 用于自动部署、扩展和管理“容器化( containerized) 应用程序”的开源系统
  2. 可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是–个生态极其丰富的容器编排框架工具

Kubernetes作用

1.用于自动部署、扩展和管理“容器化( containerized) 应用程序”的开源系统
2.可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是–个生态极其丰富的容器编排框架工具

Kubernetes由来

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

Kubernetes含义

  • 词根源于希腊语的舵手、飞行员

Kubernetes官网

官网https://kubernetes.io

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

中文网站http://docs.kubernetes.org.cn/92.html

为什么用K8S

  1. 试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序
  2. 设想一下,如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力
  3. 这样问题就出现了:从监控告警到部署服务,中间需要人力介入! 那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?
  4. 而这就是K8S要做的事情: 自动化运维管理容器(Docker) 程序。K8s的目标是让部署容器化应用简单高效

K8S解决的问题

  1. K8S解决了裸跑Docker的若干痛点:
  2. 单机使用,无法有效集群
  3. 随着容器数量的上升,管理成本攀升
  4. 没有有效的容灾、自愈机制
  5. 没有预设编排模板,无法实现快速、大规模容器调度
  6. 没有统一的配置管理中心工具
  7. 没有容器生命周期的管理工具
  8. 没有图形化运维管理工具
  • K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。

k8s的特性

1.弹性伸缩
使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性:业务低峰时回收资源,以最小成本运行服务
2.自我修复
在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断
3.服务发现和负载均衡
K8s为多个容器提供一-个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题
4.自动发布(默认滚动发布模式)和回滚
K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响业务
5.集中化配置管理和密钥管理
管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用
6.存储编排,支持外挂存储并对外挂存储资源进行编排
挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、Glusterfs、Ceph) 都作为集群资源的一部分使用, 极大提高存储使用灵活性
7.任务批处理运行
提供一次性任务,定时任务;满足批量数据处理和分析的场景

k8s集群架构与组件

Master和Worker Node节点

  1. K8S是属于主从设备模型(Master-Slave 架构),即有Master节点负责集群的调度、管理和运维,Slave节点是集群中的运算工作负载节点
  2. 在K8S中,主节点一般被称为Master节点,而从节点则被称为Worker Node节点,每个Node都会被Master分配一些工作负载
  3. Master组件可以在群集中的任何计算机上运行,但建议Master节点占据一个独立的服务器。因为Master是整个集群的大脑,如果Master所在节点宕机或不可用,那么所有的控制命令都将失效。除了Master,在K8s集群中的其他机器被称为Worker Node节点,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去

master节点核心组件

1. Kube-apiserver

2. Kube-controller-manager

  • 控制器类型

3. Kube-scheduler

  • k8s工作流程

配置存储中心(etcd)

Worker Node节点核心组件

Node节点的工作流程:

  1. Node节点可动态增加到kubernetes集群中,前提是这个节点已经正确安装、配置和启动了上述的关键进程,默认情况下,kubelet会向Master注册自己,这也kubernetes推荐的Node管理方式。
  2. 一旦Node被纳入集群管理范围,kubelet会定时向Master汇报自身的情况,以及之前有哪些Pod在运行等,这样Master可以获知每个Node的资源使用情况,并实现高效均衡的资源调度策略。
  3. 如果Node没有按时上报信息,则会被Master判断为失联,Node状态会被标记为Not Ready,随后Master会触发工作负载转移流程。

1. Kubelet

2. Kube-Proxy

3. docker engine(docker或rocket)

master节点的请求处理过程:
1)首页用户通过证书认证后使用kubectl命令行工具向API Server发送请求,API Server接收到请求后会写入到etcd中,API Server会让Controller-manager按照所预设的模板(多少实例、生命周期等)去创建Pod,Controller-manager通过 API Server读取etcd中用户的预设信息,再通过API Server去找 Scheduler可以为新创建的Pod选择最适合的Node节点。scheduler会通过API Server在Etcd存储中心中找到node节点存储的元信息、剩余资源等,通过预算策略和优选策略在所有Node节点中挑选最优的
2)scheduler确定node节点后通过API Server交给这个Node节点上的kubelet进行pod资源的创建,kubelet同时也会对所在node的资源信息和pod状态进行监控与API server进行交互将pod状态信息存储到etcd中
3)node节点上的kube-proxy是service资源的载体,负责pod的代理和负载均衡等功能,如果需要将pod发布出去,需要通过kube-proxy创建网络规则承载使用service作为负载均衡的访问入口,负载均衡所关联的pod节点,实现服务发布

组件总结

k8s核心概念

  1. Kubernetes包含多种类型的资源对象: Pod、 Label、 Service、 Replication Controller等
  2. 所有的资源对象都可以通过Kubernetes提供的kubectl工具进行增、删、改、查等操作,并将其保存在etcd中持久化存储
  3. Kubernets其实是一个高度自动化的资源控制系统,通过跟踪对比etcd存储里保存的资源期望状态与当前环境中的实际资源状态的差异,来实现自动控制和自动纠错等高级功能

Pod

Pod控制器

  1. Pod控制器是Pod启动的一种模版,用来保证在K8S里启动的Pod应始终按照用户的预期运行(副本数、生命周期、健康状态检查等)
  2. K8S内提供了众多的Pod控制器,常用的有以下几种:

无状态应用和有状态应用 ?

Label

Label选择器(Label selector)

Service

Ingress

Name

Namespace

以上是关于Kubernetes——基础概念的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes 学习总结(24)—— Kubernetes 滚动更新蓝绿发布金丝雀发布等发布策略详解

如何利用Kubernetes和Istio实现蓝绿部署?

18ReplicaSet手动蓝绿部署滚动发布回滚及Deployment自动滚动发布回滚及金丝雀发布回滚

如何跨不同版本K8S,为有状态工作负载做蓝绿部署

特定微服务的蓝绿部署

Kubernetes基础自学系列 | Kubernetes基本概念