Kubernetes概述

  • 官网: https://kubernetes.io
  • GitHub : https://github.com/kubernetes/kubernetes
  • 由来:谷歌的Borg系统,后经Go语言重写并捐献给CNCF基金会开源
  • 含义:词根源于希腊语:舵手/飞行员, K8S→K12345678S
  • 重要作用:开源的容器编排框架工具(生态极其丰富)
  • 学习的意义:解决跑裸docker的若干痛点

    Kubernetes优势

  • 自动装箱,水平扩展,自我修复

  • 服务发现和负载均衡
  • 自动发布(默认滚动发布模式)和回滚
  • 集中化配置管理和密钥管理
  • 存储编排
  • 任务批处理运行

    Pod

  • Pod是K8S里能够被运行的最小的逻辑单元(原子单元)

  • 1个Pod里面可以运行多个容器,它们共享UTS+NET +IPC名称空间

UTS: 主机名
IPC: 进程间通信
NET: 网络访问,包括接口

  • 可以把Pod理解成豌豆荚,而同- -Pod内的每个容器是一 颗颗豌豆
  • 一个Pod里运行多个容器,又叫:边车(SideCar)模式

    Pod控制器

  • Pod控制器是Pod启动的一-种模板,用来保证在K8S里启动的Pod

  • 应始终按照人们的预期运行(副本数、生命周期、健康状态检查… )
  • K8S内提供了众多的Pod控制器,常用的有以下几种:

Deployment
DaemonSet (每个节点起一份)
ReplicaSet (Deployment管 ReplicaSet,ReplicaSet管pod)
StatefulSet (管理有状态应用的)
Job
Cronjob

Name

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

    Namespace

  • 随着项目增多、人员增加、集群规模的扩大,需要- -种能够隔离K8S内各种”资源”的方法,这就是名称空间

  • 名称空间可以理解为K8S内部的虚拟集群组
  • 不同名称空间内的”资源”名称可以相同,相同名称空间内的同种“资源”,”名称” 不能相同
  • 合理的使用K8S的名称空间,使得集群管理员能够更好的对交付到K8S里的服务进行分类管理和浏览
  • K8S里默认存在的名称空间有: default、 kube-system、 kube-public
  • 查询K8S里特定“资源”要带上相应的名称空间

    Label

  • 标签是k8s特色的管理方式,便于分类管理资源对象。

  • 一个标签可以对应多个资源,-个资源也可以有多个标签,它们是多对多的关系。
  • 一个资源拥有多个标签,可以实现不同维度的管理。
  • 标签的组成: key=value(值不能多余64个字节字母数字开头 中间只能是 - _ .)
  • 与标签类似的,还有一种“注解” ( annotations )

    Label选择器

  • 给资源打上标签后,可以使用标签选择器过滤指定的标签

  • 标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)
  • 许多资源支持内嵌标签选择器字段

matchl _abels
matchExpressions

Service

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

    Ingress

  • Ingress是K8S集群里工作在OSI网络参考模型下,第7层的应用,对外暴露的接口

  • Service只能进行L4流量调度,表现形式是ip+port
  • Ingress则可以调度不同业务域、 不同URL访问路径的业务流量