应用部署演进过程


我们从上图可以看到,应用越来越看重应用本身了,慢慢的不受物理机的差异,不受操作系统的差异,开发者可以花更多精力去到应用本身。

k8s概念

简单理解,k8s就是传统的云平台上的linux。

kubernetes是一个以Google Borg(google内部容器管理平台)为原型,重新设计和实现的容器管理和调度编排工具。
2014年由谷歌开源。
同样功能的工具还有docker公司的Swarm和apache的Mesos,但目前kubernetes好像笑到了最后。

容器编排管理平台

k8s可以以容器组pod为基本编排和调度单位
k8s提供资源分配管理功能
k8s提供健康检查,伸缩,滚动升级功能
k8s提供声明式的对象配置模型

微服务架构平台

k8s提供服务发现与内部路由
k8s提供对服务的快速部署和自动的负载均衡

可移植云平台

k8s被各大云厂商承认并支持,在各个云平台之上,又搞了一层通用平台,即可实现跨云移植

k8s架构


k8s集群是由一群节点(node)组成,这些节点可能部署在物理服务器或云服务器上。
每个节点都安装了node组件,node组件是真正运行负载的组件
另外有个特殊节点上安装了master组件,那这个节点也就是master节点

master组件

集群的控制中心,每个集群至少一个master组件,
高可用就多个master节点装多个master组件

master组件包含:apiserver,etcd数据库,controller manager,scheduler
apiserver是master组件的核心,提供各种api接口,是整个集群的唯一入口,其他master组件都通过调用api接口实现各自的功能
scheduler通过apiserver接口监听新建pod副本信息,通过调度算法为该pod选择一个最合适的node节点,调度算法包括先预选出一批预选节点,再优选处一个积分最高的节点,调度算法也可自定义配置
controller manager是集群内各种controller资源的核心管理者,controller资源有集群内的node,pod副本,服务端点,命名空间,服务账号,资源配额等。当某个node宕机时,controller manager就会及时发现并执行修复流程,保证集群始终可用。
etcd数据库是一个高效的k-v数据库,存储着集群中所有的对象和状态。一般和master组件安装在同一个node上,高可用模式需要部署数据量集群

node组件

通过code controller可以动态的在集群中添加或删除node资源
node组件包含:kubelet,kube-proxy
kubelet组件是node中唯一一个以非容器形式进程组件,节点启动就被自动拉起,常驻节点中,也称节点管家,管理节点使用状况,定期向master汇报,是master node和worker node连接的桥梁。
kube-proxy组件就是个代理,主要是负责将到达的请求负载均衡的转发到后端的多个pod实例上。
一个node组件管着一批pod在执行任务

pod

pod是集群的调度基本单元。
是一个有特定关系的容器的集合。
一个pod就代表集群中的一个进程。
pod一般不由用户创建,pod的ip也是不稳定的。

kubectl工具

最左边的kubectl是一个k8s的命令行工具,用户使用命令行的方式与集群交互

k8s概念

k8s对象:

一种持久化用于表示集群状态的实体,一般使用yaml文件描述对象,对象信息包括有哪些容器在运行,运行在哪个node上,有哪些可用资源,应用的各种策略(重启策略,容错策略等)。
所有k8s对象状态的集合,就是整个k8s集群的状态。
通过kubectl工具或者api可以直接管理k8s对象。

可以类比java中的对象的概念,k8s对象,也有属性,方法,另外还有状态信息

class k8s{// 对象的类型,包括Pod,Service,Deployment等Kind kind;//对象的元数据,包括name,namespace,labels,annotationsMetadata metadata;//对象的规格信息,比如replicas(表示副本信息),selector(标签匹配)等Spec spec;//增删改查等方法public Return method(){...}//对象状态,保存在etcd数据库中Status status;
}
Name和UID

集群中的所有k8s对象,都是由name和UID明确标识。
不同类型对象的name可以是一样的。
UID是每个实例化的对象唯一一个,而且是整个集群的生命周期内唯一。
可以用api通过对象的name访问到该对象:
/api/{version}/namespaces/{namespace}/{kind}/name

namespace

namespace不仅仅是个属性,本身也是一个对象
作用是将物理集群划分为多个虚拟集群
namespace直接完全隔离,常用作隔离不同的用户权限
k8s集群内置3个namespace:default,kube-system,kube-public。

label

label标签是用于建立集群对象直接的灵活的,松耦合的多维关联关系。
本质上就是k-v键值对。
一个对象上可以有多个标签
不同类型的对象,可以通过相同的标签建立关联关系
作用:为了标识对象,选择出对象

annotations

annotations注解,可以将任意非标识性元数据附加到对象上
annotations本质也是k-v键值对
一般存对象的版本信息,时间戳等。

kubernetes(k8s)相关推荐

  1. 初识Kubernetes(K8s):理论基础

    Kubernetes是什么? Kubernetes,简称K8s,是用8代替8个字符"ubernete"而成的缩写.Kubernetes是Google开源的一个容器编排引擎,同时也是 ...

  2. Kubernetes(K8s)容器设计模式实践案例 – 分散收集模式

    <Kubernetes与云原生应用>专栏是InfoQ向轻元科技首席架构师王昕约稿的系列 文章.本专栏包含8篇内容,将会从介绍和分析Kubernetes系统以及云原生应用 入手,逐步推出基于 ...

  3. dial tcp 10.96.0.1:443: getsockopt: no route to host --- kubernetes(k8s)DNS 服务反复重启

    kubernetes(k8s)DNS 服务反复重启解决: k8s.io/dns/pkg/dns/dns.go:150: Failed to list *v1.Service: Get https:// ...

  4. Opensetack + Kubernetes(K8S)黄金搭档漫谈

      上面左边是我的个人微信,如需进一步沟通,请加微信.  右边是我的公众号"Openstack私有云",如有兴趣,请关注. 前段时间去参加一个devops的峰会,参会的人大多数都是 ...

  5. 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard

    笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

  6. 2016年Kubernetes(k8s)大事记

    34次发布 , 18,557次commits,175家企业参与,705个贡献者,2,552,778行Go代码 2016年是Kubernetes快速发展的一年,在社区中,从对它疑虑到逐渐认可再到追捧,转 ...

  7. 【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl

    文章目录 一.概述 二.calicoctl 安装 三.calicoctl 简单使用 1)认证信息配置 2)查看 IP 资源池 3)配置 IP 池 4)IP 资源池示例演示 5)固定 IP 示例演示 6 ...

  8. 使用国内的镜像源搭建 kubernetes(k8s)集群

    概述 老话说的好:努力学习,提高自己,让自己知道的比别人多,了解的别人多. 言归正传,之前我们聊了 Docker,随着业务的不断扩大,Docker 容器不断增多,物理机也不断增多,此时我们会发现,登录 ...

  9. 唯品会基于Kubernetes(k8s)网络方案演进

    VIP PaaS在接近两年时间里,基于kubernetes主要经历四次网络方案的变迁: 1. kubernetes + flannel 2. 基于Docker libnetwork的网络定制 3. k ...

  10. 二进制安装Kubernetes(k8s) v1.25.0 IPv4/IPv6双栈

    二进制安装Kubernetes(k8s) v1.25.0 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了

最新文章

  1. WIN7中 HttpListener 拒绝访问 异常解决 C#
  2. tensorflow 卷积、反卷积形式的去噪自编码器
  3. MySQL学习笔记(六)MySQL8.0 配置笔记
  4. 使用Cloud application Studio在C4C UI里创建下拉列表(dropdown list)
  5. 《Flume日志收集与MapReduce模式》一2.2 Flume配置文件概览
  6. isinstance函数
  7. C语言封装带省略参数的函数,C与C++的函数声明中省略参数的不同意义
  8. 核弹级漏洞,把 log4j 扒给你看!
  9. PHP获取URL完整路径及物理路径
  10. C#LeetCode刷题之#643-子数组最大平均数 I( Maximum Average Subarray I)
  11. mysql-proxy数据库中间件架构
  12. OPPO海外功臣realme将回归国内 目标竞争对手:红米和荣耀
  13. python 计算循环次数,05.Python循环
  14. 人机交互式编程_并发编程从操作系统底层工作整体认识开始
  15. C语言程序设计圆周率,如何设计C语言程序输出圆周率小数点后的1000位?请大侠出手啊。...
  16. Still,yet和already的用法
  17. filterConfig
  18. 嵌入式开发之路(偏汽车电子嵌入式软件工程师学习路线图)
  19. 物联网之NB-IoT技术实践开发三
  20. LabVIEW热敏电阻温度计程序

热门文章

  1. 06.动态SQL和foreach
  2. 关于h5中背景音乐的自动播放
  3. 浅谈Spring的AOP实现-代理机制
  4. Python 模块(二)
  5. Sublime Text 3 搭建 React.js 开发环境
  6. Reporting Services 的伸缩性和性能表现规划(转载)
  7. DataGridView直接导出EXCEL
  8. linux网络编程——客户端编程
  9. android app 适应不同大小屏幕_移动APP测试:Android屏幕适配问题二
  10. git clone报错