首先来看一个最简略的零碎架构图:由一个主节点和若干工作节点组成,开发者将一个利用列表提交到主节点,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 的各种资源