虚拟化和Docker优化

引言

以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务,多个服务可能会相互影响。

虚拟化

cpu的时间分片(cpu虚拟化),cpu虚拟化性性能瓶颈。

虚拟化工作原理

kvm docker kvm docker 结合_运维

两大核心组件:QEMU、KVM

  • QEMU:
    ①可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。
    ②QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。
  • KVM:
    ①用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化。
    ②只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。

kvm docker kvm docker 结合_运维_02

虚拟化类型

  1. 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
  2. 半虚拟化:需要修改操作系统
  3. 直通:直接使用物理硬件资源(需要支持,还不完善)

全虚拟化:KVM——》产品vmware—ce

半虚拟化:EXSI——》(workststion)vsphere

对于workstation而言——硬件辅助虚拟化,表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口/dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如openstack。

kvm docker kvm docker 结合_kvm docker_03

容器概述

Docker是什么

  • 是一种轻量级的“虚拟机”,Docker是一个用于开发,交付和运行应用程序的开放平台。
  • 在Linux容器里运行应用的开源工具——容器引擎,让开发者可以打包大门的应用及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或者window机器中。
  • Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
  • Docker的设计宗旨:Build,Ship and Run Any App, Anywhere
    即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

Docker的使用场景

  • 打包应用程序部署简单
  • 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。
  • 适合做微服务的部署
  • 适合持续集成和持续交付(CI/CD):开发到测试发布

kvm docker kvm docker 结合_运维_04

Docker 三要素(核心组件)

  • 镜像(Docker images):统一的封装方式,一个面向Docker容器引擎的只读模板
  • 容器(Docker container):统一的运行时环境,基于镜像,运行状态/运行时状态
  • 镜像仓库(Docker registry):放置镜像的仓库,存放镜像模板

CentOS安装Docker的两种方式
●使用CURL获得Docker的安装脚本进行安装
●使用YUM仓库来安装Docker

  • Docker的镜像、容器、日志等内容全部都默认存储在/var/lib/docker
    存储镜像的地方,默认在公共的 Docker Hub上查找,可以搞个人仓库。
    仓库大类:①公共仓库—》docker hub ②私有仓库registry harbor

kvm docker kvm docker 结合_docker_05

容器特性——性能损耗10-20%

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:可以即时部署更新和升级。
  • 便携式:可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:可以增加并自动分发容器副本。
  • 可堆叠:可以垂直和即时堆叠服务。

六大名称空间

namespace资源隔离——用容器技术封装

kvm docker kvm docker 结合_linux_06

mount

文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录

user

操作进程的用户和用户组

pid

进程编号

uts

主机名和主机域 (同一个环境里不能又叫node1又叫node2)

ipc

信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)

net(网络资源)

网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等

小结:

IAAS(基出设施)SAAS(软件服务)PAAS(平台服务)DAAS(数据服务)
openstack / KVM linux环境下
ESXI ESXI企业
xen
docker
VMware workstation个人

容器:提供在多台主机上运行应用程序相同的运行环境
docker是开源的容器引擎,go语言开发的,是容器里运行应用的工具,是一个径量级的虚拟机可以利用locker在多台主机上轻松的创建并运行容器。

docker容器可以被看做运行在宿主机上一个进程,容器共享宿主机的内核,容器间是通过namespace(命名空间、名称空间)隔离资源,通过cgroups(资源配额)去限制资源。

镜像
运行容器的基础,包含运行的应用程序所需的所有内容。
容器
是从镜像创建的运行实例。
仓库
集中保存镜像的地方(公有仓库dolker hub,私有仓库harhor)。

安装docker

目前 Docker 只能支持 64 位系统。
systemctl stop firewalld.service
setenforce 0
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
---------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
---------------------------------------------------
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli
systemctl start docker.service
systemctl enable docker.service

安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。
Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。

#查看 docker 版本信息
docker version
#查看docker信息
docker info

设置镜像加速

1.申请加速器地址
使用阿里云的镜像,加速镜像下载速度
登录阿里云账号

2.搜索容器镜像服务点击进入找到镜像工具——镜像加速器,找到自己需要的版本,将命令复制到系统里面。

kvm docker kvm docker 结合_kvm docker_07

kvm docker kvm docker 结合_linux_08

网络优化

vim /etc/sysctl.conf
net.ipv4.ip_forward=1  #开启路由转发
sysctl -p
systemctl restart network
systemctl restart docker

片转存中…(img-V6bLQN1J-1663301244921)]

网络优化

vim /etc/sysctl.conf
net.ipv4.ip_forward=1  #开启路由转发
sysctl -p
systemctl restart network
systemctl restart docker

开启路由转发是让docker0能根据虚拟机ip为自己所有的docker容器分配虚拟ip