基于K8S搭建ceph分布式存储实践(ROOK1.8)
搭建ROOK(基于K8S的ceph分布式存储)
资源:
master1 | centos7.9 | 建议配置4C4G | 磁盘20G(镜像很大) 额外添加2块磁盘实验 |
ceph1 | |||
ceph2 | |||
ceph3 |
master1为K8S主节点;
ceph_为node节点(额外添加2块10G新磁盘)
无单独说明的master、node节点配置的,4台机器都需要配置
1,操作系统参数配置:
//内核参数ipvs,在后面的kube-proxy中使用ipvs
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
yum install ipvsadm ipset -y
//openfiles
cat >> /etc/security/limits.conf << EOF
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
EOF
//selinux
sed -i s/'SELINUX=enforcing'/'SELINUX=disabled'/g /etc/selinux/config
//firewall
systemctl disable firewalld
//hosts
cat >> /etc/hosts << EOF
192.168.239.131 master1
192.168.239.128 ceph1
192.168.239.129 ceph2
192.168.239.130 ceph3
EOF
//ntp
yum install vim ntp net-tools ntpdate -y
//master节点配置时间同步服务器
cat >> /etc/ntp.conf << EOF
server 127.127.0.1
fudge 127.127.0.1 stratum 10
EOF
systemctl start ntpd
systemctl enable ntpd
//node节点配置时间同步服务器,删除其他时间同步server服务,添加server配置
vim /etc/ntp.conf
server 192.168.239.131
systemctl start ntpd
systemctl enable ntpd
//测试
ntpstat
显示synchronised为正常,一般需要等一小会儿
//修改主机名
hostnamectl set-hostname ceph1
hostnamectl set-hostname ceph2
hostnamectl set-hostname ceph3
hostnamectl set-hostname master1
重启所有节点,初始化完毕。
2,部署K8S集群
2.1 master节点配置免密登录到各个node
ssh-keygen
ssh-copy-id ceph1
ssh-copy-id ceph2
ssh-copy-id ceph3
2.2 安装docker
yum install -y yum-utils
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl restart docker
2.3 安装K8S组件
//配置yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
//安装K8S工具
yum install -y kubelet-1.23.1-0 kubeadm-1.23.1-0 kubectl-1.23.1-0
//kubelet使用swap
sed -i 1s/$/'"--fail-swap-on=false"'/ /etc/sysconfig/kubelet
systemctl enable kubelet
systemctl start kubelet
//此时kubelet启动,status有问题是正常的
//master节点初始化,修改master的IP,效果会主动拉起master节点的kubelet
kubeadm init \
--apiserver-advertise-address=192.168.239.131 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.23.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.200.0.0/16 \
--ignore-preflight-errors=all
//api访问权限
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.4 其他node节点加入master
//这个命令是kubeadm init初始化后生成的
kubeadm join 192.168.239.131:6443 --token nxbzhp.fll2bcytz0v92sw5 \
--discovery-token-ca-cert-hash sha256:02a02c163c014a98403fd4504b7554686044ee54e280c169a5fee4830f110ac2
//或者在master节点使用命令创建
kubeadm token create --print-join-command
添加成功。
2.5 安装网络插件calico
#wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
calico关键字:CALICO_IPV4POOL_CIDR --pod-network-cidr=10.200.0.0/16
添加字段:IP_AUTODETECTION_METHOD
value匹配你的网卡名字
#kubectl apply -f calico.yaml
修改内核kube-prox ipvs
#kubectl edit configmap kube-proxy -n kube-system
关键字:
mode: "ipvs"
修改之后,因为configmap的特征,修改不立即生效。所以要把所有kube-proxy的pod删除之后重新加载配置
#kubectl delete pod kube-proxy-5ntj4 kube-proxy-82dk4 kube-proxy-s9jrw -n kube-system
2.6 部署ingress(可选)
传送门: https://kubernetes.github.io/ingress-nginx/deploy/
修改镜像地址(注意版本号是否一致,这里匹配的是ingress1.1.0的yaml):
image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.0
imagePullPolicy: IfNotPresent
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
imagePullPolicy: IfNotPresent
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
imagePullPolicy: IfNotPresent
我这里使用的是hostnetwork模式:(使用nodeport把Service的nodeport改一下)
给node打标签,匹配nedeSelector 字段app: ceph,在lable匹配的节点部署ingress
#kubectl label node ceph1 app=ceph
#kubectl label node ceph2 app=ceph
#kubectl label node ceph3 app=ceph
ingress-k8s版本对照表
3,搭建ROOK1.8.8(基于K8S的分布式存储ceph)
ROOK传送门:https://www.cncf.io/projects/rook/
#git clone --single-branch --branch v1.8.8 https://github.com/rook/rook.git
cd rook/deploy/examples
kubeadm部署时,去掉master节点的污点标签
#kubectl taint node master1 node-role.kubernetes.io/master:NoSchedule-
#vim rook/deploy/examples/operator.yaml
修改镜像仓库地址(因为默认是google的,国内无法下载):
下面给的镜像tag是hub.docker上找的。
建议使用docker sava ,tar打包镜像之后,再传到各个node,然后docker load。
operator里面共7个镜像2个超过1G,不打包约2.5G,打包之后不到1G。下图6个+ rook/ceph1个
ROOK_CSI_CEPH_IMAGE: "cnplat/cephcsi:v3.5.1"
ROOK_CSI_REGISTRAR_IMAGE: "longhornio/csi-node-driver-registrar:v2.5.0"
ROOK_CSI_RESIZER_IMAGE: "linode/csi-resizer:v1.4.0"
ROOK_CSI_PROVISIONER_IMAGE: "dyrnq/csi-provisioner:v3.1.0"
ROOK_CSI_SNAPSHOTTER_IMAGE: "willdockerhub/csi-snapshotter:v5.0.1"
ROOK_CSI_ATTACHER_IMAGE: "dyrnq/csi-attacher:v3.4.0"
修改osd自动发现:
cluster里面有1个镜像,quay.io/ceph/ceph:v16.2.7,1G多,这个可以直接下载,也很慢。
修改cluster标签匹配node亲和性:
跑起来吧:
#kubectl create -f crds.yaml -f common.yaml -f operator.yaml
#kubectl create -f cluster.yaml
可能需要等待相当长的时间,如果有问题,一般是镜像拉取问题。pod会按照顺序依次生成。
我因资源不足(2C2G)问题巨卡,除去镜像拉取时间,又花了大半天时间,期间都是下载镜像和反复调度,因此强烈建议用4C4G虚机。
最后等待osd生成之后,添加toolbox工具
#kubeclt apply -f root/deploy/examples/toolbox.yaml
#kubectl exec -it rook-ceph-tools-c76445d9d-j2z8m bash -nrook-ceph
关于主动发现osd的配置,默认60m,修改如下
#vim operator.yaml
关键字
name: ROOK_DISCOVER_DEVICES_INTERVAL
设置5分钟
遇到的问题:
磁盘自动添加到osd之后,删除了集群,并重新部署,这个时候osd-prepare无法自动添加osd
解决:
安装ceph-volume
#rpm -ivh https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-release-1-1.el7.noarch.rpm
#yum install epel-release -y
-------查看命令在哪个包----yum provides ceph-volume---------------------------
#yum install -y ceph-osd
擦除旧数据
#ceph-volume lvm zap --destroy /dev/sdb
#ceph-volume lvm zap --destroy /dev/sdc
更多推荐
所有评论(0)