首先来看一个最简单的系统架构图:由一个主节点和若干工作节点组成,开发者将一个应用列表提交到主节点,k8s会将它们部署到集群的工作节点,组件被部署在哪个节点对开发者和系统管理员来说都不用关心。
在这个层级上,k8s可以看成是集群的操作系统,帮助开发者聚焦核心应用功能,不必去考虑额外的服务如:服务发现、扩容、负载均衡、自恢复或者选举leader等,同时也能够帮助运维团队获取更高的资源利用率。
视角拉近一点会看到k8s的架构是如下所示,在硬件层面,一个k8s集群由很多节点构成,主要分为两类:
- 主节点,控制面板(master)
- 工作节点(worker)
各节点具有的组件及其功能可参考我之前的文章[k8s-设计理念-原理图](https://segmentfault.com/a/1190000017535476)
最后看一个在k8s集群中是如何部署应用程序的简易流程图。
左边的容器被分为3组,这些容器组被称为pod,旁边的数字代表pod的副本数量,后续将会详细讲解。pod一般由deployment控制器负责创建,开发人员提交的deployment.yaml里面会包含创建pod所需的信息,下面是一个nginx-deployment.yaml的例子。
apiVersion: apps/v1 // 当前使用的apiVersion版本
kind: Deployment // 要创建的资源类型
metadata: // 该资源的元数据,name是必需的元数据项
name: nginx-deployment
labels:
app: nginx
spec: // 该Deployment的规格说明
replicas: 2 // 副本数量
selector: // label选择器
matchLabels:
app: nginx
template: // 定义Pod的模板,这是配置文件的重要部分
metadata: // 定义Pod的元数据,至少要定义一个label
labels:
app: nginx
spec: // 描述Pod的规格,此部分定义Pod中每一个容器的属性,name和image是必需的
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
执行kubectl apply -f nginx-deployment.yaml
通过 kubectl get 查看 nginx-deployment 的各种资源
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。