Dockerfile: 配置文件, 可以 build 一个镜像.
tar 文件: 类似虚拟机存储在磁盘上的文件. (这样就可以转存这个tar 从而实现镜像的 copy)
仓库: 远程仓库, 可以下载带环境变量的 docker, 比如带 nginx
比如我用 play with docker 玩的下载 docker pull nginx
docker images 查看有哪些镜像
然后我们可以通过 run 命令来运行这个镜像, 使它编程一个容器.
docker run -d -p 80:80 nginx
-d 表示后台运行, 不会阻塞shell. -p 表示端口映射, 外部端口(左){操作系统的端口}和内部端口(右){容器内的端口, 运行时}的一个映射.
docker ps 可以查看正在运行的容器
Docker 运行原理
Docker 是一个 Client-Server 结构的系统, Docker 守护进程运行在主机上, 然后通过Socket连接客户端访问, 守护进程从客户端接受命令并管理运行在主机上的容器. 容器:是一个运行时环境,就是我们前面说到的集装箱.
Docker 的架构
所以: Docker 就是 PaaS 的运行标准. docker 是纯软件层面的, 不需要考虑操作系统和硬件, 所以非常快.
Docker 版本:
docker-CE:社区版(免费)
docker-EE: 企业版(收费)
Docker 的问题
- 单机使用, 无法有效集群
- 随着容器数量的上升,管理成本攀升
- 没有有效的容灾/自愈机制
- 没有预设编排模板, 无法实现快速,大规模容器调度
- 没有统一的配置管理中心工具
- 没有容器生命周期的管理工具
- 没有图形化运维管理工具
容器编排工具 (慢慢 凉凉了)
docker compose, docker swarm
Mesosphere + Marathon (2015)
K8S Kubernetes
我们真的需要集群吗? 貌似没到这个规模啊...
K8S 解决容器的集群化的问题。 实际上, 各个服务厂商有自己的 Kubernetes, 但是基本上也都是兼容的.
所以, 理解是应该是 Infra team 来关注 K8S, 来管理 docker.
搭配比较繁琐
服务器硬件 -> 操作系统ubuntu -> K8S 容器 -> dockers (多个容器)... 这种多台服务器组成的,就是 K8S 集群
组件说明
K8S 来源于 Borg 系统(Google 运行了10多年了)
高可用集群, BorgMaster 最好是基数. 3.5.7 等.
K8S 也是采用 HTTP 的 restful API.
kubectl: K8S 的命令行界面
apiserver: 所有服务访问的统一入口
ccontrollerManager(replication controller): 维护副本的期望数, 推荐使用 RelicaSet 来替换 replication controller.
scheduler: 负责接受任务,选择合适的节点分配任务.
etcd: key,value 数据库. (自己天生集群化), 本地持久化, 最新版的 k8s 是 v3 版本的 etcd.
kubelet: CRI container runtime interface, 与 container 交互, container生命周期管理.
kube proxy: 负责写入规则到 IPTABLES, IPVS 实现服务映射访问的, 负载均衡.
以上是主要组件, 除此之外, 还有一些插件:
CoreDNS: 可以为集群中的 SVC 创建一个域名IP的对应关系解析.
Dashboard: B/S 接口, 给K8S 一个访问,可视化.
Ingress Controller: 可以实现 7 层代理.
Federation: 可以跨集群中心多 K8S 统一管理
Prometheus: 提供 K8S 集群的监控
ELK: 提供 K8S 日志分析接入平台.
K8S 网络通信: 假定所有的 Pod 都在一个直接连通的网络空间中, 可以通过IP直接到达.
同一个Pod 内的容器之间: IO
各个 Pod 之间的通讯: Overlay Network
Pod 与 service 之间的通讯: 各个节点的 iptables / IPVS.
微服务架构2.0: Istio (依赖于 Kubernetes) 方向
官网: https://kubernetes.io
GitHub: https://github.com/kubernetes/kubernetes
K8S 版本要注意选择.
K8S 优势
- 自动装箱,水平扩展,自我修复(自愈)
- 服务发现和负载均衡
- 自动发布(默认滚动发布模式)和回滚
- 集中化配置管理和密钥管理
- 存储编排, 支持外挂存储
- 任务批处理运行