sealos issue #2157 debug 思路流程记录

news2024/12/25 12:15:59

sealos issues#2157 debug思路流程

  • 前言
  • 分析issue
  • 剖析源码
  • 解决方案
  • 总结

前言

这个项目蛮有意思的,sealos 是以 kubernetes 为内核的云操作系统发行版。

boss上看到 -> 沟通 -> 解决某个issue直接offer -> 舒服

本文记录解决 issue 的思路

分析issue

BUG: Clusterfile must has right sort of hosts, host[0] must be master role #2157

Clusterfile 里面的 host 数组字段,第一个元素必须是master node。

这里看到Clusterfile感觉很奇怪,后缀去哪了,啥玩意。后面看文中发现其实就是yaml文件。

并且使用与 kubectl 非常类似,这里我基本就可以断定要从cobra去手代码了。

为什么要从cobra去入手?因为我之前追过kubectl apply -f pod-command.yaml 的流程。

sealos apply -f Clusterfile

kubectl apply -f pod-command.yaml 

再回到Clusterfile, 注意这里的hosts。

apiVersion: apps.sealos.io/v1beta1
kind: Cluster
metadata:
  name: default
spec:
  # 服务器 IP 地址列表和角色
  hosts:
    - ips:
        - 192.168.0.2:22
      roles:
        - master
        - amd64
    - ips:
        - 192.168.0.5:22
        - 192.168.0.6:22
      roles:
        - node
        - amd64
  image:
    - labring/kubernetes:v1.25.0
    - labring/helm:v3.8.2
    - labring/calico:v3.24.1
  ssh:
    passwd: xxx
    pk: /root/.ssh/id_rsa
    port: 22
    user: root

在看看clusterfile_test.go单元测试里面是怎么写的,发现master是排在前面的。需要解决的问题:Clusterfile 里面的 host 数组字段,第一个元素必须是master node。
在这里插入图片描述
解决思路:不能依靠元素下标判断是否为master,需要通过string对比来确定。

剖析源码

这种写法,直接在源码里面找 cobra 的 apply

sealos apply -f Clusterfile

NewApplierFromFile 如其名,解析yaml文件到结构体中。
在这里插入图片描述
下面进入Apply 看,initCluster 初始化集群
在这里插入图片描述
进入Execute
在这里插入图片描述

先进入第一个类看看,发现对7个函数进行了包装然后顺序执行,这里关注RunGuest ,看看到底干了什么

在这里插入图片描述

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

Apply中,终于发现与master相关的函数了。进去看看!

在这里插入图片描述

WDF?这里代码逻辑:认为host[0]就是master
在这里插入图片描述
再来看看CmdAsync做了什么:与host建立连接,发送命令。
在这里插入图片描述
如果在Clusterfile文件中,把node写在master之上了,那么本来要发送给master的命令,现在发给node了。那么这里就是问题所在了。

解决方案

  1. 要么就规定好第一个就写master的ip
  2. 修改判断master的逻辑

现在,本来依赖于Clusterfile中host下标的 逻辑,就完美解决了。

在这里插入图片描述

总结

其实看到这个issue,到解决,三十分钟不到。难道是之前看过kubectl apply源码的原因嘛,感觉这个issue还挺简单的。

三台虚拟机,装 go 1.19.3 和 修改后编译好的sealos 。执行apply即可,apply的时候,会去拉k8s的镜像,巨慢。去改了镜像源还没用,干脆就放一晚上了慢慢拉了,go mod tidy有时候还会失败,心累。

在Clusterfile中把node放在master之上。看看apply是否出错,没错,ok了。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统常用的工具

1.1 Vscode编辑器 从官网下载 ubuntu 版本,官网地址:https://code.visualstudio.com/。下载xxx.deb的包。 或者使用指令下载:wget https://az764295.vo.msecnd.net/stable/6261075646f055b99068d3688932416f2346dd3b/code_1.73.1-1667967334…

基于Intel Lake-UP3平台为半导体与集成电路测试设备提供优异计算性能

为什么半导体和IC测试设备需要升级? 随着众多新的高性能应用的需求不断增加,信迈旨在为半导体集成电路测试设备领域的客户提供更好的方案。半导体和集成电路(IC)测试设备设计用于在一台测试机上同时对不同线路的数百个集成电路…

How Can We Know What Language Models Know?

Abstract 最近的工作通过让语言模型(LM)填补诸如“奥巴马是一个职业”之类的提示的空白,提出了一个有趣的结果,以检查语言模型(LM)中包含的知识。这些提示通常是手动创建的,而且很可能不是最佳…

Linux进程通信之进程信号

一、信号的概念: 信号机制是Linux最基本的通讯机制,它可以用来向一个或者多个进程发送异步事件信息,传送少量信息。信号是一个软件中断,并且是一个“软中断”(只是告诉有这样一个信号,但这个信号具体如何进…

Redis6入门到实战------思维导图+章节目录

Redis学习大纲 思维导图 思维导图 Redis6入门到实战------1、NoSQL数据库简介 地址: Redis6入门到实战------2、Redis6概述和安装 地址: Redis6入门到实战------3、常用五大数据类型 地址: Redis6入门到实战------4、Redis6配置文件详解…

Stack Overflow 临时禁用 ChatGPT 生成内容,网友:人类和AI快打起来!

如果有一天我们查询到的「知识」真假难辨,那这就太可怕了。 要问最近 AI 圈哪个模型最火爆,你不得不把 OpenAI 推出的 ChatGPT 排在前面。自从发布以来,这个对话模型可谓是出尽风头,很多人更是对其产生了一百个新玩法,…

Linux系统移植四:Petalinux使用本地sstate-cache加速构建根文件系统

根文件系统简介 根文件系统 rootfs 是Linux内核启动以后挂载(mount)的第一个文件系统,然后从根文件系统中读取初始化脚本,比如rcS,inittab等 根文件系统和Linux内核是分开的,单独的Linux内核是没法正常工作的,必须要…

TPM零知识学习六 —— tpm模拟器安装

本文参考以下链接: TPM模拟器和TPM2-TSS安装_jianming21的博客-CSDN博客_tpm2-tss 可信平台模块TPM(Trusted Platform Module)介绍及tpm-tools安装使用_jinhuazhe2013的博客-CSDN博客_tpm模块 1. 源码下载 运行以下命令下载源码&#xff1…

设计模式--观察者模式

文章目录前言一、未使用设计模式二、观察者模式1.定义2.组成三、应用场景四、优缺点优缺前言 甲人A(产品经理):好啊,你小子,又被我逮到了,很闲是吧😇,需求完成了吗? two…

MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(三)同步整流器驱动

同步整流器驱动 1.栅极电荷 2.dv/dt注意事项 MOSFET 同步整流器是接地基准开关的一个特例。这些器件与传统应用所使用的 N 沟道 MOSFET 相同,只是它们被应用到了电源的低电压输出而非整流器二极管中。 它们通常可在非常有限的漏源极电压摆幅下工作,因此…

redis活跃非活跃连接数统计及client list说明

概念说明 活跃连接是指当下正在执行命令的连接,非活跃当然是相对的。 在redis中判断当前连接是否活跃是通过 内置的client list 命令输出中的idle来判断 client list字段说明 (kfzops) [roottest-xxx-01-vm ]# redis-cli -h r-xxxxxxxxxxxx.redis.rds.aliyuncs.…

学生身份标签的识别与风控应用

当前的互联网借贷平台,国家已明确规定不允许向高校学生发放贷款,因此对于小贷、消金等金融机构,在信贷产品业务的风控体系中,有效判断申请用户是否为高校学生是一个非常重要的问题。针对高校学生身份的识别,虽然有多种…

机器学习、深度学习、自然语言处理学习 NLP-RoadMap-996station GitHub鉴赏官

推荐理由: 机器学习、深度学习、自然语言处理学习路线图 及 AI方向学习资源、工具 NLP-RoadMap 持续更新中。以下内容有错误或者不足,欢迎提Issue或者联系我讨论 整理不易,希望点个小星星 ​支持下呀! 前言 数理基础 编程基础 机…

RE2:Simple and Effective Text Matching with Richer Alignment Features

原文链接:https://aclanthology.org/P19-1465.pdf 介绍 问题 作者认为之前文本匹配模型中序列对齐部分,过于复杂。只有单个inter-sequence alignment层的模型,常会引入外部信息(例如语法特征)作为额外输入,…

小游戏与H5游戏对比与梳理

H5游戏是运用了h5技术的响应式网站布局的游戏,它完全实现了网页游戏在手机移动端的无缝衔接。众所周知,H5游戏已盛行了多年,而如今,随着诸多小游戏的推出,小游戏爆款频出,从“跳一跳”到“羊了个羊”&#…

Leetcode---2465.不同的平均值数目

目录题目描述分析题目描述 给你一个下标从 0 开始长度为 偶数 的整数数组 nums 。 只要 nums 不是 空数组,你就重复执行以下步骤: 找到 nums 中的最小值,并删除它。 找到 nums 中的最大值,并删除它。 计算删除两数的平均值。 两…

Qt OpenGL 2D图像文字

这次教程中,我们将学会如何使用四边形纹理贴图把文字显示在屏幕上。我们将把256个不同的文字从一个256256的纹理图像中一个个提取出来,接着创建一个输出函数来创建任意我们希望的文字。 还记得在第一篇字体教程中我提到使用纹理在屏幕上绘制文字吗&…

springboot构建RESTful 风格应用

Spring Boot 构建 RESTful 风格应用 1.Web开发的两种模式: 前后端不分离: 以前没有移动互联网时,我们做的大部分应用都是前后端不分的,比如jsp,或者thymeleaf等后端分离模板,在这种架构的应用中&#xf…

SQLMAP _DNS注入配置方法

网上针对sqlmap进行dns注入的相关文章太少,只是简单介绍了下–dns-domain参数,相关的实战文章要么就模糊或者一笔带过,。然后参考网上的方法重新整理了一遍,简单理解。 需要准备的东西,sqlmap、windows盲注一个、两个…

档案信息化咨询方法论实践要点有哪些?

咨询工作中,有些咨询师也许会有这样的疑问:“我业务经验挺丰富的,但做咨询工作怎么这么吃力呢?”这可能就是因为缺乏方法论的有效指导。咨询方法论是咨询工作中用来分析和解决某类特定问题的工具、方法、流程、模型和评价准则等。…