K8S-1.23.17 + Ceph + KubeSphere 一主二从部署攻略
目录
此教程以一主二从为例,需要三台服务器。
主机需求: 4 核 CPU,8 GB 内存,硬盘:40 GBx2 (需保留一个未分区的磁盘)
从机需求: 4 核 CPU,4 GB 内存,硬盘:40 GBx2 (需保留一个未分区的磁盘)
软件版本
Ubuntu:22.04
Kubesphere:3.4.1
Docker:19.3.8 +
K8s:1.23.17
Rook:1.13.6
前置要求
集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
服务器要能流畅访问(包括但不限于) github、dockerhub、registry.k8s.io、ghcr.io 等仓库,否则会导致pod创建失败或非常慢。
1. 配置Cgroup驱动(加速仓库不需要可移除)
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "registry-mirrors": [ "https://hub-mirror.c.163.com/", "https://dockerproxy.com/" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
2. 配置docker存储库,安装docker-ce
sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get -y update sudo apt-get -y install docker-ce
3. 关闭交换分区
sudo swapoff -a sudo sed -ri 's/.*swap.*/#&/' /etc/fstab
4. 允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system
5. 安装 kubeadm、kubelet 和 kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF' deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet=1.23.17-00 kubeadm=1.23.17-00 kubectl=1.23.17-00 sudo apt-mark hold kubelet kubeadm kubectl
6. 初始化控制平面节点(仅主节点执行)
sudo kubeadm init \ --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ --kubernetes-version v1.23.17 \ --pod-network-cidr=10.244.0.0/16
出现如下信息表示初始化成功,将token(图中最后两行)复制保存,后面会用到,token有效期为24小时
执行命令:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
7. 安装 Pod 网络附加组件(仅主节点执行,方式二选一)
方式一(镜像):
|
||
方式二(官方):
|
执行命令查看安装是否完成
watch kubectl get pod -n kube-system -o wide
输出中检查 CoreDNS Pod 的STATUS直到变成 Running 表示完成(需要十几分钟)
8. 配置hosts
ip和对应主机名要改成自己实际的!
sudo tee -a /etc/hosts <<EOF 192.168.1.100 k8s1 192.168.1.101 k8s2 192.168.1.102 k8s3 EOF
检查hosts文件:cat /etc/hosts
9. 从节点加入主节点
在从节点执行 步骤六 保存的token,注意非root用户前面加上sudo
sudo kubeadm join 192.168.1.100:6443 --token **** \ --discovery-token-ca-cert-hash sha256:****
成功输出:
失败可以尝试以下两种方法:
重置 kubeadm(在从节点执行):
|
||||
关闭防火墙(主从都执行):
|
完毕后,执行 watch kubectl get nodes (主节点执行) 查看,等待所有节点状态变成Ready(需要几分钟)
10. 删除污点(仅主节点执行)
kubectl taint nodes <主节点名,比如k8s1> node-role.kubernetes.io/master:NoSchedule-
11. 安装Rook-Ceph(仅主节点执行,方式二选一)
方式一(镜像):
|
||||
方式二(官方):
|
执行命令:
kubectl create -f rook/deploy/examples/crds.yaml \ -f rook/deploy/examples/common.yaml \ -f rook/deploy/examples/operator.yaml kubectl create -f rook/deploy/examples/cluster.yaml
待安装完成(需要十分钟左右),使用 watch kubectl get pods -n rook-ceph 来确认安装进度,
安装完至少需要有以下pod
rook-ceph-mgr-a-****
rook-ceph-mgr-b-****
rook-ceph-mon-a-****
rook-ceph-mon-b-****
rook-ceph-mon-c-****
rook-ceph-osd-0-****
rook-ceph-osd-1-****
rook-ceph-osd-2-****
且除 rook-ceph-osd-prepare-*** 以外,其他都要为Running
12. 创建默认StorageClass(仅主节点执行)
kubectl create -f rook/deploy/examples/filesystem.yaml kubectl create -f rook/deploy/examples/csi/cephfs/storageclass.yaml kubectl patch storageclass rook-cephfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
使用:kubectl get sc 确认是否成功 需看到 "(default)" 。
13. 安装KubeSphere(仅主节点执行,方式二选一)
方式一(镜像):
|
||||
方式二(官方):
|
查看安装进度(过两分钟,pod 建好命令才能使用):
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
成功输出:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体