准備服務器
安裝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連接。

navicat配置ssh代理連接mysql


