k8s(00)入门知识介绍

2022/04/13 k8s,devops

kubernetes,简称 K8s,是用8代替名字中间的 8 个字符“ubernete”而成的缩写。K8S 前身是 Google 内部使用的 Borg 系统,后经 Go 语言重写并捐献给 CNCF 基金会并开源.

Kubernetes 特性

  • 自动化上线和回滚

    Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。

  • 服务发现与负载均衡

    无需修改你的应用程序即可使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。

  • 存储编排

    自动挂载所选存储系统,包括本地存储、诸如 GCP 或 AWS 之类公有云提供商所提供的存储或者诸如 NFS、iSCSI、Gluster、Ceph、Cinder 或 Flocker 这类网络存储系统。

  • 水平扩缩

    使用一个简单的命令、一个 UI 或基于 CPU 使用情况自动对应用程序进行扩缩。

  • 自动装箱

    根据资源需求和其他约束自动放置容器,同时避免影响可用性。 将关键性的和尽力而为性质的工作负载进行混合放置,以提高资源利用率并节省更多资源。

  • 自我修复

    重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们公布给客户端。

  • Secret 和配置管理

    部署和更新 Secrets 和应用程序的配置而不必重新构建容器镜像,且 不必将软件堆栈配置中的秘密信息暴露出来。

k8s 概念入门

1 四组基本概念

  1. Pod/Pod 控制器
  2. Name/Namespace
  3. Lable/Label 选择器
  4. Service/Ingress

1.1 POD 和 POD 控制器

kubernetes 的 pod 控制器

  1. Pod k8s 里能够被运行的最小逻辑单元 1 个 POD 里面可以运行多个容器( SideCar 边车模式) POD 中的容器共享 UTS/NAT/IPC 名称空间 POD 和容器颗粒理解为豌豆荚和豌豆

  2. Pod 控制器 Pod 控制器是 Pod 启动的一种模板 用来保证在 K8S 里启动的 Pod 始终按预期运行 包括副本数\生命周期\健康检查等

  3. 常用的 Pod 控制器:

    控 度器名称 用途简述
    Deployment 用于管理无状态应用,支持滚动更新和回滚
    DaemonSet 确保集群中的每一个节点上只运行一个特定的pod副本
    ReplicaSet 确保pod副本数量符合用户期望的数量状态
    StatefulSet 管理有状态应用
    Job 有状态,一次性任务
    Cronjob(定时任务) 有状态,周期性任务

1.2 Name/Namespace

  1. Name K8S 使用‘资源’来定义每一种逻辑概念(功能) 每种‘资源’都应该有自己的’名称’ ‘名称’通常定义在‘资源’的元数据(metadata)信息中

    资源的配置信息包括

    • API 版本(apiVersion)
    • 类别(kind)
    • 元数据(metadata)
    • 定义清单(spec)
    • 状态(status)
  2. Namespace 名称空间用于隔离 K8S 内各种资源,类似 K8S 内部的虚拟分组 同一个名称空间中,相同资源的名称不能相同 默认的名称空间为default,kube-system,kube-public 查询特定资源,要带上相应的名称空间

1.3 Lable/Label 选择器

  1. Lable 标签的作用是便于分类管理资源对象 标签与资源之间是多对多的关系 给一个资源多个标签,可以实现不同维度的管理

  2. Lable 选择器 可以使用标签选择器过滤指定的标签 标签选择器有基于等值关系(等于,不等于)和基于集合关系(属于,存在)的两种 许多资源都支持内嵌标签选择器字段:matchLablesmatchExpressions

1.4 Service/Ingress

  1. Service(重点) POD 会分配 IP 地址,但 IP 会随着 POD 销毁而消失 多个同类型 POD,IP 或端口必然不同,但却相同的服务 Service 用来提供相同服务 POD 的对外访问接口 Service 通过标签选择器来确定作用于哪些 POD Service 只能提供 L4 层的调度,即: IP + 端口

  2. Ingress (重点) Igress 也是用来暴露 POD 的对外访问接口 Igress 提供L7层的调度,即 http/https Igress 可以调度不同业务域,不同 URL 路径的流量

2 核心组件与核心附件

  1. 核心组件 配置存储中心

    • etcd 服务

    主控节点(master)

    • kube-apiserver 服务
    • kube-controller-manager 服务
    • kube-scheduler 服务

    运算节点(node)

    • kube-kubelet 服务
    • kube-proxy 服务
  2. CLI 客户端 kubectl 命令行工具

  3. 核心附件 CNI 网络插件(flannel/calico) 服务发现插件(coredns) 服务暴露插件(traefik) GUI 管理插件(daahboard)

2.1 核心组件功能

  1. 配置存储中心-etcd etcd 是一个非关系型数据库,作用类似于 zookeeper 注册中心 用于各种服务的注册和数据缓存
  2. kube-apiserver(master) 提供季军管理的 REST API 接口,包括鉴权、数据校验、集群状态变更 负责其他模块之间的数据交互,承担通信枢纽的功能 和 etcd 通信,是资源配额控制的入口 提供玩备的集群控制机制
  3. kube-controller-manager 由一系列控制器组成,通过 apiserver 监控整个集群的状态,确保集群处于预期的工作状态 是管理所有控制器的控制器
  4. kube-scheduler 主要是接收调度 POD 到合适的 node 节点上 通过 apiserver,从 etcd 中获取资源信息进行调度 只负责调度工作,启动工作是 node 节点上的 kubelet 负责 调度策略:预算策略(predict)、优选策略(priorities)
  5. kube-kubelet 定时从 apiserver 获取节点上 POD 的期望状态(如副本数量、网络类型、存储空间、容器类型等)然后调用容器平台接口达到这个状态 提供 POD 节点具体使用的网络 定时汇报当前节点状态给 apiserver,以供调度 复制镜像和容器的创建和清理工作
  6. kube-proxy 是 K8S 在每个节点上运行网络的代理,service 资源的载体 不直接为 POD 节点提供网络,而是提供 POD 间的集群网络 建立了 POD 网络和集群网络的关系(clusterIp->podIp) 负责建立、删除、更新调度规则 与 apiserver 通信,以更新自己和获取其他 kube-proxy 的的调度规则

    常用的调度模式:

    • Iptables (不推荐)
    • Ipvs(推荐)

2.2 K8S 的三条网络

mark

  1. 节点网络 实际网络,就是宿主机网络 建议地址段:10.4.7.0/24 建议通过不同的IP端,区分不同的业务、机房或数据中心
  2. Pod 网络 实际网络,容器运行的网络 建议172.7.21.0/24 ,并建议 POD 网段与节点IP绑定 如: 节点 IP 为10.4.7.21,则 POD 网络为172.7.21.0/24
  3. service 网络 虚拟网络,也叫集群网络(cluster server),用于内部集群间通信 构建于 POD 网络之上, 主要是解决服务发现和负载均衡 通过 kube-proxy 连接 POD 网络和 service 网络 建议地址段为:192.168.0.0/16

3 K8S 流程图

mark

说明:

主控节点和 node 节点只是逻辑上的概念,物理上可以部署在一起

原文链接:https://www.cnblogs.com/noah-luo/p/13345150.html

Search

    Table of Contents