【踩坑帖】死抠党福利-使用vbox快速搭建k8s实验集群

背景

最近打算考一个CKA认证,具体请参考极客时间:time.geekbang.org/column/arti...

由于国内docker镜像仓库总是有各种各样的问题,年前使用腾讯云在境外建立的集群试验完已经释放了(抓紧时间学习,差不多两周可以搞定,总共花费240元左右)

但是当时没有时间准备考试,就搁置了。今年终于有时间了打算赶紧考了。

P.S. 双十一最便宜,基本能做到5-6折,建议大家屯一波。

但是今年不想再话冤枉钱了,就用家里的台式机搞一波得了。于是就研究了这个奇技淫巧。

基本思路

基本环境

  1. Docker Hub 被墙怎么解决?

给docker服务添加环境变量,统一走代理,具体操作如下:

ini 复制代码
vim /lib/systemd/system/docker.service

[Service]
Environment="HTTP_PROXY=127.0.0.1:8891"
Environment="HTTPS_PROXY=127.0.0.1:8891"

P.S.梯子自己准备,我用的是clash,Windows 版,需要开启Allow LAN模式

  1. CentOS Stream 9 安装不上libcgroup怎么办?

libcgroup是cri-dockerd必须依赖。但是CentOS官方已经把它移除了,用了更新的包替代了。具体请参考[**Install cgroup Packages (If Needed)**](https://edc.intel.com/content/www/us/en/design/products/ethernet/appnote-e810-adq-config-guide/install-cgroup-packages-if-needed/)偷懒就直接安装着两个包即可:

bash 复制代码
wget https://kojihub.stream.centos.org/kojifiles/packages/libcgroup/0.41/19.el8/x86_64/libcgroup-0.41-19.el8.x86_64.rpmwget https://kojihub.stream.centos.org/kojifiles/packages/libcgroup/0.41/19.el8/x86_64/libcgroup-tools-0.41-19.el8.x86_64.rpm

rpm -ivh *.rpm

整体思路

利用vbox的系统复制功能,先将master的环境搭建好,再复制2台node节点,最后再初始化k8s集群即可

搭建步骤

1. 系统下载

下载地址: mirror.stream.centos.org/9-stream/Ba...

我选择的是 CentOS-Stream-9-latest-x86_64-dvd1.iso

2. 新建虚拟机

具体步骤不赘述了,自己b站找教程吧。就这几点要求

  1. 网卡选择桥接模式,这样路由器就会自动分配ip,宿主机和虚拟机就在同一个网段,方便后续使用ssh、sftp操作

P.S. 同一网段可以使用ssh客户端工具,我是使用moba xterm可以使用宿主机的剪切板

  1. 硬盘给至少给100G,光装完的系统就4个G左右。cpu给4个核心,内存给4个G

  2. 在装系统是应当选择server版,这个不带GUI,节省系统资源。

  1. 系统语言尽量选择英语,方便Google

3. 必要软件安装

P.S. 在CentOS Stream 9中dnf和yum是一个意思,yum是通过dnf软连接过来的

ruby 复制代码
# 设置时间同步
dnf install chrony -y

systemctl enable --now chronyd

chronyc tracking

# 关闭防火墙
systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i 's/enforcing/disabled/' /etc/selinux/config

# 关闭swap,提高k8s性能
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 修改 Linux 内核参数,添加网桥过滤和地址转发功能
cat > /etc/sysctl.d/k8s.conf << EOF\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\nEOF

# 安装docker-ce
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

yum -y install docker-ce

systemctl enable docker && systemctl start docker

# 给docker 设置代理
vim /lib/systemd/system/docker.service

添加两行
[Service]
Environment="HTTP_PROXY=127.0.0.1:8891"
Environment="HTTPS_PROXY=127.0.0.1:8891"


systemctl daemon-reload

service docker restart

# 搜一下nginx 的image,看看代理是否设置成功
docker search nginx

# 准备安装cri-dockerd
wget https://kojihub.stream.centos.org/kojifiles/packages/libcgroup/0.41/19.el8/x86_64/libcgroup-0.41-19.el8.x86_64.rpm

wget https://kojihub.stream.centos.org/kojifiles/packages/libcgroup/0.41/19.el8/x86_64/libcgroup-tools-0.41-19.el8.x86_64.rpm

rpm -ivh *.rpm

rm *.rpm

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.12/cri-dockerd-0.3.12-3.el7.x86_64.rpm\# 通过 rpm 命令执行安装包rpm -ivh cri-dockerd-0.3.12-3.el7.x86_64.rpm

rpm -ivh cri-dockerd-0.3.12-3.el7.x86_64.rpm

vim /usr/lib/systemd/system/cri-docker.service

systemctl daemon-reload\nsystemctl enable cri-docker && systemctl start cri-docker

# 安装k8s
cat > /etc/yum.repos.d/kubernetes.repo << EOF\n[kubernetes]\nname=Kubernetes\nbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=0\ngpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF

# 指定了安装的版本是 1.28.0
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0

好了,到此为止,master节点已经基本上快完成了

4. 使用v-box复制两个node节点

然后分别给三台机器设置好主机名和域名解析

bash 复制代码
hostnamectl set-hostname master

vim /etc/hosts
# 添加以下三行

192.168.1.2 	master
192.168.1.4 	node1
192.168.1.5 	node2

然后重启以下,ping 三个域名都能ping通。

5. 初始化k8s节点

现在master节点操作(注意192.168.1.2,替换成你自己的master节点ip地址)

ini 复制代码
kubeadm init \
  --apiserver-advertise-address=192.168.1.2 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all

c

出现以下内容,表示已经成功了

然后去node1、node2节点分别执行:

sql 复制代码
kubeadm join 192.168.1.2:6443 --token 5ajily.ak4ue6uv54vn6j0l \
        --discovery-token-ca-cert-hash sha256:050e78febaa0d989e5b6d2c533480f9f79b1866f7edea875729dfdcba32e8641 \
        --cri-socket=unix:///var/run/cri-dockerd.sock \
        --ignore-preflight-errors=all

出现以下内容,表示成功了:

然后验证以下,执行:

arduino 复制代码
kubectl get nodes

会出现3个节点,STATUS列 是Not Ready,这是因为没有安装网络插件。我们安装以下:

arduino 复制代码
wget https://docs.projectcalico.org/manifests/calico.yaml

kubectl apply -f calico.yaml

等待大概3分钟,执行kubectl get nodes:

好了,愉快的玩耍吧

相关推荐
孔令飞4 分钟前
16 | 实现简洁架构的 Store 层
人工智能·ai·云原生·golang·kubernetes
云上艺旅3 小时前
K8S学习之基础二十八:k8s中的configMap
学习·云原生·容器·kubernetes
云上艺旅5 小时前
K8S学习之基础三十:k8s的资源访问方式
学习·云原生·容器·kubernetes
cpfo5 小时前
kubectl常用命令记录
kubernetes
LCY1337 小时前
k8s系统学习路径
学习·容器·kubernetes
云上艺旅7 小时前
K8S学习之基础二十七:k8s中daemonset控制器
云原生·容器·kubernetes·jenkins
4dm1n7 小时前
kube-proxy有什么作用☆
kubernetes
fenglllle8 小时前
K8S下nodelocaldns crash问题导致域名请求响应缓慢
docker·容器·kubernetes
小马爱打代码9 小时前
描述K8S创建pod的全过程
云原生·容器·kubernetes