• 云原生实战课大纲


    1. 云原生是什么 原生应用(java,pyrhon) 上云的过程
      应用上云遇到的问题
      1.微服务的拆分  微服务的访问关系
       应用的架构
     云原生适合什么样的人去学
     具备什么样的前提条件
     云原生要学习什么
     docker  k8s  devlops  server mesh  jks  k8s监控
     吧自己的微服务部署上云
     另外一种微服务架构  server mesh
     监控k8s平台  比如说告警日志信息
    
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    #拉取镜像
    docker pull nginx 
    #查看镜像
    docker images 
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    在这里插入图片描述

    docker rmi  删除镜像 基于镜像做的crud
    下载镜像后,让镜像启动起来
    启动容器  docker run 启动容器
    docker ps 查看正在运行的容器
    docker  stop  停止应用
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    在这里插入图片描述

    --restart=always  容器开启自启动  -p端口映射
    
    
    • 1
    • 2

    在这里插入图片描述

     docker ps 就可以查看状态 完成nginx的启动
    
    • 1

    在这里插入图片描述

    我现在启动一个nginx 应用并且可以访问到
    接下来 如果我想修改nginx的内容该怎么做
    修改nginx的页面
     1. exec 进入容器 进行修改
     2. -v挂载出来
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    echo
    
    • 1

    在这里插入图片描述

     我此时再来访问nginx 的时候首页就会发生变化  
    
    我修改完毕之后 我把我修改过后的nginx 提交至本地改名为 guigu的的 v1版本
    我可以指定一个镜像之后 docker commit 保存在本地
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    在这里插入图片描述

    相当于linux 的快照 
    git的本地commit 
    假设我有一天我容器宕机了 我直接rm删除  然后再启动shangguigu 的v1版本
    相当于此时生成一个快照机制  此时我基于本地构建一个docker的镜像
    我就用我之前的nginx 镜像 我相当于对nginx 镜像做了一个定制化
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    相当于在本地构建一个镜像,我修改了原来的镜像可以commit 提交至本地
    
    
    镜像的共享  >1  save load
    
    我可以把我的镜像通过docker save 命令保存为tar 包
    然后 scp (文件传输)进行复制到另外一个主机上  之后 docker load执行
    docker load 之后  docker run 执行
    这种适合于离线场景 比如说我此时不便于对接公网
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    在这里插入图片描述

    >我可以把我的镜像进行推送 比如说推送到docker hub仓库  docker push
    >共享dockerhub  规避了底层的复杂度
    也就是说我不必知道你是怎么改的 我只需要 docker run 启动起来就可以了
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    我们能登录到仓库的话 我们就需要 docke push  将我们的镜像push到远程
    
    • 1

    在这里插入图片描述

    docker -v 挂载
    docker -v  将配置文件 以及数据文件挂载到外面
    我们以前改nginx 的内容,需要docker exec 进入之后进行修改
    每次都要进去改 有些麻烦 
    将容器中的文件 挂载出来
    ro 是只读模式  代表容器内部的文件是不允许修改的 是只读模式
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    docker ps   -v 将nginx中的配置文件挂载出来
    
    • 1

    在这里插入图片描述

    保证主机目录下有页面index.html
    包括nginx 的配置文件 也可以挂载出来   卷挂载
    docker 命令 有了挂载之后 修改东西就很方便了
    docker logs   可以看到这个容器的运行日志(启动日志)  我们可以排错用
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

     nginx 的页面挂载出来  还有nginx的config 也挂载出来
    
    • 1

    在这里插入图片描述

    docker cp 可以把容器的文件复制到本机  复制出来
    
    • 1

    在这里插入图片描述

    然后docker -v 再进行挂载
    
    • 1

    在这里插入图片描述

     反向写 可以把容器外面复制到我docker容器中
    
    • 1
    docker 命令
    如果我们要安装nginx 并且修改 之后上传至docker hub
    docker search 
    docker pull 
    ducker run 
    docker commit  {将本地修改后的 打包成一个镜像}
    docker tag  {按照远程仓库的命名规则}
    docker push 
    
    ----------------<<<<<<<<<<<<,,
    docker search 
    docker pull 
    ducker run 
    docker commit  {将本地修改后的 打包成一个镜像}
    docker save 
    docker load 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    我们java+redis 使用docker怎么部署
    我们Springboot项目+redis 部署在docker中
    
    • 1
    • 2
    1.  使用docker 部署redis
    启动redis
    docker run redis  先用docker 部署redis  先部署redis  redis的配置文件和数据文件
    可以docke -v 挂载出去
    docker run redis -v挂载, 启动redis 让redis产生数据之后
    部署redis结束
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2.
    springboot项目 redis的incr命令
    
    • 1
    • 2

    在这里插入图片描述

    springboot+redis 应用 基于dockerfile文件打包为镜像,部署在docker上运行
    
    • 1
    以前如果没有docker上 我们的SpringBoot项目是怎么部署在服务器上的
    我们的项目通过maven打包成jar包,然后上传至服务器之后 java -jar执行
    
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    我服务器还要装java 环境  如果有新的服务器我还得搞java 环境
    如果我是python应用的化,我还得安装python环境
    如果我是一个前端应用的化,我还得安装前端
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    我可以把我服务器装docker,我任何应用都是以docker的镜像运行的
    这样屏蔽了底层
    我不管是运行 前端。java应用,python应用我都可以
    docker run 来运行镜像就可以了
    
    基于docker的方式将jar包打包成镜像
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    docker file 执行怎么打包,每一个应用都要有一个dockerFile文件 ,编写dockerFile文件
    
    
    • 1
    • 2

    在这里插入图片描述

    jar包以及dockerfile文件   依照jar--->构建镜像
    docker build -t .
    jar 如果在服务器上运行 还得装java环境  太麻烦了
    有了dockerFile  怎么吧jar 制作成镜像 
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    docker build -t 构建镜像 基于 java项目(dockerFile文件) 构建镜像
    然后我们docker images 就可以看到我们构建的镜像了
    
    • 1
    • 2

    在这里插入图片描述

    315mb  因为jdk 既有288mb
    docker run 构建镜像
    
    • 1
    • 2

    在这里插入图片描述

    docker ps 查看进程
    docker logs
      我们启动以及排错日志
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    我们之前自己把我们的镜像打包在我们的机器上了
    如果我新的机器想要跑我们的应用  我可以吧这个镜像第一步推送到我镜像仓库
    docker tag 
    docker push 
    吧我们的新镜像推送上去
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    k8s  
    1。什么是k8s 他的出现是为了解决什么问题的 
    2.应用完成开发后想要部署的三个时期
    
    3.我们k8s能帮助我们实现什么  k8s 的功能
    
    k8s 架构
    master node
    worker node(1)
    worker node(2) 
    工作模式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    在这里插入图片描述

    k8s的架构,以及k8s中每个节点 是干嘛的 各个组件的作用
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    k8s 是怎么工作的  以及k8s架构
    都是基于apiService 访问呢
    apiService 进行隐藏
    将我们的项目部署在k8s上,可以部署多个节点. 以达到高负载
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    安装k8s
    kubeadm  init 
    kubeadm  join 
    主节点中的 工作进程
    工作节点中的 工作进程
    k8s的集群规划
    ################
    docker  容器的运行环境
    docker安装完毕后 让每一台机器都 启动docker
    k8s 安装集群的第一步  docker(容器运行环境)
    
    
    设置hostname
    k8s-master_(主机)
    k8s-node1_(节点1)
    k8s-node2_(节点2)
    
    k8s 查看内存 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    建立1个node 2个work的集群.可以在集群中加入主节点和work节点
    kubectl get nodes //获取节点
    
    • 1
    • 2

    在这里插入图片描述

    pod 是k8s中的最小单元  
    kubectl  get  pods  -A  //查看k8s中部署的Pod
    
    • 1
    • 2

    在这里插入图片描述

    运行中的应用在docker中叫容器, 在k8s中叫做pod
    docker ps  kubectl get pods  ..可以看到我正在运行的容器
    kubectl  get pods- A 可以看到我集群中的每一个应用的名字
    k8s 拉的pod 如果挂了 会自动拉的  重新部署
    
    
    
    1. 基于kubectl -f  执行文件 
    2. kubectl create 执行命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    namespace 做资源隔离的 类似于nacos 是做资源隔离的
    prod 的namespace  //生产
    dev  的namespace  //dev
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    基于名称空间ns 创建资源 pod, 基于ns 下对pod 的crud
    docker ps 查看应用
    kubectl get pods 
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述

    pod是k8s中最小的运行单位,k8s 启动pod就可以,pod可以启动多个容器,一个pod中可以有多个容器
    
    
    • 1
    • 2

    在这里插入图片描述

    kubectl run mynginx --image=nginx 
    // 我启动了一个nginx 的pod
    给pod 起一个名字  依据于nginx的镜像启动pod
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    pod  启动容器 pod 底层是依靠于 docker拉取的
    
    可以基于kubectl describe pod mynginx 来查看pod的信息 以及pod的调度
    
    • 1
    • 2
    • 3

    在这里插入图片描述

     可以查看调度到那个机子上
    
    • 1

    在这里插入图片描述

    我们使用了一个命令创建了k8s 的一个pod
    查看pod 
    kubectl get pod 
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    k8s 描述pod  kubectl describe pod //描述pod的信息
    pod 在前面创建好了  kubectl  delete pod //删除pod
    
    • 1
    • 2

    在这里插入图片描述

    kubectl  describe pod 描述pod  ,比如说pod 调度到那个节点上,pod在部署的过程中出现什么问题 我们都可以基于 这个命令来排查和定位
    
    
    • 1
    • 2

    在这里插入图片描述

    我们基于配置文件创建的pod
    
    • 1

    在这里插入图片描述

    pod 的命令  
    
    • 1

    在这里插入图片描述

    我们使用docker 部署的nignx 我们更改他的首页 还可以访问
    我们现在用k8s 的pod 部署的nginx 怎么访问  
    pod 是有ip的
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    pod 就可以访问我们nignx的首页 因为默认是 80的port,我们基于docker 部署的nignx 我们可以exec it 进入容器中去改.现在我们可以
    
    • 1

    在这里插入图片描述

    kubectl  exec 进入nginx 容器 修改主页
    
    • 1

    在这里插入图片描述

    我们的应用是在k8s 中以pod 来部署的,pod是k8s中最小的单位,每一个pod 都有一个ip  基于ip:port 就可以访问  
    
    • 1

    在这里插入图片描述

    1个pod中部署多个应用,比如说一个pod中有nginx和tomcat2个容器,pod 中容器不一样 基于端口号去访问对应的容器
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    如果nginx和tomcat 在同一个pod中内部 nging访问tomcat 怎么访问只需要 127.0.0.18080 就可以访问 因为同一个pod,我在nginx中访问pod 访问127.0.0.1 就可以访问到,同样我在tomcat中访问nginx 也是只需要访问127.0.0.1 就可以访问到,因为我nginx和tomcat在同一个pod中
    同一个pod属于同一个网络空间 127.0.0.1 就可以访问
    
    • 1
    • 2

    在这里插入图片描述

    k8s 中deployment,管理pod,我做一次部署 我需要100个Pod
    
    • 1

    在这里插入图片描述

    kubectl run pod 删除之后就没有了
    我kubectl create deployment  删除之后 可以继续拉pod
    deployment 是控制pod的,让pod具备负载均衡的能力
    基于deployment创建的pod 是删除不了的
    我基于deployment 创建的pod  路由到node2上 ,这个时候node2  宕机了我就得重新拉pod 
    我们使用deployment 部署的应用 我们不怕应用崩溃或者机器down 
    因为应用崩溃或者机器down,我们k8s 会重新拉取
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    Android项目集成flutter模块
    Vim实用技巧_7.模式匹配和查找
    测试左移右移-理论篇
    python socketserver模块开启ssl双向认证
    数据结构-二叉树
    mac电脑启动项目报错 wasm code commit Allocation failed - process out of memory
    Spring 事务
    基于深度学习的任务放置在具有异质工作负载的分布式机器学习集群中的应用(论文笔记)
    spring面试连环炮,最后一问才是经典
    更新win11会格式化吗?win11更新后软件还在吗
  • 原文地址:https://blog.csdn.net/weixin_43689953/article/details/134385172