环境准备

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

完好的k8s集群环境

思路1:

在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 / Running 10m 172.20.104.29 192.168.253.22
httpd-deployment-784d567c4d-bl4zk / Running 44m 172.20.166.163 192.168.253.21
httpd-deployment-784d567c4d-pdkhh / Running 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..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> :/TCP 22h run=httpd
kubernetes ClusterIP 10.68.0.1 <none> /TCP 1d <none>
nginx-svc2 NodePort 10.68.26.208 <none> :/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,实现高可用。

k8s集群上线web静态网站的更多相关文章

  1. kubernetes生态--交付prometheus监控及grafana炫酷dashboard到k8s集群

    由于docker容器的特殊性,传统的zabbix无法对k8s集群内的docker状态进行监控,所以需要使用prometheus来进行监控: 什么是Prometheus? Prometheus是由Sou ...

  2. 6.K8s集群升级、etcd备份和恢复、资源对象及其yaml文件使用总结、常用维护命令

    1.K8s集群升级 集群升级有一定的风险,需充分测试验证后实施 集群升级需要停止服务,可以采用逐个节点滚动升级的方式 1.1 准备新版本二进制文件 查看现在的版本 root@k8-master1:~# ...

  3. 整理全网最全K8S集群管理工具、平台

    整理常见的整理全网最全K8S集群管理工具.平台解决方案. 1 Rancher Rancher中文官网:https://docs.rancher.cn/ 2 KubeSphere 官网:https:// ...

  4. k8s集群StatefulSets的Pod优雅调度问题思考?

    k8s集群StatefulSets的Pod优雅调度问题思考 考点之你能解释一下为什么k8s的 StatefulSets 需要VolumeClaimTemplate嘛? 考点之简单描述一下Statefu ...

  5. 强大多云混合多K8S集群管理平台Rancher入门实战

    @ 目录 概述 定义 为何使用 其他产品 安装 简述 规划 基础环境 Docker安装 Rancher安装 创建用户 创建集群 添加Node节点 配置kubectl 创建项目和名称空间 发布应用 偏好 ...

  6. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  7. 项目实战2—实现基于LVS负载均衡集群的电商网站架构

    负载均衡集群企业级应用实战-LVS 实现基于LVS负载均衡集群的电商网站架构 背景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响 ...

  8. [k8s]jenkins配合kubernetes插件实现k8s集群构建的持续集成

    另一个结合harbor自动构建镜像的思路: 即code+baseimage一体的方案 - 程序员将代码提交到代码仓库gitlab - 钩子触发jenkins master启动一次构建 - jenkin ...

  9. 通过Heketi管理GlusterFS为K8S集群提供持久化存储

    参考文档: Github project:https://github.com/heketi/heketi MANAGING VOLUMES USING HEKETI:https://access.r ...

随机推荐

  1. Python控制语句执行流程

    if语句: if<条件>:#条件之后必须有“:”.  <语句> if语句的三元运算符: <表达式1>if<条件>else<表达式2>:其语义 ...

  2. 三、Signalr外部链接

    一.本地外部引用 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head& ...

  3. itchat的使用

    python 微信接口 -- itchat 文档 发表于 2018-03-16 | 分类于 Python | itchat 一. 安装 $ pip install itchat 特殊的字典使用方式通过 ...

  4. Python之面向对象之单例模式的四种方式

    一.内容 保证一个类只有一个实例,并提供一个访问它的全局访问点 二.角色 单利 三.使用场景 当类只有一个实例而且客户可以从一个众所周知的访问点访问它时 比如:数据库链接.Socket创建链接 四.优 ...

  5. netty之IO演进之路

    常见IO类型: 传统的同步阻塞I/O编程<BIO> 基于NIO的非阻塞编程 基于NIO2.0的异步非阻塞AIO编程 BIO缺点: 没有数据缓冲区,I/O性能存在问题 没有Channel概念 ...

  6. 安装RabbitMQ 后配置遇到问题解决方案

    http://blog.csdn.net/j_shine/article/details/78833456

  7. urllib详细版

    urllib是python内置的处理HTTP请求的库,主要包含以下四个模块 request 模块,是最基本的处理HTTP请求的模块. error 异常处理模块,如果出现请求错误,可以捕获这些错误,保证 ...

  8. wepy框架换行

    上图所圈的写法会造成如下图所示 在微信开发工具是没有问题的,在真机 运行下会出现空格问题. 解决如下:

  9. JMeter 功能挖掘之 WEB 文件导出

    前言 自从写从0构建自动化测试平台(一)之技术选型开始,在工作中Get新技能就非常想郑重的记录下来,方便自己查阅:相信很多人都有这种感触:平时问题解决后,没有及时记录,下次遇到类似问题,需要花同等的成 ...

  10. Java word 内容读取

    1.添加依赖关系(网上好多帖子没有写依赖,害我找半天) <dependency>            <groupId>org.apache.poi</groupId& ...