简介及优点

简称:K8S

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

为容器编排技术,实现了容器的缺点,也就是K8S的优点

为什么需要Kubernetes

容器是打包和运行应用程序的好方式。在生产环境中,您需要管理运行应用程序的容器,并确保不会停机。例如,如果一个容器发生故障,则需要启动另一个容器。如果系统处理此行为,会不会更容易?

这就是 Kubernetes 的救援方法!Kubernetes 为您提供了一个可弹性运行分布式系统的框架。Kubernetes 会满足您的扩展要求、故障转移、部署模式等。例如,Kubernetes 可以轻松管理系统的 Canary 部署。

优点

  • 自动装箱,水平扩展,自我修复
  • 服务发现和负载均衡
  • 自动发布(默认滚动发布)和回滚
  • 集中化配置管理和密钥管理(数据中心)
  • 存储编排
  • 任务批处理运行

基本概念

Pod/Pod控制器

Pod

  • Pod是Kubernetes中能够被运行的最小逻辑单元(原子单元)
  • 1个Pod里面可以运行多个容器,互相共享UTS+NET+IPC名称空间
  • 可以把Pod理解成豌豆荚,而同一个Pod内的每一个容器都是一颗豌豆
  • 一个Pod里运行多个容器,又叫:边车(SideCar)模式

Pod控制器

  • Pod控制器是Pod启动的一中模板,用来保证Kubernetes里启动的Pod应始终按照人们的预期运行(副本数,生命周期,健康状态检查…)
  • Kubernetes内提供了众多的Pod控制器,常用有以下几种
    • Deployment
    • DaemonSet
    • ReplicaSet
    • StatefulSet
    • Job
    • Cronjob

Name/Namespace

Name

  • 由于Kubernetes内部,使用”资源”来定义每一个逻辑概念(功能),所以每种资源都应该有自己的”名称”
  • 资源有:API版本(apiVersion)\ 类别(kind)\ 元数据(metadata)\ 定义清单(spec)\ 状态(status)等配置信息
  • “名称”通常定义在”资源”的”元数据”信息中

NameSpace

  • 随着项目增多,人员增加,集群规模的扩大,需要一种能够隔离Kubernetes内部各种资源的方法,称为:名称空间
  • 名称空间可以理解为Kubernetes内部的虚拟集群组
  • 不同名称空间内的 资源 名称可以相同,相同名称空间内的的同种 资源 名称 不能相同
  • 合理的使用Kubernetes的名称空间,使得集群管理员能够更好的对交付到Kubernetes里的服务进行分类管理和浏览
  • Kubernetes里默认存在的名称空间有:default,kube-system,kube-public
  • 查询Kubernets里特定的资源,需要带上相应的名称空间

Label/Label选择器

Label

  • 标签是Kubernetes的特色管理方式,便于分类管理资源对象
  • 一个标签可以对应多个资源,一个资源可以对应多个标签,他们是多对多的关系
  • 一个资源拥有多个标签,可以实现不同维度的管理
  • 标签的组成:key=value
  • 与标签类似的,还有一种”注解”(annotations)

Label选择器

  • 给资源打上标签后,可以使用标签选择器过滤指定的标签
  • 标签选择器目前有两个:
    • 基于等值关系(等于|不等于)
    • 基于集合关系(属于|不属于|存在)
  • 许多资源支持内嵌标签选择器字段
    • matchLabels
    • matchExpressions

Service/Ingress

Service

  • 在Kubernetes的世界里,虽然每个Pod都会分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失
  • Service就是用来解决这个问题的核心概念
  • 一个Service可以看作一组提供服务的Pod的对外访问接口
  • Service作用于哪些Pod是通过标签选择器来定义的

Ingress

  • Ingress是Kubernetes集群里工作在OSI网络参考模型下,第七层的应用,对外暴露的接口
  • Service只能提供L4流量调度,表现形式是IP+PORT
  • Ingress则可以调度不同业务域丶不同URL访问路径的业务流量

Kubernetes核心

  • 核心组件
    • 配置存储中心(etcd服务)> 为kubernetes存储数据服务,可以理解为mysql数据库,为kubernetes提供数据支持
  • 主控(Master)节点
    • kube-apiserver服务> apiserver服务称之为Kubernetes的大脑

      提供了集群管理的RESTAPI接口(包括鉴权,数据,校验及集群状态变更) 负责其他模块之间的数据交互,承担通信枢纽功能 是资源配额控制的入口 提供完备的集群安全机制

  1. - kube-controller-manager服务> 由一些列控制器组成,通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态

Node Controller Deployment Controller Service Controller Volume Controller Endpoint Controller Garbage Controller Namespace Controller Job Controller Resource quta Controller …

  - kube-scheduler服务> 主要功能:接收调度pod到适合的运算节点上

预算策略(predict) 优选策略(priorities)

  • 运算(Node)节点
    • kube-kubelet服务> kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器,运行的副本数量,网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态

      定时汇报当前节点的状态给apiserver,以供调度的时候使用 镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出容器不会占用太多资源 容器爹妈级别存在

  - Kube-proxy服务> 是Kubernetes在每个节点上运行的网络代理,service资源的载体

建立pod网络和集群网络的关系(clusterip—>podip) 常用三种流量调度模式:

  • Userspace(废弃)
  • Iptables(濒临废弃)
  • Ipvs(推荐)

负责建立和删除包括更新调度规则,通知apiserver自己的更新,或者从apiserver那里获取其他kube-proxy的调度规则变化来更新自己的

  • CLI客户端
    • kubectl
  • 核心附件
    • CNI网络插件(flannel/calico)
    • 服务发现用插件(coredns)
    • 服务暴露用插件(traefik)
    • GUI管理用插件(Dashboard)

Kubernetes的三条网络