资源:

master1centos7.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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐