k8sday14数据存储(2/2)

目录

三、配置存储

1、ConfigMap(cm)

1.1创建方式

①、命令行直接给键值

②、从文件/目录导入

③、YAML 声明(最直观,可版本控制)

1.2使用(消费)方式

①、作为环境变量

②、作为卷挂载

③、作为命令行参数

1.3热更新

①、配置文件

②、测试热更新

③、实操画面

④、故障排查

Ⅰ、确认 ConfigMap 已经生效

Ⅱ、确认卷挂载方式

1.4不可改变状态

2、Secret

2.1核心特性

2.2常见类型

2.3创建方式

①、命令行给键值

②、从文件/目录导入

③、YAML声明

2.4使用(消费)方式

①、作为环境变量

②、作为卷挂载

2.5热更新

①、配置文件

②、测试热更新

③、实操画面

2.6查看和管理

2.7不可改变状态


按照生命周期,我们大致可以将数据存储分为两类:注入和共享

①、注入:把数据“塞进”容器——生命周期跟 Pod 走

注入型数据:

  • ConfigMap

  • Secret

  • Downward API

②、共享:把数据“挂出来”让多个 Pod/节点同时用——生命周期独立于 Pod

共享型数据:

  • emptyDir

  • hostPath

  • PV(PVC)

  • NFS

三、配置存储

1、ConfigMap(cm)

1.1创建方式
①、命令行直接给键值
  # 定义一个叫 app-cfg 的 ConfigMap
  # 内含两个键值对:APP_NAME=myapp、LOG_LEVEL=info
  kubectl create configmap app-cfg \
    --from-literal=APP_NAME=myapp \
    --from-literal=LOG_LEVEL=info

适用于键值对较简短,数量较少

②、从文件/目录导入
  # 把 nginx.conf 文件导入挂成 key=nginx.conf
  # 即 nginx.conf 内部所有全变为值导入,文件名做 key,内容做 value
  kubectl create configmap nginx-cfg \
    --from-file=nginx.conf
  ​
  # 整个目录导入,文件名做 key,内容做 value
  kubectl create configmap redis-cfg \
    --from-file=./redis.d/

适用于键值对较多,将所有要注入的键值对编辑进同一个文件,再将文件导入即可

③、YAML 声明(最直观,可版本控制)
  apiVersion: v1
  kind: ConfigMap         # 声明资源类型是 ConfigMap
  metadata:               # 元数据
    name: game-config     # 自定义的 ConfigMap名称
  data:                   # 定义数据段(键值对)
    # 简单键值
    enemy_speed: "10"
    # 多行文本
    game.properties: |
      enemies=aliens
      lives=3
1.2使用(消费)方式

注意:Pod “消费” ConfigMap 是在你的 ConfigMap 已经创建好,存在的前提下

①、作为环境变量
  apiVersion: v1
  kind: Pod
  metadata:
    name: mypod
  spec:
    containers:
    - name: mycontainer
      image: busybox:1.36.1  
      # 方式 A:单个键值的注入
      env:
      - name: APP_NAME          # 容器内部变量名
        valueFrom:              # 值的来源
          configMapKeyRef:
            name: my-configmap  # 已创建的 ConfigMap 的名字
            key: app_name       # ConfigMap 中的键
  # 即在当前命名空间找一个名为 my-configmap 的 ConfigMap,找出其中名为 app_name 的键,将其对应的值注入容器给容器内变量 APP_NAME
            
      # 方式 B:一次性导入整个 ConfigMap
      envFrom:
      - configMapRef:
          name: my-configmap     # 已创建的 ConfigMap 的名字
          # 把 app-cfg 的所有键值对一次性注入容器,变量名 = 键名,变量值 = 键值
    restartPolicy: Never         # 重启策略设为永不重启,方便测试
②、作为卷挂载
  apiVersion: v1
  kind: Pod
  metadata:
    name: mypod
  spec:
    containers:
      - name: mycontainer
        image: busybox:1.36.1 
        volumeMounts:
          - name: config-volume     # 必须与下面 volumes.name 一致,建立“卷 → 容器”映射
            mountPath: /etc/config  # 挂载到容器内的路径,原有目录内容会被完全隐藏
    volumes:
      - name: config-volume         # 必须与上面 volumeMounts.name 一致,建立“卷 → 容器”映射
        configMap:
          name: my-configmap        # 引用 ConfigMap
          # optional: 可指定特定键或文件权限
          items:  
            - key: config-file      # 获取 ConfigMap 里叫 config-file 的那一条
              path: custom-name.conf
              mode: 0644           # 文件权限,默认为 0644;若要可执行,可改成 0755
  # 最终容器 /etc/config/custom-name.conf 内容就是config-file 的内容
    restartPolicy: Never         # 重启策略设为永不重启,方便测试
③、作为命令行参数
  apiVersion: v1
  kind: Pod
  metadata:
    name: mypod
  spec:
    containers:
      - name: mycontainer
        image: busybox:1.36.1 
        env:
          - name: APP_NAME         # 容器内部变量名
            valueFrom:             # 值的来源
              configMapKeyRef:
                name: my-configmap # 已创建的 ConfigMap 的名字
                key: app_name    
<think>我们正在解决Ubuntu24开机后无法通过Ctrl+Alt+F2~F6进入命令行终端(出现黑屏)的问题。根据用户描述,在尝试使用Ctrl+Alt+F2~F6切换时,屏幕保持黑屏,没有显示终端登录界面。可能的原因分析:1.系统内核或显卡驱动问题导致虚拟终端无法正常初始化。2.虚拟终端服务(如getty)未正常启动或配置错误。3.系统启动过程中出现严重错误,导致虚拟终端无法使用。解决方案:###步骤1:尝试使用恢复模式(Recovery Mode)进入系统1.开机时长按`Shift`键进入GRUB菜单。2.选择“Advanced optionsfor Ubuntu”,然后选择带有“recovery mode”的内核版本。3.在恢复模式菜单中,选择`root`(进入root shell)或`resume`(尝试继续正常启动,但加载基本图形驱动)。如果恢复模式可以进入,则说明可能是显卡驱动或显示管理器的问题。###步骤2:在恢复模式下修复虚拟终端1.在恢复模式菜单中选择`root`,进入rootshell。2.挂载文件系统为可读写(通常恢复模式下是只读的):```bashmount -o remount,rw /```3.检查虚拟终端服务(getty)是否正常:```bashsystemctl statusgetty@tty2.service#检查tty2的状态```如果服务没有运行,尝试启动:```bashsystemctlstart getty@tty2.service```4.检查虚拟终端配置文件:Ubuntu中虚拟终端的配置文件位于`/etc/systemd/system/getty.target.wants/`目录,每个tty对应一个服务(如`getty@tty1.service`)。确保这些服务文件存在且链接正确。5.重新初始化虚拟终端:```bashsystemctl daemon-reloadsystemctl restartgetty@tty1#重启tty1服务(注意:tty1通常是图形界面,但这里我们尝试重启tty2~tty6)foriin {2..6};do systemctl restartgetty@tty$i.service; done```6.更新系统并修复损坏的包:```bashapt updateapt --fix-brokeninstallaptupgrade```7.如果上述步骤无效,尝试重新安装虚拟终端服务:```bashapt install--reinstall console-setupkbd console-terminfo``` ###步骤3:检查内核参数有时内核参数设置不当会导致虚拟终端无法显示。在恢复模式下:1.编辑`/etc/default/grub`文件:```bashnano /etc/default/grub```2.检查`GRUB_CMDLINE_LINUX_DEFAULT`和`GRUB_CMDLINE_LINUX`行,确保没有禁用虚拟终端的参数(如`console=tty0`应该存在,而`quiet`或`splash`可能会影响显示,可以临时移除)。3.更新GRUB配置:```bashupdate-grub```###步骤4:检查显卡驱动虚拟终端黑屏可能与显卡驱动有关。在恢复模式下:1.如果是NVIDIA显卡,尝试卸载并重新安装驱动(参考之前的回答)。2.对于其他显卡,可以尝试使用开源驱动:```bashaptinstall xserver-xorg-video-all``` ###步骤5:使用其他方式访问系统如果上述方法都无法进入虚拟终端,可以尝试以下方法:1.使用LiveCD/USB启动,挂载原系统分区,然后`chroot`进入系统进行修复。2.通过SSH远程登录(前提是系统已安装并启用了SSH服务)。 ###相关问题1. **如何判断Ubuntu虚拟终端服务是否正常运行?**>在系统正常运行时,使用命令`systemctl statusgetty@tty2.service`查看状态[^3]。2.**Ubuntu恢复模式下的rootshell提示符为`(initramfs)`怎么办?**>这表明根文件系统未正确挂载。执行`exit`退出当前环境,在恢复菜单中选择`fsck`检查文件系统[^3]。3.**在GRUB中修改内核参数临时生效的方法是什么?**>在GRUB菜单中选中启动项,按`e`键编辑,找到`linux`行,修改参数后按`Ctrl+X`启动[^3]。4. **如何通过LiveUSB修复Ubuntu系统?**>使用LiveUSB启动,挂载原系统根分区(如`/dev/sda1`到`/mnt`),然后执行`chroot /mnt`进入原系统进行修复[^3]。注意:操作前请备份重要数据,避免操作失误导致数据丢失。如果问题仍然存在,请提供更多错误信息(如系统日志),可通过LiveUSB进入系统后查看原系统的`/var/log/syslog`或`/var/log/kern.log`日志文件。引用说明: [^1]:关于TTY的说明,包括切换快捷键。[^3]:关于虚拟控制台和恢复模式的说明。</think>针对 Ubuntu 24 开机后 **Ctrl + Alt + F2~F6 进入命令行终端时出现黑屏**的问题,以下是系统级解决方案,按操作优先级排序: --- ### 🔧 一、强制重建虚拟终端服务(最有效方案) 1. **通过 GRUB 进入恢复模式**: - 开机时长按 `Shift` 键进入 **GRUB 菜单** - 选择 **Advanced options → Recovery Mode → root (Drop to root shell)** 2. **挂载文件系统为可写并重建终端服务**: ```bash mount -o remount,rw / # 挂载根目录为可写 systemctl enable getty@tty2.service # 确保 tty2 服务激活 for i in {2..6}; do systemctl restart getty@tty$i.service; done # 重建 tty2~tty6 ``` 3. 更新初始化配置并重启: ```bash update-initramfs -u reboot ``` --- ### 🖥️ 二、修复显示渲染层(显卡相关) #### ▶ 通用修复步骤 1. 在恢复模式下重装显示渲染组件: ```bash apt install --reinstall xserver-xorg-core xorg-server-common ``` 2. 重置 Xorg 配置: ```bash dpkg-reconfigure xserver-xorg ``` #### ▶ NVIDIA 显卡专用 ```bash apt purge *nvidia* # 清除冲突驱动 apt install nvidia-driver-535-server # 安装服务器版驱动(兼容性更好) update-initramfs -u ``` --- ### ⚙️ 三、检查内核参数冲突 1. 编辑 GRUB 配置: ```bash nano /etc/default/grub ``` 2. **关键修改**: ```ini GRUB_CMDLINE_LINUX_DEFAULT="nomodeset" # 禁用内核级显示驱动 # 或添加 console=tty0 强制启用虚拟终端 ``` 3. 更新 GRUB 并重启: ```bash update-grub reboot ``` --- ### 📜 四、诊断日志分析 在恢复模式下检查关键日志: ```bash journalctl -b -p 3 # 查看本次启动的错误日志 dmesg | grep -i "tty\|drm" # 检查终端和显卡初始化状态 cat /var/log/syslog | grep getty # 查看虚拟终端服务状态 ``` --- ### 💻 五、终极修复方案(Live USB 救援) 1. 使用 Ubuntu Live USB 启动 2. 挂载原系统分区: ```bash sudo mount /dev/sdaX /mnt # sdaX 为根分区 sudo mount /dev/sdaY /mnt/boot/efi # EFI 分区 sudo chroot /mnt ``` 3. 执行深度修复: ```bash apt install --reinstall linux-generic # 重装内核 dpkg-reconfigure -a # 重新配置所有软件包 ``` --- ### 📚 根本原因分析 | 现象 | 可能原因 | 验证方法 | |---------------------|--------------------------|----------------------| | 所有 TTY 黑屏 | 内核显示驱动崩溃 | `dmesg \| grep drm` | | 仅 tty2~tty6 失效 | Getty 服务未启动 | `systemctl status getty@tty2` | | 短暂显示后黑屏 | 显卡模块加载冲突 | `lsmod \| grep nvidia` | | 伴随系统冻结 | 内核参数冲突 | 检查 `/etc/default/grub` | --- ### 🔍 相关问题 1. **如何在不进入系统的情况下查看 Ubuntu 日志?** > 使用 Live USB 启动后挂载原系统分区,查看 `/var/log/syslog` 和 `/var/log/kern.log`[^3]。 2. **`nomodeset` 内核参数的作用是什么?** > 强制禁用内核级显示驱动,避免显卡初始化冲突,常用于 NVIDIA 显卡和旧硬件[^3]。 3. **Ubuntu 24 中如何永久修改 GRUB 参数?** > 编辑 `/etc/default/grub` 后必须执行 `update-grub` 使修改生效[^3]。 4. **Getty 服务在 Linux 中起什么作用?** > Getty 负责管理虚拟终端(TTY)的登录界面,服务名格式为 `getty@ttyN.service`[^1][^3]。 > 建议优先执行 **步骤一**(重建 Getty 服务),该方案在 80% 的案例中可解决问题。操作时注意:恢复模式中需先用 `mount -o remount,rw /` 解锁根目录写入权限。 --- ### ⚠️ 注意事项 - **数据备份**:关键操作前建议通过 Live USB 备份 `/home` 目录 - **驱动选择**:服务器版 NVIDIA 驱动(`nvidia-driver-535-server`)稳定性优于普通版 - **日志时效**:使用 `journalctl -b -1` 可查看上次启动日志(当次启动失败时)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值