### 1、Kubernetes优势

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

● 服务发现和负载均衡

● 自动发布(默认滚动发布模式)和回滚

● 集中化配置管理和密钥管理

● 存储编排

● 任务批处理运行

### 2、Kubernetes快速入门概念

**四组基本概念**

➢ Pod/Pod控制器

➢ Name/Namespace

➢ Label/Label选择器

➢ Service/Ingress

➢ **Pod**

```

● Pod是K8S里能够被运行的最小的逻辑单元(原子单元),不是容器

● 1个Pod里面可以运行多个容器,容器与容器之间它们共享UTS+NET+IPC名称空间 ,只隔离PID+MOUNT+USER 。容器有6个隔离空间(UTS+NET+IPC+PID+MOUNT+USER)

● 可以把Pod理解成豌豆荚,而同一Pod内的每个容器理解成是一颗颗豌豆

● 一个Pod里运行多个容器,又叫:边车( SideCar)模式

```

➢** Pod控制器**

```

● Pod控制器是Pod启动的一种模板,用来保证在K8S里启动的Pod 应始终按照人们的预期运行(副本数、生命周期、健康状态检查... )Pod可以在k8s里面单独启动,不需要任何Pod控制器管控,启动Pod

● K8S内提供了众多的Pod控制器,常用的有以下几种:

● Deployment 部署

● DaemonSet 要求我们每个运算单位都启动一份

● ReplicaSet ReplicaSet 不直接对外提供服务,Deployment 管理ReplicaSet,ReplicaSet管理Pod,进而提供服务

● StatefulSet 管理有状态应用的 Pod控制器

● Job 管理任务

● Cronjob 管理定时任务

```

➢ **Name**

```

● 由于K8S内部,使用“资源”来定义每一种逻辑概念(功能),故每种“资源”, 都应该有自己的"名称”,每一种功能我们都叫做资源,每一种功能的实现都叫做资源的实例化

● 资源一共有5个维度的信息,每一种都有,“资源”有api版本( apiVersion )、类别( kind )、元数据( metadata )、定义清单( spec)、状态( status )(集群自己生成的,不需要人工定义)等配置信息

● "名称”通常定义在‘ '资源”的“元数据”信息里,

```

➢** Namespace**

```

● 随着项目增多、人员增加、集群规模的扩大,需要一种能够隔离K8S内部各种“资源”的方法,这就是名称空间,通过名称空间各种资源进行分组

● 名称空间可以理解为K8S内部的虚拟集群组

● 不同名称空间内的“资源”, 名称可以相同,相同名称空间内的同种"资源”,"名称” 不能相同,重名不重名

● 合理的使用K8S的名称空间,使得集群管理员能够更好的对交付到K8S里的服务进行分类管理和浏览

● K8S里默认存在的名称空间有: default、kube-system、 kube-public

● 查询K8S里特定“资源”要带上相应的名称空间

```

➢** Label**

```

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

● 一个标签可以对应多个资源,一个资源也可以有多个标签,它们是多对多的关系。

● 一个资源拥有多个标签,可以实现不同维度的管理。

● 标签的组成: key=value 键值对,有效的标签值必须不超过63个字符,并且必须为空或以字母数字字符([a-z0-9A-Z]),带破折号(-)、下划线(Uu)、点(.),和字母数字

● 与标签类似的,还有一-种“注解”( annotations ) 标 , 注解没有要求

```

➢ **Label选择器**

```

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

● 标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)

● 许多资源支持内嵌标签选择器字段

● matchl abels

● matchExpressions

```

➢ **Service 集群网络**

```

● 在K8S的世界里,虽然每个Pod都会被分配一个单独的P地址 ,但这个IP地址会随着Pod的销毁而消失。 Pod有生命周期的,不定时的启动,扩容,销毁,迁移。流量如何调度,Service 起到,无论你这组 pod怎么掉度、销毁等等,对外提供服务的接口统一,Service会有一个相对独立的接口,

● Service (服务)就是用来解决这个问题的核心概念

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

● Service作用于哪些Pod是通过标签选择器来定义 的

```

➢ **Ingress**

```

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

● Service只能进行4流量调度, 表现形式是ip+ port

● Ingress则可以调度不同业务域、不同URL访问路径的业务流量

```

### 3、核心组件

● 配置存储中心→etcd服务 状态、请求、集群资源情况等,也可以理解位Mysql

● 主控( master )节点

● **kube-apiserver服务 ** 集群的大脑,所有组件通过kube-apiserver 通信枢纽功能

```

● aplserver:

● 提供了集群管理的REST API接口( 包括鉴权、数据校验及集群状态变更)

● 负责其他模块之间的数据交互,承担通信枢纽功能

● 是资源配额控制的入口

● 提供完备的集群安全机制

```

● **kube-controller-manager服务 **

```

● controller-manager : 管理控制器的控制器 需要高可用

● 由一系列控制器组成,通过piserver监控整个集群的状态,并确保集群处于预期的工作状态

● Node Controller 节点控制器

● Deployment Controller Pod控制器

● Service Controller server控制器

● Volume Controller 卷控制器

● Endpoint Controller 接入点控制器

● Garbage Controller 垃圾回收控制器

● Namespace Controller 名称空间资源配额

● Job Controller 任务资源配额

● Resource quta Controller 资源配额控制器

```

● ** kube-scheduler服务**

```

● scheduler:调度器

● 主要功能是接收调度pod到适合的运算节点上 有一个请求通过apiserver,apiserver告诉controller-manager 需要启动那些Pod, controller-manager 找到scheduler,他会按照要求模板到那个节点创建一系列Pod

● 预算策略( predict ) 最适合运行Pod点,拉取

● 优选策略( priorities )

```

#### 运算( node )节点

● **kube-kubelet服务 **

```

● kubelet

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

● 定时汇报当前节点的状态给apiserver,以供调度的时候使用

● 镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源

```

● **Kube-proxy服务**

```

● kube- proxy

● 是K8S在每个节点上运行网络代理, service资源的载体

● 建立了pod网络和集群网络的关系( clusterip >podip ) 把clusterip 跟podip关联起来

● 常用三种流量调度模式

● Userspace (废弃) 早期1.2 版本,Userspace调度节点网络、Pod网络、集群网络要用到大量的内核态跟用户态之间的转换,消耗资源大

● Iptables (濒临废弃) 99%目前主流方法,nat表,nat映射,太多没办法维护

● Ipvs(推荐) lvs开源,加入Linux 内核,

● 负责建立和删除包括更新调度规则、通知apiserver自 己的更新,或者从apiserver哪里获取其他kube-proxy的调度规则变化来更新自己的 一个集群中有若干节点,都起Kube-proxy,如何同步,通过apiserver找etcd

```

#### ● CLI客户端 命令行工具

```

● kubectl

● 核心附件

● CNI网络插件> flannel/calico

● 服务发现用插件> coredns

● 服务暴露用插件> traefik

● GUI管理插件> Dashboard

```

#### 4、核心组件图,三条网络,节点网洛(宿主机网洛)

![](https://img.kancloud.cn/74/de/74dec8da2f77208075103b5908f096a5_1414x629.png)

5、部署架构图

![](https://img.kancloud.cn/e3/a5/e3a5c6a772e89b091ae2210178485bbd_1211x761.png)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐