在 kubernetes 集羣中部署一套 web 網站(網頁內容不限)

環境準備

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

無缺的k8s集羣環境html

 

思路一:node

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

 

思路二:nginx

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

 

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

 

部署節點操做:

1)編排httpd.yml文件apache

容器端口爲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,實現高可用。

相關文章
相關標籤/搜索