云平台核心

公有云

  1. 公有云资源(服务器、存储空间)由第三方云服务商运营
  2. 通过Internet提供
  3. 在公有云中,与其它组织或云“用户” 共享相同的硬件、存储和网络设备
  4. 优势:近乎无限性的缩放性,提供按需资源,可满足业务需求

私有云

  1. 私有云由专供一个企业或组织使用的云计算资源构成
  2. 服务和基础结构始终在私有网络上进行维护
  3. 私有云使用对象:政府机构、金融机构、具备业务关键性运营且希望对环境拥有更大控制权的大型组织
  4. 更高的隐私级别

基础概念

  1. 云服务器作为应用的最终载体
  2. VPC为所有的云服务器提供网络隔离:在物理层做网络隔离
  3. 安全组控制每个服务器的防火规则
  4. 公网IP使得资源可访问
  5. 端口转发的方式访问到具体服务器

什么是VPC

  1. VPC: virtual private cloud,虚拟私有云,用户在公共云上申请的隔离的、私密的虚拟网络环境
  2. 用户可以自由配置VPC内的IP地址段、子网、安全组等子服务,也可以申请弹性带宽和弹性IP搭建业务服务
  3. 经典网络:公有云上所有用户共享公共网络资源池,用户之间未做逻辑隔离,用户的IP由系统统一分配,不同用户的IP不同
  4. VPC:在公有云上为用户建立一块逻辑隔离的虚拟网络空间

Docker

Docker-VPS-ECS的区别

  1. VPS: Virtual Private Server 虚拟专用服务器 将物理服务器分割成多个虚拟机,与笔记本上用Vmware和VirtualBox建立的虚拟机是一回事,不支持自主升降级,不具有弹性
  2. ECS: Elastic Computer Service 弹性计算服务,用户可以根据需要弹性选择服务器CPU、内存、带宽等
  3. 相当于在ECS中再运行一个虚拟机,非常笨重
  4. Docker容器中只有应用、依赖库和配置,并没有操作系统
  5. 总的来说:物理机跑ECS,ECS跑Docker容器,多个Docker容器共享一个操作系统,使用操作系统内核

应用场景

  1. 比如:你写了一个web应用程序,想要发给朋友或者部署到远程云服务器上
  2. 首先需要配置相关的运行环境,例如数据库、web服务器
  3. 还不一定能运行,因为别人可能用的是完全不同的操作系统,就算是Linux系统,也会因为不同的发行版本而导致运行环境不同
  4. 为了模拟完全相同的本地开发环境,自然会想到使用虚拟机,但是虚拟机需要模拟硬件,还需要包含操作系统,不仅体积臃肿内存占用高
  5. docker不去模拟底层的硬件,建立在操作系统之上,只为每一个应用提供完全隔离的运行环境(container)

基本概念

Image 镜像

  1. Image镜像:类似于虚拟机的快照,里面包含了要部署的应用程序和所关联的所有库
  2. Docker的Image镜像是一个特殊的文件系统

Container 容器

  1. 通过镜像,可以创建多个不同的container容器
  2. 这里的容器就像是一台台运行起来的虚拟机,里面运行了应用程序
  3. 每一个容器是独立运行的,container容器之间互不影响
  4. 镜像Image和容器Container的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义容器是镜像运行时的实体

Dockerfile 自动化脚本

  1. Dockerfile类似于一种自动化脚本,主要被用来创建之前讲到的镜像

  2. 过程好比在虚拟机中安装操作系统和软件一样

  3. 在docker hub中引入基础镜像、环境,使用FROM命令

    FROM python:3.8-slim-buster # FROM 应用:版本(tag)
  4. 指定所有Docker命令的工作路径

    WORKDIR /app
  5. 使用COPY命令将所有的程序拷贝到Docker镜像中,**.** 代表根目录下的所有文件,第二个参数代表Docker镜像中的路径

    COPY . . COPY <本地路径> <目标路径>
  6. RUN允许在创建镜像运行任意的shell命令

    RUN pip install -r xxx
  7. CMD指定当Docker容器运行起来以后要执行的命令(镜像是静态的定义,容器是程序运行的实体)

    CMD ['python3',"app.py"]

仓库

  1. 镜像构建完成后,可以很容易地在宿主机上运行
  2. 但是,如果需要在其它服务器上使用这个镜像,我们需要集中的存储、分发镜像的服务
  3. 标签:把版本信息,如果不用如下格式指定版本(标签),将以latest作为默认标签

操作命令实战

面向单个容器

  1. 创建镜像

    docker build -t 镜像的名字 目录
  2. 启动容器,-p参数会将容器上的某一个端口,映射到你的本地主机上,容器端口:映射主机端口

    docker run -p 80:5000 -d my-finance
  3. 可以使用DockerDesktop来可视化地查看应用在后台的输出,与各种容器的信息

  4. volume卷用来永久保存数据

  5. 对镜像的拉取查看等操作

  6. ```bash
    docker pull nginx:1.20.1 #拉包,镜像名:版本名(标签)
    docker images #查看所有的镜像
    docker rmi 镜像名:版本号 # 删除镜像

    
    9.   对容器的运行、修改映射端口等操作
    
         ```bash
         docker run #镜像启动
         docker run --name=mynginx -d --restart=always -p 80:80 nginx
         
         docker ps #查看正在运行的容器
         docker ps -a
         
         docker rm 容器id #删除停止的容器
         docker rm -f mynginx
         
         docker stop 容器id #停止容器
         
         docker start 容器id # 再次启动
         
         docker update 容器id --restart=always #应用开机自启
  7. 修改容器内容

    # 进入容器内部修改
    docker exec -it 容器id /bin/bash
    
    # 挂载数据到外部修改
    docker run --name=mynginx -d --restart=always -p 80:80 -v /data/html:/usr/share/nginx/html:ro nginx
  8. 提交改变,将自己修改好的镜像提交

    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    
    docker commit -a "leifengyang"  -m "首页变化" 341d81f7504f guignginx:v1.0

docker-compose工具

docker compose up # 用于启动应用程序的服务,如果在命令中不带任何参数,将根据docker-compose.yml文件启动所有服务
docker compose up service1 service2 #启动某个服务,可以在命令后面指定服务名

docker compose down # 停止应用程序的服务,并移除关联的网络和容器

docker-compose build: 这个命令用于构建应用程序的服务,根据 docker-compose.yml 中定义的配置。它会构建每个服务的 Docker 镜像,以便后续的 docker-compose up 命令可以使用。例如:docker-compose build

docker-compose start: 这个命令用于启动已经停止的服务,但不会重新构建它们。例如:docker-compose start

docker-compose stop: 这个命令用于停止正在运行的服务,但不会移除相关的容器或网络。例如:docker-compose stop

docker-compose restart: 这个命令用于重启正在运行的服务,等同于执行 docker-compose stop 和 docker-compose start。例如:docker-compose restart

docker-compose ps: 这个命令用于列出所有由 docker-compose.yml 文件定义的服务,并显示它们的状态。例如:docker-compose ps

docker-compose logs: 这个命令用于查看服务的日志输出。可以使用 -f 选项来实时查看日志。例如:docker-compose logs -f

docker-compose exec: 这个命令用于在服务的容器中执行命令。可以使用该命令连接到正在运行的服务,并在其中执行特定的命令。例如:docker-compose exec service_name command

docker-compose down --volumes: 在执行 docker-compose down 时,使用 --volumes 选项可以移除关联的数据卷。这将会移除所有由 docker-compose 创建的数据卷。

面向多个容器,多个容器共同协作

  1. 比如:使用一个容器来部署web应用,另一个容器运行数据库系统
  2. 容器2中的数据库系统为容器1中的web应用提供数据,做到数据与应用逻辑的有效分离
  3. 比如当web应用宕机了,数据库仍然在有效运转
  4. Kubernetes将各个容器分发到一个集群cluster上运行,做到负载均衡

Kubernetes

K8s最精简的定义

  1. K8s 为你提供了一个 可弹性运行分布式系统框架(平台),K8s会满足你的扩展要求、故障转移、部署模式

K8s的架构

Kubernetes Cluster = N Master Node + N Worker Node
N个主节点+N个工作节点 N>=1

组件架构

Control Plane Components 控制平面组件 CPC

  1. 控制平面组件对集群做出全局决策,比如调度,以及检测和响应集群事件
  2. 相当于Hadoop的Master节点
  3. 若干个Node节点需要相互协调才能做到负载均衡和故障转移,这就需要一台中心计算机来集中管理
  4. 会实时监测节点的网络状态来平衡服务器的负载

Node组件

  1. K8s管理着一系列的主机或服务器,这些服务器称为节点Node,Node是多个容器(Pod)的集合
  2. 每个节点运行着若干个相互独立的Pod,Pod是K8s中可以部署的最小执行单元
  3. 这么多的Pod需要相互协调才能做到负载均衡和状态转移
  4. 节点组件在每个节点上运行,维护运行的Pod并提供K8s运行环境

kubeadm创建集群

Replica Set 副本集合

  1. 当K8s发现某个容器或者Pod挂掉了,会立刻启用在后台预先准备好的、随时待命的备用容器来替换

K8s操作实战

deployment.yaml

  1. Docker中,自动化部署脚本文件是dockerfile
  2. K8s中,自动化部署脚本文件是deployment.yaml
  3. 内部定义了里面的Pod、里面运行了哪些容器、网络配置等

通信

  1. 在默认情况下,我们的Pod只能与同一个Cluster集群中的其它Pod进行通信
  2. 虽然每个Pod都有一个独立的IP,但是这个IP地址对于外网来说是不可见的
  3. 如果要从外网中访问我们的Pod,就需要K8s中另一个组件:服务Service

NodePort

  1. NodePort是原始的将应用端口暴露给外网的方式

Kubectl部署应用

  1. Kubectl是一个全平台通用的工具

  2. 使用kubectl apply 来部署我们的应用

    kubectl apply -f deployment.yaml
  3. 使用kubectl get pods来获取所有pod的运行状态

  4. 使用kubectl get services来获取之前定义的services服务

具体操作还请见转载博客

Kubernetes基础概念 (yuque.com)