前言
Ansible - 应用程序编排工具
Docker - 应用程序容器化
容器化管理接口和早期应用的管理是不同的。docker 的出现就呼唤面向容器化的编排工具的实现。
docker 三剑客
docker compose 编排工具,适用于单机
docker swarm 将多台docker主机整合成一个资源池。
docker machine 将多台主机加入到 docker swarm的先决条件,预处理工具。
不再是面向单机的编排工具。
mesos - IDC 的操作系统
kubernetes:占据容器编排工具的80%份额
微服务:一个小程序只干一件事,天然和容器结合,利用容器本身的特性,使得微服务和容器结合起来。
DevOps
- CI:持续集成
- CD:持续交付 Delivery
- CD:持续部署 Deployment
kubernetes 特性:
- 自动装箱,自我修复,水平扩展,服务发现和负载均衡,自动发布和回滚。
- 密钥和配置管理,存储编排,批量处理执行
更加关注的是群体,而不再是个体。
Dockerfile 使用 entrypoint.sh 来定义容器的启动。
k8s 概述
kubernetes 就是一个集群。集群是分角色的, master/nodes
- master:一般作冗余,3个就够了。
- node: worker,若干个。
客户端请求先到 masters 创建启动容器的请求交给 master ,master当中有一个调度器可分出现有node的可用资源状态,找一个最佳适配用户请求资源的节点, 由这个node 本地的容器引擎运行起来。 镜像在 镜像仓库,可在互联网也可在私有仓库。
接收请求的只是能是 kubernetes master
- API Server 接收、解析、处理客户端请求。
- scheduler - 计算node资源。 首先选3个node ,然后在优先最佳的node 创建并运行容器。
node节点 kubelet - 确保容器处于健康状态
控制器 - 监控容器状态。
控制器有问题了怎么办?
控制器不健康了,控制器管理器 controller manager
控制器管理器不健康了,是有三台主机冗余的。1个主节点,2个备用节点。
kubernetes master 三大组件:
- API server 负责接收并处理请求;
- scheduler 调度容器创建的请求;
- 控制器管理器:确保已创建的容器处于健康状态
K8S 上 最小运行的单元叫 pod, 可以理解为容器的外壳,给容器做了一次抽象的封装。
pod 是 k8s 最小调度单元。
一个pod中可以包含多个容器,多个容器共享底层的网络名称空间、UTS IPC 同享存储卷。
一般来说,一个 pod 内只放一个容器,除非容器之间有特别紧密的关系。如果要放置多个容器,其中一个为主容器,其他为辅助容器。
如果将某个pod 调度到某个node上运行,则这个pod中的所有的容器都在这个node 上运行。
Pod 分类:
为了对pod 分类进行识别,需要在 pod上附加一些元数据。可以在dockerfile中直接打上标签。这些这些标签就是 k-v 数据。
标签选择器 selector