抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)JavaScript
了解詳情 >

K8S是什么?

K8S全称为kubernetes,是一个开源容器管理工具、负责容器部署、扩容、缩容、负载均衡等功能,它是由Google所开发的,可以说是一种多容器管理的解决方案。

特性

  • 自我修复功能:在节点故障时可以删除失效容器、重新创建新的容器、替换并重新部署,保证预期的副本数量,会杀死健康检查失效的容器、并在容器为准备好时不会对外提供服务,确保线上服务不会被中断。
  • 弹性伸缩:手动或者K8S基于CPU使用情况来自动快速扩容和缩容应用程序实例、保证应用业务高峰时并发的高可用性、业务低峰时回收资源、以最低成本来运行服务。
  • 服务发现和负载均衡:K8S为多个容器提供一个统一的访问入口,并且自动负载均衡关联的所有容器、使得我们无需考虑IP等问题。
  • 配置管理:可以将数据库密码等敏感数据存放在K8S中、提高数据的安全性、同时方便应用程序直接读取。

架构

k8s是典型的主从设备模型(Master-Slave架构),即Master节点负责核心的调度、管理、运维等功能,Slave节点则负责执行用户的程序。在k8s中节点分为了Master NodeWorker Node,即分别安装了Master和Slave实例的服务器,通常情况下一台实体服务器只安装一个Node节点,但也允许一台实体服务器上同时安装Maste NodeSlave Node。这些Node节点构成了k8s集群。

Master Node

在Master Node中组件被分为Api ServerSchedulerController Manageretcd等。

  • Api Server:k8s的请求入口服务,负责接受所有客户端的请求、并根据请求信息通知其余组件工作。
  • Scheduler:k8s中所有的Worker Node的调度器,当客户端需要部署时,scheduler会根据调度算法选择最合适的节点来部署。
  • Controller Manager:k8s中所有Worker Node的监控器,负责维护集群的状态、例如故障检测、自动扩展、滚动更新等。来保证服务处于正常的期待状态。
  • etcd:k8s的存储服务,它是一个高可用的键值对数据库,保存集群的所有网络配置和资源对象的状态信息,保存整个集群的信息。

img

Worker Node

在Worker Node组件中可以被分为KubletKube-proxyContainer runtimeLogging layerAdd-ons等。

  • Kublet:Worker Node上的监视器和负责与Master Node的通讯器,负责告知自己的运行状态,并接受调整命令。
  • Kube-proxy:网络代理组件、负责节点在K8s中的网络通信和对外部网络的负载均衡。
  • Container runtime:Worker Node的运行状态、提供容器化所需的软件环境,即安装好了Docker运行环境。
  • Logging layer:监控状态收集器组件,负责采集节点上所有服务的CPU、内存、磁盘、网络等信息。
  • Add-ons:插件组件、让开发者可以定制化功能。

pod

pod是k8s中创建和管理的最小的可部署计算单元。即pod是一个可以共享网络、计算资源、存储的容器化服务集合,同一个pod的容器化服务可以通过localhost直接访问、并能够访问其挂载的磁盘资源。一个pod中可以包含多个Container、每个Container类似Docker中创建的镜像实例。

img

Deployment

Deployment负责管理和控制Pod和ReplicaSet、负责确保他们运行在用户所期待的场景中,例如配置Pod的副本数量,下面是官方的yaml文件例子,创建了三个nginx副本的pod

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80

参考资料