kubernetes基本概念

基本架构

clipboard.png

彩色版

clipboard.png

基本概念

Master

master节点运行着集群管理相关的一组进程:

  • etcd

  • kube-apiserver

  • kube-controller-manager

  • scheduler

这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控、纠错等管理功能。

Node(节点)

  • 之前的版本叫做Minion,可以是一台物理主机,也可以是一台虚拟机。

  • 每个Node上运行用于启动和管理Pod的服务Kubelet

  • 运行Kubelet、kube-proxy、docker daemon等服务进程

相关命令

  • kubectl get node

NAME           LABELS                                STATUS     AGE
xxx   kubernetes.io/hostname=xxxx   Ready      3h
127.0.0.1      kubernetes.io/hostname=127.0.0.1      NotReady   3h
  • kubectl describe node xxx

Pod(最小调度单元、服务隔离)

  • 一个Pod可以被一个容器化的环境看做是应用层的逻辑宿主机(Logical Host),通常一个Node中可以运行几百个Pod,每个Pod中有多个容器应用,同一个Pod中的多个容器应用通常是紧密耦合的(相当于多个业务容器组成的一个逻辑虚拟机)。

  • 每个Pod中有一个特殊的Pause容器,其他的成为业务容器,这些业务容器共享Pause容器的网络栈以及Volume挂载卷,因而他们之间的通信及数据交互更为高效。

同一个pod中的业务容器共享如下资源:

  • PID命名空间(不同应用程序可以看到其他应用程序的PID)

  • 网络命名空间(pod中多个容器可以访问同一个IP和端口范围)

  • IPC命名空间(能够使用SystemV IPC或者POSIX消息队列进行通信)

  • UTS命名空间(共享同一个主机名)

  • Volumes(访问定义在pod级别的存储卷)

Replication Controller(管理一组Pod)

kubernetes通过RC中定义的Label筛选出对应的Pod实例并实时监控其状态和数量,如果实例数量少于定义的副本数量,则会根据RC中定义的Pod模板来创建一个新的Pod,然后Scheduler将此Pod调度到合适的Node上启动运行,直到Pod实例数量达到预定目标。这个过程完全是自动化的。

  • 确保用户期望的Pod数量(创建或销毁Pod)

  • 在线Pod数量调整

Service(一组提供相同服务的pod的对外访问接口)

具有如下特征:

  • 拥有一个唯一指定的名字

  • 拥有一个虚拟IP和端口号

  • 能够提供某种远程服务能力

  • 被映射到提供这种服务能力的一组容器上

service的服务进程目前都基于socket通信方式对外提供服务。

clipboard.png

kubernetes内置了透明的负载均衡以及故障恢复的机制。

Label(标签)

解决service与pod之间的关联问题。kubernetes给每个pod贴上一个标签,然后给service定义定义标签选择器。

Scheduler(将Pod调度到Node上)

将Pod调度到合适的Node上启动运行

Volume(容器共享存储卷)

pod中能够被多个容器访问的共享目录,与pod同生命周期,但与容器的生命周期无关,当容器终止或重启时,volume中的数据不会丢失。

Namespace(命名空间)

使用namespace来组织kubernetes的各种对象,可以实现用户的分组(多租户),对不同的租户还可以进行单独的资源设置和管理,是的整个集群的资源配置非常灵活。

参考


code-craft
spring boot , docker and so on 欢迎关注微信公众号: geek_luandun

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很...

11.8k 声望
2k 粉丝
0 条评论
推荐阅读
2022年终总结
最近两年开始陷入颓废中,博客也写的越来越少了。究其原因,主要还是陷入了职业倦怠期,最近一次跳槽感觉颇为失败,但是碍于给的薪资高,为了五斗米折腰,又加上最近行情不好,想要往外跳也跳不了,就这样子一直...

codecraft阅读 868

使用kubeasz部署高可用kubernetes集群
本实验采用kubeasz作为kubernetes环境部署工具,它是一个基于二进制方式部署和利用ansible-playbook实现自动化来快速部署高可用kubernetes集群的工具,详细介绍请查看kubeasz官方。本实验用到的所有虚拟机默认软...

李朝阳4阅读 724

Jvm调优与微服务资源分配
在没有接触微服务之前,我们的java程序一般都部署在WebLogic、Tomcat这类应用服务器上,这些应用服务器本身也是基于Jvm虚拟机的。一般我们统一对应用服务器做Jvm参数调优(分配多大内存,线程池限制等),而不用...

KerryWu阅读 5.7k

不背锅运维:一文搞清楚应用发布到k8s集群的基本流程
❝关于标签的主要作用:标记、过滤、关联(主要体现在deployment、pod、service,3者标签保持一致),可设定多个标签,建议设定至少2个标签,一个为项目标签,一个为应用标签。❞

不背锅运维1阅读 724

10分钟学会使用 Loki 日志聚合系统
Loki 通过使用类似 Prometheus 的标签索引机制来存储和查询日志数据,这使得它能够快速地进行分布式查询和聚合,而不需要将所有数据都从存储中加载到内存中。Loki还使用了压缩和切割日志数据的方法来减少存储空间...

Rainbond1阅读 454

封面图
制作容器镜像的最佳实践
这篇文章主要是我日常工作中的制作镜像的实践, 同时结合我学习到的关于镜像制作的相关文章总结出来的. 包括通用的容器最佳实践, java, nginx, python 容器最佳实践. 最佳实践的目的一方面保证镜像是可复用的, 提...

东风微鸣云原生2阅读 628

prometheus remote-write解析(二) -- 源码解读
整体流程remoteConfigs支持配置多个remoteStorage,每个remoteStorage使用1个QueueManager;watcher将sample发送给QueueManager;1个QueueManager中管理多个shard,每个shard的容量为capactiy;每个shard会定时(ba...

a朋2阅读 2.8k评论 1

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很...

11.8k 声望
2k 粉丝
宣传栏