Bootstrap

kind部署k8s安装doris operator

环境为windows11,并开启wsl,使用应用商店的子系统 Ubuntu 20.04.6TLS

引用:Kubernetes教程(十五)---使用 kind 在本地快速部署一个 k8s集群 -

Install docker

Kind 使用 docker 来启动容器,因此需要先安装 docker,可自行安装,也可以用下面这个脚本安装。

通过以下命令创建 install-docker.sh 脚本文件:

cat << EOF > install-docker.sh 
#!/bin/bash
set -e
# centos 一键安装 docker 脚本.

#卸载旧版本
yum remove -y docker  docker-common docker-selinux docker-engine
#安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#添加yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装最新版docker
yum install -y docker-ce
#配置镜像加速器
mkdir -p /etc/docker
echo '{
  "registry-mirrors": [
    "https://reg-mirror.qiniu.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}' > /etc/docker/daemon.json
#启动并加入开机启动
systemctl enable docker --now
docker version
echo "docker install finish."
EOF

运行脚本,安装 docker:

sh install-docker.sh

kind安装k8s集群官方也提供了脚本,可以一键创建,但是我本地测试没有成功:kind – Local Registry

Install kind from binary

kind 只是一个二进制文件,因此下载下来放到 bin 目录即可。

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.17.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

Install kubectl

Kind 只负责创建集群(会配置好 kubeconfig),后续操作集群的话需要手动安装 kubectl.

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin

Create aio cluster

一切就绪之后,使用 kind 创建集群即可。

kind 0.17.0 默认用的是 v.1.25.3 版本 k8s,可以先手动拉镜像,因为默认的镜像地址不一定能拉下来。(拉不下来可以试下registry.cn-hangzhou.aliyuncs.com/morris-share/kindest-node:v1.25.3)

docker pull kindest/node:v1.25.3

然后创建集群时指定刚才拉下来的镜像

kind create cluster --image kindest/node:v1.25.3 --name aio -v 5

不出意外的话,一两分钟就可以创建好。

创建好之后就可以使用 kubectl 进行操作了,kind 会把 kubeconfig 也配置好,使用起来和真正的集群基本一致。

List cluster

Kind 自身也保存了集群数据的,使用以下命令进行查看。

kind get clusters

Delete cluster

删除一个集群也很简单,通过集群名即可

# syntax:kind delete  cluster --name ${clustername}
kind delete  cluster --name aio

install doris operator

基于 Doris-Operator 部署 | SelectDB

在kind里操作需要先把所需要的镜像使用docker pull下来然后使用kind load进去

需要的镜像:

selectdb/doris.k8s-operator                    latest    90d109ad7562   4 weeks ago     62.4MB
selectdb/doris.be-ubuntu                       2.1.1     8e211d53e0c5   9 months ago    5.21GB
selectdb/doris.fe-ubuntu                       2.1.1     2bc07a671fa5   9 months ago    1.9GB
selectdb/alpine                                latest 

 比如:selectdb/doris.be-ubuntu:2.1.1,按此操作将这四个集群加载到aio这个集群里。

docker pull docker-0.unsee.tech/selectdb/doris.be-ubuntu:2.1.1
# 导入完镜像id是:8e211d53e0c5

docker tag 8e211d53e0c5 selectdb/doris.be-ubuntu:2.1.1
# 将这个镜像导入到kind创建的k8s集群aio中
kind load docker-image selectdb/doris.be-ubuntu:2.1.1 --name aio

1. 添加 DorisCluster 资源定义(opens in a new tab)

kubectl apply -f https://raw.githubusercontent.com/selectdb/doris-operator/master/config/crd/bases/doris.selectdb.com_dorisclusters.yaml    

2. 部署 Doris-Operator

方式一:默认部署模式
直接通过仓库中 Operator 的定义进行部署

kubectl apply -f https://raw.githubusercontent.com/selectdb/doris-operator/master/config/operator/operator.yaml

方式二:自定义部署
operator.yaml(opens in a new tab) 中各个配置是部署 Operator 服务的最低要求。为提高管理效率或者有定制化的需求,下载 operator.yaml 进行自定义部署。

  • 下载 Operator 的部署范例 operator.yaml(opens in a new tab),可直接通过 wget 进行下载。
  • 按期望更新 operator.yaml 中各种配置信息。
  • 通过如下命令部署 Doris-Operator 服务。
kubectl apply -f operator.yaml

3. 检查 Doris-Operator 服务部署状态
Operator 服务部署后,可通过如下命令查看服务的状态。当STATUSRunning状态,且 pod 中所有容器都为Ready状态时服务部署成功。

lwf@lwf-PC:~/doris-oprate$ kubectl get pods -n doris
NAME                              READY   STATUS    RESTARTS       AGE
doris-operator-55f6cf8566-fw7ml   1/1     Running   0              7h17m

deploy doris cluster

kubectl apply -f https://raw.githubusercontent.com/selectdb/doris-operator/master/doc/examples/doriscluster-sample.yaml

注意使用官方配置3fe,3be可能会部署失败,主要是集群配置不够,这里改成了一主一从

apiVersion: doris.selectdb.com/v1
kind: DorisCluster
metadata:
  labels:
    app.kubernetes.io/name: doriscluster
    app.kubernetes.io/instance: doriscluster-1-1
    app.kubernetes.io/part-of: doris-operator
  name: doriscluster-1-1
  namespace: doris
spec:
  feSpec:
    replicas: 1
    image: selectdb/doris.fe-ubuntu:2.1.1
  beSpec:
    replicas: 1
    image: selectdb/doris.be-ubuntu:2.1.1

期间也出现了一个问题就是fe起来了但是be一直没有起来,查看日志

kubectl logs doriscluster-1-1-be-0 -n doris

大概内容是:连接fe失败

然后进入容器,无法路由:

kubectl exec -it <pod-name> -n <namespace> -- nslookup <service-name>

查看kube-proxy报错:

kube-proxy iptables-restore v1.8.7 (legacy): Couldn't load match `recent':No such file or directory

wsl没有 ipt_recent 模块,可以修改kube-proxy的配置mode 设置为 ipvs。

kubectl edit cm kube-proxy -n kube-system
# mode: ipvs

# 重启kube-proxy

 kubectl delete kube-proxy-9w2w4 -n kube-system

部署成功:

lwf@lwf-PC:~/doris-oprate$ kubectl get pods -n doris
NAME                              READY   STATUS    RESTARTS       AGE
doris-operator-55f6cf8566-fw7ml   1/1     Running   0              7h47m
doriscluster-1-1-be-0             1/1     Running   53 (92m ago)   6h23m
doriscluster-1-1-fe-0             1/1     Running   0              6h25m

;