kubernetes基本概念

kubernetes基本概念

官方文档:

中文:http://docs.kubernetes.org.cn/251.html
官网:https://kubernetes.io/docs/concepts/

架构:

  • 核心层: Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

  • 应用层: 部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

  • 管理层: 系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

  • 接口层: kubectl命令行工具、客户端SDK以及集群联邦

  • 生态系统: 在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

    • Kubernetes外部: 日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
  • Kubernetes内部: CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

k8s概念:

pod:

一个Pod代表集群上正在运行的一个进程
pod是最小单元,pod类似于一个虚拟机,pod内的容器就是各种应用,它们共享同一个pod的主机名、存储卷

pod创建方式:

  • 自主式: 手动用api创建,后续pod控制器不会管理

  • 控制器管理: 由pod控制器创建管理

service:

用于调度外部请求访问pod,在请求者和pod之间
每个pod创建都会有一个label,并把pod关联到一个service,service使用label选择器,把相同label标签的pod,放在同一个service后端。service就做到了反向代理pod
1.11版本以前,底层基于iptable实现访问控制,之后使用lvs。如果集群部署的时候,没有启用ipvs,会自动降级使用iptables

namespaces:

namespace是对pod的分区管理
命名空间可理解为省,资源的Names理解为市,同一个namespace中的资源使用相同的访问控制策略(同一个省的市,使用同一个地方法)
namespace中的资源name具有唯一性,除了使用name区分资源以外,也可以使用label标签来区分

node:

Node是Kubernetes中的工作节点,一个Node可以是VM或物理机
每个Node(节点)具有运行pod的一些必要服务,并由Master组件进行管理,Node节点上的服务包括:Docker、kubelet和kube-proxy

node状态描述:

  • Condition: conditions字段描述所有Running节点的状态
    • NetworkUnavailable: 布尔值,true为网络插件有问题
    • MemoryPressure: 布尔值,true为节点存储器上内存过低
    • DiskPressure: 磁盘容量存在压力,也就是磁盘容量不足
    • PIDPressure: 布尔值,true为没有资源创建pid号
    • Ready: 布尔值,健康状态
      • true为准备好接收新pod
      • false为不健康且不接收新pod
      • unknown为节点控制器在过去40秒内没有收到node的状态报告
  • Addresses: 这些字段的使用取决于云提供商或裸机配置
    • HostName: 可以通过kubelet中--hostname-override参数覆盖
    • ExternalIP: 可以被集群外部路由到的IP
    • InternalIP: 只能在集群内进行路由的节点的IP地址
  • Capacity: 描述节点上可用的资源:CPU、内存和可以调度到节点上的最大pod数
  • Info: 关于节点的一些基础信息,如内核版本、Kubernetes版本(kubelet和kube-proxy版本)、Docker版本(如果有使用)、OS名称等。信息由Kubelet从节点收集
  • Non-terminated: 节点上运行pod的资源限制状态

Deployment:

为Pod和RS提供声明式更新,调用了RS的api
只需要在Deployment中描述您想要的目标状态是什么,Deployment就会帮您将Pod和RS的实际状态改变到您的目标状态

功能:

  • 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败
  • 通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中
  • 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision
  • 扩容Deployment以满足更高的负载
  • 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线
  • 根据Deployment 的状态判断上线是否hang住了
  • 清除旧的不必要的ReplicaSet

object(对象):

Kubernetes系统中的持久实体(node节点)
Kubernetes使用这些实体来表示集群的状态

可描述:
容器化应用正在运行(以及在哪些节点上)
这些应用可用的资源
关于这些应用如何运行的策略,如重新策略,升级和容错

names:

Kubernetes REST API 中的所有对象都用Name和UID来明确地标识
对于非唯一用户提供,Kubernetes提供labels、annotations属性标识

name标识:

  • 在一个对象中同一时间只能拥有单个Name,如果对象被删除,也可以使用相同Name创建新的对象,Name用于在资源引用URL中的对象,例如/api/v1/pods/some-name

  • 通常情况,Kubernetes资源的Name名称能有最长到253个字符(包括数字字符、-和.),但某些资源可能有更具体的限制条件

uid标识:

  • UIDs是由Kubernetes生成的,在Kubernetes集群的整个生命周期中创建的每个对象都有不同的UID(即它们在空间和时间上是唯一的)

selector:

用于对label标签的选择,由于集群中的name经常变化,所以需要label标签(key-value值),selector就是对label进行筛选

volume:

用于数据和镜像解耦,以及容器间的数据共享访问
是一个抽象概念,并不是实际组件。用来存储数据

常用的卷:

  • emptydir 本地临时卷
  • hostpath 本地卷
  • nfs等
  • configmap 配置文件

kube_cluster:

所有node的资源不是单独计算,而是把所有node的资源当做一个总和,由kube_cluster统计,如node1是2G内存,node2是4G内存,kube_cluster就是6G内存

posted @ 2022-09-02 15:04  suyanhj  阅读(36)  评论(0)    收藏  举报