前言

Kubernetes中的概念太多了, 什么Pod Service Deployment 等等等等, 给刚接触的我都整蒙了. 通过几天观察下来, 说一下我对各个组件的理解.

此文章仅仅对这些概念做一个简单的介绍, 不至于后面看其他文章的时候一头雾水.

Node

Node很好理解. 就是服务实际运行的实例, 可以是一台物理机, 也可以是一台 VM 虚拟机

Pod

docker都用过了吧, 就是容器. 而Pod其实就类似于docker-composer, 多个的相关联的容器组成了一个 Pod. 比如有一个nginx容器和一个php-fpm的容器, 他们两个就可以组合为一个Pod`.

在同一个Pod中, 不同容器共享网络栈与存储卷. 也就是说, nginx访问php-fpm可以直接使用localhost:9000即可, 也就是说, 一个Pod中启动两个容器, 都占用80端口, 是无法成功启动的. 共享是通过Pause容器实现的, 这里只简单介绍概念, 不展开了.

Pod 控制器

Kubernetes中, Pod是资源的最小单位了. 而这一堆控制器, 就是用来对Pod进行自动管理的.当然, 如果不使用控制器而是手动管理也不是不行, 就是累呗. 比如:

  • 管理Pod的数量
  • 实现Pod的弹性伸缩
  • 监控Pod的状态
  • 定时启动并释放Pod
  • 等等

为了实现不同的需求, 出现了不同的Pod控制器. 以下控制器只是实现了不同的需求, 简单过一下即可.

ReplicationController

Pod数量进行管理. 确保Pod数量保持在用户定义的数量. (若容器异常退出, 自动创建新的 Pod. 若数量多了, 也会自动回收. ) 不过现在建议使用 ReplicaSet替代了.

ReplicaSet

ReplicationController的功能差不多, 额外增加了集合式selector的支持(标签选择器).

虽然ReplicaSet可以单独使用, 但建议用Deployment进行管理.

Deployment

Deployment不会直接管理Pod, 而是通过管理ReplicaSet, 再经有ReplicaSet管理Pod.

Deployment处理了很多ReplicaSet不支持的额外操作. 如:

  • rolling-update (滚动更新) 和回滚
  • 自动伸缩(扩容和缩容)
  • 暂停和继续
  • 等等

顺带说一下, Deployment的热更新, 就是通过新建一个ReplicaSet, 逐渐减少原来ReplicaSetPod数量并增加新ReplicaSetPod数量来实现的. 回滚就是反过来嘛.

HorizontalPodAutoscaler

HPA也不会直接管理Pod, 而是管理Deployment或者ReplicaSet.

HPA可以检测Pod资源使用率, 可以实现这样的场景: 当Pod CPU 使用率大于80则自动新建, 否则自动释放. 同时启动的Pod数量最多30个, 最少5个. 既实现服务的水平扩展.

StatefulSet

StatefulSet是为了解决有状态服务的. 上面的控制器都是无状态的. StatefulSet可以实现如下功能:

  • 稳定的持久化存储. 当Pod动态调整后能够访问到相同的持久化数据. 基于PVC实现
  • 稳定的网络标识. Pod动态调整后 PodName HostName不变. 基于Headless Service实现.
  • 有序部署. 既前一个Pod启动成功, 才会创建下一个Pod. 解决服务依赖的问题. 基于init containers实现.
  • 有序删除. 有序部署的反向操作.

DeamonSet

可以确保所有(或指定的一部分)Node都运行一个Pod副本. 当新Node加入集群时自动新增对应的Pod, 当Node从集群移除时, 对应的Pod也会被回收.

这种运行在Node中的Pod有什么用呢? 比如资源监控, 再比如日志收集等等.

Job

批处理任务. kubernetes可以保证此任务的一个或多个Pod成功结束, 若任务失败, kubernetes会自动重启, 直到成功.

CronJob

Jobcrontab版本. 基于时间管理的Job. 是通过在特定时间创建Job实现的. 可以在指定时间运行一次任务, 或者周期性的在指定时间运行.

服务发现及负载均衡

Service

Pod控制器只是对Pod的管理, 比如在一个Deployment中运行了5个Pod, 如果外部访问Pod服务时写的是每一个Pod的地址, 当Pod动态伸缩的时候, 维护这些地址就是一个让人头大的问题了.

Service就是为了解决这个问题而出现的. 它为一组Pod提供了一个统一对外的接口, 外部访问Service再经有Service将请求发给Pod, 而不需要关心Pod的数量、启动、释放等等。

同时Service还能够对流量进行负载均衡

Ingress

因为Service是四层负载均衡, 也就是说只能代理到 IP 层, 无法实现像nginx一样根据不同域名不同路径进行负载均衡. 为了解决这个问题而提出了Ingress, Ingress是独立与其他服务对请求进行转发的. 可以将其理解为ServiceService.

一般来说, 通过ServicePod进行内部代理, 然后通过Ingress将请求转发给Service. Ingress也有不同的实现, 而其中比较常用的就是ingress-nginx了,其配置文件类似与nginx. 由官方维护的. 启动命令为:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml

官方文档: https://kubernetes.github.io/ingress-nginx/

存储卷

这个需求就很普遍了, 用来对数据进行存储及挂载服务. 在不同的容器、以及不同的pod中进行共享.

具体的使用方式可见: https://hujingnb.com/archives/709

ConfigMap

专门用于存储配置文件, 同时还支持二进制内容. 将文件内容直接写入到yaml配置中. 同时, ConfigMap是支持热更新的.

Secret

存储一些需要加密的信息, 比如密钥、密码等. 其基本上和ConfigMap差不多, 区别就是在ConfigMap的基础上对内容做了一次加密. 不过不过, 现阶段Secret的加密方式就是base64? 这也叫加密? 只能算作编码吧.

可以通过命令: kubectl get secrets secret-name -o yaml查看内容.

不过, 社区后续应该会推出更安全的加密策略.

另外, 对于私有的镜像仓库, Secret可以添加拉取镜像时的鉴权信息.

volume

在同一个pod下的多个容器之间共享存储卷, 就跟磁盘的挂载差不多啦. volume没有单独的kind, 是直接进行定义的.


如上, 对Kubernetes中的各个名称进行了简单介绍, 再回去看其他文章, 是不是清楚多了. 全部都是对容器的各个方面各个层次的管理.

原文链接: https://hujingnb.com/archives/706

Kubernetes各个组件的概念相关推荐

  1. Kubernetes学习总结(13)—— Kubernetes 各个组件的概念

    Node Node 很好理解,就是服务实际运行的实例, 可以是一台物理机, 也可以是一台 VM 虚拟机. Pod docker 我们都知道是容器,而 Pod 其实就类似于 docker-compose ...

  2. Kubernetes基础组件概述

    本文讲的是Kubernetes基础组件概述[编者的话]最近总有同学问Kubernetes中的各个组件的相关问题,其实这些概念内容在官方文档中都有,奈何我们有些同学可能英文不好,又或者懒得去看,又或者没 ...

  3. 在微服务中,Kubernetes软件组件有哪些?

    在微服务.云计算和无服务架构时代,理解Kubernetes并且知道如何使用它是十分有用的.然而,官方的Kubernetes文档对于刚开始接触云计算的用户来说有些难以理解,以下内容是关于Kubernet ...

  4. kubernetes各组件介绍

    文章目录 一. kubernetes 是什么 1. 基础架构图 2. kubernetes 各组件介绍 2.1 master 组件 :one: Kubernetes API Server(kube-a ...

  5. Kubernetes各组件的功能

    Kubernetes各组件的功能 1.kubectl kubectl是Kubernetes官方提供的命令行工具CLI,用户可以通过命令行的方式与Kubernetes API Server进行操作,通信 ...

  6. DNS术语,组件和概念介绍

    DNS术语,组件和概念介绍 2014年2月18日发布 255.4k个意见 DNS 概念LINUX基础常见问题 介绍 DNS或域名系统往往是学习如何配置网站和服务器的一个非常困难的部分.了解DNS如何工 ...

  7. SAP 产品 UI 里的容器组件的概念和开发概述

    这是 Jerry 2021 年的第 68 篇文章,也是汪子熙公众号总共第 345 篇原创文章. Jerry 之前的文章,谈谈 SAP 产品 UI 开发中的组件概念,曾经提到,无论基于何等开发技术的 S ...

  8. 界面设计方法 (2) — 1. 界面与组件的概念

    ■ 一个完整的界面设计需要有两个层面:业务功能.应用功能.系列"面设计方法(一)"已经从业务功能(活动.字典.看板和表单)层面介绍了4种功能的设计方法,它们的重点是如何完成不同类型 ...

  9. 【微服务架构】SpringCloud组件和概念介绍

    [微服务架构]SpringCloud组件和概念介绍(一) 一:什么是微服务(Microservice)微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为 ...

最新文章

  1. 深度学习图像搜索与识别
  2. 新站如何使用标签才对SEO优化更有利
  3. pb 窗口数据修改sql_大数据hadoop,数据中台选型你应该看到这些分布式数据库
  4. P4897 【模板】最小割树(Gomory-Hu Tree)(网络流/最小割/树形结构)
  5. 计算机显微视觉相关概念,机器视觉的概念及常见应用
  6. Asp.Net高级知识回顾_HttpModule及应用程序生命周期_1
  7. C++编程技术之 异常处理(上)
  8. 新版Cadence打开PSpice8.0工程文件
  9. 外挂辅助技术-计算怪物与玩家的距离
  10. 苹果手机屏幕上有白点怎么办
  11. 产房深夜:8个月胎儿手臂畸形要流产,为保胎医生做了大胆决定
  12. file upload 攻防世界_菜鸡 CTF 之旅 Writeup (攻防世界)
  13. [JavaScript] 下拉列表选择出示不同的图片
  14. 量子物理 薛定谔的猫
  15. 智慧警保综合管理平台
  16. [转帖]中国民间秘术
  17. hdfs或hive的snappy.parquet文件查看
  18. 新手!亚马逊店铺刚下来就被封,什么原因
  19. 陕西神木市一煤矿发生事故 已致19人死亡
  20. day04 RabbitMQ基本使用

热门文章

  1. C#灰度图转伪彩色图
  2. java 线程池 资源回收_JAVA线程池资源回收的问题
  3. cocos html5 一直在加载失败,项目进行中的小问题-0426-【Cocos2d-html5】初识Cocos2d-html5-一些移动端浏览器的兼容性Bug_169IT.COM...
  4. 邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路
  5. python中和为k的个数_程序查找在python中总计为k的不同组合的数量
  6. fortify hp 价格_惠普推出“惠普Fortify软件安全中心套件”
  7. pythoncsv文件处理_Python处理ExcelCSV文件
  8. android 删除文件 代码_代码审计之某系统后台存在任意删除文件
  9. c语言源程序文件.c如何保存,急求如何将下列C语言程序数据存储到文件中?
  10. 【LeetCode笔记】560. 和为K的子数组(Java、前缀和、哈希表)