傻子教程:K8S+rook+mysql

准备服务器

安装VMware Workstation。
安装一台Centos7.6 minimal安装版。链接克隆出四台,1台当作安装机,3台机器做k8s集群
虚拟机配置:
2CPU
2GRAM
20Gsda (系统盘)
30Gsdb (Ceph)

安装k8s

基础环境配置

配置installer的hosts文件

根据实际IP地址编辑installer下的/etc/hosts文件如下
192.168.31.200 installer
192.168.31.201 k8s-001
192.168.31.202 k8s-002
192.168.31.203 k8s-003

配置免密(在installer上针对所有k8s节点操作)

ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa root@IP

关闭防火墙(所有节点)

systemctl disable firewalld
systemctl stop firewalld

同步HOSTS到三个k8s节点.

scp /etc/hosts k8s-001:/etc/hosts
scp /etc/hosts k8s-002:/etc/hosts
scp /etc/hosts k8s-003:/etc/hosts
集群生产环境建议配置ntp

Installer(安装机)初始化

安装Git docker

yum install git docker libffi-devel wget -y
启动docker并设置为开机自启动,要不后续会报错。
systemctl enable docker
systemctl start docker

安装pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

上传k8s集群需要的安装程序和镜像。

链接:https://pan.baidu.com/s/15qvAhXGrm_scFUq3s2SVvA
提取码:1v96
将k8s.tar上传到installer服务器的/tmp目录。
mkdir /tmp/kubespray_cache
tar xf /tmp/k8s.tar -C /tmp/kubespray_cache

下载安装工具kubespray

版本为2.14.2
git clone -b v2.14.2 https://github.com/kubernetes-sigs/kubespray.git
mv kubespray/ /root/ && cd /root/kubespray
git reset --hard 8a153ed

kuberspray初始化暨配置

pip install -r requirements.txt

生成集群配置文件

cp -r inventory/sample inventory/mycluster
declare -a IPS=(192.168.31.201 192.168.31.202 192.168.31.203)
编辑 contrib/inventory_builder/inventory.py
self.hosts_file = open(config_file, 'r')修改为self.hosts_file = open(config_file, 'w')
CONFIG_FILE=inventory/mycluster/hosts.yml python contrib/inventory_builder/inventory.py ${IPS[@]}

sed "s/node1/k8s-001/g" -i inventory/mycluster/hosts.yml
sed "s/node2/k8s-002/g" -i inventory/mycluster/hosts.yml
sed "s/node3/k8s-003/g" -i inventory/mycluster/hosts.yml
查看inventory/mycluster/hosts.yml文件,各节点角色是否符合预期。

修改kubespray的下载模式配置,安装过程中使用缓存(即安装下载),而不是从网上下载镜像

修改./roles/download/defaults/main.yml

中的两个参数(download_run_once,download_localhost)为True。

ansible-playbook -i inventory/mycluster/hosts.yml cluster.yml -vvv

ansible-playbook脚本跑完后,系统即安装成功。

dashboard配置

在master节点运行
kubectl -n kube-system edit service kubernetes-dashboard 修改type的类型从ClusterIP为NodePort(注意大小写)
保存退出,
kubectl get service -n kube-system kubernetes-dashboard
看到一个30xxx的端口号,复制备用。
kubectl get secret -A |grep kubernetes-dashboard-token
得到一个secret 名字为 kubernetes-dashboard-token-xxxx。
kubectl describe secret kubernetes-dashboard-token-xxxxx -n kube-system(请更换为实际secret名字)
得到登陆token,复制备用。
浏览器访问:https://192.168.31.203:30xxx/#/login,接受证书错误,输入token。即成功登陆dashboard。
登陆后,右上角铃铛有红色告警,提示类似

system:serviceaccount:kube-system:kubernetes-dashboard" cannot list resource "clusterrolebindings" in API group >"rbac.authorization.k8s.io" at the cluster scope,

执行下面命令赋予权限,刷新页面后选中左上 全部namespace即可查看已有的pods,service等集群资源。
kubectl create clusterrolebinding yangras-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

安装rook

rook安装所需的镜像建议预先现在并导入各k8snode.
链接: https://pan.baidu.com/s/1RPsdUuo0BHKlPdjCbPNIBA 密码: 479i
此章节参考连接: https://www.rook.io/docs/rook/v1.5/ceph-toolbox.html

sdb盘此时为裸盘,没有mount,没有格式化。
[root@k8s-001 ~]# yum install git -y
[root@k8s-001 ~]# git clone --single-branch --branch v1.5.1 https://github.com/rook/rook.git
[root@k8s-001 ~]# cd /root/rook/cluster/examples/kubernetes/ceph
当k8s的网络插件是calico时,需修改operator.yaml中hostNetwork: true,当k8s网络插件为flannel不用
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
kubectl -n rook-ceph create secret generic rook-ceph-crash-collector-keyring
[root@k8s-001 ~]# kubectl get pods -o wide -n rook-ceph
待operator显示为running是执行下一步。
[root@k8s-001 ~]# kubectl create -f cluster.yaml
成功安装后,pod是这样的。

[root@k8s-001 ~]# kubectl get pod -n rook-ceph
NAME READY STATUS RESTARTS AGE
csi-cephfsplugin-5qxz9 3/3 Running 0 22m
csi-cephfsplugin-gk74b 3/3 Running 0 22m
csi-cephfsplugin-jvjkl 3/3 Running 0 22m
csi-cephfsplugin-provisioner-7dc78747bf-k4grz 6/6 Running 0 22m
csi-cephfsplugin-provisioner-7dc78747bf-pbzz9 6/6 Running 0 22m
csi-rbdplugin-gp764 3/3 Running 0 22m
csi-rbdplugin-m5dcz 3/3 Running 0 22m
csi-rbdplugin-provisioner-54d48757b4-92chf 6/6 Running 0 22m
csi-rbdplugin-provisioner-54d48757b4-cz7qj 6/6 Running 0 22m
csi-rbdplugin-r7k8g 3/3 Running 0 22m
rook-ceph-crashcollector-k8s-001-76495f4d4c-mbbpf 1/1 Running 0 17m
rook-ceph-crashcollector-k8s-002-57fcfcdd4b-sqqbw 1/1 Running 0 20m
rook-ceph-crashcollector-k8s-003-75cc48ccfc-k7sk2 1/1 Running 0 15m
rook-ceph-mgr-a-7d69b45687-sx8fr 1/1 Running 0 15m
rook-ceph-mon-a-6649b7cd78-567br 1/1 Running 0 22m
rook-ceph-mon-b-558599fcc7-khxbb 1/1 Running 0 20m
rook-ceph-mon-d-58947b95cb-l624q 1/1 Running 0 18m
rook-ceph-operator-78554769bd-2bkft 1/1 Running 0 27m
rook-ceph-osd-0-588f65fddf-p4fdh 1/1 Running 0 15m
rook-ceph-osd-1-5676fb6f65-pv5w8 1/1 Running 0 14m
rook-ceph-osd-2-5bbfd545f9-wfckk 1/1 Running 0 14m
rook-ceph-osd-prepare-k8s-001-dhmw7 0/1 Completed 0 6m16s
rook-ceph-osd-prepare-k8s-002-5xbgl 0/1 Completed 0 6m14s
rook-ceph-osd-prepare-k8s-003-jk57l 0/1 Completed 0 6m11s

查看rook dashboard的密码。

kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
kubeclt edit 编辑rook-dashboard的service类型为nodeport。
即可访问dashboard

生成storagepool。

kubectl apply -f /root/rook/cluster/examples/kubernetes/ceph/pool.yaml

适用于生产环境的三副本pool
pool-ec.yaml纠错码的pool pool-test.yaml一副本的pool

生成storageclass

kubectl apply -f /root/rook/cluster/examples/kubernetes/ceph/storageclass-bucket-delete.yaml

回收策略为delete的storageclass,对应的有还有回收策略为retain。

通过mysql operator安装mysql 主从复制集群

此章节参考连接: https://github.com/presslabs/mysql-operator

二级制方式安装helm

下载helm-v3.4.2-linux-amd64.tar.gz并加压到/root/helm/目录。

创建mysql-operator
helm repo add presslabs https://presslabs.github.io/charts

添加repo,此步骤主要创建如下两个目录
/root/.config/helm
/root/.cache/helm

helm install mysql-operator presslabs/mysql-operator

创建一个operator。
此命令会从网络上下载一套yaml文件到/root/.cache/helm/repository/mysql-operator-0.4.0.tgz并执行。
默认的配置文件由于没有指定storageClass导致无法创建pvc进而无法启动pod
此处将文件解压缩于/tmp/目录并修改其中values.yaml文件121行为storageClass: rook-ceph-block (此处的storageClass要与上文生成的对应)
helm install mysql-operator presslabs/mysql-operator -f values.yaml

最好提前下载下面三个镜像
quay.io/presslabs/mysql-operator-orchestrator:0.4.0
quay.io/presslabs/mysql-operator:0.4.0
quay.io/presslabs/mysql-operator-orchestrator:0.4.0
正常情况下,输入kubectl get pods 可看到operator处于running状态。

执行下列命令
kubectl apply -f https://raw.githubusercontent.com/presslabs/mysql-operator/master/examples/example-cluster-secret.yaml
kubectl apply -f https://raw.githubusercontent.com/presslabs/mysql-operator/master/examples/example-cluster.yaml
最好提前下载下面两个镜像
percona@sha256:713c1817615b333b17d0fbd252b0ccc53c48a665d4cfcb42178167435a957322
prom/mysqld-exporter:v0.11.0

查看mysql的service地址,并通过navicat连接。


posted on 2020-12-23 09:50  yangras  阅读(917)  评论(0编辑  收藏  举报

导航