環境準備
一臺部署節點,一臺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,實現高可用。