一谐岁、下載官方提供的nacos-k8s包
git clone https://github.com/nacos-group/nacos-k8s.git
如果下載不下來(lái)可以使用gitee下,文件內(nèi)容如下所示:二湾笛、部署NFS
Nacos在K8S擁有自動(dòng)擴(kuò)容縮容和數(shù)據(jù)持久特性,請(qǐng)注意如果需要使用這部分功能請(qǐng)使用PVC持久卷,Nacos的自動(dòng)擴(kuò)容縮容需要依賴(lài)持久卷,以及數(shù)據(jù)持久化也是一樣,本例中使用的是NFS來(lái)使用PVC.
2.1 安裝nfs服務(wù)
master,node01,node02 安裝 nfs-utils
yum -y install nfs-utils rpcbind
master,node01,node02添加nfs exports配置,為了解決后續(xù)的nfs報(bào)錯(cuò)異常
在三個(gè)節(jié)點(diǎn)創(chuàng)建以下三個(gè)目錄:
mkdir -p /data/nfs-share
mkdir -p /data/mysql
chmod 777 /data/nfs-share
chmod 777 /data/mysql
vi /etc/exports
三個(gè)節(jié)點(diǎn)增加以下的配置
/data/mysql*(insecure,fsid=0,rw,async,no_root_squash)
/data/nfs-share *(rw,fsid=0,async,no_root_squash)
啟動(dòng)并設(shè)置開(kāi)機(jī)啟動(dòng)nfs:
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
2.2 創(chuàng)建角色
K8S命名空間不是default,請(qǐng)?jiān)诓渴餜BAC之前執(zhí)行以下腳本:
# Set the subject of the RBAC objects to the current namespace where the provisioner is being deployed
NS=$(kubectl config get-contexts|grep -e "^\*" |awk '{print $5}')
NAMESPACE=${NS:-default}
sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/nfs/rbac.yaml
使用默認(rèn)民命空間default丸冕,使用下面命令創(chuàng)建創(chuàng)建
kubectl create -f deploy/nfs/rbac.yaml
2.3 創(chuàng)建 ServiceAccount 和部署 NFS-Client Provisioner
kubectl create -f deploy/nfs/deployment.yaml
2.4 創(chuàng)建 NFS StorageClass
kubectl create -f deploy/nfs/class.yaml
2.5 驗(yàn)證NFS部署成功
kubectl get pod -l app=nfs-client-provisioner
如果發(fā)現(xiàn)pods狀態(tài)一直如下,可以使用如下方式查看錯(cuò)誤信息:
kubectl describe pods nfs-client-provisioner-9647df776-szzx8
創(chuàng)建過(guò)程中可能docker鏡像下載很慢薛窥,請(qǐng)耐心等待.
2.6 如果鏡像無(wú)法下載怎么辦
通過(guò)describe命令發(fā)現(xiàn)image一直在pulling:可以更換deployment.yaml中的鏡像地址:
registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner:latest
三胖烛、部署mysql
這里建議使用外部數(shù)據(jù),如果要使用yaml安裝诅迷,則使用如下方式佩番。
修改mysql-nfs.yaml文件
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
labels:
name: mysql
spec:
replicas: 1
selector:
name: mysql
template:
metadata:
labels:
name: mysql
spec:
containers:
- name: mysql
image: nacos/nacos-mysql:5.7
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "root"
- name: MYSQL_DATABASE
value: "nacos_devtest"
- name: MYSQL_USER
value: "nacos"
- name: MYSQL_PASSWORD
value: "nacos"
volumes:
- name: mysql-data
nfs:
server: 192.168.184.139
path: /data/mysql
---
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
name: mysql
spec:
ports:
- port: 3306
targetPort: 3306
selector:
name: mysql
查看狀態(tài):
[root@k8s-master deploy]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-9lbkp 1/1 Running 0 3m30s 10.244.4.9 k8s-node2 <none> <none>
nfs-client-provisioner-557df77947-npjdt 1/1 Running 0 33m 10.244.4.2 k8s-node2 <none> <none>
四、部署nacos
kubectl create -f nacos/nacos-pvc-nfs.yaml
如果出現(xiàn)如下問(wèn)題:
使用以下方式修改罢杉,在kube-apiserver.yaml中增加以下配置趟畏,kubeadmin安裝的k8s會(huì)自動(dòng)重啟:
vi /etc/kubernetes/manifests/kube-apiserver.yaml
增加以下內(nèi)容
- --feature-gates=RemoveSelfLink=false
位置如下圖:刪除nacos和pvc,重新創(chuàng)建
kubectl delete -f deploy/nacos/nacos-pvc-nfs.yaml
kubectl delete pvc datadir-nacos-0 logdir-nacos-0 plugindir-nacos-0
重點(diǎn)問(wèn)題
1滩租、使用nacos-pvc-nfs.yaml方式發(fā)現(xiàn)仍然無(wú)法啟動(dòng)成功赋秀,無(wú)法掛載到指定路徑,導(dǎo)致服務(wù)整個(gè)無(wú)法啟動(dòng)律想,這里記錄一下沃琅,暫時(shí)還沒(méi)發(fā)現(xiàn)什么問(wèn)題導(dǎo)致的。
所以本文先使用nacos-quick-start.yaml方式蜘欲,直接啟動(dòng):
kubectl create -f nacos/nacos-quick-start.yaml
2益眉、發(fā)現(xiàn)有一個(gè)節(jié)點(diǎn)是pending,是因?yàn)槔逊荩琸8s默認(rèn)主節(jié)點(diǎn)master不部署服務(wù)郭脂,這里面改下配置就可以了:
kubectl taint nodes --all node-role.kubernetes.io/master-
記得使用NodePort或者Ingress的方式暴露外網(wǎng)訪問(wèn)。
3澈歉、節(jié)點(diǎn)啟動(dòng)后發(fā)現(xiàn)頁(yè)面訪問(wèn)失敗展鸡,使用如下方式解決
確定pod是否成功啟動(dòng),使用logs命令查看埃难∮ū祝基本都是因?yàn)榉?wù)沒(méi)有起來(lái)導(dǎo)致無(wú)法訪問(wèn)。而nacos則基本是因?yàn)閿?shù)據(jù)庫(kù)配置導(dǎo)致的涡尘。注意看nacos的yaml數(shù)據(jù)庫(kù)配置忍弛。
如果啟動(dòng)成功,還不能解決考抄,嘗試以下方案
修改Docker啟動(dòng)參數(shù)细疚,在[Service] 區(qū)域末尾加上參數(shù):
vi /usr/lib/systemd/system/docker.service
# 添加以下配置
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
systemctl daemon-reload
systemctl restart docker