Kubernetes核心概念总览

Stella981
• 阅读 709

系统的学习了一遍Kubernetes,发现概念太多,使用的时候有的概念容易混淆或记不清,写一篇文章做一个记录和梳理。

Master

关键进程:

  • API Server:集群控制的入口进程,提供了Rest接口
  • Controller Manager:所有资源对象的自动化控制中心,“大总管”
  • Scheduler:负责资源调度,“调度室”

Node

关键进程:

  • kubelet:负责Pod的创建、启停,实现集群管理的基本功能
  • kube-proxy:实现Kubernetes Service的通信与负载均衡机制
  • Docker Engine:Docker引擎,容器创建与管理

每个Node都是一台物理机,都有自己的Node IP

Pod

有一个根容器--Pause,剩下的就是业务容器。
有一个唯一的Pod IP,因为存在虚拟二层网络,所以Node间的Pod是可以通信的

Service

通过Label Selector关联一组Pod来组成一个Service。
有一个全局唯一的虚拟IP,称为Cluster IP。

Endpoint

暴露的端口和Cluster IP组成一个Endpoint,一个Service可以有多个Endpoint

RC

全名Replication Controller,定义了一个期望的Pod场景,比如始终保持Pod数量为3个

RS

全名Replica Set,是RC的升级版,一般与Deployment搭配使用

Deployment

可以知道当前Pod“部署”的进度,因为从Pod到Node是一个连续变化的状态

StatefulSet

顾名思义:有状态的Pod集合。
必须与Headless Service配合使用,Headless Service是一个无负载均衡器的Service,它没有Cluster IP,解析他的域名,会返回对应全部Pod的Endpoint列表。

HPA

全称Horizontal Pod Autoscaler,实现K8s的自动水平扩容和缩容

Job

批处理的工作项

Kubernetes Volume

Volume定义在Pod上,与Pod生命周期相同,同时还支持分布式文件系统

Persistent Volume

PV是一个独立的网盘,可以在每个Node访问
Pod使用PersistentVolumeClaim来申请PV,PVC会根据容量进行自动绑定

Namespace

实现多租户的隔离

Annotation

与Label类似,但不是用于Label Selector,而是用于用户任意定义的附加信息,以便于外部工具查找

ConfigMap

所有配置项都当成是key-value字符串,放到etcd中。
然后Kubernetes将存储在etcd中的ConfigMap通过Volume映射的方式变成目标Pod内的配置文件

DaemonSet

为每个Node上都调度一个Pod

Ingress

如果要向外暴露服务,上面讲到可以通过NodePort的方式来完成。弊端是每个Node上都会开放这个端口
用Nginx的话,又需要Rolling Update
所以k8s弄了一个Nginx的抽象层Ingress
使用Ingress进行负载分发时,Ingress Controller会跳过kube-proxy,而直接转发到后端Endpoint上。Ingress Controller对外提供服务,可以看做实现的是边缘路由器的功能

kube-proxy

在Kubernetes集群的每个Node上都会运行一个kube-proxy服务进程,我们可以把这个进程看做Service的透明代理兼负载均衡器,核心功能是将某个Service的访问请求转发到后端的多个Pod实例上

StorageClass

StorageClass作为对存储资源的抽象定义,对用户设置的PVC申请,屏蔽后端存储的细节,实现了动态的资源供应。PVC找到合适的StorageClass后,将自动创建一个PV并完成与PVC的绑定
StorageClass被创建出来后,则无法修改。如需修改,则只能删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这