日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kubernetes入门到精通(二):k8s部署Tomcat集群,基于NTFS协议的文件集群共享,Service提供负载均衡,端口转发工具Rinetd配置外部访问

發(fā)布時間:2024/2/28 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kubernetes入门到精通(二):k8s部署Tomcat集群,基于NTFS协议的文件集群共享,Service提供负载均衡,端口转发工具Rinetd配置外部访问 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先,配置 Docker 鏡像加速服務

登錄阿里云賬號,進入控制臺 -> 容器鏡像服務
(不需要有阿里云的服務器,只要注冊賬號即可)

在兩臺 node 節(jié)點上配置好阿里云的鏡像加速。

重啟一下 docker
sudo systemctl restart docker

重啟一下 k8s
systemctl start kubelet


部署Tomcat集群

關(guān)于 k8s 的安裝,看我上一篇博客:
https://blog.csdn.net/sinat_42483341/article/details/107283742

默認已經(jīng)安裝好三臺 k8s 的集群,主機規(guī)劃:

主機名稱node01node02node03
角色masternodenode
IP 地址10.0.0.13110.0.0.13210.0.0.133

方法1:使用可視化界面部署 tomcat 集群

dashboard -> 工作負載 -> 創(chuàng)建 -> 創(chuàng)建應用

稍等幾分鐘之后,可以看到容器自動幫我們下載好了tomcat鏡像,并且已經(jīng)運行起來了。

怎么訪問各個節(jié)點 tomcat 的內(nèi)部端口?

  • 用 node02 的 ip:32656 訪問 node02 上的 tomcat
  • 用 node03 的 ip:32656 訪問 node03 上的 tomcat

注意這里的端口號是 k8s 隨機生成的,你要去副本集里面,查看你自己的端口號。

方法2:使用 Deployment 腳本創(chuàng)建并部署 Tomcat 集群

Deployment 腳本范本


與部署相關(guān)的常用命令

kubectl create -f # 部署yml文件,創(chuàng)建部署 kubectl apply -f # 部署yml文件,更新部署配置。例如,2個改為4個之后,用這個使配置更細 kubectl get pod [-o wide] # 查看已部署的pod,-o wide是可選參數(shù),可以讓信息更加詳細 kubectl describe pod pod名稱 # 查看pod完整的詳細信息 kubectl logs [-f] pod名稱 # 查看pod內(nèi)部輸出的日志,比如看到tomcat的控制臺輸出,-f參數(shù)表示實時更新

創(chuàng)建yaml文件

cd /usr/local/ mkdir k8s cd k8s mkdir tomcat-deploy cd tomcat-deploy vim tomcat-deploy.yml# 配置文件如下 apiVersion: extensions/v1beta1 kind: Deployment metadata:name: tomcat-deploy spec: replicas: 2template:metadata:labels:app: tomcat-clusterspec:containers:- name: tomcat-clusterimage: tomcat:8ports:- containerPort: 8080# 根據(jù)配置文件創(chuàng)建 kubectl create -f ./tomcat-deploy.yml

查看部署后的信息

名稱為 tomcat-deploy 的實例就是剛剛部署的 tomcat
my-tomcat 是之前用圖形化方式創(chuàng)建的,不用管它

kubectl get deployment

kubectl get pod -o wide


可以用 kubectl describe tomcat-deploy-698fd7bd4f-98gc8查看更詳細的描述信息


外部訪問 Tomcat 集群(NodePort方式)

Service 服務用于對外暴露應用

增加 tomcat-service,它也是一個 pod,是訪問內(nèi)部容器的統(tǒng)一入口

# 創(chuàng)建 /usr/local/k8s/tomcat-service mkdir tomcat-service && cd tomcat-service && vim tomcat-service.yml# 配置文件內(nèi)容如下 apiVersion: v1 kind: Service metadata:name: tomcat-servicelabels:app: tomcat-service spec:type: NodePortselector:app: tomcat-clusterports:- port: 8000targetPort: 8080nodePort: 32500# 如果沒有配置自啟動的話,別忘了在三臺機器上啟動一下k8s systemctl start kubelet# 根據(jù)配置文件,生成服務 kubectl create -f ./tomcat-service.yml# 查看服務狀態(tài) kubectl get service


查看 service 的更詳細配置信息

kubectl describe service tomcat-service

然后,就可以利用宿主機上向外暴露的 32500 端口(10.0.0.132:32500,10.0.0.133:32500),從瀏覽器訪問 tomcat 應用了~

關(guān)于(2020.01.05)后的所有版本,tomcat 首頁 404 的原因:
個人猜測:因為docker推薦將webapps下的文件掛載在宿主機下,否則刪除tomcat容器的時候服務文件會全部丟失,為了讓大家主動將webapps掛載出來,可能維護者將以后的tomcat鏡像全部改成webapps為空,需要使用者手動將webapps.dist目錄復制出來并掛載使用
參考:https://www.cnblogs.com/jying/p/12176107.html


基于 NFS 協(xié)議的文件集群共享:解決集群中節(jié)點的docker容器內(nèi)部的文件同步問題

什么是 NFS?

  • NTFS解決了發(fā)布項目時,不同節(jié)點的文件需要同步問題。

安裝 NTFS

# 在master上安裝 yum install -y nfs-utils rpcbind# 在兩個node上安裝 yum install -y nfs-utils

集群文件共享

可以將node3看成文件共享服務器,保存了這個集群中所有要共享的文件數(shù)據(jù),通過目錄掛載,進行遠程的文件目錄映射。

  • 只要一個發(fā)生改變,全局所有的文件都會發(fā)生改變。
  • 一次性解決所有容器之間的文件共享問題。

我們將 master 作為文件共享服務器。

在master上進行以下設置:

mkdir -pv /usr/local/data/www-data && cd /usr/local/data/www-data && vim /etc/exports# 配置如下,設置了共享文件夾 /usr/local/data/www-data 10.0.0.131/24(rw,sync) # rw表示可讀可寫,sync表示同步寫入# 啟動nfs服務、設置開機啟動 systemctl start nfs.service systemctl enable nfs.service# 啟動rpc綁定服務、設置開機啟動 systemctl start rpcbind.service systemctl enable rpcbind.service

檢測是否配置成功

exportfs

在兩臺node上進行以下設置:

1、查看master上的共享文件夾

showmount -e 10.0.0.131


2、掛載

設置完之后,要重新進入 mnt 目錄才能看到效果

# 將 master 上的/usr/local/data/www-data,掛載到本機的/mnt下 mount 10.0.0.131:/usr/local/data/www-data /mnt

3、測試掛載效果
(注意,在兩個node上是沒有權(quán)限對文件進行修改的)

把原有的部署刪除,我們要創(chuàng)建新的部署

1、刪除原有的部署

kubectl get deployment kubectl delete deployment tomcat-deploy

刪除之后:

2、刪除原有的service

# 查看service kubectl get service # 刪除service kubectl delete service tomcat-service

3、調(diào)整原來的腳本

cd /usr/local/k8s/tomcat-deploy/ vim tomcat-deploy.yml# 調(diào)整如下 apiVersion: extensions/v1beta1 kind: Deployment metadata:name: tomcat-deploy spec:replicas: 2template:metadata:labels:app: tomcat-clusterspec:volumes:- name: web-apphostPath:path: /mntcontainers:- name: tomcat-clusterimage: tomcat:8ports:- containerPort: 8080volumeMounts:- name: web-appmountPath: /usr/local/tomcat/webapps

4、創(chuàng)建部署

kubectl create -f tomcat-deploy.yml

5、檢查一下吧,我們來驗證node02這臺機器
進入 docker 容器,檢查掛載目錄是否成功

docker exec -it 9fed8619284a /bin/bash


在master中修改文件,可以看到,在docker容器中,能夠隨時同步master對文件的修改。


至此,我們通過一個節(jié)點,管理了整個集群要共享的文件!

上面這是個笨辦法,需要手動進入docker容器才行。
那么,如何在master服務器上,對全局的docker容器進行觀察呢?

在 master 上使用命令:

kubectl get pod -o wide # 查看所有的pod kubectl exec -it tomcat-deploy-6659b6749b-8xwhq /bin/bash # 直接進入某個pod的容器內(nèi)部交互

Service 提供負載均衡實現(xiàn):由 Master 上面的 tomcat-service 進行自動請求轉(zhuǎn)發(fā)

統(tǒng)一應用入口,至于后端有幾個tomcat,我們不用去關(guān)心,一切交由服務進行配置和轉(zhuǎn)發(fā)。

查看并刪除已經(jīng)部署的服務

# 查看已經(jīng)部署的服務 kubectl get service# 如果需要刪除的話 kubectl delete service 服務名稱# 編輯之前的 tomcat-service.yml,把向外暴露端口的這兩行注釋掉 apiVersion: v1 kind: Service metadata:name: tomcat-servicelabels:app: tomcat-service spec: # type: NodePortselector:app: tomcat-clusterports:- port: 8000targetPort: 8080 # nodePort: 32500# 根據(jù)配置文件,生成服務 kubectl create -f ./tomcat-service.yml

查看服務的詳細信息

kubectl get service kubectl describe service tomcat-service


發(fā)送get請求

curl 10.108.170.161:8000

測試負載均衡的效果

# 新建一個頁面 cd /usr/local/data/www-data && mkdir test vim index.jsp# index.jsp 當前服務器ip:<%=request.getLocalAddr()%>

發(fā)送多次請求curl 10.108.170.161:8000/test,你看,請求被隨機發(fā)送到兩臺節(jié)點上了,k8s幫我們做了負載均衡

10.108.170.161:8000 這個 url,在外部的瀏覽器是無法訪問的。在集群外側(cè),只能通過主機的網(wǎng)卡ip進行訪問。

那么如何做地址映射呢?可以使用 Linux 中的端口轉(zhuǎn)發(fā)工具:Rinetd

使用 Linux 中的端口轉(zhuǎn)發(fā)工具:Rinetd

wget https://boutell.com/rinetd/http/rinetd.tar.gz # 這個已經(jīng)訪問不到了,需要自行下載離線包 tar -xvf rinetd.tar.gz cd rinetd sed -i 's/65536/65535/g' rinetd.c mkdir -p /usr/man/ # rinetd的要求目錄,需要手動創(chuàng)建 yum install -y gcc # 沒有g(shù)cc的話安裝一下 make && make installvi /etc/rinetd.conf # 配置文件格式很簡單:[Source Address] [Source Port] [Destination Address] [Destination Port] # 簡單翻譯一下:源IP 源端口 目標IP 目標端口 # 每行一條轉(zhuǎn)發(fā)規(guī)則.# 配置文件這樣寫: # 0.0.0.0表示允許所有ip發(fā)送請求,8000表示master對外開放8000端口 # 每當 master 的 8000 端口接收到請求后,都轉(zhuǎn)發(fā)到內(nèi)部的 10.108.170.161:8000 0.0.0.0 8000 10.108.170.161 8000

啟動和關(guān)閉轉(zhuǎn)發(fā)程序:

啟動:rinetd -c /etc/rinetd.conf

關(guān)閉:killall rinetd

檢驗端口轉(zhuǎn)發(fā)程序是否正確運行:netstat -tanulp|grep rinetd

瀏覽器訪問 master 的 ip:8000,可以順利訪問了,并且自帶負載均衡


集群配置調(diào)整與資源限定

1、更新集群配置

比如,你想把tomcat的數(shù)量由原來的3臺調(diào)整為4臺。修改配置文件后,執(zhí)行:

kubectl apply -f yml文件路徑

2、刪除已有的部署/服務

# 刪除已有部署 bubectl delete deployment 部署的名稱# 刪除已有服務 bubectl delete service 服務的名稱

3、對資源進行限定

在tomcat-deploy.yml文件中,限定創(chuàng)建的容器可以使用多少 CPU/ 內(nèi)存 等資源

  • 需要滿足 requests 需要,才能在這個節(jié)點上進行容器的部署(限定了基本需要)
  • 容器最多可以使用這個節(jié)點上的 limits 限制(限定了最大資源i)

CPU 的單位可以不是整數(shù),例如,0.5

apiVersion: extensions/v1beta1 kind: Deployment metadata:name: tomcat-deploy spec: replicas: 3template:metadata:labels:app: tomcat-clusterspec:volumes: - name: web-apphostPath: path: /mntcontainers:- name: tomcat-clusterimage: tomcat:8resources:requests:cpu: 0.5memory: 200Milimits:cpu: 1memory: 512Miports:- containerPort: 8080volumeMounts:- name: web-appmountPath: /usr/local/tomcat/webapps

kubectl apply -f tomcat-deploy.yml 更新集群配置

可以看到原來的 2 個 tomcat 變成了現(xiàn)在的 3 個 tomcat,那么,k8s 是以什么依據(jù)選擇的節(jié)點?
可用資源優(yōu)先原則:哪個機器的負載低,就優(yōu)先把新的 pod 部署在這個節(jié)點上。
另外,我們也可以指定將容器放在哪個節(jié)點上。

至此,關(guān)于 k8s 的配置與使用,我們講完啦!


使用 k8s 在集群中部署項目

1、項目拓撲

2、部署需要的所有文件

全部文件都在這里:

  • dist:包含 springboot 打包的 jar
  • sql:數(shù)據(jù)庫導出的 sql,配置好掛載后,mysql 啟動時,會自動導入數(shù)據(jù)文件

總結(jié)

以上是生活随笔為你收集整理的kubernetes入门到精通(二):k8s部署Tomcat集群,基于NTFS协议的文件集群共享,Service提供负载均衡,端口转发工具Rinetd配置外部访问的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。