Skip to content

k8s 基础概念 #37

@lqshow

Description

@lqshow

Cluster

Cluster是一组节点。

Master

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

  1. etcd

  2. kube-apiserver

  3. kube-controller-manager(负责维护集群状态)

  4. scheduler(负责调度任务)

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

Node

Node 是提供 CPU、内存和存储资源的节点,是物理机也可以是虚拟机器,是k8s的 worker,通常称为Minion。

k8s 将根据节点的可用资源选择部署应用程序的位置。

每个节点都运行如下Kubernetes关键组件:

  • Kubelet:pod 对应容器的创建、暂停等任务,维护 node 状态并和 master 通信
  • Kube-proxy:Service使用其将链接路由到Pod,实现集群网络服务
  • Docker daemon:Kubernetes使用的容器技术来创建容器(实时上 Kubernetes 是不依赖于 Docker 的,完全可以使用其他的容器引擎在 Kubernetes 管理的集群中替代 Docker)

Namespace

使用Namespace来组织Kubernetes的各种对象,可以实现对用户的分组,即“多租户”管理。对不同的租户还可以进行单独的资源配额设置和管理,使得整个集群的资源配置非常灵活、方便。

Pod

Pod 是 k8s 调度部署的最基本操作单元,安排在node上,包含一个或多个紧密相关的容器。

每个 Pod 都会被分配一个单独的IP地址,这个IP地址会随着 Pod 的销毁而消失。

由于整个 Pod 是运行在一个 Node 上的,所以 Pod 中的所有容器共享同一组资源,如下所述:

  1. PID命名空间:Pod 中的不同应用程序可以看到其他应用程序的进程ID;
  2. 网络命名空间:Pod 中的多个容器能够访问同一个IP和端口范围,可以实现容器之间仅需要通过 localhost 就能相互通信了。
  3. IPC命名空间:Pod 中的多个容器能够使用SystemV IPC或者POSIX消息队列进行通信;
  4. UTS命名空间:Pod 中的多个容器共享一个主机名;
  5. Volumes:Pod中的各个容器可以访问在Pod级别定义的Volumes。

一般除了有紧密耦合的情况下,通常一个 Pod 中只有一个容器,这样方便不同的服务各自独立地扩展。

Label

Label是attach到Pod,Service、RC、Node等资源的键/值对,用来传递用户定义的属性。

每个对象可以定义多个label,以提供Label Selector来选择对象

Replication Controller

Replication Controller 管理 Pods 的生命周期,确保指定数量的 Pods 会一直运行,还有实现资源伸缩。

RC是为了保证一定数量被指定的Pod的复制品在任何时间都能正常工作,它不仅允许复制的系统易于扩展,还会处理当pod在机器重启或发生故障的时候再次创建一个。

主要有以下功能模块

  1. 确保 Pod 数量:确保 k8s 中有指定数量的Pod在运行。如果少于指定数量的Pod,RC会创建新的,反之则会删除掉多余的以保证 Pod 数量不变。
  2. 确保 Pod 健康:当 Pod 不健康,运行出错或者无法提供服务时,RC也会杀死不健康的 Pod,重新创建新的。
  3. 弹性伸缩
  4. 滚动升级:采用逐步替换策略,保证系统的稳定性

Deployment

新一代的Replication Controller,推荐使用Deployment在来管理 Pod

Deployment 用来管理和维护运行中的 Pod,当创建Deployment后,Kubernetes master 会将Deployment创建好的应用实例调度到集群中的各个节点。 应用实例创建完成后,Kubernetes Deployment Controller会持续监视这些实例。如果管理实例的节点被关闭或删除,那么 Deployment Controller将会替换它们,实现自我修复能力。Deployment继承了 RC 全部的功能外,也有它自己的特性

  1. 事件和状态查看
  2. 回滚到指定版本
  3. 版本记录
  4. 暂停和启动
  5. 更多的升级方案

Service

Service定义一系列Pod以及访问这些Pod的策略的一层抽象

Service也可以看作一组提供相同服务的Pod的对外访问接口。

Service作用于哪些Pod是通过Label Selector来定义的,也就是说 Service 通过 Label 找到 Pod 组。

Service也是一个负载均衡器,它将流量代理给一个或多个 Pod。即使 Pod 在不同的节点上,代理也可以工作。

一旦服务被创建,就会分配一个唯一的IP地址。这个地址同服务的生命周期绑定,服务存活期间不会发生变化。

ConfigMap

ConfigMap提供了向容器注入配置数据的机制,可用于存储细粒度信息如单个属性,或粗粒度信息如整个配置文件。

当ConfigMap以数据卷的形式挂载进Pod时,更新ConfigMap(或删掉重建ConfigMap),Pod内挂载的配置信息会热更新,但使用环境变量方式加载到pod,则不会自动更新。

ConfigMap在pods中有多种使用方式

1.设置环境变量的值

2.设置容器内的命令行参数

3.填充卷的配置文件

Reference

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions