K8S-1.23.17 + Ceph + KubeSphere 一主二从部署攻略

K8S部署攻略

此教程以一主二从为例,需要三台服务器。

主机需求: 4 核 CPU,8 GB 内存,硬盘:40 GBx2 (需保留一个未分区的磁盘)

从机需求: 4 核 CPU,4 GB 内存,硬盘:40 GBx2 (需保留一个未分区的磁盘)

 

软件版本:

Ubuntu22.04

Kubesphere:3.4.1

Docker19.3.8 +

K8s1.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 网络附加组件(仅主节点执行,方式二选一)

方式一(镜像):

kubectl apply -f https://gitee.com/yfeil/k8s/releases/download/1.23.17/kube-flannel.yml

方式二(官方):

kubectl apply -f https://github.com/flannel-io/flannel/releases/download/v0.24.4/kube-flannel.yml

执行命令查看安装是否完成

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(在从节点执行):

sudo kubeadm reset
 关闭防火墙(主从都执行):
sudo systemctl stop firewalld
sudo systemctl disable firewalld

完毕后,执行 watch kubectl get nodes (主节点执行) 查看,等待所有节点状态变成Ready(需要几分钟)

 

10. 删除污点(仅主节点执行)

kubectl taint nodes <主节点名,比如k8s1> node-role.kubernetes.io/master:NoSchedule-

 

11. 安装Rook-Ceph(仅主节点执行,方式二选一)

方式一(镜像):

sudo apt-get install git -y
git clone --single-branch --branch v1.13.6-edit https://gitee.com/yfeil/rook.git

方式二(官方):

sudo apt-get install git -y
git clone --single-branch --branch v1.13.6 https://github.com/rook/rook.git


执行命令:

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(仅主节点执行,方式二选一)

方式一(镜像):

kubectl apply -f https://gitee.com/yfeil/k8s/releases/download/1.23.17/kubesphere-installer.yaml
kubectl apply -f https://gitee.com/yfeil/k8s/releases/download/1.23.17/cluster-configuration.yaml

方式二(官方):

kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/cluster-configuration.yaml

查看安装进度(过两分钟,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

成功输出:

完结撒花!

附件:k8s部署攻略.doc

posted @ 2024-03-15 18:49  Yfeil  阅读(252)  评论(0编辑  收藏  举报