环境准备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,实现高可用。