Docker & K8S 01

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 优势

  • 自动装箱,水平扩展,自我修复(自愈)
  • 服务发现和负载均衡
  • 自动发布(默认滚动发布模式)和回滚
  • 集中化配置管理和密钥管理
  • 存储编排, 支持外挂存储
  • 任务批处理运行
原文地址:https://www.cnblogs.com/moveofgod/p/12561907.html