k8sday03搭建kubernetes集群(2/2)

今天继续完成k8s的集群搭建,没看上一篇的建议看看上一篇,有超详细的搭建思路哦~

创建多节点集群

1、编写kind文件

①注意事项:
  • 配置文件的编写工具:任何文本编辑器编写均可,eg、Notepad、Vs Code等等

    • 使用记事本编写,默认保存为 UTF-8 with BOM,可能导致 Kind 无法识别,只需要在保存文件的时候选择“另存为” → 编码选择 UTF-8

  • 文件保存格式:必须是 YAML 格式(后缀为 .yaml.yml

  • 配置文件保存位置:任意目录均可(当然你要记得住呀,待会利用配置文件创建集群的时候要用得着哦~)

②编写文件并保存
  • 【基础配置,只为搭建最简单的集群】在你的配置文件中写入:

  kind: Cluster
  apiVersion: kind.x-k8s.io/v1alpha4
  nodes:
    - role: control-plane  # Master 节点
    - role: worker         # Worker 节点 1
    - role: worker         # Worker 节点 2
  • 【高级配置,应对你有特别需求】如我需要指定版本或暴露 Master 节点的端口等等

    在你的配置文件中写入:

  kind: Cluster
  apiVersion: kind.x-k8s.io/v1alpha4
  nodes:
    - role: control-plane          # Master 节点
     extraPortMappings:
     - containerPort: 6443
       hostPort: 36443  # 宿主机端口,之后可以通过localhost:36443访问API Server
       protocol: TCP
      image: kindest/node:v1.27.3  # 指定版本
    - role: worker                 # Worker 节点 1
      image: kindest/node:v1.27.3  # 指定版本
    - role: worker                 # Worker 节点 2
      image: kindest/node:v1.27.3  # 指定版本

注意:Kind 对节点角色有严格的命名规范,不能自定义名称,也就是说你的配置文件中的角色名称不可 以自定义!!!

Kind 目前不支持动态扩容,如果要增加新的节点,需删除,然后修改你的配置文件并重建集群

之后如下图保存在你的任意目录中

2、使用配置文件创建集群

本步创建集群有两种方法,一种是使用绝对路径创建,一种是相对路径创建

Ⅰ、绝对路径
  # 先进入你的Ubuntu或者是其他发行版
  wsl -d Ubuntu
  ​
  # 使用配置文件创建集群
  kind create cluster --name my-multi-node-cluster1 --config "/mnt/e/cloud-native/k8s/kindconfigfile1.yaml"
Ⅱ、相对路径

  # 先进入你的Ubuntu或者是其他发行版
  wsl -d Ubuntu
  ​
  # 先移到你的配置文件所在目录
  cd /mnt/e/cloud-native/k8s/
  ​
  # 使用配置文件创建集群
  kind create cluster --name my-multi-node-cluster1 --config kindconfigfile1.yaml

--name :指的是你创建的多节点集群的名字,可自定义

--config :指的是你刚刚编辑的kind配置文件,后面要加入对应的路径(注意最好是使用Linux路径格式)


可能问题:Docker 无法从镜像仓库拉取 kindest/node:v1.29.2 镜像,这百分之八九十就是因为我们是在国内导致的网络问题,我们只要给我们的wsl2中的docker配置镜像源加速即可(你也可以将你Windows本地的docker中的镜像源复制加到Ubuntu中的docker),以下我提供一个简单的解决方法:

 # 首先确认 Docker 服务正在运行
  # 如果没启动报错就重启一下docker restart
  docker ps
  ​
  # 编辑 Docker 配置文件,一般在/etc/docker/daemon.json(若不存在则新建)
  # 配置镜像源,加速下载,但可能仍下载比较慢,但还是可以下下来的
  sudo tee /etc/docker/daemon.json <<EOF
  {
    "registry-mirrors": [
      "https://docker.mirrors.ustc.edu.cn",
      "https://registry-1.docker.io"
    ],
    "insecure-registries": []
  }
  EOF
  ​
  # 重启docker使修改生效
  sudo systemctl restart docker

如果还是拉取失败,看看你有没有关闭 VPN 或代理工具,这些也可能有影响

拉取成功,集群创建成功可以得到类似如图提示:

3、验证节点状态

输入以下代码验证:

   kubectl get nodes

你将会看到类似画面:

显示了 1 个 Master(control-plane)和 2 个 Worker 节点


可能问题:STATUS显示NOTREADY,这一般是多台虚拟机通过minikube或其他工具搭建集群容易遇到的问题,即网络问题,你可能需要配置部署一下CNI网络的一些插件,这也恰恰体现了kind的优势

4、查看主节点的核心组件

输入以下代码查看Pod:

  
   # 记住要指定你要查看的Pod的指定的命名空间
   kubectl get pods -n kube-system

如果正确搭建完成,可以看见如下输出:

5、kubectl核心基础命令

①常见资源类型
  • Pods----po(别名)

  • deployments----deploy(别名)

  • services----svc(别名)

  • namespace----ns(别名)

  • nodes----no(别名)

②、Pod操作
  • 创建Pod:kubectl create -f pod.yaml

  • 获取 Pod 列表:kubectl get pods

  • 删除 Pod:kubectl delete pod <pod-name>

  • 进入 Pod 的容器:kubectl exec -it <pod-name> -- /bin/sh

③、 Deployment 操作
  • 创建 Deployment:kubectl create -f deployment.yaml

  • 获取 Deployment 列表:kubectl get deployments

  • 更新 Deployment:kubectl set image deployment/<deployment-name> <container-name>=<new-image>

  • 删除 Deployment:kubectl delete deployment <deployment-name>

④. Service 操作
  • 创建 Service:kubectl create -f service.yaml

  • 获取 Service 列表:kubectl get services

  • 删除 Service:kubectl delete service <service-name>

⑤. Namespace 操作
  • 创建 Namespace:kubectl create namespace <namespace-name>

  • 获取 Namespace 列表:kubectl get namespaces

  • 删除 Namespace:kubectl delete namespace <namespace-name>

更多常见操作参考官方文档哈~

6、多节点使用kubectl【可选】

不建议在 Kubernetes Worker 节点上安装和使用 kubectl安全风险高维护复杂化资源浪费,但如果你想,觉得方便也可以

但是我更建议仅在 Control Plane 或外部机器使用 kubectl

①、进入你要安装kubectl的容器
②、在 容器内安装 kubectl
③、复制主节点的 kubeconfig 到容器

整体下来如下:

  docker exec -it <worker容器名称> /bin/bash
  ​
  # 下载 kubectl(使用国内镜像加速)
  curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl
  ​
  # 安装到可执行路径
  chmod +x kubectl
  mv kubectl /usr/local/bin/
  ​
  # 验证安装
  kubectl version --client
  ​
  # 查看主节点的 kubeconfig
  cat /etc/kubernetes/admin.conf
  ​
  # 复制主节点的 kubeconfig
  scp /etc/kubernetes/admin.conf
  ​
  # 创建 .kube 目录
  mkdir -p ~/.kube
  ​
  # 粘贴内容到配置文件
  cat > ~/.kube/config <<EOF
  <paste kubeconfig content here>
  EOF
  ​
  # 设置权限
  chmod 600 ~/.kube/config

<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` 可查看上次启动日志(当次启动失败时)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值