背景
最近打算考一个CKA认证,具体请参考极客时间:time.geekbang.org/column/arti...
由于国内docker镜像仓库总是有各种各样的问题,年前使用腾讯云在境外建立的集群试验完已经释放了(抓紧时间学习,差不多两周可以搞定,总共花费240元左右)
但是当时没有时间准备考试,就搁置了。今年终于有时间了打算赶紧考了。
P.S. 双十一最便宜,基本能做到5-6折,建议大家屯一波。
但是今年不想再话冤枉钱了,就用家里的台式机搞一波得了。于是就研究了这个奇技淫巧。
基本思路
基本环境
- 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模式
- 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站找教程吧。就这几点要求
- 网卡选择桥接模式,这样路由器就会自动分配ip,宿主机和虚拟机就在同一个网段,方便后续使用ssh、sftp操作
P.S. 同一网段可以使用ssh客户端工具,我是使用moba xterm可以使用宿主机的剪切板
-
硬盘给至少给100G,光装完的系统就4个G左右。cpu给4个核心,内存给4个G
-
在装系统是应当选择server版,这个不带GUI,节省系统资源。
- 系统语言尽量选择英语,方便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:
好了,愉快的玩耍吧