环境准备

一台部署节点,一台master节点,还有两台节点node1,node2

完好的k8s集群环境

思路一:

在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,实现高可用。

在 kubernetes 集群中部署一套 web 网站(网页内容不限)的更多相关文章

  1. 在kubernetes集群中部署ElasticSearch集群--ECK

    Elastic Cloud on Kubernetes (ECK) ---ECK是这个说法哈. 基本于k8s operator的官方实现. URL: https://www.elastic.co/gu ...

  2. 终于解决 k8s 集群中部署 nodelocaldns 的问题

    自从开始在 kubernetes 集群中部署 nodelocaldns 以提高 dns 解析性能以来,一直被一个问题困扰,只要一部署 nodelocaldns ,在 coredns 中添加的 rewr ...

  3. ingress-nginx 的使用 =》 部署在 Kubernetes 集群中的应用暴露给外部的用户使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247488189&idx=1&sn=8175f067 ...

  4. 初试 Kubernetes 集群中使用 Traefik 反向代理

    初试 Kubernetes 集群中使用 Traefik 反向代理 2017年11月17日 09:47:20 哎_小羊_168 阅读数:12308    版权声明:本文为博主原创文章,未经博主允许不得转 ...

  5. 在Kubernetes集群中使用calico做网络驱动的配置方法

    参考calico官网:http://docs.projectcalico.org/v2.0/getting-started/kubernetes/installation/hosted/kubeadm ...

  6. Kubernetes集群中Service的滚动更新

    Kubernetes集群中Service的滚动更新 二月 9, 2017 0 条评论 在移动互联网时代,消费者的消费行为已经“全天候化”,为此,商家的业务系统也要保持7×24小时不间断地提供服务以满足 ...

  7. Kubernetes集群的部署方式及详细步骤

    一.部署环境架构以及方式 第一种部署方式 1.针对于master节点 将API Server.etcd.controller-manager.scheduler各组件进行yum install.编译安 ...

  8. 在 Kubernetes 集群快速部署 KubeSphere 容器平台

    KubeSphere 不仅支持部署在 Linux 之上,还支持在已有 Kubernetes 集群之上部署 KubeSphere,自动纳管 Kubernetes 集群的已有资源与容器. 前提条件 Kub ...

  9. 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式

    一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...

随机推荐

  1. synchronized关键字所生成的字节码详细分析

    在之前已经将如下这样的源文件对应的字节码文件完整的分析完了,如下: 这次再来写一个内容稍丰富一点的类,准备再来从头至尾的来分析一下,对其字节码的理解进一步巩固,如下: 然后用javap -verbos ...

  2. MySQL进阶19--函数的创建(举例)/设置mysql的创建函数的权限/查看(show)/删除(drop) / 举4个栗子

    /*MySQL进阶19 函数 存储过程和函数:都类似于java中的方法; 存储过程和函数通用好处: 1.提高代码的重用性 2.简化操作 好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数, ...

  3. 【搜索-剪枝-偏难】PAT-天梯赛-L3-015. 球队“食物链”

    L3-015. 球队“食物链” 某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结果已经尘埃落定.此时,联赛主席突发奇想,希望从 ...

  4. appium问题汇总(持续更新。。。)

    WEBVIEW_unknown adb版本较低,adb 1.0.32版本不支持安卓8.x版本,更新adb版本后正常 Install homebrew ruby -e "$(curl -fsS ...

  5. Number of Islands II

    Given a n,m which means the row and column of the 2D matrix and an array of pair A( size k). Origina ...

  6. oracle存储过程把查询到的值更新到别的表

    create or replace procedure update_nst_t_Clime2 as cursor c_db is select * from NST_T_FRAME f ,) as ...

  7. mongodb 4.0.5 集群搭建五台集群

    配置文件采用yaml方式来配置 生产中取消了仲裁者的角色,因为仲裁者也不会存储数据,只是起到选举的作用,线上为了保证数据安全,每份数据都会配置两个副本集,也就是每份数据存储了三份. 优化配置,采用五台 ...

  8. 2G以上的大文件如何上传

    无法上传大文件是因为php.ini配置有限制了,这样限制了用户默认最大为2MB了,超过了就不能上传了,如果你确实要上传我们可以按下面方法来处理一下. 打开php.ini, 参数  设置  说明 fil ...

  9. bzoj2738矩阵乘法

    题意: 给你一个N*N的矩阵,没有修改,每次询问一个子矩形中的第K小数. 题目链接 思路: 当它只有一列时,其实就是区间第K大,也就是整体二分可以解决的. 现在到了二维,只需要将之前的树状数组改成二维 ...

  10. Codeforces Round #583

    目录 Contest Info Solutions A. Optimal Currency Exchange B. Badges C. Bad Sequence D. Treasure Island ...