虚拟化技术的变迁

Reference

Abstract

It’s focuses on container technology and how it’s emerging as an important part of the cloud computing infrastructure. It looks at Docker, an open source project that automates the faster deployment of Linux applications, and Kubernetes, an open source cluster manager for Docker containers.

Content

  1. 服务部署的模式变迁
  2. 服务如何部署
  3. 这么多的服务如何管理编排
  4. 容器化编排的技术
  5. 搭建高可用、负载均衡服务

应用部署运行模式变迁

image-20190524104104838

简单的说,Kubernetes 是管理 Container 的工具,OpenStack 是管理 VM 的工具。

OpenStack = 计算资源管理(主要最成熟的是虚机) + 存储资源管理 + 网络资源管理

Kubernetes = 容器资源管理 + 集群编排

所以采用 OpenStack+Kubernetes 是目前相对完整的云应用解决方案栈

什么是 Docker 容器化引擎

docker and vm

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

优点:

  • 轻量级
  • 隔离机制,不依赖系统环境
  • 秒级启动
  • 应用迁移,一次构建到处运行

快速使用

启动方式 1:

1
nvidia-docker run -it -v /home/biod/notebooks:/notebooks -e PASSWORD="biodwhu" -p 5050:8888 -d --restart=always tensorflow/tensorflow:latest-gpu

启动方式 2:

1
docker run -it -v /home/biod/notebooks:/notebooks --runtime=nvidia -e PASSWORD="biodwhu" -p 5050:8888 -d --restart=always tensorflow/tensorflow:latest-gpu

启动方式 3:docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.1'
services:
supermicro:
image: tensorflow/tensorflow:latest-gpu
container_name: supermicro
environment:
- PASSWORD="biodwhu"
restart: always
ports:
- 5050:8888
volumes:
- /home/biod/notebooks:/notebooks

img

kubernetes

什么是 kubernetes(k8s)

Kubernetes 是 Google 2014 年创建管理的,是 Google 10 多年大规模容器管理技术 Borg 的开源版本。

Kubernetes 是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。使用 Kubernetes 我们可以:

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

Kubernetes 的目标是促进完善组件和工具的生态系统,以减轻应用程序在公有云或私有云中运行的负担。

img

特点

  • 可移植: 支持公有云,私有云,混合云,多重云(多个公共云)
  • 可扩展: 模块化,插件化,可挂载,可组合
  • 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

为什么需要 Kubernetes

可以在物理或虚拟机的 Kubernetes 集群上运行容器化应用,Kubernetes 能提供一个以 “容器为中心的基础架构”,满足在生产环境中运行应用的一些常见需求,如:

  • 多个进程协同工作
  • 存储系统挂载
  • 应用健康检查
  • 应用实例的复制
  • 自动伸缩/扩展
  • 注册与发现
  • 负载均衡
  • 滚动更新
  • 资源监控
  • 日志访问
  • 调试应用程序
  • 提供认证和授权

检查 Nodes 状态

1
2
3
4
5
6
7
kubectl get nodes

# 输出如下,STATUS 为 Ready 即为正常状态
NAME STATUS ROLES AGE VERSION
kubernetes-master Ready master 44h v1.14.1
kubernetes-slave1 Ready <none> 3h38m v1.14.1
kubernetes-slave2 Ready <none> 3h37m v1.14.1

运行第一个容器实例

1
2
3
4
5
6
# 使用 kubectl 命令创建两个监听 80 端口的 Nginx Pod(Kubernetes 运行容器的最小单元)
kubectl run nginx --image=nginx --replicas=2 --port=80

# 输出如下
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created

img