kubeadm 搭建 Kubernetes 集群

2023年 7月 10日 23.7k 0

一、环境准备

首先环境还是三台虚拟机,虚拟机地址如下

IP 地址 节点
192.168.1.167 master
192.168.1.189 node1
192.168.1.176 node2

然后每台机器安装好 docker,至于 rpm 安装包版本下面介绍

二、说点正经事

2.1、安装包从哪来

官方的文档页面更新并不及时,同时他的 yum 源更新也很慢,再者…那他妈可是 Google 的服务器,能特么连上吗?以前总是在国外服务器使用 yumdownloader 下载,然后 scp 到本地,虽然能解决问题,但是蛋碎一地…最后找到了源头,如下

Kubernetes 编译的各种发行版安装包来源于 Github 上的另一个叫 release 的项目,地址 点这里,把这个项目 clone 下来,由于本人是 Centos 用户,所以进入 rpm 目录,在安装好 docker 的机器上执行那个 docker-build.sh 脚本即可编译 rpm 包,最后会生成到当前目录的 output 目录下,截图如下

20161230174115

2.2、镜像从哪来

对的,没错,gcr.io 就是 Google 的域名,服务器更不用提,所以在进行 kubeadm init 操作时如果不先把这些镜像 load 进去绝对会卡死不动,以下列出了所需镜像,但是版本号根据 rpm 版本不同可能略有不同,具体怎么看下面介绍

镜像名称 版本号
gcr.io/google_containers/kube-discovery-amd64 1.0
gcr.io/google_containers/kubedns-amd64 1.7
gcr.io/google_containers/kube-proxy-amd64 v1.4.1
gcr.io/google_containers/kube-scheduler-amd64 v1.4.1
gcr.io/google_containers/kube-controller-manager-amd64 v1.4.1
gcr.io/google_containers/kube-apiserver-amd64 v1.4.1
gcr.io/google_containers/etcd-amd64 2.2.5
gcr.io/google_containers/kube-dnsmasq-amd64 1.3
gcr.io/google_containers/exechealthz-amd64 1.1
gcr.io/google_containers/pause-amd64 3.0

这些镜像有两种办法可以获取,第一种是利用一台国外的服务器,在上面 pull 下来,然后再 save 成 tar 文件,最后 scp 到本地 load 进去;相对于第一种方式比较坑的是取决于服务器速度,每次搞起来也很蛋疼,第二种方式就是利用 docker hub 做中转,简单的说就是利用 docker hub 的自动构建功能,在 Github 中创建一个 Dockerfile,里面只需要 FROM xxxx 这些 gcr.io 的镜像即可,最后 pull 到本地,然后再 tag 一下

首先创建一个 github 项目,可以直接 fork 我的即可

20161230174125

其中每个 Dockerfile 只需要 FROM 一下即可

20161230174132

最后在 Docker Hub 上创建自动构建项目

20161230174141

20161230174150

最后要手动触发一下,然后 Docker Hub 才会开始给你编译

20161230174159

等待完成即可直接 pull 了

20161230174206

2.3、镜像版本怎么整

上面已经解决了镜像获取问题,但是一大心病就是 “我特么怎么知道是哪个版本的”,为了发扬 “刨根问底” 的精神,先进行一遍 kubeadm init,这时候绝对卡死,此时进入 /etc/kubernetes/manifests 可以看到许多 json 文件,这些文件中定义了需要哪些基础镜像

20161230174213

 

从上图中基本可以看到 kubeadm init 的时候会拉取哪些基础镜像了,但是还有一些镜像,仍然无法找到,比如kubednspause 等,至于其他的镜像版本,可以从源码中找到,源码位置是kubernetes/cmd/kubeadm/app/images/images.go 这个文件中,如下所示:

20161230174228

剩余的一些镜像,比如 kube-proxy-amd64kube-discovery-amd64 两个镜像,其中 kube-discovery-amd64 现在一直是 1.0 版本,源码如下所示

20161230174221

kube-proxy-amd64 则是一直跟随基础组件的主版本,也就是说如果从 manifests 中看到 controller 等版本是 v.1.4.4,那么 kube-proxy-amd64 也是这个版本,源码如下

20161230174235

最后根据这些版本去 github 上准备相应的 Dockerfile,在利用 Docker Hub 的自动构建 build 一下,再 pull 下来 tag 成对应的镜像名称即可

三、搭建集群

3.1、主机名处理

经过亲测,节点主机名最好为 xxx.xxx 这种域名格式,否则在某些情况下,POD 中跑的程序使用域名解析时可能出现问题,所以先要处理一下主机名

# 写入 hostname(node 节点后缀改成 .node)
echo "192-168-1-167.master" > /etc/hostname 
# 加入 hosts
echo "127.0.0.1   192-168-1-167.master" >> /etc/hosts
# 不重启情况下使内核生效
sysctl kernel.hostname=192-168-1-167.master
# 验证是否修改成功
➜  ~ hostname
192-168-1-167.master

3.2、load 镜像

由于本人已经在 Docker Hub 上处理好了相关镜像,所以直接 pull 下来 tag 一下即可,

images=(kube-proxy-amd64:v1.4.4 kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.4.4 kube-controller-manager-amd64:v1.4.4 kube-apiserver-amd64:v1.4.4 etcd-amd64:2.2.5 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.4.1)
for imageName in ${images[@]} ; do
  docker pull mritd/$imageName
  docker tag mritd/$imageName gcr.io/google_containers/$imageName
  docker rmi mritd/$imageName
done

3.3、安装 rpm

rpm 获取办法上文已经提到,可以自己编译,这里我已经编译好并维护了一个 yum 源,直接yum install 即可(懒)

# 添加 yum 源
tee /etc/yum.repos.d/mritd.repo /etc/hostname
echo "127.0.0.1 192-168-1-189.node" >> /etc/hosts
sysctl kernel.hostname=192-168-1-189.node
# 拉取镜像
images=(kube-proxy-amd64:v1.4.4 kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.4.4 kube-controller-manager-amd64:v1.4.4 kube-apiserver-amd64:v1.4.4 etcd-amd64:2.2.5 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.4.1)
for imageName in ${images[@]} ; do
docker pull mritd/$imageName
docker tag mritd/$imageName gcr.io/google_containers/$imageName
docker rmi mritd/$imageName
done
# 装 rpm
tee /etc/yum.repos.d/mritd.repo

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论