傻子教程: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連接。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM