sealos issue #2157 debug 思路流程记录

2023-05-16

sealos issues#2157 debug思路流程

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

前言

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

boss上看到 -> 沟通 -> 解决某个issue终面绿通 -> 舒服

本文记录解决 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了。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sealos issue #2157 debug 思路流程记录 的相关文章

随机推荐

  • C++文件服务器项目—FastDFS—1

    C 43 43 文件服务器项目 FastDFS 1 前言1 项目架构2 分布式文件系统2 1 传统文件系统2 2 分布式文件系统 3 FastDFS介绍3 1 fdfs概述3 2 fdfs框架中的三个角色3 3 fdfs三个角色之间的关系3
  • C++文件服务器项目—Redis—2

    C 43 43 文件服务器项目 Redis 2 前言1 数据库类型1 1 基本概念1 2 关系 非关系型数据库搭配使用 2 redis基础知识点2 1 redis安装2 2 redis中的两个角色2 3 redis中数据的组织格式2 4 r
  • C++文件服务器项目—Nginx—3

    C 43 43 文件服务器项目 Nginx 3 前言1 Nginx一些基本概念1 1 Nginx初步认识1 2 正向代理概念理解1 3 反向代理概念理解 2 Nginx的安装与配置2 1 Nginx与相关依赖库的安装2 2 Nginx相关的
  • C++文件服务器项目—FastCGI—4

    C 43 43 文件服务器项目 FastCGI 4 前言1 CGI 概念理解2 FastCGI 概念理解3 FastCGI和spawn fcgi安装4 FastCGI和 Nginx的关系5 Nginx数据转发 修改配置文件6 spawn f
  • C++文件服务器项目—Nginx+FastDFS插件—5

    C 43 43 文件服务器项目 Nginx 43 FastDFS插件 5 前言1 文件上传下载流程1 1 文件上传流程1 2 文件下载流程1 3 文件下载优化流程 2 Nginx和fastDFS插件2 1 安装Nginx和fastdfs n
  • C++文件服务器项目—数据库表设计 与 后端接口设计—6

    C 43 43 文件服务器项目 数据库表的设计 6 前言1 数据库建表1 1 用户信息表 user info1 2 文件信息表 file info1 3 用户文件列表表 user file list1 4 用户文件数量表 user file
  • C语言中宏定义的使用

    1 引言 预处理命令可以改变程序设计环境 提高编程效率 它们并不是 C 语言本身的组成部分 不能直接对 它们进行编译 必须在对程序进行编译之前 先对程序中这些特殊的命令进行 预处理 经过预处理后 程序就不再包括预处理命令了 最后再由编译程序
  • C++文件服务器项目—项目总结与反向代理—7

    C 43 43 文件服务器项目 项目总结与反向代理 7 1 项目总结2 项目提炼3 web服务器的反向代理4 存储节点的反向代理 组件介绍基本写完了 xff0c 后续进行深入 本专栏知识点是通过零声教育的线上课学习 xff0c 进行梳理总结
  • https相关内容

    https相关内容 前言基础概念理解https传输过程 前言 本文写https相关内容 xff0c 持续补充 基础概念理解 对称加密 加解密秘钥是同一个 非对称加密 公钥 私钥 sa gt 公钥私钥都是两个数字ecc gt 椭圆曲线 两个点
  • TinyKv介绍

    TinyKv介绍 前言tinykv架构代码结构如何去写TinyKv参考内容 前言 开一个新坑 xff0c 将tinykv的4个project全部实现 虽然今天我点进去看的时候就萌生退意 好在没有放弃之前 xff0c 把project1完成了
  • TinyKv Project1 Standalone KV

    TinyKv Project1 Standalone KV 前言Project1 StandaloneKV 文档翻译文档的重点内容StandAloneStorageWriteReader Server单元测试 前言 project1还是比较
  • TinyKv Project2 PartA RaftKV

    TinyKv Project2a RaftKV 前言Project2 RaftKV 文档翻译Project2A重点内容抛出RaftLogRaftLog结构体字段详解RaftLog核心函数详解 RaftRaft 驱动规则Msg的作用与含义Ms
  • TinyKv Project2 PartB RaftKV

    TinyKv Project2 PartB RaftKV 前言Project2 PartB RaftKV 文档翻译PartB 到底想让我们做什么 xff1f 分析要实现的函数到底要干什么事情proposeRaftCommand 将上层命令打
  • TinyKv Project2 PartC RaftKV

    TinyKv Project2 PartC RaftKV 前言Project2 PartC RaftKV 文档翻译raft节点如何自动的compact压缩自己的entries日志生成快照与快照收收发日志压缩与快照收发总结疑难杂症 前言 pr
  • TinyKv Project3 PartA Multi-raft KV

    TinyKv Project3 PartA Multi raft KV 前言Project3 PartA Multi raft KV 文档翻译Add RemoveLeaderTransfer 前言 Project3是整个项目最难的部分 xf
  • TinyKv Project3 PartB Multi-raft KV

    TinyKv Project3 PartB Multi raft KV 前言Project3 PartB Multi raft KV 文档翻译发送请求LeaderTransfer 禅让ConfChange 集群成员变更Split regio
  • TinyKv Project3 PartC Multi-raft KV

    TinyKv Project3 PartC Multi raft KV 前言Project3 PartC Multi raft KV 文档翻译processRegionHeartbeatSchedule 前言 3C要求我们实现调度 3c按照
  • nodejs api学习:fs.createReadStreame()

    作用 这个api的作用是打开一个可读的文件流并且返回一个fs ReadStream对象 参数 createReadStream path option 该用来打开一个可读的文件流 xff0c 它返回一个fs ReadStream对象 64
  • TinyKv Project4 Transactions

    TinyKv Project4 Transactions 前言Project4 Transactions 文档翻译Project 4 TransactionsTinyKV中的事务Part APart BPart C Percolator x
  • sealos issue #2157 debug 思路流程记录

    sealos issues 2157 debug思路流程 前言分析issue剖析源码解决方案总结 前言 这个项目蛮有意思的 xff0c sealos 是以 kubernetes 为内核的云操作系统发行版 boss上看到 gt 沟通 gt 解