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
EulerOS 2.5(x86_64)
EulerOS 2.8(arm64)

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 架构的仓库

k8s做容器迁移 k8s数据迁移_运维

手动模式创建集群,需要提前设置好主机凭据

k8s做容器迁移 k8s数据迁移_k8s做容器迁移_02

NTP Server: 时间同步服务器,默认可以为空。也可以自建或使用公共 NTP Server

k8s做容器迁移 k8s数据迁移_kubernetes_03

 添加主机⚓︎

  • 推荐使用全新的机器
  • KubeOperator 部署机不能作为 Kubernetes 集群节点使用

k8s做容器迁移 k8s数据迁移_kubernetes_04

主机列表⚓︎

主机列表可以看到已添加主机的详细信息,包括 IP、CPU、内存、操作系统等

k8s做容器迁移 k8s数据迁移_kubernetes_05

Yum 仓库

  • 替换: 此操作将会对 K8S 节点服务器原始 yum repo 文件进行备份,之后生成并仅使用 KubeOperator 的 yum repo
  • 共存: 此操作将保持K8S节点服务器原始 yum repo 文件不变,同时生成并使用 kubeoperator 的 yum repo
  • 不操作: 此操作将保持使用 K8S 节点服务器原始 yum repo 文件,不对K8S节点服务器的 yum repo 做任何操作

k8s做容器迁移 k8s数据迁移_centos_06

集群设置⚓︎

  • 容器网络: CIDR不能与目标IP段重叠,否则会造成初始化失败
  • POD 数量上限/节点: 默认 256
  • Service 数量上限/集群: 默认 256
  • proxy 模式: 支持 iptables 和 ipvs
  • dns 缓存: 支持开启 NodeLocal DNSCache
  • kubernetes 审计: 支持开启日志审计功能

k8s做容器迁移 k8s数据迁移_centos_07

运行时设置⚓︎

  • 容器运行时: 支持 Docker 和 Containerd
  • Docker 数据路径: 默认 /var/lib/docker
  • Container 子网: 默认 172.17.0.1/16

k8s做容器迁移 k8s数据迁移_运维_08

容器网络设置⚓︎

  • 网卡名称: 多网卡环境需要指定使用的网卡名称,单网卡环境可不填
  • 容器网络: 支持 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. 如果您已经在运行路由守护进程)

k8s做容器迁移 k8s数据迁移_linux_09

组件设置⚓︎

  • helm: 支持 v2 和 v3
  • ingress 类型: 支持 nginx-ingress 和 traefik-ingress
  • 安装 GPU 套件: 按需使用,默认选择禁用

k8s做容器迁移 k8s数据迁移_运维_10

节点信息⚓︎

根据不同的节点角色选择目标主机(手动模式)

k8s做容器迁移 k8s数据迁移_运维_11

选择已授权部署计划,设置 Worker 节点数量(自动模式)

k8s做容器迁移 k8s数据迁移_k8s做容器迁移_12

确认信息⚓︎

k8s做容器迁移 k8s数据迁移_运维_13

日志⚓︎

集群创建过程中为 Initializing 状态,点击可查看集群安装进度并支持查看当前任务的实时日志(支持手动暂停任务日志输出)

k8s做容器迁移 k8s数据迁移_linux_14

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在集群内直接添加存储提供商

k8s做容器迁移 k8s数据迁移_linux_15

k8s做容器迁移 k8s数据迁移_kubernetes_16

存储类中选择刚刚创建的提供商,创建存储类

k8s做容器迁移 k8s数据迁移_运维_17

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