k8s学习笔记

kubernetes 学习笔记

k8s 概述

k8s 是什么

k8s 是容器管理平台。

k8s 组件

一个 k8s 集群由至少一个工作节点构成,这些节点运行者容器化的应用。

组件图

控制平面组件(control plane components)

kube-apiserver 提供 k8s API 服务。

etcd 键值对数据库,保存集群数据的后台数据库。

kube-scheduler 负责监视新创建的、未指定运行 node 的 Pods,选择节点让 Pod 在上面运行。

kube-controller-manager 主节点上运行的控制器组件。

节点组件 (node components) :

kubelet 每个 node 上运行的代理。保证 containers 都运行在 Pod 中。

kube-proxy 每个 node 上的网络代理。

container runtime 运行容器的软件,如 docker、containerd。

插件 (Addons)

Web 界面 (dashboard)

容器资源监控

集群层面日志

k8s API

采用 OpenAPI 来表述

k8s 对象

k8s 使用实体对象来表示当前集群的状态,当出现错误时,通过修复机制来达到期望状态(diserted status)。k8s 对象包括两个方面,spec (规约[表示对象的期望状态])和 status (状态[对象当前状态])。创建 Kubernetes 对象时,必须提供对象的规约,用来描述该对象的期望状态

管理对象分为三种方法:命令式,命令式对象配置,声明式对象配置。

对象名称和 ID: 一个命名空间同一类对象名称和 ID (kubernetes 生成的 uuid)唯一。

命名空间:代表不同的虚拟集群,为了方便管理和资源进行隔离。

标签:一组键值对增加对象上,用于对象筛选。

标签选择器:使用标签选择器将不同的资源对象进行关联。

注解:给对象增加一些额外的表示信息,也是一组键值对。

Kubernetes 架构

Node

node 是一个集群中的节点,它负责提供必要的服务来运行 Pods 。它包含 kubelet、kube-proxy、contaniner runtime。

node 可以通过手动注册和通过 kubelet 自动向 control plane 注册,

kubernetes 通过创建 node 对象来管理节点,首先通过检查 API server 中已经注册的 kubelet 的 metadata.name 找到匹配的节点,检查是否跑了必要的服务,如果健康就可以在上面运行 Pods ,否则就会一直保存这个无效的对象,持续检测知道它变得健康为止,这会增加资源的消耗,所以通过显示删除该对象,停止健康检测。node 对象的名字必须是有效的 dns 子域名名字。

node 状态包含 address, conditions,capacity and allocatable , info 信息。

address 包含了 name, externalIP,internalIP 。

conditions 说明该节点的资源情况和运行状态。

capacity and allocatable 显示节点的详细信息。

info 描述一些其他信息如 dokcer version, k8s version 等。

节点控制器是控制平面的组件,用来管理节点的多种变化状态如维护节点 Pods 列表,节点健康。

node 使用 heartbeats 来检测该节点是否可用,heartbeats 表示的两种形式为更新 NodeStatus 和 Lease Object

Control Plane-Node 通信

node到 control plane 的通信是通过 api server 进行的。api server 开启客户端证书监听安全端口 443 来处理请求, node 配置根证书来发送安全请求。

control plane 到 node 的通信有两种主要的方式: apiserver–kubelet,apiserver–apiserver’s proxy

control plane 可以通过 ssh 隧道连接 node (不推荐使用)

通过 konnectivity service 代理 ssh.

Controllers

controllers 是查看整个集群状态的控制回路,从集群的当前状态调整到接近预期状态。

controller 会监控至少一种 kubernetes 资源类型,资源有 spec 字段表示了 desried state ,从而控制 current state 接近 desired state。

controllers 可以通过 apiserver 控制集群状态也可以直接控制集群状态例如水平扩容节点。

服务、负载均衡和网络

Kubernetes 网络解决四方面的问题:

  • 一个 Pod 中的容器之间通过本地回路(loopback)通信。
  • 集群网络在不同 pod 之间提供通信。
  • Service 资源允许你对外暴露 Pods 中运行的应用程序,以支持来自于集群外部的访问。
  • 可以使用 Services 来发布仅供集群内部使用的服务。

 上一篇
mint mint
Mint 操作系统笔记分区硬盘分为 IDE 银盘,SCSI 硬盘和 SATA 硬盘。在 Linux 中 IDE 接口被称为 hd ,SCSI 和 SATA 被称为 sd(常用为 sd)。第一块硬盘被称为 sda ,第二块硬盘被称为 sdb
2021-03-28
下一篇 
go第三方库 go第三方库
go第三方库bolt简介用 go 实现的键值对数据库,类似与 go-sqlite3 (cgo实现的)。 它支持完整的序列化事务,ACID和无锁的多版本控制(多个读,一个写)。它的定位主要是小型数据存储,支持跨平台。 类型DB,bucket(
2020-12-24
  目录