在环境准备阶段,需要了解到以下几个问题:
-
运行环境哪些前置依赖项 -
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 中的执行步骤下载相关依赖包即可。
大致步骤如下:
-
离线无法下载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
-
安装cni-plugins -
安装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::${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方式阅读。(可视化)
小结
阅读源码是比较枯燥的,保证以下几个阅读方式:
-
对整体的核心流程的把握 -
代码中比较好的编码方式学习 -
只是无脑阅读肯定比较难坚持,那么可以使用平常经常用的命令来尝试阅读流程。
立flag。
原文始发于微信公众号(小唐云原生):【kubernetes源码阅读】环境初始化
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/280227.html