要阅读kubernetes源代码首先得在本机搭建好环境,注意,只能在linux、MacOS下,不能在windows下(因为kubernetes源代码中含软连接,这在windows下无法识别)

准备工作

(一): 相关工具

go1.9.1、git、make、goland

(二): 运行环境

linux运行环境
1. 安装git等基础组件
[wpc@centos7 ~]$ sudo yum install git gcc gcc-c++ make -y
安装go1.9.1
# 1. 安装go sdk(下载解压添加环境变量即可,注意k8s v1.9.1对应的go sdk version也是1.9.1)
[wpc@centos7 ~]$ wget https://dl.google.com/go/go1.9.1.linux-amd64.tar.gz
[wpc@centos7 ~]$ sudo tar zxvf go1.9.1.linux-amd64.tar.gz -C /usr/local/
[wpc@centos7 ~]$ sudo vim /etc/profile
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
[wpc@centos7 ~]$ source /etc/profile
[wpc@centos7 ~]$ go version
go version go1.9.1 linux/amd64
[wpc@centos7 ~]$ 
2. 下载k8s源代码
# 下载指定版本,只克隆最近一次commit
[wpc@centos7 k8s.io]$ pwd
/home/wpc/go/src/k8s.io
[wpc@centos7 k8s.io]$ git clone -b v1.9.1 --depth 1 https://github.com/kubernetes/kubernetes.git
正克隆到 'kubernetes'...
[wpc@centos7 k8s.io]$ cd kubernetes/
[wpc@centos7 kubernetes]$ git tag
v1.9.1
[wpc@centos7 kubernetes]$ git branch
* (非分支)
# 切换到新分支
[wpc@centos7 kubernetes]$ git checkout -b release-1.9 
切换到一个新分支 'release-1.9'
[wpc@centos7 kubernetes]$ git branch
* release-1.9
[wpc@centos7 kubernetes]$ 
# 编译
[wpc@centos7 kubernetes]$ make
[root@host-172-18-2-3 kubernetes]# ls -l _output/bin/
......

# 3. 本地启动单机版k8s集群(必须root用户)

3. 安装docker
# Redhat系
sudo yum install docker -y

# Debian系
## 1. 卸载之前安装的版本
sudo apt-get remove docker docker-engine
## 2. 安装docker-ce和秘钥管理以及下载相关的工具
sudo apt-get install apt-transport-https ca-certificates curl python-software-properties software-properties-common
## 3. 下载中并安装密钥
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
## 4.添加docker官方仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian wheezy stable"
## 5. 安装docker-ce
sudo apt-get install docker-ce -y
## 6. 启动docker-ce
sudo systemctl start docker
4. 下载镜像
# 需要翻墙去下载
docker pull gcr.io/google_containers/pause-amd64:3.0
docker pull gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.7
docker pull gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.7
docker pull gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.7
5. 安装etcd
# 下载
wget https://github.com/coreos/etcd/releases/download/v3.1.15/etcd-v3.1.15-linux-amd64.tar.gz
# 解压
tar zxvf etcd-v3.1.15-linux-amd64.tar.gz 
# 加入环境变量
cat ~/.bashrc
...
export ETCD_HOME=/home/wangpengcheng/etcd/etcd-v3.1.15-linux-amd64
export PATH=$ETCD_HOME:$PATH
# 保存生效
source ~/.bashrc
6. 编译启动k8s集群
root@wangpengcheng-PC:/home/wangpengcheng/go/src/k8s.io/kubernetes# hack/local-up-cluster.sh 
...
Logs:
  /tmp/kube-apiserver.log
  /tmp/kube-controller-manager.log
  /tmp/kube-proxy.log
  /tmp/kube-scheduler.log
  /tmp/kubelet.log
...
7. 测试k8s集群

成功运行集群后,可以使用cluster/kubectl.sh脚本中的命令来和本地集群交互

# 获取直接进入_output/bin/,然后./kubectl get pods是一样的
cluster/kubectl.sh get pods
cluster/kubectl.sh get services
cluster/kubectl.sh get replicationcontrollers
cluster/kubectl.sh run nginx --image=nginx --replicas=1 --port=8899
# 命令方式缩容
cluster/kubectl.sh scale deploy/nginx --replicas=1
# 编辑方式缩容
cluster/kubectl.sh edit deploy/nginx
cluster/kubectl.sh edit deployment/nginx

##在等待命令完成前,你可以打开一个新终端查看docker拉取镜像
sudo docker images
##你会看到docker正在拉去nginx镜像
sudo docker ps
## 你会看到你的容器正在运行
exit
## end wait
## 查看kubernetes相关信息
cluster/kubectl.sh get pods
cluster/kubectl.sh get services
cluster/kubectl.sh get replicationcontrollers
# 测试api server
curl http://localhost:8080
8. 关闭k8s集群
Ctrl+C
mac
# 同上...
windows
因为k8s源代码中包含软连接,Windows下不识别linux下的软连接,且vendor/k8s.io下面的文件和目录是软连接到staging目录的,所以在make构建的时候会报错找不到相关包文件,所以windows下不推荐。

(三):k8s对比oc编译构建

# -b, --branch <分支>   检出 <分支> 而不是远程 HEAD
# 进入$GOPATH/src/github.com/openshift目录下
git clone -b release-3.9 --depth 1 https://github.com/openshift/origin.git
# git clone -b v3.9.0 --depth 1 https://github.com/openshift/origin.git
// 在deepin linux系统上面克隆失败,暂时使用的是GitKraken 克隆的,克隆完毕之后进入origin目录切换分支为v3.9.0
cd origin
git checkout -b v3.9.0
make
mv _output/local/bin/linux/amd64/oc  /usr/local/bin

# https://github.com/xiaoping378/blog/blob/master/posts/openshift%E6%BA%90%E7%A0%81-%E7%BC%96%E8%AF%91%E5%92%8C%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84.md
# https://github.com/xiaoping378/blog/blob/master/posts/openshift%E5%AE%9E%E8%B7%B5-%E5%BF%AB%E9%80%9F%E5%AE%89%E8%A3%85.md