k8s集羣上線web靜態網站

 

環境準備php

 

一臺部署節點,一臺master節點,還有兩臺節點node1,node2html

無缺的k8s集羣環境node

 

思路1:jquery

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

 

思路二:web

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

 

 這裏我演示第二種方法:apache

 

部署節點操做:後端

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節點上執行三、四、五、6步驟,而後訪問瀏覽器,顯示效果以下:

 

 

 

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

相關文章
相關標籤/搜索