1.节点规划
角色 | CPU核数 | 内存 | 系统盘 | 数量 |
部署机 | 4 | 8G | 100G | 1 |
Master | 4 | 8G | 100G | 3 |
Worker | 16 | 64G | 系统盘: 100G 数据盘: 300G(/var/lib/docker) | 4 |
存储机 | 2 | 4G | 3T | 1 |
2.软件要求
需求项 | 具体要求 | 参考(以CentOS7.6为例) |
操作系统 | CentOS/RHEL 7.4 - 7.9 Minimal | cat /etc/redhat-release |
CPU 架构 | 支持 x86_64 和 aarch64 | uname -m |
kernel 版本 | >=Linux 3.10.0-957.el7.x86_64 | uname -sr |
swap | 关闭。如果不满足,系统会有一定几率出现 io 飙升,造成 docker 卡死。kubelet 会启动失败(可以设置 kubelet 启动参数 --fail-swap-on 为 false 关闭 swap 检查) | swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab |
防火墙 | 关闭。Kubernetes 官方要求 | systemctl stop firewalld && systemctl disable firewalld |
SELinux | 关闭 | setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config |
时区 | 所有服务器时区必须统一,建议设置为 Asia/Shanghai | timedatectl set-timezone Asia/Shanghai |
3.部署KubeOperator
# 以 root 用户 ssh 登录目标服务器, 执行如下命令
curl -sSL https://github.com/KubeOperator/KubeOperator/releases/latest/download/quick_start.sh -o quick_start.sh
bash quick_start.sh
4.登录控制台进行配置
地址: http://<ko服务器_ip>:80
用户名: admin
密码: kubeoperator@admin123
如果部署 Kubernetes 集群时需要 K8S 节点采用 x86_64 和 arm64 混合部署,则需要添加两个不同 CPU 架构的仓库
手动模式创建集群,需要提前设置好主机凭据
NTP Server: 时间同步服务器,默认可以为空。也可以自建或使用公共 NTP Server
添加主机⚓︎
- 推荐使用全新的机器
- KubeOperator 部署机不能作为 Kubernetes 集群节点使用
主机列表⚓︎
主机列表可以看到已添加主机的详细信息,包括 IP、CPU、内存、操作系统等
Yum 仓库
- 替换: 此操作将会对 K8S 节点服务器原始 yum repo 文件进行备份,之后生成并仅使用 KubeOperator 的 yum repo
- 共存: 此操作将保持K8S节点服务器原始 yum repo 文件不变,同时生成并使用 kubeoperator 的 yum repo
- 不操作: 此操作将保持使用 K8S 节点服务器原始 yum repo 文件,不对K8S节点服务器的 yum repo 做任何操作
集群设置⚓︎
- 容器网络: CIDR不能与目标IP段重叠,否则会造成初始化失败
- POD 数量上限/节点: 默认 256
- Service 数量上限/集群: 默认 256
- proxy 模式: 支持 iptables 和 ipvs
- dns 缓存: 支持开启 NodeLocal DNSCache
- kubernetes 审计: 支持开启日志审计功能
运行时设置⚓︎
- 容器运行时: 支持 Docker 和 Containerd
- Docker 数据路径: 默认 /var/lib/docker
- Container 子网: 默认 172.17.0.1/16
容器网络设置⚓︎
- 网卡名称: 多网卡环境需要指定使用的网卡名称,单网卡环境可不填
- 容器网络: 支持 flannel 、 calico 和 cilium
vxlan 和 ipip 网络模式
- 基于隧道,在任何网络环境下都可以正常工作
- 优势是对物理网络环境没有特殊要求,只要宿主机IP层可以路由互通即可
- 劣势是封包和解包耗费CPU性能,且额外的封装导致带宽浪费
host-gw 和 bgp 网络模式
- 基于路由,不适用于公有云环境
- 优势是没有封包和解包过程,完全基于两端宿主机的路由表进行转发
- 劣势是要求宿主机在2层网络是互通,且路由表膨胀会导致性能降低
cilium Overlay
- 支持 vxlan 和 geneve
- 基于封装的虚拟网络,产生所有主机。目前 VXLAN 和 Geneve 已经完成,但可以启用 Linux 支持的所有封装格式
- 此模式具有最小的基础设施和集成要求。它几乎适用于任何网络基础设施,因为唯一的要求是主机之间的IP连接,这通常已经给出
cilium Native Routing
- 使用 Linux 主机的常规路由表。网络必须能够路由应用程序容器的IP地址,此模式适用于高级用户,需要了解底层网络基础结构。
- 适用于(1. 原生 IPv6 网络、2. 与云网络路由器配合使用、3. 如果您已经在运行路由守护进程)
组件设置⚓︎
- helm: 支持 v2 和 v3
- ingress 类型: 支持 nginx-ingress 和 traefik-ingress
- 安装 GPU 套件: 按需使用,默认选择禁用
节点信息⚓︎
根据不同的节点角色选择目标主机(手动模式)
选择已授权部署计划,设置 Worker 节点数量(自动模式)
确认信息⚓︎
日志⚓︎
集群创建过程中为 Initializing 状态,点击可查看集群安装进度并支持查看当前任务的实时日志(支持手动暂停任务日志输出)
5.部署K8S默认存储(NFS)
服务端安装
使用 yum 安装 NFS 安装包。
$ sudo yum install nfs-utils
注意
只安装 nfs-utils 即可,rpcbind 属于它的依赖,也会安装上。
服务端配置
设置 NFS 服务开机启动
$ sudo systemctl enable rpcbind $ sudo systemctl enable nfs
启动 NFS 服务
$ sudo systemctl start rpcbind $ sudo systemctl start nfs
防火墙需要打开 rpc-bind 和 nfs 的服务
$ sudo firewall-cmd --zone=public --permanent --add-service={rpc-bind,mountd,nfs} success $ sudo firewall-cmd --reload success
配置共享目录
服务启动之后,我们在服务端配置一个共享目录
$ sudo mkdir /home/data/nfs
$ sudo chmod 755 /home/data/nfs
根据这个目录,相应配置导出目录
$ sudo vi /etc/exports
添加如下配置
/home/data/nfs/ 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)
/home/data/nfs/: 共享目录位置。
192.168.0.0/24: 客户端 IP 范围,* 代表所有,即没有限制。
rw: 权限设置,可读可写。
sync: 同步共享目录。
no_root_squash: 可以使用 root 授权。
no_all_squash: 可以使用普通用户授权。
:wq 保存设置之后,重启 NFS 服务。
$ sudo systemctl restart nfs
可以检查一下本地的共享目录
$ showmount -e localhost
Export list for localhost: /home/data/nfs 192.168.0.0/24
这样,服务端就配置好了,接下来配置客户端,连接服务端,使用共享目录。
6.部署NFS的动态pv
使用Kubeoperator在集群内直接添加存储提供商
存储类中选择刚刚创建的提供商,创建存储类
7.部署Kubesphere
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.0/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.0/cluster-configuration.yaml
8.部署velero迁移测试环境项目命名空间
1.在可以访问到需要备份的k8s集群的机器上下载并解压velero,并将velero命令添加到linux
wget https://github.com/vmware-tanzu/velero/releases/download/v1.5.4/velero-v1.5.4-linux-amd64.tar.gz
tar -zxvf velero-v1.5.4-linux-amd64.tar.gz
cp velero-v1.5.4-linux-amd64/velero /usr/local/bin
2.创建好minio需要使用的认证,这里以velero自带的测试minio部署文件为例
cd velero-v1.5.4-linux-amd64
kubectl apply -f examples/minio/00-minio-deployment.yaml
vi credentials-velero
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
3.在需要迁移的k8s集群上安装velero服务端
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.0.0 \
--bucket velero \
--secret-file ./credentials-velero \
--use-restic \
--use-volume-snapshots=false \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio.velero.svc:9000
4.在需要备份的k8s集群上创建任意带持久化存储卷的服务进行备份测试(可自行使用helm创建)这里以备份backup-test命名空间下所有资源为例
velero backup create test-volum --include-namespaces=backup-test --default-volumes-to-restic
5.查看备份状态
velero backup get|grep test-volum
6.在需要迁移的集群上备份恢复
velero restore create --from-backup test-volum