精华内容
下载资源
问答
  • (一)docker和传统虚拟机的区别: docker是用go语言写的 1.架构上: 普通虚拟机的架构: infrastructure 基础设施–》电脑硬件 ...2.资源消耗上 非常的少 一个容器就站几十MB 二一个VM需要几十GB -

    (一)docker和传统虚拟机的区别:

    docker是用go语言写的
    

    1.架构上:

    在这里插入图片描述
    普通虚拟机的架构:
    在这里插入图片描述
    infrastructure 基础设施–》电脑硬件
    HOST operating system 主机操作系统 --》linux,windows等
    docker 是一个软件,运行在操作系统上
    hypervisor 超级的虚拟化管理程序 vmware 超级监督者

    2.docker的优势:

    1.速度上秒杀操作系统
    2.资源消耗上 非常的少 一个容器就站几十MB 二一个VM需要几十GB  ---》资源可靠
    3.扩展性强 快速复制
    

    3.docker 缺点:

    隔离性没有那么强
    

    docker怎么做到底层隔离的?

    name space		--》命名空间 (内核操控的 在内存中划分出不同的命名空间 给不同的容器划分不同的命名空间)
    lxc Linux_container --->对容器进行管控的软件
    cgroup ---》对硬件资源进行限制   cpu 内存 disk 带宽
    

    在这里插入图片描述

    (二)安装docker及使用命令

    安装:

    1.开启两台虚拟机—》通过不同的源安装

    128 --》docker官方源安装
    130 --》centos官方源去安装
    

    2、docker官方源安装

    下载docker官方的repo文件
    yum install -y yum-utils -y
    
    下载docker官方提供的repo文件到/etc/yum.repos.d目录下,文件名叫docker-ce.repo
     yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
     
      使用docker官方的yum源安装的docker
      yum install docker-ce docker-ce-cli containerd.io
    

    3、centos源安装

    yum install docker -y
    查看安装成功没有
    rpm -qa|grep docker
    

    4.添加一个国内的阿里云的源,下载会快很多。–》推荐使用

    yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    在这里插入图片描述
    5.添加国内源

    vim /etc/docker/daemon.json
    
    {
      "registry-mirrors": [
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
      ]
    }
    

    常用命令:

    1.启动docker:
    service docker start
    2.重启docker:
    service docker restart
    3.查看版本:
    docker version
    4.查看本机上有多少docker镜像:
    docker images
    5.拉取镜像:
    docker pull mysql:5.7.33
    6.查找nginx镜像:
    docker search nginx
    
    7.启动容器:
    docker run --name sc_nginx1 -p 80:80 -d nginx   
    	-d后台运行
    8.查看哪些容器运行起来了
    docker ps
    9.查看所有容器    没有运行起来的程序也会展示
    docker ps -a
    10.删除容器
    docker rm 容器的id
    11.进入容器内部
    docker  exec -it sc_nginx3 /bin/bash
    

    进入容器后的操作
    在这里插入图片描述

     12.查看docker里面的网络类型
     docker network ls
     13.查看桥接的详细信息
     docker network inspect bridge
    

    镜像的导入和导出

     14.  导出镜像
     docker save nginx >nginx.tar			||			docker save -o nginx.tar nginx
     15.scp到另一台虚拟机
     scp nginx.tar 192.168.100.130:/root
     16.导入镜像
     docker load -i nginx.tar
     17.导出正在运行的镜像
    

    在这里插入图片描述

    18.列出数据卷
    docker volume ls
    19.创建数据卷
    docker volume create sc-vol
    20.详细查看数据卷
    docker volume inspect sc-vol
    21.数据卷的挂载
    docker run -d --name tanglf -p 6654:80 --mount source=sc-vol,target=/usr/share/nginx/html nginx
    22.查看创建的数据卷在哪?
    /var/lib/docker/volumes/sc-vol/_data
    23.删除卷
    docker volume rm sc-vol
    24.查看网络有哪些类型
    docker network ls
    NETWORK ID     NAME      DRIVER    SCOPE
    c1d26ae1c4f4   bridge    bridge    local
    5c365f836b82   host      host      local
    085d1da44a12   none      null      local
    25.查看容器的具体信息--->容器的IP地址
    docker container inspect nginx_1
    
    

    (三)docker基本概念

    容器:

    容器是来运行镜像的地方  --》一个容器对应一个服务
    

    镜像:

    1.image 相当于微型的操作系统
    2.镜像包括:程序代码、基础系统(centos7.iso)、依赖包
    

    仓库:

    存放镜像的地方
    

    流量走向:
    在这里插入图片描述
    在这里插入图片描述

    (四)数据卷volume—> 数据持久化

    数据卷
    作用:是用来存放数据的地方
    目的:让容器里的数据可以永久保存,同时能够和其他的容器分享

    在这里插入图片描述

    在这里插入图片描述

    实现数据的一致
    把本地web目录挂载到nginx容器的html目录下

    docker run -d --name lyq -v /web:/usr/share/nginx/html -p 7790:80 nginx
    数据卷的挂载
    docker run -d --name tanglf -p 6654:80 --mount source=sc-vol,target=/usr/share/nginx/html nginx
    

    (五)docker的网络类型

    注意:

    每一种网络类型都相当于一种命名空间
    

    bridge桥接模式:
    在这里插入图片描述

    host模式:
    容器和宿主机共享ip地址,端口号要区别开。

    container模式:
    很多容器共享IP地址。

    overlay模式:
    解决了不同宿主机之间的问题
    23min

    展开全文
  • 容器管理

    2021-01-25 11:50:00
    1. 容器 Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们...最重要的是,他们不依赖于任何语言、框架包括系统。 1.1 创建容器 1.1.1 创建容器 docker container run -d nginx [root@localhost ~]# docker

    1. 容器

    Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
    

    1.1 创建容器

    在这里插入图片描述

    1.1.1 创建容器

    docker container run -d nginx
    [root@localhost ~]# docker run -d -e JAVA_HOME=/usr/local/jdk --name test1 -h java8 java:8
    

    1.2 容器资源限制

    在这里插入图片描述

    1.2.1 内存限制

    docker run -d --name nginx03 --memory="500m" --memory-swap=“600m" --oom-kill-disable nginx
    

    1.2.2 cpu限制

    docker run -d --name nginx04 --cpus="1.5" nginx
    
    docker run -d --name nginx05 --cpus=".5" nginx
    

    1.3 管理容器常用命令

    在这里插入图片描述

    1.3.1 列出容器

    docker container ls
    

    1.3.2 容器详情

    docker inspect  容器id
    

    1.3.3 执行命令

    docker exec -it 容器id bash
    
    docker exec  容器id 命令
    

    1.3.4 拷贝

    docker cp 宿主机本地文件 容器ID:容器内目录
    docker cp 容器ID:容器内目录 宿主机本地文件 
    

    1.3.5 日志

    docker logs 容器id
    

    1.3.6 端口映射

    docker run -d -p90:80 nginx
    

    1.3.7 容器进程

    docker top 容器id
    

    1.3.8 查看资源

    docker stats 容器id
    

    1.3.9 启停容器

    docker start|stop|restart 容器id
    

    1.3.10 删除容器

    # 删除停止的容器
    docker rm 容器id
    
    # 强制删除容器
    docker rm -f 容器id
    
    # 强制删除所有容器
    docker rm -f $(docker ps -a |awk '{print $1}')
    
    展开全文
  • 在说容器文件系统前,我们先来想象一下如果没有文件系统管理的话会怎样。假设有这么一个场景,在一个宿主机上需要运行 100 个容器。 每个容器都需要一个镜像,这个镜像就把容器中程序需要运行的二进制文件,库文件...

    我们在容器里,运行 df 命令,你可以看到在容器中根目录 (/) 的文件系统类型是"overlay",它不是我们在普通 Linux 节点上看到的 ext4 或者 xfs 之类常见的文件系统。

    那么看到这里你肯定想问,Overlay 是一个什么样的文件系统呢,容器为什么要用这种文件系统?

    在说容器文件系统前,我们先来想象一下如果没有文件系统管理的话会怎样。假设有这么一个场景,在一个宿主机上需要运行 100 个容器。

    每个容器都需要一个镜像,这个镜像就把容器中程序需要运行的二进制文件,库文件,配置文件,其他的依赖文件等全部都打包成一个镜像文件。

    如果没有特别的容器文件系统,只是普通的 ext4 或者 xfs 文件系统,那么每次启动一个容器,就需要把一个镜像文件下载并且存储在宿主机上。

    我举个例子帮你理解,比如说,假设一个镜像文件的大小是 500MB,那么 100 个容器的话,就需要下载 500MB*100= 50GB 的文件,并且占用 50GB 的磁盘空间。

    如果你再分析一下这 50GB 里的内容,你会发现,在绝大部分的操作系统里,库文件都是差不多的。而且,在容器运行的时候,这类文件也不会被改动,基本上都是只读的。特别是这样的情况:假如这 100 个容器镜像都是基于"ubuntu:18.04"的,每个容器镜像只是额外复制了 50MB 左右自己的应用程序到"ubuntu: 18.04"里,那么就是说在总共 50GB 的数据里,有 90% 的数据是冗余的。

    讲到这里,你不难推测出理想的情况应该是什么样的?

    没错,当然是在一个宿主机上只要下载并且存储存一份"ubuntu:18.04",所有基于"ubuntu:18.04"镜像的容器都可以共享这一份通用的部分。这样设置的话,不同容器启动的时候,只需要下载自己独特的程序部分就可以。

     

    正是为了有效地减少磁盘上冗余的镜像数据,同时减少冗余的镜像数据在网络上的传输,选择一种针对于容器的文件系统是很有必要的,而这类的文件系统被称为 UnionFS。

     

    UnionFS 这类文件系统实现的主要功能是把多个目录(处于不同的分区)一起挂载(mount)在一个目录下

    这种多目录挂载的方式,正好可以解决我们刚才说的容器镜像的问题。比如,我们可以把 ubuntu18.04 这个基础镜像的文件放在一个目录 ubuntu18.04/ 下,容器自己额外的程序文件 app_1_bin 放在 app_1/ 目录下。然后,我们把这两个目录挂载到 container_1/ 这个目录下,作为容器 1 看到的文件系统;对于容器 2,就可以把 ubuntu18.04/ 和 app_2/ 两个目录一起挂载到 container_2 的目录下。这样在节点上我们只要保留一份 ubuntu18.04 的文件就可以了。

     

    UnionFS 类似的有很多种实现,包括在 Docker 里最早使用的 AUFS,还有目前我们使用的 OverlayFS。

    前面我们在运行df的时候,看到的文件系统类型"overlay"指的就是 OverlayFS。

    在 Linux 内核 3.18 版本中,OverlayFS 代码正式合入 Linux 内核的主分支。在这之后,OverlayFS 也就逐渐成为各个主流 Linux 发行版本里缺省使用的容器文件系统了。

    网上 Julia Evans 有个blog,里面有个的 OverlayFS 使用的例子,很简单,我们也拿这个例子来理解一下 OverlayFS 的一些基本概念。

     

    How containers work: overlayfs

    https://jvns.ca/blog/2019/11/18/how-containers-work--overlayfs

     

    你可以先执行一下这一组命令。

    ###############################################

    #!/bin/bash

    umount ./merged

    rm upper lower merged work -r

    mkdir upper lower merged work

    echo "I'm from lower!" > lower/in_lower.txt

    echo "I'm from upper!" > upper/in_upper.txt

    # `in_both` is in both directories

    echo "I'm from lower!" > lower/in_both.txt

    echo "I'm from upper!" > upper/in_both.txt

    sudo mount -t overlay overlay \

    -o lowerdir=./lower,upperdir=./upper,workdir=./work \

    ./merged

    ################################################

     

     

    我们可以看到,OverlayFS 的一个 mount 命令牵涉到四类目录,分别是 lower,upper,merged 和 work,那它们是什么关系呢?

    我们看下面这张图,这和前面 UnionFS 的工作示意图很像,也不奇怪,OverlayFS 就是 UnionFS 的一种实现。接下来,我们从下往上依次看看每一层的功能。

    首先,最下面的"lower/",也就是被 mount 两层目录中底下的这层(lowerdir)。

    在 OverlayFS 中,最底下这一层里的文件是不会被修改的,你可以认为它是只读的。我还想提醒你一点,在这个例子里我们只有一个 lower/ 目录,不过 OverlayFS 是支持多个 lowerdir 的。然后我们看"uppder/",它是被 mount 两层目录中上面的这层 (upperdir)。

    在 OverlayFS 中,如果有文件的创建,修改,删除操作,那么都会在这一层反映出来,它是可读写的。接着是最上面的"merged" ,它是挂载点(mount point)目录,也是用户看到的目录,用户的实际文件操作在这里进行。

    其实还有一个"work/",这个目录没有在这个图里,它只是一个存放临时文件的目录,OverlayFS 中如果有文件修改,就会在中间过程中临时存放文件到这里。

     

    从这个例子我们可以看到,OverlayFS 会 mount 两层目录,分别是 lower 层和 upper 层,这两层目录中的文件都会映射到挂载点上。

    从挂载点的视角看,upper 层的文件会覆盖 lower 层的文件,比如"in_both.txt"这个文件,在 lower 层和 upper 层都有,但是挂载点 merged/ 里看到的只是 upper 层里的 in_both.txt.

     

    如果我们在 merged/ 目录里做文件操作,具体包括这三种:

     

    第一种,新建文件,这个文件会出现在 upper/ 目录中。

     

    第二种是删除文件,如果我们删除"in_upper.txt",那么这个文件会在 upper/ 目录中消失。

    如果删除"in_lower.txt", 在 lower/ 目录里的"in_lower.txt"文件不会有变化,只是在 upper/ 目录中增加了一个特殊文件来告诉 OverlayFS,"in_lower.txt'这个文件不能出现在 merged/ 里了,这就表示它已经被删除了。

     

    第三种是修改文件,类似如果修改"in_lower.txt",那么就会在 upper/ 目录中新建一个"in_lower.txt"文件,包含更新的内容,而在 lower/ 中的原来的实际文件"in_lower.txt"不会改变。

     

    通过这个例子,我们知道了 OverlayFS 是怎么工作了。

    那么我们可以再想一想,怎么把它运用到容器的镜像文件上?

     

    其实也不难,从系统的 mounts 信息中,我们可以看到 Docker 是怎么用 OverlayFS 来挂载镜像文件的:

    容器镜像文件可以分成多个层(layer),每层可以对应 OverlayFS 里 lowerdir 的一个目录,lowerdir 支持多个目录,也就可以支持多层的镜像文件。

    在容器启动后,对镜像文件中修改就会被保存在 upperdir 里了。

     

     

    在理解了容器使用的 OverlayFS 文件系统后,我们再回到开始的问题,为什么在宿主机升级之后,在容器里读写文件的性能降低了?

    现在我们至少应该知道,在容器中读写文件性能降低了,那么应该是 OverlayFS 的性能在新的 ubuntu20.04 中降低了。

    Linux 为了完善 OverlayFS,增加了 OverlayFS 自己的 read/write 函数接口,从而不再直接调用 OverlayFS 后端文件系统(比如 xfs,ext4)的读写接口。但是它只实现了同步 I/O(sync I/O),并没有实现异步 I/O。

    在 fio 做文件系统性能测试的时候使用的是异步 I/O,这样才可以得到文件系统的性能最大值。所以,在内核 5.4 上就无法对 OverlayFS 测出最高的性能指标了。

    在 Linux 内核 5.6 版本中,这个问题已经通过下面的这个补丁给解决了,有兴趣的同学可以看一下。

    overlayfs: stack file operations

    https://lwn.net/Articles/755889/

     

    为什么要有容器自己的文件系统?

    很重要的一点是减少相同镜像文件在同一个节点上的数据冗余,可以节省磁盘空间,也可以减少镜像文件下载占用的网络资源。

    作为容器文件系统,UnionFS 通过多个目录挂载的方式工作。

    OverlayFS 就是 UnionFS 的一种实现,是目前主流 Linux 发行版本中缺省使用的容器文件系统。

    OverlayFS 也是把多个目录合并挂载,被挂载的目录分为两大类:lowerdir 和 upperdir。

    lowerdir 允许有多个目录,在被挂载后,这些目录里的文件都是不会被修改或者删除的,也就是只读的;upperdir 只有一个,不过这个目录是可读写的,挂载点目录中的所有文件修改都会在 upperdir 中反映出来。

    容器的镜像文件中各层正好作为 OverlayFS 的 lowerdir 的目录,然后加上一个空的 upperdir 一起挂载好后,就组成了容器的文件系统。

    OverlayFS 在 Linux 内核中还在不断的完善,比如我们在这一讲看到的在 kenel 5.4 中对异步 I/O 操作的缺失,这也是我们在使用容器文件系统的时候需要注意的。

     

     

     

    1. 在上面 OverlayFS 的例子的基础上,建立 2 个 lowerdir 的目录,并且在目录中建立相同文件名的文件,然后一起做一个 overlay mount,看看会发生什么?

    经过实验确认,只会在merge即联合挂载点里生成一个文件名,也就是说overlay文件系统为了省存储空间是做了同名文件合并优化。

     

    “merge层”相当于提供给用户进行交互的视图层;

    “upper层”相当于存储实际发生变动的地方;

    “lower层”是不变的,用户通过merge层视图对lower层文件的所有操作,都被重定向到“upper层”了,特殊的是删除操作,会在upper层生成一个特殊的c类型的文件来代表该文件被删。

    用户交互时只能对merge层的视图来操作。

    在merge层的视图中,上层覆盖下层同名文件,上下关系不只是upper和lower之间,即便在多个lower层中,也是上层覆盖下层。

     

    那么,merged/in_lower.txt ”里的值有可能是"I'm from lower2!"吗?

     

     

    2.aufs,是完全被废弃吗?aufs的废弃是指在内核层的废弃吗?之前安装docker时,时可以配置使用aufs 还是overlay2,也就是说内核层还未完全去除对aufs的支持吗

     aufs的代码从来就没有进入Linux内核的主干。

     

    3.本文中描述的现象,一个重要的原因是容器镜像里只有rootfs,没有Linux内核,宿主机上的所有容器是共用宿主机内核的。所以,当宿主机内核版本升级后,容器镜像并没有相应的升级,也会产生这个问题,文中并没有对这个知识要点说明。

    容器镜像中只有rootfs没有Linux内核是对的。

    在文章里,宿主机内核升级后,无论容器的镜像是否升级,都会有这个问题。文中的问题是overlayfs引起的,和镜像中的文件没有关系。

     

    4. CentOS7.x 容器节点 tmpfs文件类型与 Overlayfs文件类型的区别是什么?

    tmpfs只是用来存放一些临时文件的内存文件系统,比如/tmp目录可以使用tmpfs。

     

    5.假如我将一个卷(宿主机上的某个目录)挂在到容器文件系统中的某个目录,我在容器中对这个卷中的数据做读写操作,因为这个挂载路径也是容器文件系统的一部分,性能是不是也是会有影响的

    如果以volume的方式挂载到容器中,那么它就不是以overlayfs的文件系统。

    性能是否影响要看volume目录的位置在哪个物理磁盘上,和它共享物理磁盘的有哪些读写进程。

     

    6.对当前k8s和docker的相爱相杀有什么看法?未来docker市场会被podman取代吗?如果会的话,这个过程大概要多久?

    容器云平台里,k8s肯定是主流,用了k8s, 基本就不需要要docker了,启动容器的程序肯定是越简单越好。

     

     

    参考

     

    如何理解容器文件系统?

    https://time.geekbang.org/column/article/318173

     

    容器实战高手课/在实战中深入理解容器技术的本质

    https://time.geekbang.org/column/intro/365

     

    How containers work: overlayfs

    https://jvns.ca/blog/2019/11/18/how-containers-work--overlayfs

     

     

     

    展开全文
  • Worker Node 包含 ` docker:容器管理 kubelet:主要负责监视指派到它所在的 Pod,包括创建、修改、监控、删除等。 kube-proxy:主要负责为Pod对象提供代理 其他附加服务 分布式键值存储服务 Etcd 服务 etcd是什么:...

    写在前面


    • 看着Activiti官网的博客教程学Activiti7,需要用这个,之前看有些运维岗需要学,所以了解一下。
    • 笔记是看视频学的时候做的
    • 笔记内容包含对K8S的一个基本认识。
    • 建议学习的时候可以先了解一些基本的编排工具,类似docker-compose

    太多人活得不像自己。思想是别人的意见,生活是别人的模仿,情感是别人的引述。----王尔德


    一、kubernetes 概述

    1、kubernetes 基本介绍

    kubernetes 是什么

    kubernetes,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用Kubernetes目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。说白了,K8S,就是基于容器(Docker单机版)的集群管理平台,用于管理多个Docker的。Docker 非常适合在一台主机上运行容器,并为此提供所有必需的功能。但在当今的分布式服务环境中,真正的挑战是管理跨服务器和复杂基础架构的资源和工作负载。

    传统的应用部署方式是通过插件脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

    新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机容器能快速部署(虚拟机可以理解为硬件抽象,容器可以理解为系统抽象,共用Linux内核),由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。容器占用资源少部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在 buildrelease 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。

    KubernetesGoogle 开源的一个容器编排引擎

    KubernetesGoogle 开源的一个容器编排引擎,它支持自动化部署大规模可伸缩应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

    2、kubernetes 功能和架构

    2.1 概述

    Kubernetes 是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes 能够进行应用的自动化部署扩缩容。在 Kubernetes 中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。Kubernetes 积累了作为 Google 生产环境运行工作负载 15 年的经验,并吸收了来自于社区的最佳想法和实践。

    2.2 K8s 功能(Kubernetes 适用场景):

    • (1)自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器
    • (2)自我修复(自愈能力):当容器失败时,会对容器进行重启,当所部署的 Node 节点有问题时,会对容器进行重新部署重新调度,当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
    • (3)水平扩展:通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大规模剪裁
    • (3)服务发现:用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现负载均衡
    • (4)滚动更新:可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
    • (5)版本回退:可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
    • (6)密钥和配置管理:在不需要重新构建镜像的情况下,可以部署更新密钥应用配置,类似热部署
    • (7)存储编排:自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
    • (8)批处理:提供一次性任务,定时任务;满足批量数据处理和分析的场景

    2.3 应用部署架构分类

    (1) 无中心节点架构: GlusterFS
    (2) 有中心节点架构: HDFS、K8S

    2.4 k8s 集群架构

    在这里插入图片描述

    Pod
    #1》一个服务,是k8s管理的`最小单元`,k8s从 Pod中启动和管理容器;
    #2》由Pod来管理一组相同功能的容器;
    #3》一个Pod可以管理一个容器,也可以管理多个容器;
    
    

    2.5 k8s 集群架构节点角色功能

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

    Master Node:集群主控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;Master Node

    • API server (管理接口):是整个系统的对外接口,供客户端和其他组件调用,相当于“营业厅”
    • scheduler(调度器):负责对集群内部的资源进行调度,相当于“调度室”
    • controller (控制器):负责管理控制器,相当于“大总管”
    • etcd (键值对数据库):是一个键值存储仓库,存储集群的状态
      Worker Node:集群工作节点,运行用户业务应用容器;Worker Node 包含 `
    • docker:容器管理
    • kubelet:主要负责监视指派到它所在的 Pod,包括创建、修改、监控、删除等。
    • kube-proxy:主要负责为Pod对象提供代理
    • 其他附加服务
      在这里插入图片描述

    分布式键值存储服务

    Etcd 服务

    etcd是什么:

    • etcd 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于 Go 语言实现。在分布式系统中,各种服务的配置信息的管理分享,服务的发现是一个很基本同时也是很重要的问题。CoreOS 项目就希望基于 etcd 来解决这一问题。
    • 我们使用 etcd 来存储网络配置,解决容器互联互通的问题。

    2.6 K8S核心概念:

    通过Service统一入口进行访问,Controller用于创建PotPot是一组容器的集合。

    1. Pod:最小部署单元,一组容器的集合,共享网络,生命周期是短暂的
    2. controller确保预期的pod副本数量、无状态应用部署(无约定)、有状态应用部署(有特定条件)、确保所有的node运行同一个pod、一次性任务和定时任务
    3. Service定义一组pod的访问规则
    搭建k8环境平台规划

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

    服务器硬件配置要求搭建

    测试环境:

    • master:2核+4G+20G
    • node:4核+8G+40G
      生产环境:

    Kubernetes 架构

    在这里插入图片描述

    • 核心角色
      • master (管理节点)
      • node(计算节点)
      • image (镜像仓库)
    master 节点

    在这里插入图片描述

    • master 节点服务
      • API server (管理接口)
      • scheduler(调度器)
      • controller (控制器)
      • etcd (键值对数据库)

    Node 节点

    • node节点服务
      • docer
      • kubelet
      • kube-proxy
      • 其他附加服务

    二、kubernetes 集群搭建(kubeadm 方式)

    搭建方式

    目前生产部署 Kubernetes 集群主要有两种方式:

    • (1)kubeadm
      Kubeadm 是一个K8s 部署工具,提供kubeadm initkubeadm join,用于快速部署 Kubernetes 集群官方地址
    • (2)二进制包
      从 github 下载发行版的二进制包,手动部署每个组件,组成 Kubernetes 集群。
      Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可
      控,推荐使用二进制包部署 Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很
      多工作原理,也利于后期维护。

    kubeadm 部署方式介绍

    kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具能通过两条指令完成一个 kubernetes 集群的部署:

    • 第一、创建一个 Master 节点 kubeadm init
    • 第二, 将 Node节点加入到当前集群中 $ kubeadm join <Master 节点的 IP 和端口 >

    安装要求

    在开始之前,部署 Kubernetes 集群机器需要满足以下几个条件:

    • 一台或多台机器,操作系统 CentOS7.x-86_x64
    • 硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多
    • 集群中所有机器之间网络互通
    • 可以访问外网,需要拉取镜像
    • 禁止 swap 分区

    最终目标

    角色IP
    k8s-master192.168.31.61
    k8s-node1192.168.31.62
    k8s-node2192.168.31.63

    在这里插入图片描述

    6、系统初始化

    
    #关闭防火墙:
    $ systemctl stop firewalld
    $ systemctl disable firewalld
    
    #关闭 selinux:
    $ sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
    $ setenforce 0 # 临时
    
    # swap:
    $ swapoff -a # 临时
    $ vim /etc/fstab # 永久
    
    # 主机名:
    $ hostnamectl set-hostname <hostname>
    
    #  在 master 添加 hosts:
    $ cat >> /etc/hosts << EOF
    192.168.31.61 k8s-master
    192.168.31.62 k8s-node1
    192.168.31.63 k8s-node2
    EOF
    
    #将桥接的 IPv4 流量传递到 iptables 的链:
    $ cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    $ sysctl --system # 生效
    
    #时间同步:
    $ yum install ntpdate -y
    $ ntpdate time.windows.com
    

    7、所有节点安装 Docker/kubeadm/kubelet

    Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。

    #(1)安装 Docker
    $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    $ yum -y install docker-ce-18.06.1.ce-3.el7
    $ systemctl enable docker && systemctl start docker
    $ docker --version
    
    #(2)添加阿里云 YUM 软件源
    #设置仓库地址
    $ cat > /etc/docker/daemon.json << EOF
    {
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    }
    EOF
    #添加 yum 源
    $ cat > /etc/yum.repos.d/kubernetes.repo << EOF
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
    https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
    #(3)安装 kubeadm,kubelet 和 kubectl
    $ yum install -y kubelet kubeadm kubectl
    $ systemctl enable kubelet
    

    8、部署 Kubernetes Master

    #(1)在 192.168.31.61(Master)执行
    $ kubeadm init \
    --apiserver-advertise-address=192.168.31.61 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.17.0 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16
    #由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。
    
    #(2)使用 kubectl 工具:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    $ kubectl get nodes
    

    9、安装 Pod 网络插件(CNI)

    $ kubectl apply –f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml
    #检查一下
    kubect1 get pods -n kube-system
    

    确保能够访问到 quay.io 这个 registery。如果 Pod 镜像下载失败,可以改这个镜像地址

    10、加入 Kubernetes Node

    #(1)在 192.168.31.62/63(Node)执行
    向集群添加新节点,执行在 kubeadm init 输出的 kubeadm join 命令:
    $ kubeadm join 192.168.31.61:6443 --token esce21.q6hetwm8si29qxwn \
    --discovery-token-ca-cert-hash
    sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
    

    11、测试 kubernetes 集群

    #在 Kubernetes 集群中创建一个 pod,验证是否正常运行:
    $ kubectl create deployment nginx --image=nginx
    $ kubectl expose deployment nginx --port=80 --type=NodePort
    $ kubectl get pod,svc
    #访问地址:http://NodeIP:Port
    

    三、kubernetes 集群搭建(二进制方式)

    这个先不看

    四、kubernetes 集群 YAML 文件详解

    1、YAML 文件概述

    k8s 集群中对资源管理资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文件,通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。

    3、资源清单描述方法

    (1)在 k8s 中,一般使用 YAML 格式的文件来创建符合我们预期期望的 pod,这样的 YAML文件称为资源清单。

    必须存在的属性(必须写)

    参数名字段类型说明默认值
    apiVersionString这里是指的是K8S API的版本,目前基本上是v1,可以用 kubectl api-versions 或者 kubectl explain pod 命令查询
    kindString这里指的是yaml文件定义的资源类型和角色,比如: Pod
    metadataObject元数据对象,固定值就写metadata
    metadata.nameString元数据对象的名字,这里由我们编写,比如命名Pod的名字
    metadata.namespaceString元数据对象的命名空间,由我们自身定义default
    metadata.labelsmap[string]string键值数据,常被用作挑选条件
    specObject 详细定义对象,固定值就写Spec
    spec.containers[]List这里是Spec对象的容器列表定义,是个列表
    spec.containers[].nameString这里定义容器的名字
    spec.containers[].imageString这里定义要用到的镜像名称,如果镜像的标签是 latest,每次使用该镜像都会从远程下载
    展开全文
  • 容器操作系统 荣涛 2021年11月8日 文档修改日志 日期 修改内容 修改人 备注 2021年11月8日 创建 荣涛 2021年11月9日 添加 荣涛 Fedora CoreOS 1. 引言 1.1. 什么是容器 Linux? 基于容器的基础设施的...
  • dokcer容器的文件系统学习
  • 学生管理系统(Java版)

    千次阅读 多人点赞 2021-10-05 10:37:42
    学生管理系统(Java版) 前言:这个是大二做的课设(还是学生管理系统…),理论上虽然是4个人一组一起做的,但是,注意这个“但是”,还是我一个人承担了所有…代码和文档基本都是我一个人写的,当初直接肝得吐血,...
  • 关于样品管理系统

    2021-02-16 21:59:21
    2014年,随着华大的业务量不断提升,样品量连创新高,内部急需迫切对样品进行统一、标准化管理,当时我也是临危受命,组成八人小分队去深圳和武汉样品中心调研以便帮助华大制订解决方案,说实话当时心还是有点慌的。...
  • java实现银行管理系统

    千次阅读 2021-02-12 09:52:24
    Bank类 package First; import java.util.TreeSet; //银行类 public class Bank { private String Bankname = "坑对对... //后台操作系统 //后台管理员 public class Operate { Scanner sc = new Scanner(System.in); ...
  • 容器部署项目这一章我们引入docker,采用docker容器的方式部署我们的项目。首先需要有一个linux环境,并且安装 java 和 maven 以及 docker 环境,这个教程多如牛毛,不再赘述。这里以 kitty-monitor 为例。添加配置...
  • 这个系统的主要有三个角色权限,管理员、老师、学生,系统功能模块包括用户管理、班级信息管理、教师信息管理、学生信息管理、科目信息管理、成绩信息管理。 根据本系统的研究现状和发展趋势,系统从需求分析、结构...
  • 概述基于java + swing + JFrame 的图书馆管理系统,租车,还车,管理员管理用户,付款等。部分代码public class Login extends JFrame {private static final long serialVersionUID = 1L;/*** 登录窗体*/public ...
  • java课程设计仓库管理系统课程设计报告(本科)课程:Java学号:姓名:班级:教师: 时间:2014.11-2014.12计算机学院设计名称: 仓库管理系统设计内容、目的与要求:随着社会发展和人们生活水平、质量的提高,资源...
  • Java学生成绩管理系统实验报告

    千次阅读 2021-03-08 06:12:55
    实验名称 实验类型 实验编号学生成绩管理系统 □验证 实验学时 √综合 1 分组号指导教师 8+10 1 实验日期 实验时间 实验地点 6A-413一、 实验目的和要求(1) 掌握 java 的基本数据类型;掌握数组的定义和使用; (2) ...
  • 一、概述酒店管理系统,类 Maven 项目结构。项目配置项为:服务器:apache-tomcat-9.0.0.M26数据库:Mysql编辑器:IntelliJ IDEA二、介绍JavaWeb 作业,即简单的酒店管理系统。后端 Java 部分采用 MVC 形式目前完成...
  • C++实现学生成绩管理系统

    千次阅读 多人点赞 2021-03-12 23:06:06
    学生成绩管理系统 在下小白一枚,给各位大神奉上源码! 拒绝一切花里胡哨,所以我没有美化菜单和背景。 包含读写文件操作和vector容器操作。 希望各位点个赞! #include<iostream> using namespace std; #...
  • python实现超市商品销售管理系统

    千次阅读 2021-02-10 08:34:31
    本文实例为大家分享了python超市商品销售管理系统的具体代码,供大家参考,具体内容如下class Goods(object):def __init__(self, id, name, price):self.id = idself.name = nameself.price = pricedef __str__(self...
  • Rancher 是企业级多集群Kubernetes管理平台,一个为DevOps团队提供的完整的Kubernetes与容器管理解决方案。它解决了多Kubernetes集群管理、操作和安全的难题,同时为DevOps团队提供了运行容器化工作负载的管理工具。...
  • 学生管理系统登录界面package javaapplication10;import java.awt.Color;import java.awt.Container;import java.awt.Cursor;import java.awt.Font;import java.awt.Image;import java.awt.event.ActionEvent;import...
  • 常用命令如下表:选项 描述ls 列出容器inspect 查看一个或多个容器详细信息exec 在运行容器中执行命令commit 创建一个新镜像来自一个容器cp 拷贝文件/文件夹到一个容器logs 获取一个容器日志port 列出或指定容器端口...
  • 而本兼职管理系统管理系统是利用计算机技术专门针对大学生找兼职而开发的,为大学生提供非常有效的兼职信息和服务。【关键词】 兼职管理 大学生 就业 计算机一、 系统简介该兼职管理系统主要涉及的使...
  • System.out.println("/t/t Java学生成绩管理系统1.1"); System.out.println("/t/t请用学号查找,修改,删除数据"); System.out.println(); System.out.println("/t####################################/n"); System....
  • 展开全部package 学生管理界面32313133353236313431303231363533e78988e69d8331333236376538;import java.awt.BorderLayout;import java.awt.Checkbox;import java.awt.CheckboxGroup;import java.awt.Container;...
  • 基于javaweb的ssm学校教务管理系统(管理员,教师,学生)文章结构一、开发框架及业务方向1.开发环境2.开发框架3.整体业务二、项目结构及页面展示1.项目整体结构![在这里插入图片描2.用户页面3.管理员页面***需要...
  • 这个系统的主要有三个角色权限,管理员、老师、学生,系统功能模块包括用户管理、班级信息管理、教师信息管理、学生信息管理、科目信息管理、成绩信息管理。 根据本系统的研究现状和发展趋势,系统从需求分析、结构...
  • 党员发展管理系统

    千次阅读 2021-03-16 21:04:58
    本文为软件工程课程设计的党员发展管理系统的实验,用于给大伙参一下,共五部分,设置了跳转,方便大家跳转到对应的地方,内容比较多,不足之处希望大伙提出来 目录 第一部分——项目小组规约 1.项目名称:党员发展...
  • 目录 一、 引言(Introduction) 3 ...三、 计算机系统支持及开发环境 7 1. 开发技术: 7 2. 开发硬件 7 3. 服务器环境 7 4. 软件 7 四、 需求分析 8 1. 该系统的用例图 8 2. 结构图 13 .
  • 高校宿舍管理系统

    千次阅读 2021-03-14 12:43:32
    高校宿舍管理系统 1.项目概况 ​ 提到宿舍,现在无论是学校,还是工厂,都是在熟悉不过的了,学生宿舍楼,职工教员工,职工宿舍楼等等,每一栋楼房都有很多的房间,每个宿舍分配了多少个床位,住着什么人,那些床位...
  • 虚拟机与容器的混合管理实践

    千次阅读 2021-11-11 18:56:23
    容器的优势是敏捷和高性能,然而由于需要共享宿主机内核,隔离不彻底等原因,当用户需要修改很多定制的内核参数或者在低版本的 Linux 宿主机上运行高版本的 Linux 容器,或者只是需要隔离性更高时,在容器上都是难以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 453,201
精华内容 181,280
关键字:

容器管理系统