【kubernetes源码阅读】环境初始化


在环境准备阶段,需要了解到以下几个问题:

  • 运行环境哪些前置依赖项
  • kubernetes本地测试集群如何启动
  • 阅读环境需要如何准备
  • 如何通过debug方式来阅读源码

其他信息:
kubernetes源码:Kubernetes 1.24.0
执行环境:ubuntu 20  
阅读环境:本地windows IDE

前期准备

可直接参考K8sSourceCodeDeepDive/k2-1-script-of-k8s-devenv-setup.md at main · JackyZhangFuDan/K8sSourceCodeDeepDive
步骤非常清晰,这里只说明containerd所用的镜像地址需要修改的位置:(注!需要联网)

    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = ""

      [plugins."io.containerd.grpc.v1.cri".registry.auths]

      [plugins."io.containerd.grpc.v1.cri".registry.configs]

      [plugins."io.containerd.grpc.v1.cri".registry.headers]

      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://hub-mirrors.c.163.com""https://registry-1.docker.io"]

加粗文字为新增文字。
如果为离线环境,可参考local-up-cluster.sh 中的执行步骤下载相关依赖包即可。
大致步骤如下:

  1. 离线无法下载etcd,通过查看
# 查看shell脚本
# 手动下载etcd安装包,并解压到/third_party
vim ./hack/lib/etcd.sh  
tar -zxvf etcd-v3.5.6-linux-amd64.tar.gz
mv etcd-v3.5.6-linux-amd64/ /usr/local/etcd

vim /etc/profile 
export PATH=$PATH:/usr/local/etcd

source /etc/profile
  1. 安装cni-plugins
  2. 安装kubectl

启动集群细节

环境启动命令:

cd $GOPATH/src/k8s.io/
bash -x ./hack/local-up-cluster.sh  # 需要联网,脚本中会手动下载依赖

大致步骤:编译代码,创建证书,启动etcd,创建集群等操作;其中:
二进制文件输出目录:

$(GOPATH)/src/k8s.io/kubernetes/_output/bin --> $(GOPATH)/src/k8s.io/kubernetes/_output/local/bin/linux/amd64

证书生成位置为:/var/run/kubernetes;
日志输出位置:/tmp/<程序>.log,所有的启动过程都可以通过 ./hack/local-up-cluster.sh 查看具体实现;
这里重点说明shell的一个语法:”::”, 其含义是:在shell中使用包的方式来编写一系列函数;如:

# Single function
my_func() {
  …
}

# Part of a package
mypackage::my_func() {
  …
}

来源:https://google.github.io/styleguide/shellguide.html#function-names

在local-up-cluster.sh中,大量使用kube::util::的shell语法。在阅读过程中,可以发现在local-up-cluster中一开始就引入了${KUBE_ROOT}/hack/lib/init.sh, 所以对于以上语法的方法,都在./hack/lib下可以找到,索引为 kube::<文件名>::<方法>;
一上来就给了我们一个写shell脚本的小tips;

阅读环境需要如何准备

在本地环境安装golang后,执行以下操作:

mkdir $GOPATH/src/k8s.io  && cd $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/kubernetes.git  
git checkout -b kube1.24 v1.24.0  

golang中,当前都使用module的方式进行开发,在kubernetes演进过程中,有大部分的源码还处于非mod的方式未迁移完成,所以一定!!!要保证k8s的目录在此目录下。
使用自己熟悉的IDE打开kubernetes目录,未发现引包错误,即可。

如何通过debug方式来阅读源码

使用远程debug的方式来阅读代码是比较高效的,根据k8s的原理,在阅读apiserver时比较独立,只需要启动apiserver即可。在对于其他组件进行源码阅读时,都需要确保apiserver是启动的情况。
注:etcd也是一定要保证启动的。
调试使用的组件为:delve。通过开启远程模式,将本地IDE连接linux环境即可。
程序都是存在启动参数的,k8s的组件也不例外。可以通过ps将local-up-cluster.sh启动的程序的详细命令复制下来进行启动。
delve远程命令如下:

dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient  -- <参数>

参数通过在“–”后面进行指定。然后通过IDE远程接入,即可debug方式阅读。(可视化)

小结

阅读源码是比较枯燥的,保证以下几个阅读方式:

  1. 对整体的核心流程的把握
  2. 代码中比较好的编码方式学习
  3. 只是无脑阅读肯定比较难坚持,那么可以使用平常经常用的命令来尝试阅读流程。

立flag。

原文始发于微信公众号(小唐云原生):【kubernetes源码阅读】环境初始化

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/280227.html

(0)
明月予我的头像明月予我bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!