清朝云资源网

博客

  • 容器编排 Docker-compose 详解


    共计 11317 个字符,预计需要花费 29 分钟才能阅读完成。

    Docker-Compose 的编排结构

    Docker-Compose 将所管理的容器分为三层

    • 工程(project):一个工程包含多个服务
    • 服务(service):一个服务当中可包括多个容器实例
    • 容器(container)

    Docker-Compose 运行目录下的所有文件(docker-compose.ymlextends文件环境变量文件等)组成一个工程,若无特殊指定 工程名即为当前目录名

    Docker Compose 的核心就是其配置文件,采用 YAML 格式,默认为 docker-compose.yml

    docker-compose.yml 语法说明

    1、image

    指定为镜像名称或镜像ID。

    如果镜像不存在,Compose将尝试从互联网拉取这个镜像,例如: image: ubuntu image: orchardup/postgresql image: a4bc65fd

    指定服务的镜像名,若本地不存在,则 Compose 会去仓库拉取这个镜像:

    services:
      web:
        image: nginx

    2、build

    a.情况1

    指定Dockerfile所在文件夹的路径。Compose将会利用他自动构建这个镜像,然后使用这个镜像。

    services:
      web:
        build: ./nginx

    b.情况2(高版本)

    services:
      web:
        build:
          context: ./nginx
          dockerfile: Dockerfile
          args:
          labels:

    3、command

    覆盖容器启动后默认执行的命令。 command: bundle exec thin -p 3000

    services:
      web:
        command: ["nginx", "-g", "daemon off;"]

    4、links

    链接到其他服务容器,使用服务名称(同时作为别名)或服务别名(SERVICE:ALIAS)都可以

    services:
      web:
        image: nginx
        links:
          - db
          - db:database
          - redis

    注意:使用别名会自动在服务器中的/etc/hosts 里创建,如:172.17.0.2 db,相应的环境变量也会被创建。

    5、restart

    重启策略。例:

    services:
      web:
        image: nginx
          restart: "no"
          #restart: always
          #restart: on-failure
          #restart: unless-stopped

    6、ports

    暴露端口信息。格式

    宿主机器端口:容器端口(HOST:CONTAINER)

    或者仅仅指定容器的端口(宿主机器将会随机分配端口)都可以。

    services:
      web:
        image: nginx
        ports:
        - "3306"
        - "8080:80"
        - "127.0.0.1:8090:8001"

    注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。

    7、expose

    暴露端口,与posts不同的是expose只可以暴露端口而不能映射到主机,只供外部服务连接使用;仅可以指定内部端口为参数。

    services:
      web:
        image: nginx
        expose:
        - "3000"
        - "8000"

    8、volumes

    设置卷挂载的路径。

    可以设置宿主机路径:容器路径(host:container)或加上访问模式(host:container:ro)ro就是readonly的意思,只读模式。

    services:
      mysql:
        image: mysql
        volumes:
        - /var/lib/mysql:/var/lib/mysql
        - /configs/mysql:/etc/configs/:ro

    9、volunes_from

    挂载另一个服务或容器的所有数据卷。

    services:
      web:
        image: nginx
        volumes_from:
        - service_name
        - container_name

    10、environment

    设置环境变量。可以属于数组或字典两种格式。

    如果只给定变量的名称则会自动加载它在Compose主机上的值,可以用来防止泄露不必要的数据

    services:
      web:
        image: nginx
        environment:
          RACK_ENV: development
          SESSION_SECRET

    11、env_file

    从文件中获取环境变量,可以为单独的文件路径或列表。 如果通过docker-compose -f FILE指定了模板文件,则env_file中路径会基于模板文件路径。 如果有变量名称与environment指令冲突,则以后者为准。

    services:
      web:
        image: nginx
        env_file: .env
        env_file:
        - ./common.env
        - ./apps/web.env
        - /opt/secrets.env

    环境变量文件中每一行都必须有注释,支持#开头的注释行。

    # common.env: Set Rails/Rack environment
    RACK_ENV=development

    12、devices

    指定设备映射列表。

    services:
      web:
        image: nginx
        devices:
          - "/dev/ttyUSB0:/dev/ttyUSB0"

    13、networks

    docker-compose 创建自定义网络

    services:
      web:
        image: nginx
        networks:
        - app_net
    networks:
     app_net:

    14、pid

    和宿主机系统共享进程命名空间,打开该选项的容器可以相互通过进程id来访问和操作。

    services:
      web:
        image: nginx
        pid: "host"

    15、dns

    #配置DNS服务器。可以是一个值,也可以是一个列表。
    services:
      web:
        image: nginx
        #dns: 8.8.8.8
        dns:
        - 8.8.8.8
        - 9.9.9.9

    16、cap_add,cap_drop

    添加或放弃容器的Linux能力(Capability)。

    services:
      web:
        image: nginx
        cap_add:
        - ALL
        cap_drop:
        - NET_ADMIN
        - SYS_ADMIN

    17、dns_search

    配置DNS搜索域。可以是一个值也可以是一个列表。

    services:
      web:
        image: nginx
        #dns_search: example.com
        dns_search:
        - domain1.example.com
        \ - domain2.example.com
        working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged, restart, stdin_open, tty, cpu_shares

    这些都是和 docker run 支持的选项类似。

    cpu_shares: 73
    working_dir: /code
    entrypoint: /code/entrypoint.sh
    user: postgresql
    hostname: foo
    domainname: foo.com
    mem_limit: 1000000000
    privileged: true
    restart: always
    stdin_open: true
    tty: true

    18、healthcheck

    健康检查,这个非常有必要,等服务准备好以后再上线,避免更新过程中出现短暂的无法访问。

    services:
      web:
        image: nginx
        healthcheck:
          test: ["CMD", "curl", "-f", "http://localhost/"]
          interval: 5s
          timeout: 3s

    其实大多数情况下健康检查的规则都会写在 Dockerfile 中:

    FROM nginx
    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
    HEALTHCHECK --interval=5s --timeout=3s CMD curl -f http://localhost/alive || exit 1

    19、depends_on

    依赖的服务,优先启动,例:

    services:
      web:
        image: nginx
        depends_on:
          - redis

    20、network_mode

    设置网络模式。例:

    service: 
      webapp:
        image: nginx
        network_mode: "host"
        #network_mode: "bridge"
        #network_mode: "none"
        #network_mode: "service:[service name]"
        #network_mode: "container:[container name/id]"

    21、external_links

    链接到docker-compose.yml外部的容器,甚至并非是Compose管理的容器。参数格式和links类似。 external_links:

    services:
      web:
        image: nginx
        external_links:
        - redis_1
        - project_db_1:mysql
        - project_db_2:sqlserver

    2x、deploy

    部署相关的配置都在这个节点下,例:

    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
        max_attempts: 3
      update_config:
        delay: 5s
        order: start-first # 默认为 stop-first,推荐设置先启动新服务再终止旧的
      resources:
        limits:
          cpus: "0.50"
          memory: 1g
    deploy:
      mode: global # 不推荐全局模式(仅个人意见)。
      placement:
        constraints: [node.role == manager]

    若非特殊服务,以上各节点的配置能够满足大部分部署场景了。

    docker-compose.yml实例

    version: '3.5'
    services:
      nacos1:
        restart: always
        image: nacos/nacos-server:${NACOS_VERSION}
        container_name: nacos1
        privileged: true
        ports:
         - "8001:8001"
         - "8011:9555"
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 1024M 
        env_file: 
         - ./nacos.env 
        environment:
            NACOS_SERVER_IP: ${NACOS_SERVER_IP_1}
            NACOS_APPLICATION_PORT: 8001
            NACOS_SERVERS: ${NACOS_SERVERS}     
        volumes:
         - ./logs_01/:/home/nacos/logs/
         - ./data_01/:/home/nacos/data/
         - ./config/:/home/nacos/config/
        networks:
          - ha-network-overlay
      nacos2:
        restart: always
        image: nacos/nacos-server:${NACOS_VERSION}
        container_name: nacos2
        privileged: true
        ports:
         - "8002:8002"
         - "8012:9555"
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 1024M    
        env_file: 
         - ./nacos.env     
        environment:
            NACOS_SERVER_IP: ${NACOS_SERVER_IP_2}
            NACOS_APPLICATION_PORT: 8002
            NACOS_SERVERS: ${NACOS_SERVERS}
        volumes:
         - ./logs_02/:/home/nacos/logs/
         - ./data_02/:/home/nacos/data/
         - ./config/:/home/nacos/config/
        networks:
          - ha-network-overlay
      nacos3:
        restart: always
        image: nacos/nacos-server:${NACOS_VERSION}
        container_name: nacos3
        privileged: true
        ports:
         - "8003:8003"
         - "8013:9555"
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 1024M    
        env_file: 
         - ./nacos.env 
        environment:
            NACOS_SERVER_IP: ${NACOS_SERVER_IP_3}
            NACOS_APPLICATION_PORT: 8003
            NACOS_SERVERS: ${NACOS_SERVERS}         
        volumes:
         - ./logs_03/:/home/nacos/logs/
         - ./data_03/:/home/nacos/data/
         - ./config/:/home/nacos/config/
        networks:
          - ha-network-overlay
    networks:
       ha-network-overlay:
         external: true

    Docker-compose常用命令

    常用命令清单

    docker-compose 命令 --help                     获得一个命令的帮助
    docker-compose up -d nginx                     构建启动nignx容器
    docker-compose exec nginx bash                 登录到nginx容器中
    docker-compose down                            此命令将会停止 up 命令所启动的容器,并移除网络
    docker-compose ps                              列出项目中目前的所有容器
    docker-compose restart nginx                   重新启动nginx容器
    docker-compose build nginx                     构建镜像
    docker-compose build --no-cache nginx          不带缓存的构建
    docker-compose top                             查看各个服务容器内运行的进程
    docker-compose logs -f nginx                   查看nginx的实时日志
    docker-compose images                          列出 Compose 文件包含的镜像
    docker-compose config                          验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
    docker-compose events --json nginx             以json的形式输出nginx的docker日志
    docker-compose pause nginx                     暂停nignx容器
    docker-compose unpause nginx                   恢复ningx容器
    docker-compose rm nginx                        删除容器(删除前必须关闭容器,执行stop)
    docker-compose stop nginx                      停止nignx容器
    docker-compose start nginx                     启动nignx容器
    docker-compose restart nginx                   重启项目中的nignx容器
    docker-compose run --no-deps --rm php-fpm php -v   在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器

    1、Docker-Compose

    docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]

    命令选项如下:

    • -f,–file FILE指定Compose模板文件,默认为docker-compose.yml,可以多次指定。
    • -p,–project-name NAME指定项目名称,默认将使用所在目录名称作为项目名。
    • -x-network-driver 使用Docker的可拔插网络后端特性(需要Docker 1.9+版本) -x-network-driver DRIVER指定网络后端的驱动,默认为bridge(需要Docker 1.9+版本)
    • -verbose输出更多调试信息
    • -v,–version打印版本并退出

    2、docker-compose up

    这个命令一定要记住,每次启动都要用到,只要学会使用的人记住这个就好了

    docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]

    选项包括:

    • -d 在后台运行服务容器
    • –no-color 不使用颜色来区分不同的服务的控制输出
    • –no-deps 不启动服务所链接的容器
    • –force-recreate 强制重新创建容器,不能与–no-recreate同时使用 –no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
    • –no-build 不自动构建缺失的服务镜像
    • –build 在启动容器前构建服务镜像
    • –abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
    • -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
    • –remove-orphans 删除服务中没有在compose文件中定义的容器
    • –scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数
      docker-compose up 启动所有服务
      docker-compose up -d 在后台所有启动服务
    • -f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
      docker-compose -f docker-compose.yml up -d

    3、docker-compose ps

    docker-compose ps [options] [SERVICE...]

    docker-compose ps 列出项目中目前的所有容器

    4、docker-compose stop

    docker-compose stop [options] [SERVICE...]

    选项包括:

    • -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
      docker-compose stop 停止正在运行的容器,可以通过docker-compose start 再次启动

    5、docker-compose -h

    docker-compose -h 查看帮助

    6、docker-compose down

    docker-compose down [options]

    停止和删除容器、网络、卷、镜像。
    选项包括:

    • –rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
    • -v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
    • –remove-orphans,删除服务中没有在compose中定义的容器
      docker-compose down 停用移除所有容器以及网络相关

    7、docker-compose logs

    docker-compose logs [options] [SERVICE...]

    查看服务容器的输出。
    默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。

    8、docker-compose build

    docker-compose build [options] [--build-arg key=val...] [SERVICE...]

    构建(重新构建)项目中的服务容器。
    选项包括:

    • –compress 通过gzip压缩构建上下环境
    • –force-rm 删除构建过程中的临时容器
    • –no-cache 构建镜像过程中不使用缓存
    • –pull 始终尝试通过拉取操作来获取更新版本的镜像
    • -m, –memory MEM为构建的容器设置内存大小
    • –build-arg key=val为服务设置build-time变量
      服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务

    9、docker-compose pull

    docker-compose pull [options] [SERVICE...]

    拉取服务依赖的镜像。
    选项包括:

    • –ignore-pull-failures,忽略拉取镜像过程中的错误
    • –parallel,多个镜像同时拉取
    • –quiet,拉取镜像过程中不打印进度信息

    10、docker-compose restart

    docker-compose restart [options] [SERVICE...]

    重启项目中的服务。
    选项包括:

    • -t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒)

    11、docker-compose rm

    docker-compose rm [options] [SERVICE...]

    删除所有(停止状态的)服务容器。
    选项包括:

    • –f, –force,强制直接删除,包括非停止状态的容器
    • -v,删除容器所挂载的数据卷
      docker-compose rm 删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。

    12、docker-compose start

    docker-compose start [SERVICE...]

    启动已经存在的服务容器。

    13、docker-compose run

    docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]

    在指定服务上执行一个命令。
    docker-compose run ubuntu ping www.baidu.com 在指定容器上执行一个ping命令。

    14、docker-compose scale

    docker-compose scale web=3 db=2 设置指定服务运行的容器个数。通过service=num的参数来设置数量

    15、docker-compose pause

    docker-compose pause [SERVICE...]

    暂停一个服务容器

    16、docker-compose kill

    docker-compose kill [options] [SERVICE...]

    通过发送SIGKILL信号来强制停止服务容器。 支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号: docker-compose kill -s SIGINT

    17、dokcer-compose config

    docker-compose config [options]

    验证并查看compose文件配置。
    选项包括:

    • –resolve-image-digests 将镜像标签标记为摘要
    • -q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
    • –services 打印服务名,一行一个
    • –volumes 打印数据卷名,一行一个

    18、docker-compose create

    docker-compose create [options] [SERVICE...]

    为服务创建容器。
    选项包括:

    • –force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数
    • –no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数
    • –no-build:不创建镜像,即使缺失
    • –build:创建容器前,生成镜像

    19、docker-compose exec

    docker-compose exec [options] SERVICE COMMAND [ARGS...]

    选项包括:

    • -d 分离模式,后台运行命令。
    • –privileged 获取特权。
    • –user USER 指定运行的用户。
    • -T 禁用分配TTY,默认docker-compose exec分配TTY。
    • –index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash ,web服务中包含多个容器

    20、docker-compose port

    docker-compose port [options] SERVICE PRIVATE_PORT

    显示某个容器端口所映射的公共端口。
    选项包括:

    • –protocol=proto,指定端口协议,TCP(默认值)或者UDP
    • –index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)

    21、docker-compose push

    docker-compose push [options] [SERVICE...]

    推送服务依的镜像。
    选项包括:

    • –ignore-push-failures 忽略推送镜像过程中的错误

    22、docker-compose unpause

    docker-compose unpause [SERVICE...]

    恢复处于暂停状态中的服务。

    23、docker-compose version

    docker-compose version

    打印版本信息。

    查看日志

    docker-compose logs 查看实时日志(日志最后的N行、某刻后日志) 实践笔记

    参数说明

    View output from containers.
    
    Usage: logs [options] [SERVICE...]
    
    Options:
        --no-color          Produce monochrome output.
        -f, --follow        Follow log output.  实时输出日志,最后一行为当前时间戳的日志
        -t, --timestamps    Show timestamps. 显示时间戳
        --tail="all"        Number of lines to show from the end of the logs for each container.
              显示最后多少行日志, 默认是all (如: -tail=10 : 查看最后的 10 行日志。)

    全屏滚到底部结束

    docker-compose logs

    rabbitmq | 2021-01-08 06:33:09.091 [error] <0.1007.2> Channel error on connection <0.25180.0>
    rabbitmq | operation basic.ack caused a channel exception precondition_failed: unknown delivery tag

    全屏滚到底部并继续持续输出日志

    docker-compose logs -f

    rabbitmq | 2021-01-08 06:33:09.091 [error] <0.1007.2> Channel error on connection <0.25180.0>
    rabbitmq | operation basic.ack caused a channel exception precondition_failed: unknown delivery tag

    相当于

    tail -f

    全屏滚到底部并继续持续输出日志并显示时间戳

    docker-compose logs -f -t

    rabbitmq | 2021-01-08T06:33:09.092091217Z 2021-01-08 06:33:09.091 [error] <0.1007.2> Channel
    rabbitmq | 2021-01-08T06:33:09.092109187Z operation basic.ack caused a channel exception

    全屏滚到底部显示最后N行并继续持续输出日志并显示时间戳

    docker-compose logs -f -t –tail=10

    rabbitmq | 2021-01-08T06:33:09.092091217Z 2021-01-08 06:33:09.091 [error] <0.1007.2> Channel
    rabbitmq | 2021-01-08T06:33:09.092109187Z operation basic.ack caused a channel exception

    提醒:本文发布于867天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室

  • 03月11日,星期二, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 中方回应菲前总统杜特尔特携女访港 外交部驻港公署回应菲前总统杜特尔特携女访港:据了解,杜特尔特先生及莎拉女士此次来港系私人度假行程。

    2. 苦等丈夫80多年 103岁的她去世 3月8日,苦等丈夫80余年的103岁杜虎珍奶奶去世。家人发讣告:将继承老人的遗志,继续寻找黄俊夫或其后代。

    3. 三大通道聚焦这些“大事小情” 两会期间,人民大会堂内“代表通道”“委员通道”“部长通道”不断“升温”。代表、委员们讲述履职故事,部门负责人回应热点话题。

    4. 国家版减肥指南来了 健康减肥该怎么吃?此前,国家卫健委发布《成人肥胖食养指南(2024年版)》,手把手教你科学减肥。

    5. 26岁小伙做泰山陪爬年入30多万 3月10日消息,26岁小伙毕业做泰山陪爬,大概一天陪爬两次,一年赚30多万。白天陪爬一次600元,晚上700元。

    6. 00后用DeepSeek1天卖出3.3亿 近日,00后主播用DeepSeek直播1天卖出3.3亿元。据悉,该团队早就开始用AI整理直播话术,让工作效率大大提升。

    7. 首批小米SU7 Ultra车标被抠 3月9日,有网友在街头偶遇一辆黄色小米SU7Ultra,令人意外的是,这辆车的车标已经被抠掉了。

    8. 老人29块网购电三轮 快递巴掌大 大姨花20多元网购电三轮,小伙帮找快递“仅巴掌大”。

    9. 乡村如何吸引并留住年轻人 如何进一步保障灵活就业人员参加社会保险?乡村如何吸引年轻人?孩子上技校以后能好找工作吗?代表委员对民生、就业、体育等相关问题进行了解答。

    10. 吴彦祖英语课遭吐槽 销售额超500万 近日,吴彦祖推出口语课程,5天销售额超500万元。有网友吐槽:10分钟里只有5分钟是他讲。

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 有哪些当前科学理论无法解释,却又被明确承认的物理现象?
    链接: https://daily.zhihu.com/story/9779581
    ———————-
    标题: 动物咬住幼崽后颈就会停止乱动,进入搬运模式,人类幼仔有同样的效果吗?
    链接: https://daily.zhihu.com/story/9779567
    ———————-
    标题: 都说中国缺失峡湾地貌,那么有没有哪些地貌「几乎是中国独有的」?
    链接: https://daily.zhihu.com/story/9779576
    ———————-
    标题: 瞎扯 · 如何正确地吐槽
    链接: https://daily.zhihu.com/story/9779584
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 美的被曝强制 18 点 20 下班:一到时间 HR 就催促各部门抓紧下班
    发布时间: 2025-03-10T10:19:09.043
    新闻简介: 美的从这周起就开始提倡各部门领导严谨控制加班,规定 18:20 不允许有人还在公司加班。(互联网坊间八卦)#大疆不强制9点上班开始强制9点下班#
    ———————-
    标题: 美的回应“强制 18 点 20 下班”:严禁形式主义加班,身体力行践行“反内卷”
    发布时间: 2025-03-10T12:36:31.843
    新闻简介: 美的集团称,早在今年初,美的就明确了关于简化工作方式要求的“六条禁令”,其中就包括“严禁下班时间开会、形式主义加班”。
    ———————-
    标题: 苹果 iPhone 17 系列革新设计:Pro 与 Air 双线出击,新机模上手
    发布时间: 2025-03-10T09:06:24.413
    新闻简介: Pro与Air的明显区分表明,苹果正致力于为用户提供更多选择和专业化体验。iPhone 17 Pro面向追求极致性能和摄影体验的用户,而iPhone 17 Air则成为注重轻便、时尚和实用性的理想选择。
    ———————-
    标题: 苹果 AirPods 新突破:内置摄像头,引领耳机智能交互新时代
    发布时间: 2025-03-10T06:57:05.297
    新闻简介: 苹果正在研发内置摄像头的AirPods,旨在通过耳机摄像头获取环境数据,提供更智能的交互体验。这一创新举措将使用户无需依赖手机,直接通过耳机摄像头实现类似功能,如导航建议。预计产品将在2至3年内面世。#AppleIntelligence #AirPods #科技前沿#
    ———————-
    标题: 8499 元起,华为 Mate 70 Pro+ / RS 非凡大师部分版本也开启现货原价“敞开卖”模式
    发布时间: 2025-03-10T17:19:45.49
    新闻简介: 华为 Mate 70 Pro+ 和 RS 非凡大师现已开启“敞开卖”模式,售价从8499元起。Mate 70 Pro+提供多种色彩选择,RS非凡大师则以其独特设计和材质吸引眼球。详情点击链接了解更多。#华为Mate70# #科技新品#
    ———————-
    标题: 苹果 iPhone 17 系列前瞻:设计革新、全系高刷、自研 Wi-Fi 芯片…
    发布时间: 2025-03-10T20:07:45.553
    新闻简介: 考虑到距离 iPhone 17 发布,尚且还有半年左右的时间,或许一切还会有变化。
    ———————-
    标题: 苹果 M4 Ultra 芯片恐将永远缺席,三大原因揭秘
    发布时间: 2025-03-10T06:43:38.6
    新闻简介: UltraFusion技术的缺失、苹果的官方表态以及生产挑战与成本问题,都使得M4 Ultra芯片的发布变得不太可能。或许我们将在M5 Max芯片上看到UltraFusion技术的回归,为M5 Ultra芯片铺平道路。
    ———————-
    标题: 零跑 B10 预售:激光雷达智驾进入 15 万内,10.98 万-13.98 万元
    发布时间: 2025-03-10T19:57:01.74
    新闻简介: 申报信息显示,该车长宽高分别为 4515*1885*1655mm,轴距为 2735mm,132kW 和 160kW 两个单电机版本。
    ———————-
    标题: 百世集团退市,宣布完成私有化交易
    发布时间: 2025-03-10T11:01:40.243
    新闻简介: 2021 年底,百世集团宣布以 68 亿元转让国内快递业务给极兔速递,百世集团将集中精力和资源,加快业务发展,推动供应链、快运、国际业务的深度融合,打造国际化的综合智慧供应链服务。
    ———————-
    标题: 消息称苹果 iPhone 17 Air 为轻薄机身直接取消实体 SIM 卡槽
    发布时间: 2025-03-10T14:03:56.647
    新闻简介: 博主 @数码闲聊站 今日发文爆料某厂年底的 SM8850(预计为第二代骁龙 8 至尊版)系列新机在测 eSIM 功能,国内暂不确实是否上市(具体厂商未指明)。另外,博主还透露 iPhone 17 Air 为轻薄机身直接取消实体 SIM 卡槽。
    ———————-
    标题: 领克 900 旗舰 SUV 展车到店:车长超 5.2 米,二季度上市
    发布时间: 2025-03-10T08:08:02.013
    新闻简介: 领克900旗舰SUV展车已到店,车长超5.2米,二季度上市。这款车基于SPA Evo大型电混车专属架构打造,搭载英伟达Thor芯片及自研浩瀚智驾,提供五种车身颜色。#领克900##旗舰SUV#
    ———————-
    标题: 二手平台“9.9 元小米 SU7 Ultra 车标”引热议,3D 打印仿品涉嫌侵权
    发布时间: 2025-03-10T15:05:26.763
    新闻简介: 小米SU7 Ultra的24K金碳纤维车标引发关注,,二手平台上出现大量3D打印仿品,售价9.9元起,涉嫌侵犯商标权。#小米SU7Ultra# #3D打印侵权#
    ———————-

    —- IT之家新闻 End —-

  • 03月11日,星期二, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 中方回应菲前总统杜特尔特携女访港 外交部驻港公署回应菲前总统杜特尔特携女访港:据了解,杜特尔特先生及莎拉女士此次来港系私人度假行程。

    2. 苦等丈夫80多年 103岁的她去世 3月8日,苦等丈夫80余年的103岁杜虎珍奶奶去世。家人发讣告:将继承老人的遗志,继续寻找黄俊夫或其后代。

    3. 三大通道聚焦这些“大事小情” 两会期间,人民大会堂内“代表通道”“委员通道”“部长通道”不断“升温”。代表、委员们讲述履职故事,部门负责人回应热点话题。

    4. 国家版减肥指南来了 健康减肥该怎么吃?此前,国家卫健委发布《成人肥胖食养指南(2024年版)》,手把手教你科学减肥。

    5. 26岁小伙做泰山陪爬年入30多万 3月10日消息,26岁小伙毕业做泰山陪爬,大概一天陪爬两次,一年赚30多万。白天陪爬一次600元,晚上700元。

    6. 00后用DeepSeek1天卖出3.3亿 近日,00后主播用DeepSeek直播1天卖出3.3亿元。据悉,该团队早就开始用AI整理直播话术,让工作效率大大提升。

    7. 首批小米SU7 Ultra车标被抠 3月9日,有网友在街头偶遇一辆黄色小米SU7Ultra,令人意外的是,这辆车的车标已经被抠掉了。

    8. 老人29块网购电三轮 快递巴掌大 大姨花20多元网购电三轮,小伙帮找快递“仅巴掌大”。

    9. 乡村如何吸引并留住年轻人 如何进一步保障灵活就业人员参加社会保险?乡村如何吸引年轻人?孩子上技校以后能好找工作吗?代表委员对民生、就业、体育等相关问题进行了解答。

    10. 吴彦祖英语课遭吐槽 销售额超500万 近日,吴彦祖推出口语课程,5天销售额超500万元。有网友吐槽:10分钟里只有5分钟是他讲。

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 有哪些当前科学理论无法解释,却又被明确承认的物理现象?
    链接: https://daily.zhihu.com/story/9779581
    ———————-
    标题: 动物咬住幼崽后颈就会停止乱动,进入搬运模式,人类幼仔有同样的效果吗?
    链接: https://daily.zhihu.com/story/9779567
    ———————-
    标题: 都说中国缺失峡湾地貌,那么有没有哪些地貌「几乎是中国独有的」?
    链接: https://daily.zhihu.com/story/9779576
    ———————-
    标题: 瞎扯 · 如何正确地吐槽
    链接: https://daily.zhihu.com/story/9779584
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 美的被曝强制 18 点 20 下班:一到时间 HR 就催促各部门抓紧下班
    发布时间: 2025-03-10T10:19:09.043
    新闻简介: 美的从这周起就开始提倡各部门领导严谨控制加班,规定 18:20 不允许有人还在公司加班。(互联网坊间八卦)#大疆不强制9点上班开始强制9点下班#
    ———————-
    标题: 美的回应“强制 18 点 20 下班”:严禁形式主义加班,身体力行践行“反内卷”
    发布时间: 2025-03-10T12:36:31.843
    新闻简介: 美的集团称,早在今年初,美的就明确了关于简化工作方式要求的“六条禁令”,其中就包括“严禁下班时间开会、形式主义加班”。
    ———————-
    标题: 苹果 iPhone 17 系列革新设计:Pro 与 Air 双线出击,新机模上手
    发布时间: 2025-03-10T09:06:24.413
    新闻简介: Pro与Air的明显区分表明,苹果正致力于为用户提供更多选择和专业化体验。iPhone 17 Pro面向追求极致性能和摄影体验的用户,而iPhone 17 Air则成为注重轻便、时尚和实用性的理想选择。
    ———————-
    标题: 苹果 AirPods 新突破:内置摄像头,引领耳机智能交互新时代
    发布时间: 2025-03-10T06:57:05.297
    新闻简介: 苹果正在研发内置摄像头的AirPods,旨在通过耳机摄像头获取环境数据,提供更智能的交互体验。这一创新举措将使用户无需依赖手机,直接通过耳机摄像头实现类似功能,如导航建议。预计产品将在2至3年内面世。#AppleIntelligence #AirPods #科技前沿#
    ———————-
    标题: 8499 元起,华为 Mate 70 Pro+ / RS 非凡大师部分版本也开启现货原价“敞开卖”模式
    发布时间: 2025-03-10T17:19:45.49
    新闻简介: 华为 Mate 70 Pro+ 和 RS 非凡大师现已开启“敞开卖”模式,售价从8499元起。Mate 70 Pro+提供多种色彩选择,RS非凡大师则以其独特设计和材质吸引眼球。详情点击链接了解更多。#华为Mate70# #科技新品#
    ———————-
    标题: 苹果 iPhone 17 系列前瞻:设计革新、全系高刷、自研 Wi-Fi 芯片…
    发布时间: 2025-03-10T20:07:45.553
    新闻简介: 考虑到距离 iPhone 17 发布,尚且还有半年左右的时间,或许一切还会有变化。
    ———————-
    标题: 苹果 M4 Ultra 芯片恐将永远缺席,三大原因揭秘
    发布时间: 2025-03-10T06:43:38.6
    新闻简介: UltraFusion技术的缺失、苹果的官方表态以及生产挑战与成本问题,都使得M4 Ultra芯片的发布变得不太可能。或许我们将在M5 Max芯片上看到UltraFusion技术的回归,为M5 Ultra芯片铺平道路。
    ———————-
    标题: 零跑 B10 预售:激光雷达智驾进入 15 万内,10.98 万-13.98 万元
    发布时间: 2025-03-10T19:57:01.74
    新闻简介: 申报信息显示,该车长宽高分别为 4515*1885*1655mm,轴距为 2735mm,132kW 和 160kW 两个单电机版本。
    ———————-
    标题: 百世集团退市,宣布完成私有化交易
    发布时间: 2025-03-10T11:01:40.243
    新闻简介: 2021 年底,百世集团宣布以 68 亿元转让国内快递业务给极兔速递,百世集团将集中精力和资源,加快业务发展,推动供应链、快运、国际业务的深度融合,打造国际化的综合智慧供应链服务。
    ———————-
    标题: 消息称苹果 iPhone 17 Air 为轻薄机身直接取消实体 SIM 卡槽
    发布时间: 2025-03-10T14:03:56.647
    新闻简介: 博主 @数码闲聊站 今日发文爆料某厂年底的 SM8850(预计为第二代骁龙 8 至尊版)系列新机在测 eSIM 功能,国内暂不确实是否上市(具体厂商未指明)。另外,博主还透露 iPhone 17 Air 为轻薄机身直接取消实体 SIM 卡槽。
    ———————-
    标题: 领克 900 旗舰 SUV 展车到店:车长超 5.2 米,二季度上市
    发布时间: 2025-03-10T08:08:02.013
    新闻简介: 领克900旗舰SUV展车已到店,车长超5.2米,二季度上市。这款车基于SPA Evo大型电混车专属架构打造,搭载英伟达Thor芯片及自研浩瀚智驾,提供五种车身颜色。#领克900##旗舰SUV#
    ———————-
    标题: 二手平台“9.9 元小米 SU7 Ultra 车标”引热议,3D 打印仿品涉嫌侵权
    发布时间: 2025-03-10T15:05:26.763
    新闻简介: 小米SU7 Ultra的24K金碳纤维车标引发关注,,二手平台上出现大量3D打印仿品,售价9.9元起,涉嫌侵犯商标权。#小米SU7Ultra# #3D打印侵权#
    ———————-

    —- IT之家新闻 End —-

  • Centos 远程重装系统


    共计 3674 个字符,预计需要花费 10 分钟才能阅读完成。

    人在广州,家里的服务器在湖南。如何重装系统

    由于家里的宽带申请了公网 ip,并且路由器上并非设置的端口映射,因为我觉得太麻烦,直接设置 DMZ 主机为我的服务器。

    也就是说我把我的服务器暴露在了互联网上,非常容易受到攻击。

    由于之前安全意识较差,中了一次病毒,我人又不在家里,所以想起了远程重装系统,在这里记录一下。

    一、查询基本信息

    # 查看 IP地址及网卡信息
    [root@localhost /]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:21:70:5c:a5:6f brd ff:ff:ff:ff:ff:ff
    inet 192.168.17.131/24 brd 192.168.17.255 scope global enp3s0
    valid_lft forever preferred_lft forever
    inet6 fe80::221:70ff:fe5c:a56f/64 scope link
    valid_lft forever preferred_lft forever
    # 查看网关
    [root@localhost /]# ip route show
    default via 192.168.17.254 dev enp3s0 proto static metric 100
    192.168.17.0/24 dev enp3s0 proto kernel scope link src 192.168.17.131 metric 100

    从这里我们可以得到如下信息,这里一定要记录好,后面会用到。

    • 设备名称: enp3s0
    • IP地址:192.168.17.131
    • 网关地址:192.168.17.254
    • 子网掩码:255.255.255.0

    二、下载CentOS 的 bootstrap 文件

    阿里云镜像地址:http://pub.mirrors.aliyun.com/centos

    cd /boot && \
    wget http://pub.mirrors.aliyun.com/centos/7/os/x86_64/isolinux/vmlinuz && \
    wget http://pub.mirrors.aliyun.com/centos/7/os/x86_64/isolinux/initrd.img

    三、添加grub启动条目

    查看/boot/grub2/grub.cfg,找到如下代码部分:

    menuentry 'CentOS Linux (3.10.0-327.22.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-5abaf349-18ce-4481-8e31-f29b0120827f' {
    
            load_video
            set gfxpayload=keep
            insmod gzio
            insmod part_msdos
            insmod xfs
            set root='hd0,msdos1'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  3ee40dd3-d836-4aa5-b145-9fbc2541b151
            else
              search --no-floppy --fs-uuid --set=root 3ee40dd3-d836-4aa5-b145-9fbc2541b151
            fi
        linux16 /vmlinuz-3.10.0-327.22.2.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8
            initrd16 /initramfs-3.10.0-327.22.2.el7.x86_64.img
    }
    

    然后把这一段拷贝到/etc/grub.d/40_custom中做如下修改:

    #!/bin/sh
    exec tail -n +3 $0
    # This file provides an easy way to add custom menu entries.  Simply type the
    # menu entries you want to add after this comment.  Be careful not to change
    # the 'exec tail' line above.
    
    menuentry 'NetInstall' {
            load_video
            set gfxpayload=keep
            insmod gzio
            insmod part_msdos
            insmod xfs
            set root='hd0,msdos1'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  3ee40dd3-d836-4aa5-b145-9fbc2541b151
            else
              search --no-floppy --fs-uuid --set=root 3ee40dd3-d836-4aa5-b145-9fbc2541b151
            fi
        linux16 /vmlinuz inst.vnc inst.vncpassword=12345678 inst.headless ip=192.168.17.131::192.168.17.254:255.255.255.0::enp3s0:none nameserver=114.114.114.114 inst.repo=http://pub.mirrors.aliyun.com/centos/7/os/x86_64/ inst.lang=en_US inst.keymap=us
        initrd16 /initrd.img
    }

    这里说明一下参数含义:

    inst.vnc – 启用vnc
    inst.vncpassword=12345678 – vnc 登陆密码(至少是8个及其以上的字符)
    inst.headless
    ip=192.168.17.131::192.168.17.254:255.255.255.0::enp3s0:none – ip=ip::网关:子网掩码::网卡名称:none
    nameserver=114.114.114.114 – DNS地址
    inst.repo=http://mirror.centos.org/centos/7/os/x86_64/ – yum源地址
    inst.lang=en_US – 默认语言
    inst.keymap=us – 键盘模式

    修改 /etc/default/grub 文件:

    # 配置/etc/default/grub
    vim /etc/default/grub
    # 修改 GRUB_DEFAULT=0 为 GRUB_DEFAULT=saved
    # 除此之外保证没有被修改过

    再检查一次,所有配置。一定要检查非常仔细,不然的话启动不了了比不重装还难受。

    四、 重建grub配置

    # 重建grub配置,如果是efi,需要grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
    grub2-mkconfig -o /boot/grub2/grub.cfg
    # 列出所有启动条目
    awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
    # 下一次启动使用NetInstall,仅使用一次
    grub2-reboot NetInstall
    # 重启系统
    reboot

    五、使用VNC安装CentOS系统

    其他资料都提到等待一分钟左右,个人实验等待了约10分钟,这主要取决于网速。

    下载 tightVNC (http://www.tightvnc.com/download.php)

    地址:ip-xxxxxx:1

    密码:12345678

    提醒:本文发布于865天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室

  • K8s 存储详解-包括pv、pvc、confmap、secret


    共计 11814 个字符,预计需要花费 30 分钟才能阅读完成。

    一、基本存储

    1 EmptyDir

    EmptyDir是最基础的Volume类型,一个EmptyDir就是Host上的一个空目录。

    EmptyDir是在Pod被分配到Node时创建的,它的初始内容为空,并且无须指定宿主机上对应的目录文件,因为kubernetes会自动分配一个目录,当Pod销毁时, EmptyDir中的数据也会被永久删除。 EmptyDir用途如下:

    • 临时空间,例如用于某些应用程序运行时所需的临时目录,且无须永久保留
    • 一个容器需要从另一个容器中获取数据的目录(多容器共享目录)

    接下来,通过一个容器之间文件共享的案例来使用一下EmptyDir。

    在一个Pod中准备两个容器nginx和busybox,然后声明一个Volume分别挂在到两个容器的目录中,然后nginx容器负责向Volume中写日志,busybox中通过命令将日志内容读到控制台。

    K8s 存储详解-包括pv、pvc、confmap、secret

    />

    1.1 示例

    volume-emptydir.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: volume-emptydir
      namespace: dev
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80
        volumeMounts:  # 将logs-volume挂在到nginx容器中,对应的目录为 /var/log/nginx
        - name: logs-volume
          mountPath: /var/log/nginx
      - name: busybox
        image: busybox:1.30
        command: ["/bin/sh","-c","tail -f /logs/access.log"] # 初始命令,动态读取指定文件中内容
        volumeMounts:  # 将logs-volume 挂在到busybox容器中,对应的目录为 /logs
        - name: logs-volume
          mountPath: /logs
      volumes: # 声明volume, name为logs-volume,类型为emptyDir
      - name: logs-volume
        emptyDir: {}

    1.2 命令

    # 创建Pod
    [root@k8s-master01 ~]# kubectl create -f volume-emptydir.yaml
    pod/volume-emptydir created
    
    # 查看pod
    [root@k8s-master01 ~]# kubectl get pods volume-emptydir -n dev -o wide
    NAME                  READY   STATUS    RESTARTS   AGE      IP       NODE   ......
    volume-emptydir       2/2     Running   0          97s   10.42.2.9   node1  ......
    
    # 通过podIp访问nginx
    [root@k8s-master01 ~]# curl 10.42.2.9
    ......
    
    # 通过kubectl logs命令查看指定容器的标准输出
    [root@k8s-master01 ~]# kubectl logs -f volume-emptydir -n dev -c busybox
    10.42.1.0 - - [27/Jun/2021:15:08:54 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

    2 HostPath

    EmptyDir中数据不会被持久化,它会随着Pod的结束而销毁,如果想简单的将数据持久化到主机中,可以选择HostPath。

    HostPath就是将Node主机中一个实际目录挂在到Pod中,以供容器使用,这样的设计就可以保证Pod销毁了,但是数据依据可以存在于Node主机上。

    K8s 存储详解-包括pv、pvc、confmap、secret

    />

    2.1 示例

    volume-hostpath.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: volume-hostpath
      namespace: dev
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80
        volumeMounts:
        - name: logs-volume
          mountPath: /var/log/nginx
      - name: busybox
        image: busybox:1.30
        command: ["/bin/sh","-c","tail -f /logs/access.log"]
        volumeMounts:
        - name: logs-volume
          mountPath: /logs
      volumes:
      - name: logs-volume
        hostPath:
          path: /root/logs
          type: DirectoryOrCreate  # 目录存在就使用,不存在就先创建后使用

    关于type的值的一点说明:
    DirectoryOrCreate 目录存在就使用,不存在就先创建后使用
    Directory 目录必须存在
    FileOrCreate 文件存在就使用,不存在就先创建后使用
    File 文件必须存在
    Socket unix套接字必须存在
    CharDevice 字符设备必须存在
    BlockDevice 块设备必须存在

    2.2 命令

    # 创建Pod
    [root@k8s-master01 ~]# kubectl create -f volume-hostpath.yaml
    pod/volume-hostpath created
    
    # 查看Pod
    [root@k8s-master01 ~]# kubectl get pods volume-hostpath -n dev -o wide
    NAME                  READY   STATUS    RESTARTS   AGE   IP             NODE   ......
    pod-volume-hostpath   2/2     Running   0          16s   10.42.2.10     node1  ......
    
    #访问nginx
    [root@k8s-master01 ~]# curl 10.42.2.10
    
    [root@k8s-master01 ~]# kubectl logs -f volume-emptydir -n dev -c busybox
    
    # 接下来就可以去host的/root/logs目录下查看存储的文件了
    ###  注意: 下面的操作需要到Pod所在的节点运行(案例中是node1)
    [root@node1 ~]# ls /root/logs/
    access.log  error.log
    
    # 同样的道理,如果在此目录下创建一个文件,到容器中也是可以看到的

    3 NFS

    HostPath可以解决数据持久化的问题,但是一旦Node节点故障了,Pod如果转移到了别的节点,又会出现问题了,此时需要准备单独的网络存储系统,比较常用的用NFS、CIFS。

    NFS是一个网络文件存储系统,可以搭建一台NFS服务器,然后将Pod中的存储直接连接到NFS系统上,这样的话,无论Pod在节点上怎么转移,只要Node跟NFS的对接没问题,数据就可以成功访问。

    K8s 存储详解-包括pv、pvc、confmap、secret

    />

    3.1 安装 nfs

    1)首先要准备nfs的服务器,这里为了简单,直接是master节点做nfs服务器

    # 在nfs上安装nfs服务
    [root@nfs ~]# yum install nfs-utils -y
    
    # 准备一个共享目录
    [root@nfs ~]# mkdir /root/data/nfs -pv
    
    # 将共享目录以读写权限暴露给172.21.9.0/24网段中的所有主机
    [root@nfs ~]# vim /etc/exports
    [root@nfs ~]# more /etc/exports
    /root/data/nfs     172.21.9.0/24(rw,no_root_squash)
    
    # 启动nfs服务
    [root@nfs ~]# systemctl restart nfs

    2)接下来,要在的每个node节点上都安装下nfs,这样的目的是为了node节点可以驱动nfs设备

    # 在node上安装nfs服务,注意不需要启动
    [root@k8s-master01 ~]# yum install -y nfs-utils

    3.2 示例

    volume-nfs.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: volume-nfs
      namespace: dev
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80
        volumeMounts:
        - name: logs-volume
          mountPath: /var/log/nginx
      - name: busybox
        image: busybox:1.30
        command: ["/bin/sh","-c","tail -f /logs/access.log"]
        volumeMounts:
        - name: logs-volume
          mountPath: /logs
      volumes:
      - name: logs-volume
        nfs:
          server: 172.21.9.100  #nfs服务器地址
          path: /root/data/nfs #共享文件路径

    3.3 命令

    # 创建pod
    [root@k8s-master01 ~]# kubectl create -f volume-nfs.yaml
    pod/volume-nfs created
    
    # 查看pod
    [root@k8s-master01 ~]# kubectl get pods volume-nfs -n dev
    NAME                  READY   STATUS    RESTARTS   AGE
    volume-nfs        2/2     Running   0          2m9s
    
    # 查看nfs服务器上的共享目录,发现已经有文件了
    [root@k8s-master01 ~]# ls /root/data/nfs/
    access.log  error.log

    二、高级存储

    前面已经学习了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用, kubernetes引入PV和PVC两种资源对象。

    • PV(Persistent Volume)是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下PV由kubernetes管理员进行创建和配置,它与底层具体的共享存储技术有关,并通过插件完成与共享存储的对接。

    • PVC(Persistent Volume Claim)是持久卷声明的意思,是用户对于存储需求的一种声明。换句话说,PVC其实就是用户向kubernetes系统发出的一种资源需求申请。

    K8s 存储详解-包括pv、pvc、confmap、secret

    />

    使用了PV和PVC之后,工作可以得到进一步的细分:

    • 存储:存储工程师维护
    • PV: kubernetes管理员维护
    • PVC:kubernetes用户维护

    1 PV

    1.1 资源清单

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv2
    spec:
      nfs: # 存储类型,与底层真正存储对应
      capacity:  # 存储能力,目前只支持存储空间的设置
        storage: 2Gi
      accessModes:  # 访问模式
      storageClassName: # 存储类别
      persistentVolumeReclaimPolicy: # 回收策略

    PV 的关键配置参数说明:

    • 存储类型

      底层实际存储的类型,kubernetes支持多种存储类型,每种存储类型的配置都有所差异

    • 存储能力(capacity)

    目前只支持存储空间的设置( storage=1Gi ),不过未来可能会加入IOPS、吞吐量等指标的配置

    • 访问模式(accessModes)

      用于描述用户应用对存储资源的访问权限,访问权限包括下面几种方式:

      • ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载
      • ReadOnlyMany(ROX): 只读权限,可以被多个节点挂载
      • ReadWriteMany(RWX):读写权限,可以被多个节点挂载

      需要注意的是,底层不同的存储类型可能支持的访问模式不同

    • 回收策略(persistentVolumeReclaimPolicy)

      当PV不再被使用了之后,对其的处理方式。目前支持三种策略:

      • Retain (保留) 保留数据,需要管理员手工清理数据
      • Recycle(回收) 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/*
      • Delete (删除) 与 PV 相连的后端存储完成 volume 的删除操作,当然这常见于云服务商的存储服务

      需要注意的是,底层不同的存储类型可能支持的回收策略不同

    • 存储类别

      PV可以通过storageClassName参数指定一个存储类别

      • 具有特定类别的PV只能与请求了该类别的PVC进行绑定
      • 未设定类别的PV则只能与不请求任何类别的PVC进行绑定
    • 状态(status)

      一个 PV 的生命周期中,可能会处于4中不同的阶段:

      • Available(可用): 表示可用状态,还未被任何 PVC 绑定
      • Bound(已绑定): 表示 PV 已经被 PVC 绑定
      • Released(已释放): 表示 PVC 被删除,但是资源还未被集群重新声明
      • Failed(失败): 表示该 PV 的自动回收失败

    1.2 准备 NFS 环境

    # 创建目录
    [root@nfs ~]# mkdir /root/data/{pv1,pv2,pv3} -pv
    
    # 暴露服务
    [root@nfs ~]# more /etc/exports
    /root/data/pv1     172.21.9.0/24(rw,no_root_squash)
    /root/data/pv2     172.21.9.0/24(rw,no_root_squash)
    /root/data/pv3     172.21.9.0/24(rw,no_root_squash)
    
    # 重启服务
    [root@nfs ~]#  systemctl restart nfs

    1.3 示例

    pv.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  pv1
    spec:
      capacity:
        storage: 1Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /root/data/pv1
        server: 172.21.9.100
    
    ---
    
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  pv2
    spec:
      capacity:
        storage: 2Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /root/data/pv2
        server: 172.21.9.100
    ---
    
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name:  pv3
    spec:
      capacity:
        storage: 3Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /root/data/pv3
        server: 172.21.9.100

    1.4 命令

    # 创建 pv
    [root@k8s-master01 ~]# kubectl create -f pv.yaml
    persistentvolume/pv1 created
    persistentvolume/pv2 created
    persistentvolume/pv3 created
    
    # 查看pv
    [root@k8s-master01 ~]# kubectl get pv -o wide
    NAME   CAPACITY   ACCESS MODES  RECLAIM POLICY  STATUS      AGE   VOLUMEMODE
    pv1    1Gi        RWX            Retain        Available    10s   Filesystem
    pv2    2Gi        RWX            Retain        Available    10s   Filesystem
    pv3    3Gi        RWX            Retain        Available    9s    Filesystem

    2 PVC

    2.1 资源清单

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc
      namespace: dev
    spec:
      accessModes: # 访问模式
      selector: # 采用标签对PV选择
      storageClassName: # 存储类别
      resources: # 请求空间
        requests:
          storage: 5Gi

    PVC 的关键配置参数说明:

    • 访问模式(accessModes)

    用于描述用户应用对存储资源的访问权限

    • 选择条件(selector)

      通过Label Selector的设置,可使PVC对于系统中己存在的PV进行筛选

    • 存储类别(storageClassName)

      PVC在定义时可以设定需要的后端存储的类别,只有设置了该class的pv才能被系统选出

    • 资源请求(Resources )

      描述对存储资源的请求

    2.2 创建 PVC

    pvc.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc1
    spec:
      accessModes: 
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc2
    spec:
      accessModes: 
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc3
    spec:
      accessModes: 
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
    # 创建pvc
    [root@k8s-master01 ~]# kubectl create -f pvc.yaml
    persistentvolumeclaim/pvc1 created
    persistentvolumeclaim/pvc2 created
    persistentvolumeclaim/pvc3 created
    
    # 查看pvc
    [root@k8s-master01 ~]# kubectl get pvc -o wide
    NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODE
    pvc1   Bound    pv1      1Gi        RWX                           15s   Filesystem
    pvc2   Bound    pv2      2Gi        RWX                           15s   Filesystem
    pvc3   Bound    pv3      3Gi        RWX                           15s   Filesystem
    
    # 查看pv
    [root@k8s-master01 ~]# kubectl get pv -o wide
    NAME  CAPACITY ACCESS MODES  RECLAIM POLICY  STATUS    CLAIM       AGE     VOLUMEMODE
    pv1    1Gi        RWx        Retain          Bound    dev/pvc1    3h37m    Filesystem
    pv2    2Gi        RWX        Retain          Bound    dev/pvc2    3h37m    Filesystem
    pv3    3Gi        RWX        Retain          Bound    dev/pvc3    3h37m    Filesystem

    2.3 创建pods.yaml, 使用pv

    pods.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod1
    spec:
      containers:
      - name: busybox
        image: busybox:1.30
        command: ["/bin/sh","-c","while true;do echo pod1 >> /root/out.txt; sleep 10; done;"]
        volumeMounts:
        - name: volume
          mountPath: /root/
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: pvc1
            readOnly: false
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod2
    spec:
      containers:
      - name: busybox
        image: busybox:1.30
        command: ["/bin/sh","-c","while true;do echo pod2 >> /root/out.txt; sleep 10; done;"]
        volumeMounts:
        - name: volume
          mountPath: /root/
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: pvc2
            readOnly: false
    # 创建pod
    [root@k8s-master01 ~]# kubectl create -f pods.yaml
    pod/pod1 created
    pod/pod2 created
    
    # 查看pod
    [root@k8s-master01 ~]# kubectl get pods -o wide
    NAME   READY   STATUS    RESTARTS   AGE   IP            NODE   
    pod1   1/1     Running   0          14s   10.244.1.69   node1   
    pod2   1/1     Running   0          14s   10.244.1.70   node1  
    
    # 查看pvc
    [root@k8s-master01 ~]# kubectl get pvc -o wide
    NAME   STATUS   VOLUME   CAPACITY   ACCESS MODES      AGE   VOLUMEMODE
    pvc1   Bound    pv1      1Gi        RWX               94m   Filesystem
    pvc2   Bound    pv2      2Gi        RWX               94m   Filesystem
    pvc3   Bound    pv3      3Gi        RWX               94m   Filesystem
    
    # 查看pv
    [root@k8s-master01 ~]# kubectl get pv -o wide
    NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM       AGE     VOLUMEMODE
    pv1    1Gi        RWX            Retain           Bound    dev/pvc1    5h11m   Filesystem
    pv2    2Gi        RWX            Retain           Bound    dev/pvc2    5h11m   Filesystem
    pv3    3Gi        RWX            Retain           Bound    dev/pvc3    5h11m   Filesystem
    
    # 查看nfs中的文件存储
    [root@nfs ~]# more /root/data/pv1/out.txt
    node1
    node1
    [root@nfs ~]# more /root/data/pv2/out.txt
    node2
    node2

    3 生命周期

    PVC和PV是一一对应的,PV和PVC之间的相互作用遵循以下生命周期:

    • 资源供应:管理员手动创建底层存储和PV

    • 资源绑定:用户创建PVC,kubernetes负责根据PVC的声明去寻找PV,并绑定

      在用户定义好PVC之后,系统将根据PVC对存储资源的请求在已存在的PV中选择一个满足条件的

      • 一旦找到,就将该PV与用户定义的PVC进行绑定,用户的应用就可以使用这个PVC了
      • 如果找不到,PVC则会无限期处于Pending状态,直到等到系统管理员创建了一个符合其要求的PV

      PV一旦绑定到某个PVC上,就会被这个PVC独占,不能再与其他PVC进行绑定了

    • 资源使用:用户可在pod中像volume一样使用pvc

      Pod使用Volume的定义,将PVC挂载到容器内的某个路径进行使用。

    • 资源释放:用户删除pvc来释放pv

      当存储资源使用完毕后,用户可以删除PVC,与该PVC绑定的PV将会被标记为“已释放”,但还不能立刻与其他PVC进行绑定。通过之前PVC写入的数据可能还被留在存储设备上,只有在清除之后该PV才能再次使用。

    • 资源回收:kubernetes根据pv设置的回收策略进行资源的回收

      对于PV,管理员可以设定回收策略,用于设置与之绑定的PVC释放资源之后如何处理遗留数据的问题。只有PV的存储空间完成回收,才能供新的PVC绑定和使用
      K8s 存储详解-包括pv、pvc、confmap、secret

      />

    三、配置存储

    1 ConfigMap

    ConfigMap是一种比较特殊的存储卷,它的主要作用是用来存储配置信息的。

    1.1 创建 configmap

    configmap.yaml

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: configmap
    data:
      info: |
        username:admin
        password:123456
    # 创建configmap
    [root@k8s-master01 ~]# kubectl create -f configmap.yaml
    configmap/configmap created
    
    # 查看configmap详情
    [root@k8s-master01 ~]# kubectl describe cm configmap
    Name:         configmap
    Namespace:    dev
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    info:
    ----
    username:admin
    password:123456
    
    Events:  <none>

    1.2 挂载 configmap

    pod-configmap.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-configmap
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        volumeMounts: # 将configmap挂载到目录
        - name: config
          mountPath: /configmap/config
      volumes: # 引用configmap
      - name: config
        configMap:
          name: configmap
    # 创建pod
    [root@k8s-master01 ~]# kubectl create -f pod-configmap.yaml
    pod/pod-configmap created
    
    # 查看pod
    [root@k8s-master01 ~]# kubectl get pod pod-configmap -n dev
    NAME            READY   STATUS    RESTARTS   AGE
    pod-configmap   1/1     Running   0          6s
    
    #进入容器
    [root@k8s-master01 ~]# kubectl exec -it pod-configmap /bin/sh
    # cd /configmap/config/
    # ls
    info
    # more info
    username:admin
    password:123456
    
    # 可以看到映射已经成功,每个configmap都映射成了一个目录
    # key--->文件     value---->文件中的内容
    # 此时如果更新configmap的内容, 容器中的值也会动态更新

    2 Secret

    2.1 首先使用base64对数据进行编码

    [root@k8s-master01 ~]# echo -n 'admin' | base64 #准备username
    YWRtaW4=
    [root@k8s-master01 ~]# echo -n '123456' | base64 #准备password
    MTIzNDU2

    2.2 创建 secret

    secret.yaml

    apiVersion: v1
    kind: Secret
    metadata:
      name: secret
    type: Opaque
    data:
      username: YWRtaW4=
      password: MTIzNDU2
    # 创建secret
    [root@k8s-master01 ~]# kubectl create -f secret.yaml
    secret/secret created
    
    # 查看secret详情
    [root@k8s-master01 ~]# kubectl describe secret secret
    Name:         secret
    Namespace:    dev
    Labels:       <none>
    Annotations:  <none>
    Type:  Opaque
    Data
    ====
    password:  6 bytes
    username:  5 bytes

    2.3 使用 secret

    pod-secret.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-secret
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        volumeMounts: # 将secret挂载到目录
        - name: config
          mountPath: /secret/config
      volumes:
      - name: config
        secret:
          secretName: secret
    # 创建pod
    [root@k8s-master01 ~]# kubectl create -f pod-secret.yaml
    pod/pod-secret created
    
    # 查看pod
    [root@k8s-master01 ~]# kubectl get pod pod-secret
    NAME            READY   STATUS    RESTARTS   AGE
    pod-secret      1/1     Running   0          2m28s
    
    # 进入容器,查看secret信息,发现已经自动解码了
    [root@k8s-master01 ~]# kubectl exec -it pod-secret /bin/sh
    / # ls /secret/config/
    password  username
    / # more /secret/config/username
    admin
    / # more /secret/config/password
    123456

    至此,已经实现了利用secret实现了信息的编码。

    提醒:本文发布于864天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室

  • v3版 ssl 证书制作和 nginx 配置证书


    共计 2345 个字符,预计需要花费 6 分钟才能阅读完成。

    一、证书制作

    利用 openssl 生成 v3 带扩展属性的证书

    1、生成秘钥

    openssl genrsa -des3 -out server.pass.key 2048 -passin pass:1234

    如果秘钥有密码,重启 web 服务器会要求验证密码,所以直接去掉秘钥中的密码。

    openssl rsa -in server.pass.key -out server.key

    2、生成证书请求文件

    1. 交互式:
    openssl req -new -key server.key -out server.csr

    终端会提示输入通用名、组织名称等等。

    1. 直接生成
    openssl req -new -key server.key -out server.csr -subj /C=CH/ST=GuangZhou/L=GuangDong/O=Aman/OU=Aman/CN=www.huangzhen.com

    CN=commonName(通用名)
    OU=organizationUnit(组织部门名)
    O=organizationName(组织名)
    L=localityName(地址)
    ST=stateName(州名-城市名)
    C=country(国家)

    查看证书请求文件

    openssl req -text -noout -in server.csr

    3、修改 openssl.cnf

    1. 查看 openssl.cnf 文件存放位置
    openssl version -d
    1. 末尾添加使用者可选名称
    cat >> /etc/pki/tls/openssl.cnf <<EOF
    [ alt_names ]
    DNS.1 = abc.example.com
    DNS.2 = *.example.com
    DNS.3 = www.huangzhen.com
    IP.1 = 172.21.9.203
    IP.2 = 172.21.9.204
    EOF
    1. v3_req 中添加 subjectAltName = @alt_names
    sed -i '/\[ v3_req \]/asubjectAltName = @alt_names' /etc/pki/tls/openssl.cnf

    需要添加subjectAltName = @alt_names才会把上面的配置添加到证书。

    4、生成 v3 证书

    openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt -extfile /etc/pki/tls/openssl.cnf -extensions v3_req

    查看证书内容

    openssl x509 -text -noout -in server.crt

    如果证书文件是der格式,则需要添加-inform der参数来指定其文件编码。

    openssl x509 -inform der -text -noout -in server.csr

    其他

    1. pem和der编码格式的相互转换
    # pem转der
    openssl x509 -outform der -in server.pem -out server.der
    # der转pem
    openssl x509 -inform der -in server.der -out server.crt

    nginx 使用 ssl 证书

    1、创建需要挂载的目录

    mkdir -p /home/docker/nginx && \
    cd /home/docker/nginx && \
    mkdir conf.d && \
    mkdir html && \
    mkdir logs

    2、复制容器内必要的文件

    docker run -d --name nginx -p 88:80 nginx && \
    docker cp nginx:/etc/nginx/nginx.conf ./ && \
    docker cp nginx:/etc/nginx/conf.d/default.conf ./conf.d/ && \
    docker rm -f nginx

    nginx 的配置文件复制出来,不然启动的时候挂载会导致 nginx 配置文件丢失。

    3、启动 nginx

    docker run -d \
    --name nginx \
    --net=host \
    -v /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
    -v /home/docker/nginx/conf.d:/etc/nginx/conf.d \
    -v /home/docker/nginx/logs:/var/log/nginx \
    -v /home/docker/nginx/html:/usr/share/nginx/html \
    -v /etc/localtime:/etc/localtime:ro \
    --restart always \
    --privileged=true nginx

    因为 /home/docker/nginx/html 目录是空的,所以需要创建 index.html。

    cat > /home/docker/nginx/html/index.html <<EOF
    My test page
    EOF

    4、添加ssl证书

    将 ssl 证书放在 /home/docker/nginx/conf.d 目录下。

    cat >> /home/docker/nginx/conf.d/default.conf <<EOF
    server {
       listen      443 ssl;
       listen  [::]:443 ssl;
       ssl_certificate  /etc/nginx/conf.d/server.crt;
       ssl_certificate_key  /etc/nginx/conf.d/server.key;
       server_name  www.huangzhen.com;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
    EOF

    重启 nginx

    docker restart nginx

    5、测试结果

    将证书下载,双击安装,导入为受信任的根证书。

    v3版 ssl 证书制作和 nginx 配置证书

    提醒:本文发布于859天前,文中所关联的信息可能已发生改变,请知悉!

    />

    Tips:清朝云网络工作室

  • 03月10日,星期一, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 华为离职“天才少年”官宣刷屏 3月7日,智元机器人联合创始人彭志辉在微博上预告:下周智元机器人有好东西发布。数据显示,其视频累计播放量超过1050万。

    2. 点了外卖发现是警察叔叔送来的 近日,一名外卖骑手在送单途中意外摔倒,因担心摔倒受到处罚、影响送单时间忍不住落泪,辅警看到后帮送餐叮嘱别差评。

    3. 两会热议破解企业“生长痛” 当前我国经济正处于结构调整和转型升级的关键时期,两会热议破解企业“生长痛”。

    4. 2000年前老旧小区纳入城市更新改造 住房和城乡建设部部长倪虹表示,2000年前城市老旧小区,全纳入城市更新改造范围,将重点从两个方面抓好落实。

    5. 厚衣服先别收!气温过山车又要发车了 近日,我国将迎气温过山车式波动,先暖后冷。同时雨雪、强对流及沙尘天气频发。提醒大家关注天气变化,及时增减衣物,安全出行。

    6. 大学退休教授63小时卖出753台问界 3月9日,一问界女车主36小时销售问界车型约1.6亿,引起华为余承东关注,现身该车主直播间表达感谢。

    7. 《哪吒2》超《复联3》成全球票房第6 据网络平台数据,3月9日《哪吒之魔童闹海》全球电影票房(含预售及海外)超《复仇者联盟3:无限战争》,进入全球票房榜前6名。

    8. AI回答存多少钱才可以潇洒退休 近日,有网友询问AI要存多少钱才可以潇洒退休。AI不仅根据各地发展情况做出回答,还根据经济形势做出解释。

    9. 就业是民生的头等大事 3月9日,十四届全国人大三次会议,人力资源和社会保障部部长王晓萍表示,就业是民生头等大事,就业形势总体稳定并呈向好态势。

    10. 韩国人大量买入中国股票 今年以来,我国在前沿科技领域的快速发展引发了海外投资者的高度关注。2月,韩国投资者投资中国股票的月度交易额环比增长近两倍。

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 从生物进化的角度看,为什么猫比较独立,而狗比较亲人?
    链接: https://daily.zhihu.com/story/9779550
    ———————-
    标题: 大家知道的最长(复杂)的公式是什么?
    链接: https://daily.zhihu.com/story/9779553
    ———————-
    标题: 现在陕西人还是当年汉唐时期的陕西人吗?
    链接: https://daily.zhihu.com/story/9779559
    ———————-
    标题: 我们一直在遗忘,那我们还是我们吗?我们为何还能保持着自我意识?
    链接: https://daily.zhihu.com/story/9779563
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 雷军回应“国庆 7 天‘AI 雷军’骂了 8 天”:损失无法量化,建议填补立法空白
    发布时间: 2025-03-09T08:13:09.813
    新闻简介: 据红星新闻报道,3 月 8 日下午,十四届全国人大三次会议北京市代表团召开代表小组会议。雷军结合自身经历说:“去年‘十一’,有网友说过了 7 天假,被我整整骂了 8 天,刚开始我觉得网民拿我开涮我也能接受。但这类内容增多且质量低劣后,防不胜防,网友也纷纷投诉。”
    ———————-
    标题: 央视曝光摄影爱好者滥用无人机拍摄鸟类,致国家一级保护动物东方白鹳被绞断双腿死亡
    发布时间: 2025-03-09T14:59:17.657
    新闻简介: 央视曝光无人机滥用拍摄鸟类现象,导致国家一级重点保护动物东方白鹳被绞断双腿死亡。东方白鹳是全球濒危物种,1989年列入中国一级重点保护野生动物名录。参考《野生动物保护法》,伤害此类国家一级重点保护野生动物者可被追刑责。#无人机滥用##东方白鹳##野生动物保护#
    ———————-
    标题: 9 点必须走人,消息称大疆开始严禁过度加班
    发布时间: 2025-03-09T12:12:56.027
    新闻简介: 大疆深圳总部一到晚上 9 点,主管和 HR 分三轮赶人下班,禁止员工加班。此外,上海区域更直截了当,办公楼到晚上 9 点准时关灯。(经济观察报)
    ———————-
    标题: 董明珠再回应“格力专卖店”改名“董明珠健康家”:以个人名誉作保将“信任流量”转化为“品质认知”
    发布时间: 2025-03-09T14:35:34.887
    新闻简介: 格力电器推出全新战略品牌“董明珠健康家”,并启动专卖店更名工作。董明珠在2025两会期间回应称,更名旨在以个人名誉作保,将“信任流量”转化为“品质认知”,实现从产品制造向健康服务转型的战略升级。#格力电器# #董明珠健康家#
    ———————-
    标题: 超越《复仇者联盟 3:无限战争》,《哪吒之魔童闹海》票房跻身全球影史第六
    发布时间: 2025-03-09T19:01:18.71
    新闻简介: 据灯塔专业版全球票房榜,截至 3 月 9 日,影片《哪吒之魔童闹海》全球票房(含预售)突破 148.82 亿,超过《复仇者联盟 3:无限战争》,进入全球影史票房榜前 6 名。
    ———————-
    标题: 雷军称小米曾遭造谣被查导致股价下跌:应针对性加强立法工作
    发布时间: 2025-03-09T09:18:18.193
    新闻简介: 据红星新闻报道,全国人大代表,小米集团创始人、董事长兼 CEO 雷军表示,“几年前有自媒体造谣说小米公司被证监会查了,我们股票跌了 8%,当天相关部门还帮我们辟谣,但我没办法举证造成了 50 万的损失,因为股票波动原因很多。”
    ———————-
    标题: 马斯克:中国高铁令人惊叹,美国铁路却令人尴尬
    发布时间: 2025-03-09T16:17:36.31
    新闻简介: 马斯克在科技会议上称美国铁路客运公司Amtrak“令人尴尬”,建议私有化,对比中国高铁,认为美国铁路体验差。Amtrak回应业务强劲,发白皮书反对私有化,预计引入新列车。#马斯克 #美国铁路 #Amtrak#
    ———————-
    标题: 华为鸿蒙 HarmonyOS 5.0.3 Beta2 版本发布:新增智慧数据平台、获取分布式相机设备类型等特性
    发布时间: 2025-03-09T08:31:42.937
    新闻简介: 华为开发者官网本周(3 月 7 日)公布了鸿蒙 HarmonyOS 5.0.3 Beta2 新增和增强特性,新版本是 API 15 的第二个 Beta 版本,官方称相比 HarmonyOS 5.0.3 Beta1,进一步丰富开发场景,例如 ArkUI 进一步丰富了组件可定义的属性、可调用的能力、可识别的手势等;新增了对游戏手柄的识别和事件响应能力;增强了地图服务的细节功能等。
    ———————-
    标题: 华为 Mate 70 Pro 优享版手机支持星闪 / 关机查找功能
    发布时间: 2025-03-09T11:21:32.193
    新闻简介: 在去年 11 月的华为 Mate 品牌盛典上,Mate 70 系列 / Mate X6 手机、MatePad Pro 13.2 英寸 2025 平板正式发布,同时带来了“星闪查找”功能。IT之家注意到,华为官网现更新了“星闪查找”/“关机查找”功能适配设备列表,其中 Mate 70 Pro 优享版确定支持星闪 / 关机查找功能。
    ———————-
    标题: 雷军谈小米汽车订单排队超半年:海外布局开始考察,先解决扩产问题
    发布时间: 2025-03-09T16:49:15.497
    新闻简介: 全国人大代表、小米集团创始人雷军在接受央视采访时谈到小米汽车称,“目前在全球考察各地市场和各地政策,筹备在合适时候出海。第一焦点问题是解决国内订单排队 6-7 个月的问题,如何扩产的问题。”
    ———————-
    标题: 尾号“8 个 7”电信手机靓号拍出 254.4 万元天价,只有使用权没有所有权
    发布时间: 2025-03-09T19:09:34.463
    新闻简介: 阿里资产拍卖平台显示,尾号为77777777的手机靓号以254.4万元成交,但买家仅获得使用权,需每月最低消费1000元。该号码因其独特性和稀缺性,被视为身份和地位的象征。#手机靓号拍卖# #阿里资产拍卖#
    ———————-
    标题: 华为 Mate 60 Pro+、nova 12 UItra 等机型适配支持运营商北斗卫星短信功能
    发布时间: 2025-03-09T12:10:13.56
    新闻简介: 华为官网现更新了各机型卫星功能适配情况,IT之家注意到,华为 Mate 60 Pro+、nova 12 UItra 等机型已适配支持运营商北斗卫星短信功能。
    ———————-

    —- IT之家新闻 End —-

  • 03月10日,星期一, 每天60秒读懂全世界!

    百度热搜新闻

    新闻来源:百度热搜榜

    1. 华为离职“天才少年”官宣刷屏 3月7日,智元机器人联合创始人彭志辉在微博上预告:下周智元机器人有好东西发布。数据显示,其视频累计播放量超过1050万。

    2. 点了外卖发现是警察叔叔送来的 近日,一名外卖骑手在送单途中意外摔倒,因担心摔倒受到处罚、影响送单时间忍不住落泪,辅警看到后帮送餐叮嘱别差评。

    3. 两会热议破解企业“生长痛” 当前我国经济正处于结构调整和转型升级的关键时期,两会热议破解企业“生长痛”。

    4. 2000年前老旧小区纳入城市更新改造 住房和城乡建设部部长倪虹表示,2000年前城市老旧小区,全纳入城市更新改造范围,将重点从两个方面抓好落实。

    5. 厚衣服先别收!气温过山车又要发车了 近日,我国将迎气温过山车式波动,先暖后冷。同时雨雪、强对流及沙尘天气频发。提醒大家关注天气变化,及时增减衣物,安全出行。

    6. 大学退休教授63小时卖出753台问界 3月9日,一问界女车主36小时销售问界车型约1.6亿,引起华为余承东关注,现身该车主直播间表达感谢。

    7. 《哪吒2》超《复联3》成全球票房第6 据网络平台数据,3月9日《哪吒之魔童闹海》全球电影票房(含预售及海外)超《复仇者联盟3:无限战争》,进入全球票房榜前6名。

    8. AI回答存多少钱才可以潇洒退休 近日,有网友询问AI要存多少钱才可以潇洒退休。AI不仅根据各地发展情况做出回答,还根据经济形势做出解释。

    9. 就业是民生的头等大事 3月9日,十四届全国人大三次会议,人力资源和社会保障部部长王晓萍表示,就业是民生头等大事,就业形势总体稳定并呈向好态势。

    10. 韩国人大量买入中国股票 今年以来,我国在前沿科技领域的快速发展引发了海外投资者的高度关注。2月,韩国投资者投资中国股票的月度交易额环比增长近两倍。

    —- 百度热搜新闻 End —-

    知乎新闻

    新闻来源:知乎日榜

    标题: 从生物进化的角度看,为什么猫比较独立,而狗比较亲人?
    链接: https://daily.zhihu.com/story/9779550
    ———————-
    标题: 大家知道的最长(复杂)的公式是什么?
    链接: https://daily.zhihu.com/story/9779553
    ———————-
    标题: 现在陕西人还是当年汉唐时期的陕西人吗?
    链接: https://daily.zhihu.com/story/9779559
    ———————-
    标题: 我们一直在遗忘,那我们还是我们吗?我们为何还能保持着自我意识?
    链接: https://daily.zhihu.com/story/9779563
    ———————-

    —- 知乎新闻 End —-

    IT之家新闻

    新闻来源:ITHome之家科技新闻

    标题: 雷军回应“国庆 7 天‘AI 雷军’骂了 8 天”:损失无法量化,建议填补立法空白
    发布时间: 2025-03-09T08:13:09.813
    新闻简介: 据红星新闻报道,3 月 8 日下午,十四届全国人大三次会议北京市代表团召开代表小组会议。雷军结合自身经历说:“去年‘十一’,有网友说过了 7 天假,被我整整骂了 8 天,刚开始我觉得网民拿我开涮我也能接受。但这类内容增多且质量低劣后,防不胜防,网友也纷纷投诉。”
    ———————-
    标题: 央视曝光摄影爱好者滥用无人机拍摄鸟类,致国家一级保护动物东方白鹳被绞断双腿死亡
    发布时间: 2025-03-09T14:59:17.657
    新闻简介: 央视曝光无人机滥用拍摄鸟类现象,导致国家一级重点保护动物东方白鹳被绞断双腿死亡。东方白鹳是全球濒危物种,1989年列入中国一级重点保护野生动物名录。参考《野生动物保护法》,伤害此类国家一级重点保护野生动物者可被追刑责。#无人机滥用##东方白鹳##野生动物保护#
    ———————-
    标题: 9 点必须走人,消息称大疆开始严禁过度加班
    发布时间: 2025-03-09T12:12:56.027
    新闻简介: 大疆深圳总部一到晚上 9 点,主管和 HR 分三轮赶人下班,禁止员工加班。此外,上海区域更直截了当,办公楼到晚上 9 点准时关灯。(经济观察报)
    ———————-
    标题: 董明珠再回应“格力专卖店”改名“董明珠健康家”:以个人名誉作保将“信任流量”转化为“品质认知”
    发布时间: 2025-03-09T14:35:34.887
    新闻简介: 格力电器推出全新战略品牌“董明珠健康家”,并启动专卖店更名工作。董明珠在2025两会期间回应称,更名旨在以个人名誉作保,将“信任流量”转化为“品质认知”,实现从产品制造向健康服务转型的战略升级。#格力电器# #董明珠健康家#
    ———————-
    标题: 超越《复仇者联盟 3:无限战争》,《哪吒之魔童闹海》票房跻身全球影史第六
    发布时间: 2025-03-09T19:01:18.71
    新闻简介: 据灯塔专业版全球票房榜,截至 3 月 9 日,影片《哪吒之魔童闹海》全球票房(含预售)突破 148.82 亿,超过《复仇者联盟 3:无限战争》,进入全球影史票房榜前 6 名。
    ———————-
    标题: 雷军称小米曾遭造谣被查导致股价下跌:应针对性加强立法工作
    发布时间: 2025-03-09T09:18:18.193
    新闻简介: 据红星新闻报道,全国人大代表,小米集团创始人、董事长兼 CEO 雷军表示,“几年前有自媒体造谣说小米公司被证监会查了,我们股票跌了 8%,当天相关部门还帮我们辟谣,但我没办法举证造成了 50 万的损失,因为股票波动原因很多。”
    ———————-
    标题: 马斯克:中国高铁令人惊叹,美国铁路却令人尴尬
    发布时间: 2025-03-09T16:17:36.31
    新闻简介: 马斯克在科技会议上称美国铁路客运公司Amtrak“令人尴尬”,建议私有化,对比中国高铁,认为美国铁路体验差。Amtrak回应业务强劲,发白皮书反对私有化,预计引入新列车。#马斯克 #美国铁路 #Amtrak#
    ———————-
    标题: 华为鸿蒙 HarmonyOS 5.0.3 Beta2 版本发布:新增智慧数据平台、获取分布式相机设备类型等特性
    发布时间: 2025-03-09T08:31:42.937
    新闻简介: 华为开发者官网本周(3 月 7 日)公布了鸿蒙 HarmonyOS 5.0.3 Beta2 新增和增强特性,新版本是 API 15 的第二个 Beta 版本,官方称相比 HarmonyOS 5.0.3 Beta1,进一步丰富开发场景,例如 ArkUI 进一步丰富了组件可定义的属性、可调用的能力、可识别的手势等;新增了对游戏手柄的识别和事件响应能力;增强了地图服务的细节功能等。
    ———————-
    标题: 华为 Mate 70 Pro 优享版手机支持星闪 / 关机查找功能
    发布时间: 2025-03-09T11:21:32.193
    新闻简介: 在去年 11 月的华为 Mate 品牌盛典上,Mate 70 系列 / Mate X6 手机、MatePad Pro 13.2 英寸 2025 平板正式发布,同时带来了“星闪查找”功能。IT之家注意到,华为官网现更新了“星闪查找”/“关机查找”功能适配设备列表,其中 Mate 70 Pro 优享版确定支持星闪 / 关机查找功能。
    ———————-
    标题: 雷军谈小米汽车订单排队超半年:海外布局开始考察,先解决扩产问题
    发布时间: 2025-03-09T16:49:15.497
    新闻简介: 全国人大代表、小米集团创始人雷军在接受央视采访时谈到小米汽车称,“目前在全球考察各地市场和各地政策,筹备在合适时候出海。第一焦点问题是解决国内订单排队 6-7 个月的问题,如何扩产的问题。”
    ———————-
    标题: 尾号“8 个 7”电信手机靓号拍出 254.4 万元天价,只有使用权没有所有权
    发布时间: 2025-03-09T19:09:34.463
    新闻简介: 阿里资产拍卖平台显示,尾号为77777777的手机靓号以254.4万元成交,但买家仅获得使用权,需每月最低消费1000元。该号码因其独特性和稀缺性,被视为身份和地位的象征。#手机靓号拍卖# #阿里资产拍卖#
    ———————-
    标题: 华为 Mate 60 Pro+、nova 12 UItra 等机型适配支持运营商北斗卫星短信功能
    发布时间: 2025-03-09T12:10:13.56
    新闻简介: 华为官网现更新了各机型卫星功能适配情况,IT之家注意到,华为 Mate 60 Pro+、nova 12 UItra 等机型已适配支持运营商北斗卫星短信功能。
    ———————-

    —- IT之家新闻 End —-

  • Lvm 的概念和基本使用详解


    共计 7786 个字符,预计需要花费 20 分钟才能阅读完成。

    一、LVM 是什么

    LVM 是 Logical Volume Manager(逻辑卷管理)的简写,它是 Linux 环境下对磁盘分区进⾏管理的⼀种机制。

    安装 Linux 操作系统时遇到的⼀个常⻅的难以决定的问题就是如何正确地评估各分区⼤⼩,以分配合适的硬盘空间; 普通的磁盘分区管理⽅式在逻辑分区划分好之后就⽆法改变其⼤⼩; 随着 Linux 的逻辑卷管理功能的出现,这些问题都迎刃⽽解,⽤户在⽆需停机的情况下可以⽅便地调整各个分区⼤⼩,即动态调整磁盘容量,从⽽提⾼磁盘管理的灵活性。

    相关概念:s

    • PV(Physical Volume):物理卷

    处于 LVM 最底层,可以是物理硬盘或者分区,整个硬盘,或使⽤fdisk 等⼯具建⽴的普通分区,包括许多默认 4MB ⼤⼩的 PE(Physical Extent,基本单元)。

    • PE(Physical Extend):物理区域

    PV 中可以⽤于分配的最⼩存储单元,可以在创建 PV 的时候制定(默认为 4MB),如 1M, 2M, 4M, 8M, 32M, 64M… 组成同⼀VG 中所有 PV 的 PE⼤⼩应该相同。

    • VG(Volume Group):卷组

    建⽴在 PV 之上,可以含有⼀个到多个 PV,⼀个或多个物理卷组合⽽成的整体。

    • LV(Logical Volume):逻辑卷

    建⽴在 VG 之上,相当于原来分区的概念,不过⼤⼩可以动态改变。从卷组中分割出的⼀块空间,⽤于建⽴⽂件
    系统。

    PV(PE)–>VG–>(PE*n)LV–>⽬录挂载

    Lvm 的概念和基本使用详解

    />

    二、基础命令

    序号 功能 PV 物理卷命令 VG 卷组命令 LV 逻辑卷命令
    01 扫描功能 pvscan vgscan lvscan
    02 建⽴功能 pvcreate vgcreate lvcreate
    03 查询功能 pvdisplay vgdisplay lvdisplay
    04 删除功能 pvremove vgremove lvremove
    05 扩容功能 vgextend lvextend
    06 缩容功能 vgreduce lvreduce

    需要先使用 fdisk 命令进行一个分区设置。
    演示这里使用的是两块磁盘 /dev/sdb 和 /dev/sdc 各设置一个分区。

    1、pv 相关命令

    • 创建pv
    [root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1
      Physical volume "/dev/sdb1" successfully created.
      Physical volume "/dev/sdc1" successfully created.

    pvcreate 的作用就是将磁盘打散成一块块同样大小的 PE。

    • 查询pv
    # 简单查看
    [root@localhost ~]# pvs
      PV         VG     Fmt  Attr PSize   PFree
      /dev/sda2  centos lvm2 a--  <31.00g  4.00m
      /dev/sdb1         lvm2 ---   <2.00g <2.00g
      /dev/sdc1         lvm2 ---   <2.00g <2.00g
    # 详细查看
    [root@localhost ~]# pvdisplay
      --- Physical volume ---
      PV Name               /dev/sda2
      VG Name               centos
      PV Size               <31.00 GiB / not usable 3.00 MiB
      Allocatable           yes
      PE Size               4.00 MiB
      Total PE              7935
      Free PE               1
      Allocated PE          7934
      PV UUID               EXKt0P-ICEf-iwsx-zZAI-I3G1-JZNX-DdXKxl
    
      "/dev/sdb1" is a new physical volume of "<2.00 GiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdb1
      VG Name
      PV Size               <2.00 GiB
      Allocatable           NO
      PE Size               0
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               cLIVA5-V3Rg-YOen-TIlu-AanQ-BlRP-92y7Uw
    
      "/dev/sdc1" is a new physical volume of "<2.00 GiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdc1
      VG Name
      PV Size               <2.00 GiB
      Allocatable           NO
      PE Size               0
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               aKMxlM-XGO1-JnlM-cPS0-8xH6-oyml-AXwUSR

    /dev/sda2 是系统本身就存在的 pv。/dev/sdb1/dev/sdc1 都是设置的 2g 大小的硬盘,这里提示小于 2g 是因为存自身数据占用了一部分,大概 4M。

    • 扫描pv
    [root@localhost ~]# pvscan
      PV /dev/sda2   VG centos          lvm2 [<31.00 GiB / 4.00 MiB free]
      PV /dev/sdb1                      lvm2 [<2.00 GiB]
      PV /dev/sdc1                      lvm2 [<2.00 GiB]
      Total: 3 [34.99 GiB] / in use: 1 [<31.00 GiB] / in no VG: 2 [<4.00 GiB]
    • 删除pv
    [root@localhost ~]# pvremove /dev/sdb1 /dev/sdc1
      Labels on physical volume "/dev/sdb1" successfully wiped.
      Labels on physical volume "/dev/sdc1" successfully wiped.

    2、vg 相关命令

    • 创建vg

    为了演示扩容,先用一个 pv 来创建 vg。

    [root@localhost ~]# vgcreate vg1 /dev/sdb1
      Volume group "vg1" successfully created
    • 查询vg
    # 简单查询
    [root@localhost ~]# vgs
      VG     #PV #LV #SN Attr   VSize   VFree
      centos   1   2   0 wz--n- <31.00g  4.00m
      vg1      1   0   0 wz--n-  <2.00g <2.00g
    # 详细查询
    [root@localhost ~]# vgdisplay
      --- Volume group ---
      VG Name               vg1
      System ID
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  1
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                0
      Open LV               0
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               <2.00 GiB
      PE Size               4.00 MiB
      Total PE              511
      Alloc PE / Size       0 / 0
      Free  PE / Size       511 / <2.00 GiB
      VG UUID               BOlSmN-nujL-ydgL-LPlP-qLgs-WcDK-VCrf0p
    
      --- Volume group ---
      VG Name               centos
      System ID
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  9
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                2
      Open LV               2
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               <31.00 GiB
      PE Size               4.00 MiB
      Total PE              7935
      Alloc PE / Size       7934 / 30.99 GiB
      Free  PE / Size       1 / 4.00 MiB
      VG UUID               K2WSC3-MlER-hHUD-t2rZ-SDLE-bJnM-Xq8Wdd
    • 删除vg

    vg 在没用使用的情况下可以直接删除。

    [root@localhost ~]# vgremove vg1
      Volume group "vg1" successfully removed

    如果使用 vg 创建了 lv,同时删除 lv。

    [root@localhost ~]# vgremove vg1
    Do you really want to remove volume group "vg1" containing 1 logical volumes? [y/n]: y
    Do you really want to remove active logical volume vg1/lvol0? [y/n]: y
      Logical volume "lvol0" successfully removed
      Volume group "vg1" successfully removed

    3、lv 相关命令

    • 创建lv
    # 1、使用 -l 参数,使用vg1空闲100%创建一个新的lv
    [root@localhost ~]# lvcreate -l +100%FREE /dev/vg1
      Logical volume "lvol0" created.
    # 2、通过 vgdisplay 命令查询到空闲空间大小,PE大小 * 剩余PE数量
    [root@localhost ~]# lvcreate -L +2024M /dev/vg1
      Logical volume "lvol0" created.

    这里直接创建一个新的lv,占用100%的vg,如果想需要再增加空间必须扩展vg的大小。

    挂载前需要进行格式化

    [root@localhost ~]# mkfs.ext4 /dev/vg1/lvol0

    挂载

    [root@localhost ~]# mount /dev/vg1/lvol0 /mnt/
    • 查询 lv
    [root@localhost ~]# lvs
      LV    VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      root  centos -wi-ao---- 28.99g
      swap  centos -wi-ao----  2.00g
      lvol0 vg1    -wi-a----- <2.00g
    [root@localhost ~]# lvdisplay
      --- Logical volume ---
      LV Path                /dev/centos/swap
      LV Name                swap
      VG Name                centos
      LV UUID                Ca5lMo-NfBk-Ag1C-nKmM-ekFz-1B00-Okm5FC
      LV Write Access        read/write
      LV Creation host, time localhost, 2022-09-07 17:13:31 +0800
      LV Status              available
      # open                 2
      LV Size                2.00 GiB
      Current LE             512
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     8192
      Block device           253:1
    
      --- Logical volume ---
      LV Path                /dev/centos/root
      LV Name                root
      VG Name                centos
      LV UUID                G2S2Aw-a22b-fQMc-uj2O-2D0h-VRvn-uUcFA5
      LV Write Access        read/write
      LV Creation host, time localhost, 2022-09-07 17:13:31 +0800
      LV Status              available
      # open                 1
      LV Size                28.99 GiB
      Current LE             7422
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     8192
      Block device           253:0
    
      --- Logical volume ---
      LV Path                /dev/vg1/lvol0
      LV Name                lvol0
      VG Name                vg1
      LV UUID                4GiMpd-hVhJ-wHbS-nsVa-ORKT-qq7n-bAlCOg
      LV Write Access        read/write
      LV Creation host, time localhost.localdomain, 2022-11-07 11:14:10 +0800
      LV Status              available
      # open                 0
      LV Size                <2.00 GiB
      Current LE             511
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     8192
      Block device           253:2
    • 扫描lv
    [root@localhost ~]# lvscan
      ACTIVE            '/dev/centos/swap' [2.00 GiB] inherit
      ACTIVE            '/dev/centos/root' [28.99 GiB] inherit
      ACTIVE            '/dev/vg1/lvol0' [<2.00 GiB] inherit
    • 删除lv
    # 没有进行挂载可以直接删除
    [root@localhost ~]# lvremove /dev/vg1/lvol0
    Do you really want to remove active logical volume vg1/lvol0? [y/n]: y
      Logical volume "lvol0" successfully removed
    # 已经挂载的,需要先 umount
    [root@localhost ~]# lvremove /dev/vg1/lvol0
      Logical volume vg1/lvol0 contains a filesystem in use.
    [root@localhost ~]# umount /dev/vg1/lvol0
    [root@localhost ~]# lvremove /dev/vg1/lvol0
    Do you really want to remove active logical volume vg1/lvol0? [y/n]: y
      Logical volume "lvol0" successfully removed

    三、扩容

    前面都是最基础的创建、删除、查看等操作,接下来看看扩容怎么操作。

    之前创建 lv 使用了 vg1 的全部空间,可以使用 vgdisplay 命令查看。

    [root@localhost ~]# pvdisplay
      --- Physical volume ---
      PV Name               /dev/sda2
      VG Name               centos
      PV Size               <31.00 GiB / not usable 3.00 MiB
      Allocatable           yes
      PE Size               4.00 MiB
      Total PE              7935
      Free PE               1
      Allocated PE          7934
      PV UUID               EXKt0P-ICEf-iwsx-zZAI-I3G1-JZNX-DdXKxl
    
      --- Physical volume ---
      PV Name               /dev/sdb1
      VG Name               vg1
      PV Size               <2.00 GiB / not usable 3.00 MiB
      Allocatable           yes (but full)
      PE Size               4.00 MiB
      Total PE              511
      Free PE               0
      Allocated PE          511
      PV UUID               5QwCbX-mNJb-Gfe3-hQju-sTiR-TP1t-i1EofG
    
      "/dev/sdc1" is a new physical volume of "<2.00 GiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdc1
      VG Name
      PV Size               <2.00 GiB
      Allocatable           NO
      PE Size               0
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               qFAJ34-6Ef7-0PEw-letM-4Asq-sp0j-sKNuFn

    可以看见 vg1 没有空闲的 PE。

    此时如果直接对 lv 进行扩容,则会出现如下提示:

    [root@localhost ~]# lvextend -L +2000M /dev/vg1/lvol0
      Insufficient free space: 500 extents needed, but only 0 available

    提示扩容需要 500 数量的 PE,但是0个可用。(1个PE大小为4M)

    如果 vg 的空间大小足够,则不需要扩容 vg,直接使用 resize2fs

    1. 扩容 vg
    [root@localhost ~]# vgextend vg1 /dev/sdc1
      Volume group "vg1" successfully extended
    1. 扩容 lv
    [root@localhost ~]# lvextend -L +2000M /dev/vg1/lvol0
      Size of logical volume vg1/lvol0 changed from <2.00 GiB (511 extents) to <3.95 GiB (1011 extents).
      Logical volume vg1/lvol0 successfully resized.

    查看磁盘空间。

    [root@localhost ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    devtmpfs                 908M     0  908M    0% /dev
    tmpfs                    919M     0  919M    0% /dev/shm
    tmpfs                    919M  8.6M  911M    1% /run
    tmpfs                    919M     0  919M    0% /sys/fs/cgroup
    /dev/mapper/centos-root   29G  1.5G   28G    6% /
    /dev/sda1               1014M  189M  826M   19% /boot
    tmpfs                    184M     0  184M    0% /run/user/0
    /dev/mapper/vg1-lvol0    2.0G  6.0M  1.9G    1% /mnt

    发现 /dev/mapper/vg1-lvol0的空间还是2g。

    此时不能使用 mkfs.ext4 命令,否则原来的文件会丢失。

    1. resize2fs
    [root@localhost ~]# resize2fs /dev/vg1/lvol0
    resize2fs 1.42.9 (28-Dec-2013)
    Filesystem at /dev/vg1/lvol0 is mounted on /mnt; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 1
    The filesystem on /dev/vg1/lvol0 is now 1035264 blocks long.
    
    [root@localhost ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    devtmpfs                 908M     0  908M    0% /dev
    tmpfs                    919M     0  919M    0% /dev/shm
    tmpfs                    919M  8.6M  911M    1% /run
    tmpfs                    919M     0  919M    0% /sys/fs/cgroup
    /dev/mapper/centos-root   29G  1.5G   28G    6% /
    /dev/sda1               1014M  189M  826M   19% /boot
    tmpfs                    184M     0  184M    0% /run/user/0
    /dev/mapper/vg1-lvol0    3.9G  8.0M  3.7G    1% /mnt

    注意:

    如果是 xfs 文件系统,需要使用 xfs_growfs

    [root@localhost /]# xfs_growfs /dev/centos/root
    meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=1900032 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0 spinodes=0
    data     =                       bsize=4096   blocks=7600128, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=3711, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 7600128 to 8124416

    提醒:本文发布于853天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室

  • KVM 详解命令行安装以及 web 页面进行管理


    共计 5208 个字符,预计需要花费 14 分钟才能阅读完成。

    一、KVM介绍

    kvm 是 Kernel-based Virtual Machine 的简称,是一个开源的系统虚拟化模块,自 Linux2.6.20 之后集成在 Linux 的各个主要发行版本中。它使用 Linux 自身的调度器进行管理,所以相对于 Xen,其核心源码 很少。KVM 目前已成为学术界的主流 VMM 之一。
    KVM 的虚拟化需要硬件支持(如 IntelVT 技术或者 AMDV 技术)。是基于硬件的完全虚拟化。 而 Xen 早期则是基于软件模拟的 Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但 Xen 本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件 VMwareESX 系列是基于软件模拟的 Full-Virtualization。

    因为对进程管理比较麻烦,RedHat 发布了一个开源项目 libvirt。libvirt 有命令行工具也有 API,可 以通过图形化界面,完成对虚拟机的管理。大多数管理平台通过 libvirt 来完成对 KVM 虚拟机的管理; 比如 Openstack、Cloudstack、OpenNebula 等。

    KVM 详解命令行安装以及 web 页面进行管理

    />

    二、创建虚拟机

    1. 查看 cpu 是否支持虚拟化

    egrep -c '(vmx|svm)' /proc/cpuinfo

    0表示不支持,其他表示支持。

    2. 安装相关软件包并启动

    # ubuntu
    apt install -y qemu qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    # centos
    yum install -y qemu qemu-kvm libvirt virt-install bridge-utils
    • qemu 是可以仿真出操作系统的仿真软件,但是速度很慢。
    • qemu-kvm 是 qume 和 kvm 的整合,kvm 主要负责虚拟化 cpu、内存,其他的如网络、硬盘等由 qume 负责虚拟化。
    • libvirt-bin 这个包拆分为libvirt-daemon-system libvirt-clients,主要负责管理 kvm
    • bridge-utils 用来管理桥接网卡

    启动 libvirtd:

    systemctl start libvirtd && systemctl enable libvirtd

    查看kvm服务是否正常:

    virsh -c qemu:///system list

    3. 创建桥接网卡(可选)

    如果不创建桥接网卡,则默认网络模式为 nat,与其他虚拟机不互通。通过网卡桥接,可以使创建的虚拟机与宿主机处在同一网段。

    首先确保需要桥接的网卡是一块有线网卡,无线网卡不支持,且有线网卡需要设置为 dhcp。

    3.1 Ubuntu

    3.1.1 新建网桥
    • 命令行方式创建网桥(重启失效)
    # 创建一块br0的网桥
    brctl addbr br0
    # 将物理网卡作为接口接在br0网桥上
    brctl addif br0 enp2s0
    # 给br0设置ip
    ifconfig br0 172.21.9.199/24 up
    • 配置文件方式创建网桥

    修改 /etc/netplan/01-network-manager-all.yaml 文件

    network:
      version: 2
      renderer: NetworkManager
      ethernets:
        enp2s0:
          dhcp4: false
          dhcp6: false
      bridges:
        br0:
          interfaces: [enp2s0]
          dhcp4: false
          addresses: [172.21.9.199/24]
          nameservers:
            addresses: [114.114.114.114,8.8.8.8]
    

    重新配置网络:

    netplan apply

    理论上是这样设置,但是不知为何我失败了……

    3.1.2 创建qemu/kvm使用virsh网络
    # 进入qume的网卡配置目录
    cd /etc/libvirt/qemu/networks
    # 创建br0的桥接网卡桥接在br0网桥-配置文件
    cat > br0.xml <<EOF
    <network>
      <name>br0</name>
      <uuid>e2527501-bba0-4576-85fb-e3b51629cef7</uuid>
      <forward mode='bridge'/>
      <bridge name='br0'/>
    </network>
    EOF
    # 创建网卡、开启网卡、自启动网卡
    virsh net-define br0.xml && \
    virsh net-start br0 && \
    virsh net-autostart br0
    # 查看网卡信息
    virsh net-list --all

    3.2 Centos

    3.2.1 新建网桥

    原来的网卡ifcfg-eth0配置:

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=eth0
    UUID=38f146bb-9a35-4407-9071-936655c84307
    DEVICE=br0
    ONBOOT=yes
    
    IPADDR=172.21.9.204
    GATEWAY=172.21.9.254
    NETMASK=255.255.255.0
    DNS1=114.114.114.114
    DNS2=8.8.8.8

    需要先创建网桥 br0,然后将 eth0 桥接到 br0 上。

    # 复制 eth0 配置文件
    cp ifcfg-eth0 ifcfg-br0

    ifcfg-eth0 修改,将原来网卡的静态ip改为none,并注释相关IP、网关配置,然后添加 BRIDGE=br0。

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=none
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=eth0
    UUID=38f146bb-9a35-4407-9071-936655c84307
    DEVICE=eth0
    ONBOOT=yes
    
    #IPADDR=172.21.9.204
    #GATEWAY=172.21.9.254
    #NETMASK=255.255.255.0
    #DNS1=114.114.114.114
    #DNS2=8.8.8.8
    BRIDGE=br0

    ifcfg-br0 修改为静态 ip 设置,并修改TYPE、NAME、UUID、DEVICE,最重要的这里 TYPE 要改为桥接。

    TYPE=Bridge
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=br0
    UUID=38f146bb-9a35-4407-9071-936655c84307
    DEVICE=br0
    ONBOOT=yes
    
    IPADDR=172.21.9.204
    GATEWAY=172.21.9.254
    NETMASK=255.255.255.0
    DNS1=114.114.114.114
    DNS2=8.8.8.8

    重启网卡:

    systemctl restart network
    3.2.2 创建qemu/kvm使用virsh网络
    # 进入qume的网卡配置目录
    cd /etc/libvirt/qemu/networks
    # 创建br0的桥接网卡桥接在br0网桥-配置文件
    cat > br0.xml <<EOF
    <network>
      <name>br0</name>
      <uuid>e2527501-bba0-4576-85fb-e3b51629cef7</uuid>
      <forward mode='bridge'/>
      <bridge name='br0'/>
    </network>
    EOF
    # 创建网卡、开启网卡、自启动网卡
    virsh net-define br0.xml && \
    virsh net-start br0 && \
    virsh net-autostart br0
    # 查看网卡信息
    virsh net-list --all

    4. 创建虚拟机

    上传 centos7 镜像CentOS-7-x86_64-Minimal-2009.iso 到宿主姐的 opt 目录下。

    virt-install \
    --name=centos7 \
    --virt-type=kvm \
    --os-type=linux  \
    --os-variant=rhel7 \
    --vcpus=4,maxvcpus=4 \
    --memory=1024,maxmemory=2048 \
    --location=/opt/CentOS-7-x86_64-Minimal-2009.iso \
    --disk path=/var/lib/libvirt/images/centos7.qcow2,size=20,format=qcow2 \
    --network bridge=br0 \
    --graphics vnc,listen=0.0.0.0,port=5900 \
    --noautoconsole

    如果没有配置桥接,需要指定 –network network=default。

    参数解释:

    • –name:虚拟机名称
    • –virt-type:要使用的管理程序名称,如 kvm、qemu、xen 等
    • –os-type:针对一类操作系统优化虚拟机配置,如 linux、window
    • –os-variant:针对特定操作系统变体 rhel7.0、win10 进一步优化虚拟机配置
    • –vcpus=4:分配给虚拟机的 cpu 核数
    • –memory=1024:分配给虚拟机的内存
    • –location:安装源,有本地、nfs、http、ftp几种,多用于ks网络安装
    • –disk:  使用不同选项作为磁盘使用安装介质
    • –network: 设置网络(如:–network network=default,bridge=br0)
    • –graphics:设置 vnc
    • –noautoconsole:不要自动尝试连接到客户端控制台

    三、安装 web 管理面板(可选)

    docker run -d \
    --name webvirtmgr \
    -v /home/docker/webvirtmgr/data/:/data/ \
    -e WEBVIRTMGR_ADMIN_USERNAME=admin \
    -e WEBVIRTMGR_ADMIN_EMAIL=admin@local.domain \
    -e WEBVIRTMGR_ADMIN_PASSWORD=password \
    -p 8000:8000 \
    --restart=always \
    odivlad/webvirtmgr

    进入容器生成 ssh 秘钥,并将公钥复制到宿主机。

    # 进入容器
    docker exec -it webvirtmgr bash
    # 生成秘钥
    ssh-keygen -t rsa -N '' -f  ~/.ssh/id_rsa -q
    # 设置免密登录,xxx 为宿主机 ip
    ssh-copy-id -i ~/.ssh/id_rsa.pub xxx

    接下来就可以使用 web 界面,以 ssh 的方式管理虚拟机了。

    KVM 详解命令行安装以及 web 页面进行管理

    />

    四、相关命令

    • 基本操作
    # 查看虚拟机
    virsh list --all
    # 开启虚拟机
    virsh start centos7
    # 关闭虚拟机
    virsh shutdown centos7
    # 重启虚拟机
    virsh reboot centos7
    # 删除虚拟机
    virsh destroy centos7
    • 快照

    生成快照,快照文件位置 /var/lib/libvirt/qemu/snapshot/

    进行快照之前需要确保磁盘格式必须是qcow2,因为raw格式是不支持快照的。

    # 生成快照
    virsh snapshot-create centos7 # 生成随机快照名称
    virsh snapshot-create-as centos7 init-snapshot # 生成指定名称快照
    # 删除快照
    virsh snapshot-delete centos7 init-snapshot
    # 查看快照信息
    virsh snapshot-info centos7 init-snapshot
    qemu-img info /var/lib/libvirt/images/centos7.qcow2
    # 恢复快照
    virsh snapshot-revert centos7 init-snapshot
    # 删除快照
    virsh snapshot-delete centos7 test

    提醒:本文发布于849天前,文中所关联的信息可能已发生改变,请知悉!

    Tips:清朝云网络工作室