这里写目录标题
- [1 RockyLinux 的下载安装](#1 RockyLinux 的下载安装)
-
- [1.1 RochyLinux 的下载](#1.1 RochyLinux 的下载)
- [1.2 创建虚拟机](#1.2 创建虚拟机)
- [1.3 RockyLinux 的安装](#1.3 RockyLinux 的安装)
- [1.4 使用 Xshell 链接虚拟机](#1.4 使用 Xshell 链接虚拟机)
- [1.5 安装两台工作节点](#1.5 安装两台工作节点)
- [1.6 系统配置](#1.6 系统配置)
- [1.7 虚拟机拍快照](#1.7 虚拟机拍快照)
- [2 K8s 的安装](#2 K8s 的安装)
-
- [2.1 Runtime 的安装](#2.1 Runtime 的安装)
- [2.2 K8s 的安装](#2.2 K8s 的安装)
- [2.3 K8s 必备组件的安装](#2.3 K8s 必备组件的安装)
- [2.4 图形化界面的使用](#2.4 图形化界面的使用)
-
- (1)Dashboard
- [(2) KRM](#(2) KRM)
- [2.5 快速上线与删除一个服务](#2.5 快速上线与删除一个服务)
1 RockyLinux 的下载安装
1.1 RochyLinux 的下载
Rocky Linux 是一个开源的企业级操作系统,旨在实现与 Red Hat Enterprise Linux® 100% 的逐个错误兼容。
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。
我的PC是英特尔,×86结构的,所以选择x86安装包,我想选择稳定一点的版本,所以选 Rocky Linux 9,接着点击修小ISO文件。

最好把链接复制到迅雷进行下载,比纯用浏览器下载更快一些。
1.2 创建虚拟机
下载完镜像文件后,接下来是安装,在此之前需要先安装 VMware Workstation,版本要17以后。
安装好 VMware Workstation 后,按照以下步骤创建虚拟机:
点击创建新的虚拟机:

选择"自定义",然后点击"下一步":

继续点击下一步:

选择安装所需的镜像文件:

选择稍后安装操作系统:

版本选择 Rochy Linux 64 位(如果没有,可以选择 Red Hat Enterprise Linux 9 64 位):

设置虚拟机名称与位置(若需要,我这里使用默认位置):

处理器的数量保持2:

内存选择4GB

网络类型使用默认的 NAT 模式

SCSI控制使用推荐的 LSI Logic:

磁盘类型也是保持默认就行:

虚拟磁盘选择"创建新虚拟磁盘",默认就是这个选项:

磁盘容量选择40GB:

点击下一步:

点击完成:

可以看到左边侧边栏有一台新的虚拟机,名称为 k8s-master01,我可以可以点击"编辑虚拟机设置":

这里可以修改内存大小、处理器数量、磁盘空间等:

这里也可以把USB控制器和声卡删掉,当然,不删也行,这里主要就是演示如何修改硬件配置:

点击"CD/DVD (IDE)",设备状态选择"启动时连接",然后在"使用ISO映像文件"中,选择我们前面下载的 ISO镜像文件,然后点击确定:

1.3 RockyLinux 的安装
虚拟机创建好后,按下面的步骤安装操作系统:
点击"开启此虚拟机":

看到下面的界面后,鼠标点进去,然后选择"Install Rocky Linux Minimal 9.8":

出现下面的界面时,要把语言设置成英文,美版:


配置磁盘:

点击 Custom:


将swap分区去掉:

更新根目录的空间,按下面1234的步骤执行:

此时会出现一个警告,不管它,再点一次 Done:

接下来会跳出一个本次修改的摘要,我们这里点击"Accept Changes"就行了:

接下来会退出安装主界面,我们设置 root 密码:

按下Done之后,可能有警告,我们不管他,继续按 Done:

回到安装主界面之后,接下来是配置网络:

这里看到的 IP 是自动获取的,可能下一次重启就变了,所以需要将其改成静态(下面的IP和DNS需要记住):

按下面123456的顺序,配置网络,IP、网关、DNS都选择和上面截图一样的:

然后修改主机名:

接下来修改时间(如果时区显示的不是上海,则要改成上海,如果是上海,则可以跳过这一步):


回到安装主页面后,点击"Begin Installation":

安装还是有些漫长的,需要等待一段时间,在等待的过程中,可以按照上面的流程安装其他几个虚拟机,各种设置和上面一样(创建节点时候不要克隆,因为会出现一些未知的问题,这里主要学习K8s,尽快不要在低级错误上浪费时间):

出现下面的界面,说明安装成功,点击 "Reboot System" 重启:

输入用户名(root)和密码(刚刚设的):

1.4 使用 Xshell 链接虚拟机
在虚拟机终端输入 ip a 获取 IP 地址:

打开 Xshell,点击左上角的"新建按钮":

填写会话名称和主机IP:

在用户身份验证中,填写用户名和密码:

双机我们刚刚新建的会话:

接下来会跳出一个窗口,问题是否接受主机密钥,这里点击"接受并保存":

看到下面界面,说明连接成功:

如果能看到下面的界面,说明机器能上公网:

1.5 安装两台工作节点
名字分别命名为 k8s-node01 和 k8s-node02 ,只需要在创建虚拟机、安装系统以及Xshell连接虚拟机的过程中,涉及命名的时候写名字即可:


最后的节点情况如下:

1.6 系统配置
(1)基本配置
学习环境不需要有安全组配置,所以可以关闭,swap 分区会导致集群性能下降,所以也需要关闭:
bash
# 关闭防火墙
systemctl disable --now firewalld
systemctl disable --now dnsmasq
# 会报错:Failed to disable unit: Unit file dnsmasq.service does not exist.不用管他
# 关闭 SELINUX
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# 关闭swap分区,如果前面安装系统的时候,把swap分区去掉了,那这一步可以省略
swapoff -a && sysctl -w vm.swappiness=0
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
可以只复制一次,然后把命令同时贴到多个虚拟机中,只需要提前在 Xshell 打开会话,然后在其中一个会话中右击------发送键输入到所有会话:

后续粘贴命令到这个会话,也会自动复制到其他会话中。
(2)替换源镜像
接下来替换镜像源,因为我们在国内,
bash
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/*.repo
dnf makecache
(3)安装必备工具
bash
yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y
(4)系统升级和内核升级
bash
# 系统升级
dnf update -y
# 导入 ELERPO key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装 ELERPO 源
dnf install -y https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
# 升级内核
sudo dnf --enablerepo=elrepo-kernel install -y \
kernel-ml \
kernel-ml-core \
kernel-ml-modules \
kernel-ml-modules-extra \
kernel-ml-devel
# 更改内核的启动顺序,使用最新的内核启动系统
grubby --set-default 0
# 重启
reboot
1.7 虚拟机拍快照
配置完成后输入sudo shutdown -h now,


拍快照的目的是为了能迅速恢复,假如你后续做了其他设置,下载了很多东西,某天你想清空,想恢复回来,就可以通过快照恢复:


2 K8s 的安装
2.1 Runtime 的安装
bash
# 配置 Docker 源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 containerd
yum install containerd.io -y
# 配置内核
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
接下来创建 containerd 的配置文件
bash
# 创建配置文件所在目录
sudo mkdir -p /etc/containerd
# 导出默认配置
containerd config default | sudo tee /etc/containerd/config.toml
# 修改默认配置
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
sed -i 's#k8s.gcr.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml
sed -i 's#registry.gcr.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml
sed -i 's#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml
# 启动Containerd
systemctl daemon-reload
systemctl enable --now containerd
在终端输入 ctr plugin ls,看看 containerd 是否可用,主要看 overlayfs 和 cri 是否 ok,如果不是 ok,那就问AI:


2.2 K8s 的安装
学习过程中,推荐安装最新版的 K8s,我们可以去官网查询当前最新版本是哪一版:

目前最新的是1.36,那我们就安装1.36的版本,如果最新的版本不是 1.36了,那么下面的命令需要修改版本号:
bash
# 配置 K8s 源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.36/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.36/rpm/repodata/repomd.xml.key
EOF
# 安装 K8s
yum install kubeadm-1.36.* kubelet-1.36.* kubectl-1.36.* -y
systemctl enable --now kubelet # 这条命令出现报错的话不用管
# 查看版本号
kubectl version
我的版本是 1.36.4:

接下来是下载镜像,如果小版本号不同,那么下面的命令需要修改小版本号:
bash
# 下载镜像
kubeadm config images pull \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version 1.36.4
# 注意小版本号,另外,如果机器在国外,那么可以把 --image-repository 参数去掉,下面的命令也是如此
接下来是配置主节点:
bash
# K8s 的初始化命令只能在第一个主节点执行,并且只能执行一次,IP地址要改成第一个主节点的IP地址
kubeadm init --apiserver-advertise-address 192.168.174.129 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --cri-socket "unix:///var/run/containerd/containerd.sock" --kubernetes-version 1.36.4
# 注意小版本号
如果出现下面的界面,说明初始化成功:

上面的界面还会出现配置 kubectl 的命令(橙色框)和添加工作节点的命令(红色框),我们把配置 kubectl 的命令复制下来,输入到主节点:
bash
# 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
输入 kubectl get node 如果显示的是下面的内容,说明配置正确:

接下来是配置工作节点,在前面配置主节点时,会出现添加工作节点的命令(红色框),我们复制下来,在工作点解输入
bash
kubeadm join 192.168.174.129:6443 --token c2tu4d.0cdb01wju43q913j \
--discovery-token-ca-cert-hash sha256:65f7bb6aa34c0a9dda98b4aa5d5c5c6f2b2665d7486adbaa4031ea8a92a98a44
出现下面的界面,说明添加成功:

在主节点可以输入 kubectl get nodes 查看各个集群有哪些节点,分别承担什么角色,node 单数复数都可以:

工作节点也可以配置 kubectl ,但不建议,这个命令最好只在主节点配置。
2.3 K8s 必备组件的安装
bash
git clone https://gitee.com/dukuan/k8s-ha-install.git
cd k8s-ha-install/
git checkout manual-installation-v1.36.x # 分支版本要和 K8s 版本相对应
cd single/
kubectl apply -f .
输入 kubectl get po -n kube-system 查看组件的启动情况,后台启动需要时间,所以如果当前没有启动(即 STATUS 还没到 Running),可以过个几分钟再输入一次:

下面的界面是所有组件都启动后的状态:

接下来输入 kubectl get node,可以看到此时各个节点的状态都变成 Ready 了:

使用 kubectl top node 查看节点资源使用情况:

2.4 图形化界面的使用
(1)Dashboard
bash
# 查看 dashboard 的服务
kubectl get svc -n kubernetes-dashboard
# 获取 dashboard 的管理员密钥(默认两个小时有效期)
kubectl create token admin-user -n kube-system

在浏览器中输入 https://192.168.174.129:31233,然后输入token:

如果想延长有效期,可以添加参数 duration:
bash
kubectl create token admin-user -n kube-system --duration=365h
登录进入后是下面的界面:

可以切换命名空间查看 Pods,Pods 是什么先不用管:

(2) KRM
终端输入:kubectl get svc -n krm:

80开头,不需要加密,浏览器输入 http://192.168.174.129:32215,账号和密码都是 admin:

登录后是下面的样子:

初学者图形化界面尽量少用,要尽量使用 kubectl,即原生 k8s 操作,因为我们要学的就是这个。
2.5 快速上线与删除一个服务
拿到镜像后,给服务创建一个名字,例如 counter
bash
kubectl create deployment counter --image=registry.cn-beijing.aliyuncs.com/dotbalo/counter:v1
创建了服务后,系统会创建一个 Pod,用来管理容器,可以通过 kubectl get po 查询。
查询:
bash
kubectl get deployment
# 或者 kubectl get deploy

暴露服务,让集群外的机器也能访问到:
bash
kubectl expose deployment counter --port 80 --type NodePort
查看服务:kubectl get svc

可以在集群外,通过 http://192.168.174.129:31779 访问服务。

编辑:
bash
kubectl delete deploy counter
删除:
bash
kubectl delete deploy counter
出现下面界面,说明成功删除:
