CentOS7使用kubeadm部署k8s-1.28集群
- Linux
- 2025-03-05
- 700热度
- 0评论
参考资料:生产环境
记录使用CentOS7.9进行k8s-1.28版本部署,运行时环境使用containerd,网络插件使用calic,集群搭建完成后。搭建NFS共享存储环境,测试运行pod并挂载使用持久卷。
服务器角色
| 主机名 | **IP地址 ** | 角色 | 基础组件 |
|---|---|---|---|
| el7-linux-node-01 | 192.168.240.11 | k8s-master | kubeadm,kubelet,kubectl,containerd,nfs-server |
| el7-linux-node-02 | 192.168.240.12 | k8s-worker | kubeadm,kubelet,kubectl,containerd,nfs-client |
| el7-linux-node-03 | 192.168.240.13 | k8s-worker | kubeadm,kubelet,kubectl,containerd,nfs-client |
软件环境
| 软件名称 | 版本 |
|---|---|
| CentOS | 7.9 |
| Kubernetes | 1.28 |
| contianerd | 1.6.28 |
安装步骤
- 确认运行环境
- 环境准备
- 安装容器运行时
- 安装kubeadm、kubelet、kubectl
- 配置cgroup驱动程序
kubeadm安装配置
参考资料:安装 kubeadm
确认运行环境
服务器准备
- CPU 2核,内存2G以上
- 集群主机间相互通信
- 节点之间不可以有重复主机名、MAC或product_uuid
- 禁用交接分区
系统初始化配置
所有服务器执行
禁用selinux
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
禁用swap
# 关闭swap分区
swapoff -a
sed -i 's|^\(/.*swap\)|#\1|' /etc/fstab
禁用防火墙
# 关闭防火墙
systemctl stop iptables
systemctl disable iptables
升级操作系统内核
yum -y update kernel*
管理节点密钥配置
# 生成密钥
ssh-keygen -t ecdsa -f /root/.ssh/id_rsa -N ''
# 复制密钥到所有服务器
ssh-copy-id 192.168.240.11
ssh-copy-id 192.168.240.12
ssh-copy-id 192.168.240.13
主机解析配置
el-linux-node-01执行
cat >> /etc/hosts << EOF
192.168.240.11 el7-linux-node-01
192.168.240.12 el7-linux-node-02
192.168.240.13 el7-linux-node-03
EOF
scp /etc/hosts 192.168.240.12:/etc/hosts
scp /etc/hosts 192.168.240.13:/etc/hosts
安装容器运行时
每台服务器安装,在此采用Docker-CE + cri-dockerd,由于kubernetes在1.24(含)以后的版本中移除了cri-dockerd。需要手动进行部署
开启网络转发
以下命令在每台服务器上执行
转发 IPv4 并让 iptables 看到桥接流量
cat < overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat < /etc/containerd/config.toml
sed -i 's|registry.k8s.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml
启动containerd
systemctl enable containerd
systemctl restart containerd
systemctl status containerd
配置客户端工具
配置crictl工具运行时接口地址(runtime-endpoint),工具使用方法参考:cri-tools/docs/crictl.md at master · kubernetes-sigs/cri-tools
# 配置crictl工具运行时接口地址(runtime-endpoint)
crictl config --set runtime-endpoint=unix:///run/containerd/containerd.sock
crictl ps
安装kubeadm、kubelet、kubectl
需要在每台机器上安装以下的软件包:
- kubeadm:用来初始化集群的指令。
- kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
- kubectl:用来与集群通信的命令行工具。
kubeadm 不能帮你安装或者管理 kubelet 或 kubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 之间可以存在一个次要版本的偏差,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。
参考资料:安装 kubeadm
配置Yum源
以下命令在每台服务器上执行
cat < pvc(持久卷申领[PersistentVolumeClaim]) -> pv(PersistentVolume[provisioner]) -> nfs(StorageClass)
### 
##### 下载NFS subdir 外部驱动
```bash
# 下载nfs外部署驱动部署文件
cd /root
git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
# 拷贝部署文件到时部署目录
cd nfs-subdir-external-provisioner
cp -a deploy /root/k8s/nfs-subdir-external-provisioner
cd /root/k8s/nfs-subdir-external-provisioner
替换驱动配置文件
# 由于nfs-subdir-external-provisioner镜像仓库地址registry.k8s.io国内无法访问,
# 在此将其替换为公司镜像仓库地址,此镜像已经拉取并上传到公司
sed -i 's|registry.k8s.io/sig-storage|hub.daqsoft.com:5000/daqsoft/k8s|g' deployment.yaml
# 替换nfs服务器配置信息
sed -i 's|10.3.243.101|192.168.240.11|g' deployment.yaml
sed -i 's|/ifs/kubernetes|/www/server/k8s/data|g' deployment.yaml
部署nfs驱动、sc、pv、pvc
kubectl apply -f rbac.yaml
kubectl apply -f deployment.yaml
kubectl apply -f class.yaml
kubectl apply -f test-claim.yaml
kubectl apply -f test-pod.yaml

检查部署状态
kubectl get sc -o wide
kubectl get pv -o wide
kubectl get pvc -o wide test-claim
kubectl get pod -o wide test-pod

检查测试文件
test-pod.yaml文件内容
kind: Pod
apiVersion: v1
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: busybox:1.28
command:
- "/bin/sh"
args:
- "-c"
- "touch /mnt/SUCCESS && exit 0 || exit 1" #pod运行后在/mnt目录中创建success文件
volumeMounts:
- name: nfs-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: test-claim
检查nfs服务目录中是否有test-pod创建的文件,持久卷在nfs服务中创建的目录名称为:命名空间-pvc名称-pv名称,相关信息通过get pv进行获取;如我们创建的pvc(test-claim)在default空间下,其对应nfs中的目录名称为:default-test-claim-pvc-234376c4-995b-4f97-b449-952c4a90dd5e
ls /www/server/k8s/data/default-test-claim-pvc-234376c4-995b-4f97-b449-952c4a90dd5e

