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

好了,愉快的玩耍吧

相关推荐
木鱼时刻14 小时前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes
chuanauc1 天前
Kubernets K8s 学习
java·学习·kubernetes
庸子2 天前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins
李白你好2 天前
高级运维!Kubernetes(K8S)常用命令的整理集合
运维·容器·kubernetes
Connie14512 天前
k8s多集群管理中的联邦和舰队如何理解?
云原生·容器·kubernetes
伤不起bb2 天前
Kubernetes 服务发布基础
云原生·容器·kubernetes
别骂我h2 天前
Kubernetes服务发布基础
云原生·容器·kubernetes
weixin_399380692 天前
k8s一键部署tongweb企业版7049m6(by why+lqw)
java·linux·运维·服务器·云原生·容器·kubernetes
斯普信专业组3 天前
K8s环境下基于Nginx WebDAV与TLS/SSL的文件上传下载部署指南
nginx·kubernetes·ssl
&如歌的行板&3 天前
如何在postman中动态请求k8s中的pod ip(基于nacos)
云原生·容器·kubernetes