第30节 K8s 开发环境搭建


❤️💕💕新时代拥抱云原生,云原生具有环境统一、按需付费、即开即用、稳定性强特点。Myblog:http://nsddd.topopen in new window


[TOC]

所需要的软件包

  • GNU Development Tool (非必须:Linux开发的时候必备工具)
  • etcd
  • go
  • docker(虽然现在只需要 containerd,docker 自带 containerd)
  • jq (某些帮助脚本的需要,命令行的json处理器)
  • PyYAML (一些测试相关)
  • OpenSSL 和 CFSSL
  • rsync (文件传输)

安装GNU

sudo apt install build-essential  

安装Docker

sudo apt-get update  
sudo apt-get install \  
    ca-certificates \  
    curl \  
    gnupg \  
    lsb-release  

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg  

echo \  
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \  
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null  

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

修改ContainerD 所用的镜像库地址

Containerd应用:

containerd的默认配置文件为/etc/containerd/config.toml,可通过命令:

containerd config default ##查看默认配置

修改信息

containerd config default > ~/config.toml  

然后编辑~config.toml去添加信息:

生成的配置文件:
[stream_processors]

  [stream_processors."io.containerd.ocicrypt.decoder.v1.tar"]
    accepts = ["application/vnd.oci.image.layer.v1.tar+encrypted"]
    args = ["--decryption-keys-path", "/etc/containerd/ocicrypt/keys"]
    env = ["OCICRYPT_KEYPROVIDER_CONFIG=/etc/containerd/ocicrypt/ocicrypt_keyprovider.conf"]
    path = "ctd-decoder"
    returns = "application/vnd.oci.image.layer.v1.tar"

  [stream_processors."io.containerd.ocicrypt.decoder.v1.tar.gzip"]
    accepts = ["application/vnd.oci.image.layer.v1.tar+gzip+encrypted"]
    args = ["--decryption-keys-path", "/etc/containerd/ocicrypt/keys"]
    env = ["OCICRYPT_KEYPROVIDER_CONFIG=/etc/containerd/ocicrypt/ocicrypt_keyprovider.conf"]
    path = "ctd-decoder"
    returns = "application/vnd.oci.image.layer.v1.tar+gzip"
sudo mv ~/config.toml /etc/containerd/config.toml
sudo systemctl restart containerd  
sudo systemctl restart containerd.service #重启服务

需要?

默认 contarnerd 配置文件没有生成的,所以 contarnerd 默认把配置文件导入到配置文件中去。

安装rsync:

cd ~/Downloads  
wget https://ghproxy.com/https://github.com/WayneD/rsync/archive/refs/tags/v3.2.4.tar.gz  
tar -xf v3.2.4.tar.gz  
cd rsync-3.2.4  

安装一些工具包

sudo apt install -y gcc g++ gawk autoconf automake python3-cmarkgfm  
sudo apt install -y acl libacl1-dev  
sudo apt install -y attr libattr1-dev  
sudo apt install -y libxxhash-dev  
sudo apt install -y libzstd-dev  
sudo apt install -y liblz4-dev  
sudo apt install -y libssl-dev  

如果安装失败重试就好

编译,安装:

./configure  
make  
sudo cp ./rsync /usr/local/bin/  
sudo cp ./rsync-ssl /usr/local/bin/  

安装jq:

sudo apt-get install jq  

安装PyYaml:

sudo apt install -y python3-pip
pip install pyyaml
# 可选 apt install ipython3

安装etcd:

etcd 的安装比较重要,步骤也是比较多一点的~

ETCD_VER=v3.5.4  
curl -L https://storage.googleapis.com/etcd/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz  
mkdir ~/etcd  
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C ~/etcd --strip-components=1  
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz  

sudo vim ~/.bashrc  

最后加入:export PATH="/home/<用户名>/etcd:${PATH}"

source ~/.bashrc  

建议加入自定义环境目录:

source /etc/profile.d/mypath.sh

测试:

root@cubmaster01:~/etcd# etcd --version
etcd Version: 3.5.4
Git SHA: 08407ff76
Go Version: go1.16.15
Go OS/Arch: linux/amd64

安装golang (1.24及以上需要golang 1.18):

cd ~/Downloads  
wget https://golang.google.cn/dl/go1.19.3.linux-amd64.tar.gz  
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz  

mkdir ~/go   # 根目录
mkdir ~/go/src  # 源文件存放
mkdir ~/go/bin  # 我们用go get / go install 安装的可执行文件
sudo vim /etc/profile.d/mypath.sh

最后加入如下几行:

export GOPATH="/home/<用户名>/go"  
export GOBIN="/home/<用户名>/go/bin"  
export PATH="/usr/local/go/bin:$GOPATH/bin:${PATH}"  

source /etc/profile.d

警告

有一些比较深的设置:

sudo vim /etc/sudoers  

在secure_path一行加入如下目录:

/usr/local/go/bin (这个是$GOPATH/bin目录)
/home/<用户名>/etcd (这个是etcd命令所在目录)
/home/<用户名>/go/bin (这个是go get安装的程序所在位置)

💡简单的一个案例如下:

Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/go/bin:/root/etcd:/root/go/bin"

设置golang代理:

go env -w GO111MODULE="on"  
go env -w GOPROXY="https://goproxy.cn,direct"  

安装CFSSL:

go install github.com/cloudflare/cfssl/cmd/...@latest  

提示

cfssl 用于 kubernetes 的证书生成的。

下载kubernetes代码:

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

为什么需要在 `$GOPATH/src/k8s.io`

kubernetes 历史悠久,所以,最好是选择放入到 $GOPATH/src/k8s.io 最不容易出现错误。

设置git

 git remote rm origin # 不建议删除,如果你使用的不是最新版
 git remote add origin https://github.com/cubxxw/kubernetes.git
 git remote add upstream https://github.com/kubernetes/kubernetes.git
 git remote set-url --push upstream no-pushing
 git remote -v; git branch -a

Kubernetes Makefile

或许可以直接编译, 事实上 Kubernetes 官方也推荐 Kind 工具。

在 Kubernetes 中的 Github README.md 文档中介绍了:

To start developing K8s

社区存储库open in new window包含了所有关于从源代码构建Kubernetes的信息,包括如何贡献代码和文档,联系谁等等。

如果您想立即构建Kubernetes,有两种选择:

你有一个工作的Go语言环境。

mkdir -p $GOPATH/src/k8s.io
cd $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/kubernetes
cd kubernetes
make

您有一个工作的Docker环境。

git clone https://github.com/kubernetes/kubernetes
cd kubernetes
make quick-release

For the full story, head over to the developer's documentationopen in new window.

END 链接

参考