【踩坑帖】死抠党福利-使用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:

好了,愉快的玩耍吧

相关推荐
终端行者7 小时前
k8s之Ingress服务接入控制器
云原生·容器·kubernetes
学Linux的语莫12 小时前
k8s的nodeport和ingress
网络·rpc·kubernetes
aashuii18 小时前
k8s通过NUMA亲和分配GPU和VF接口
云原生·容器·kubernetes
Most661 天前
kubesphere安装使用
kubernetes
Kentos(acoustic ver.)1 天前
云原生 —— K8s 容器编排系统
云原生·容器·kubernetes·云计算·k8s
哈里谢顿1 天前
Kubernetes 简介
kubernetes
__Smile°1 天前
k8s-MongoDB 副本集部署
云原生·容器·kubernetes
Jy_06221 天前
k8s 中的 deployment,statefulset,daemonset 控制器的区别
云原生·容器·kubernetes
果子⌂2 天前
Kubernetes 服务发布进阶
linux·运维·服务器·云原生·容器·kubernetes·云计算
Gold Steps.2 天前
K8s WebUI 选型:国外 Rancher vs 国内 KubeSphere vs 原生 Dashboard,从部署到使用心得谁更适合企业级场景?
云原生·容器·kubernetes