linux系统kubernetes概念

kubernetes概述

进行容器化应用部署

开源的容器化集群管理系统

利于应用扩展

部署容器化应用更高效和简洁

Kubernetes核心概念

Master
Master节点主要负责资源调度(Scheduler),控制副本(Replication Controller),和提供统一访问集群的入口(API Server)。---核心节点也是管理节点
Node
Node是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机,由Master管理,并汇报容器状态给Master,当Node节点宕机(NotReady状态)时,该节点上运行的Pod会被自动地转移到其他节点上。

Kubelet组件---Kubelet会从API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。

KuberProxy组件--实现将客户端请求流量转发到内部的pod资源。

Docker Engine(docker)组件,Docker引擎,负责本机的容器创建和管理工作; 
Node IP
   Node节点的IP地址,是Kubernetes集群中每个节点的物理网卡的IP地址,是真是存在的物理网络,所有属于这个网络的服务器之间都能通过这个网络直接通信; 
Pod
Pod直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod)。处于同一个Pod中的容器共享同样的存储空间(Volume,卷或存储卷)、网络命名空间IP地址和Port端口。在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管理

运行于Node节点上,Pod是k8s进行创建、调度和管理的最小单位.一个Pod可以包含一个容器或者多个相关容器。
 
Pod 就是 k8s 世界里的"应用";而一个应用,可以由多个容器组成。
pause容器
每个Pod中都有一个pause容器,pause容器做为Pod的网络接入点,Pod中其他的容器会使用容器映射模式启动并接入到这个pause容器。
Pod IP
 Pod的IP地址,是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络,位于不同Node上的Pod能够彼此通信,需要通过Pod IP所在的虚拟二层网络进行通信,而真实的TCP流量则是通过Node IP所在的物理网卡流出的 
资源限制:
每个Pod可以设置限额的计算机资源有CPU和Memory; 
Pod Volume:
Docker Volume对应Kubernetes中的Pod Volume;数间共享数据。
Event
是一个事件记录,记录了事件最早产生的时间、最后重复时间、重复次数、发起者、类型,以及导致此事件的原因等信息。Event通常关联到具体资源对象上,是排查故障的重要参考信息
Endpoint(pod IP+容器Port)
标识服务进程的访问点;
ReplicaSet
确保任何指定的Pod副本数量,并提供声明式更新等功能。 
Deployment
Deployment是一个更高层次的API对象,它管理ReplicaSets和Pod,并提供声明式更新等功能。

官方建议使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,这就意味着可能永远不需要直接操作ReplicaSet对象,因此Deployment将会是使用最频繁的资源对象。  
RC-Replication Controller
Replication  Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余pod数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication  Controller是实现弹性伸缩、动态扩容和滚动升级的核心。
Service
Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。它有暴露内部服务的端口到外网的能力。Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行。

一个service定义了访问pod的方式,就像单个固定的IP地址和与其相对应的DNS名之间的关系。
service分为两种ip地址:
一种是对内的叫Cluster IP ,一种是对外的叫external ip:
实现对外ip方式分为:
1.NodePort:通过每个 Node 上的 IP 和内部服务暴露出来的静态端口实现暴露服务。
2.LoadBalancer:使用云提供商的负载均衡器.
3.ingress:使用负载均衡软件实现负载均衡,向外部暴露服务。
Cluster IP
Service的IP地址,特性:
专门给集群内部资源访问的。在k8s集群里面部署的容器,用内部的容器可以访问这个ip地址。但是集群外面的机器不能访问。

1.无法被Ping通;
2.Node IP、Pod IP、Cluster IP之间的通信,采用的是Kubernetes自己设计的一种编程方式的特殊的路由规则,与IP路由有很大的不同
Label—标签与Selectors—选择器
 Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的K/V键值对。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。
 比如,你可能创建了一个"tier"和“app”标签,通过Label(tier=frontend, app=myapp)来标记前端Pod容器,使用 Label(tier=backend, app=myapp)标记后台Pod。然后可以使用 Selectors 选择带有特定Label的Pod,并且将 Service 或者 Replication Controller 应用到上面。

 一个label是一个被附加到资源上的键/值对,譬如附加到一个Pod上,为它传递一个用户自定的并且可识别的属性。

特性

自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器

自我修复:容器启动失败后,对容器进行重启
		容器未通过检查时,会关闭此容器知道容器正常运行,才会对外服务
		
水平扩展:对容器进行规模扩大或者规模裁剪

服务发现:用户不需要提供额外的服务发现机制,k8s自身能力实现服务 发现和负载均衡

滚动更新:根据应用变化,进行一次性或批量式更新

版本回退:根据应用部署情况,对应用容器运行的应用,进行版本即时回退

秘钥和配置管理:不需要重新构建镜像情况,可以部署和更新秘钥和应用配置,类似热部署

存储编排:自动实现存储系统挂载及应用,对有状态的应用实现数据持久化很重要

批处理:提供一次性任务,定时任务,满足批量数据处理和分析场景

功能简介

服务发现和负载均衡

  Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器, 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量, 从而使部署稳定. 常用的DNS插件为coreDNS, 用作服务发现和集群中容器通讯; 负载均衡器常使用集群内的service资源进行对外暴露服务, 同时也提供ingress插件接口对外暴露服务

存储编排

  Kubernetes 允许你自动挂载你选择的存储系统, 例如本地存储、公共云提供商等. 对于集群内部的应用有时会需要持久化数据, 这时容器如果被删除数据也会随之消失, 所以一个稳定的外部存储集群就显得很重要了; 常见的对k8s提供存储能力的集群有: heketi + gluesterfs 、Rook + Ceph、阿里云OSS等, 配合集群内的storageclass可直接向存储集群申请存储空间

自动部署和回滚

  你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态 更改为期望状态. 例如, 你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器. 控制k8s集群中容器的状态大多数时候都会采用 yaml 资源配置清单的形式, 方便记忆也易于识别

自动完成装箱计算

  Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM). 当容器指定了资源请求时, Kubernetes 可以做出更好的决策来管理容器的资源. 这就与Linux操作系统中的资源限额有关系了, 有些容器在接收高并发访问的时候, 往往会无限制的占用宿主机资源, 从而导致其他服务容器争抢不到应有的资源进行运行和服务, 从而导致大面积瘫痪

自我修复

  Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端. 在创建pod的时候, 只有当设置在pod中的探针全部探测正常后才会将pod连接到集群内网络中对外进行服务, 否则将通过监控告警给运维人员; 同样的对于k8s中的容器会受到kubelet和kube-apiserver的双重管理, kubelet上报容器运行状态, api-server向etcd中请求期望状态, 比较后让其达到期望的状态, 从而保证其功能/服务容器永久保持在线

密钥与配置管理

  Kubernetes 允许你存储和管理敏感信息, 例如密码、OAuth 令牌和 ssh 密钥. 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置, 也无需在堆栈配置中暴露密钥. 对于无状态应用(exam: nginx)的配置文件, 可以使用k8s中的configmap资源进行存储, 但对于密码和某些私密信息而言就可以使用secret资源进行存储, 从而避免频繁更改和私密信息泄漏的风险

k8s架构组件

master主控节点

控制平面:使用指令控制node
api server:提供api接口用来操作服务资源
scheduler:查看服务器cpu和内存资源状态,用来决策部署应用,负责将 Pod 调度到合适的节点上
controller manager:创建关闭服务,用于执行各种集群管理任务
etcd:存储数据,存储层

node工作节点

node:负责实际运行各个应用服务,实际的工作节点,共享cpu和内存
container runtime:容器运行时组件(docker Containerd)
pod:多个container共同组成一个pod,k8s中最小的调度单位
kubelet:接受controller manager指令,管理和监控pod,与控制平面通信并执行控制平面指令
kube proxy:负责node的网络通信功能,将外部请求转发到pod中

总结

控制平面:使用指令控制node
api server:提供api接口用来操作服务资源
scheduler:查看服务器cpu和内存资源状态,用来决策部署应用,负责将 Pod 调度到合适的节点上
controller manager:创建关闭服务,用于执行各种集群管理任务
etcd:存储数据,存储层

node:负责实际运行各个应用服务,实际的工作节点,共享cpu和内存
container runtime:容器运行时组件(docker Containerd)
pod:多个container共同组成一个pod,k8s中最小的调度单位
kubelet:接受controller manager指令,管理和监控pod,与控制平面通信并执行控制平面指令
kube proxy:负责node的网络通信功能,将外部请求转发到pod中

控制平面和node共同构成一个cluster,也就是集群
ingress控制器:集群入口控制器,提供入口,让外部用户访问集群内部服务
kubectl:执行命令,调用k8s的api接口

部署服务流程

编写yaml文件

kubectl执行kubectl apply -f xxx.yaml

kubectl读取解析yaml文件

将解析后的对象通过api请求发送给k8s控制平面的api server

api server根据需求驱使scheduler通过etcd提供的数据寻找合适的node

找到后,node创建服务,node内部的kubelet收到命令后,基于container runtime组件拉取镜像,创建容器,完成pod创建

调用服务流程

外部请求先访问ingress控制器

请求转发k8s内node节点的kube proxy上,找到对应的pod后

在转发请求到容器内部的服务中,处理结果原路返回

相关推荐

  1. linux系统kubernetes概念

    2024-03-17 01:06:02       21 阅读
  2. linux系统kubernetes的yaml文件

    2024-03-17 01:06:02       25 阅读
  3. linux系统kubernetes的deployment使用

    2024-03-17 01:06:02       21 阅读
  4. linux系统Kubernetes工具ingress暴露服务

    2024-03-17 01:06:02       16 阅读
  5. Kubernetes 文档 / 概念 / Kubernetes 架构 / 控制器

    2024-03-17 01:06:02       15 阅读
  6. 基于Linux系统使用Kind快速安装体验kubernetes

    2024-03-17 01:06:02       40 阅读
  7. linux系统kubernetes的ServiceAccount和RBAC角色访问控制

    2024-03-17 01:06:02       25 阅读

最近更新

  1. 前端判断场景和方式

    2024-03-17 01:06:02       0 阅读
  2. AWS EKS上GPU工作负载自动扩缩容的异常排查指南

    2024-03-17 01:06:02       1 阅读
  3. 深入WebKit内核:揭秘HTML与XML的识别之谜

    2024-03-17 01:06:02       1 阅读
  4. shell脚本实现mysql 数据库备份

    2024-03-17 01:06:02       1 阅读

热门阅读

  1. MySQL建表以及excel内容导入

    2024-03-17 01:06:02       18 阅读
  2. 什么是面向对象

    2024-03-17 01:06:02       18 阅读
  3. 数字电子技术实验(三)

    2024-03-17 01:06:02       24 阅读
  4. 【820复试】数据结构面试问题

    2024-03-17 01:06:02       17 阅读
  5. 使用 mapstructure 解析 json

    2024-03-17 01:06:02       21 阅读
  6. Linux 学习笔记(17

    2024-03-17 01:06:02       21 阅读
  7. 【Flask开发实战】防火墙配置文件解析(一)

    2024-03-17 01:06:02       18 阅读
  8. 中电金信:我们为什么需要单元化架构?

    2024-03-17 01:06:02       20 阅读