k8s集群上線web靜態網站


 

環境准備

 

一台部署節點,一台master節點,還有兩台節點node1,node2

完好的k8s集群環境

 

思路1:

在node1和node2節點上通過宿主機與容器之間目錄映射和端口映射上線靜態網站(或動態),然后將映射的目錄做成hostpath,通過nfs共享出去。

 

思路二:

在node1和node2節點上通過拷貝宿主機存放靜態資源的目錄到容器的apache根目錄內實現靜態網站的上線,並且能通過部署nodeport靜態端口訪問后端節點的靜態網站。

 

 這里我演示第二種方法:

 

部署節點操作:

1)編排httpd.yml文件

容器端口為80,副本數為3.

這里因為我是上線的apache服務,所以使用httpd的鏡像,當然也可以使用nginx或者tomcat,但需要注意的是各自的根目錄不一樣。

 

2)然后執行如下命令創建deployment,生成pod。

kubectl  apply -f  httpd.yml

 

查看pod狀態

[root@dlp yml]# kubectl get pod -o wide
NAME                                READY     STATUS        RESTARTS   AGE       IP               NODE
httpd-deployment-784d567c4d-2fxb2   1/1       Running       0          10m       172.20.104.29    192.168.253.22
httpd-deployment-784d567c4d-bl4zk   1/1       Running       0          44m       172.20.166.163   192.168.253.21
httpd-deployment-784d567c4d-pdkhh   1/1       Running       0          45m       172.20.104.28    192.168.253.22

 

node節點:

3)根據pod的name在分別在22和21節點查找容器。

 

 

 

4)創建目錄/usr/local/apache2/htdocs ,然后上傳一個靜態資源包,我這里上傳一個飛機大戰的小游戲。     #這里我們需要知道的是,這也是httpd容器的根目錄。

[root@node1 htdocs]# ls
game.zip
[root@node1 htdocs]# unzip game.zip 

解壓后是這個樣子
[root@node1 htdocs]# ls
game  jquery-1.8.3.min.js  readme.xls  sky_fight.html  sky.php

 

5)將以上文件全部拷貝到 3)步驟的容器里面的/usr/local/apache2/htdocs目錄下。

[root@node2 apache2]# docker cp htdocs/ 9b20bb037dd8:/usr/local/apache2/htdocs

 


6)進入容器的/usr/local/apache2/htdocs目錄,查看文件是否拷貝成功,並且將原本的index,html文件移走或者刪除。

否則訪問的就是此文件下的內容。—————》it work


[root@node2 apache2]# docker exec -it 9b20bb037dd8 /bin/bash

root@httpd-deployment-784d567c4d-2fxb2:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs    modules
root@httpd-deployment-784d567c4d-2fxb2:/usr/local/apache2# cd htdocs/
root@httpd-deployment-784d567c4d-2fxb2:/usr/local/apache2/htdocs# ls
htdocs    index.html
tml @httpd-deployment-784d567c4d-2fxb2:/usr/local/apache2/htdocs# rm -rf index.ht
root@httpd-deployment-784d567c4d-2fxb2:/usr/local/apache2/htdocs# cd htdocs/
root@httpd-deployment-784d567c4d-2fxb2:/usr/local/apache2/htdocs/htdocs# ls
game images readme.xls sky_fight.html game.zip jquery-1.8.3.min.js  sky.php

 

 7) 以上步驟成功后又回到部署節點編寫一個service的編排文件。

 

 

 節點的靜態端口設置為26055,service端口為8080.注意框內的run: httpd。要與1)步驟的編排文件的label name對應。

 

 8)啟動編排文件,生成service。

kubectl  apply -f  svc.yml

 

9)查看service的狀態

[root@dlp yml]# kubectl get svc -o wide
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE       SELECTOR
httpd-svc    NodePort    10.68.90.148   <none>        8080:26055/TCP   22h       run=httpd
kubernetes   ClusterIP   10.68.0.1      <none>        443/TCP          1d        <none>
nginx-svc2   NodePort    10.68.26.208   <none>        8081:30001/TCP   21h       run=nginx

 

 10)在不屬於k8s集群的任意主機上訪問。格式為nodeip + nodeport  。例如:

 

因為是靜態網站,所以我們去web瀏覽器上訪問效果更好。

 

 

 

11) 但是這樣只是做了一個節點的可用,我們要想將21節點加入服務端。需要將/usr/local/apache/htdocs目錄當成nfs的共享目錄掛載到其他節點上。並且通過將此目錄下的資源拷貝到節點容器內,而不是通過目錄映射,為什么呢?

因為通過目錄映射的方式會重新生成一個容器,而不是1)步驟通過編排文件生成的pod容器。這樣通過nodeport就無法訪問靜態資源而是通過宿主機映射的端口來訪問。

 

12)在21節點上執行3、4、5、6步驟,然后訪問瀏覽器,顯示效果如下:

 

 

 

 可以看到集群的節點都實現了靜態網站上線,如果集群內的pod down掉k8s集群會根據副本數自動生成新的pod,實現高可用。


免責聲明!

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



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