重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容介绍了“Kubernetes怎么实现留言板功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
成都创新互联2013年开创至今,先为兴安盟乌兰浩特等服务建站,兴安盟乌兰浩特等地企业,进行企业商务咨询服务。为兴安盟乌兰浩特企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。系统版本:CentOS Linux release 7.5.1804 (Core)
kubernetes版本:kubernetes1.3
Guestbook留言板系统将通过 Pod、RC、Service 等资源对象搭建完成,成功启动后网页中显示一条"Hello World"留言。其系统架构是一个基于PHP+Redis的分布式Web应用,前端PHP Web网站通过访问后端的 Redis 来完成用户留言的查询和添加功能。同时Redis以Master+Slave 的模式进行部署,实现数据的读写分离能力。
Web层是一个基于 PHP 页面的 Apache 服务,启动 3 个实例组成集群,实现访问网站的负载均衡。Redis Master启动 1 个实例用于写操作(添加留言),Redis Slave 启动两个实例用于读操作(读取留言)。Redis Master与 Slave 的数据同步由 Redis 具备的数据同步机制完成。
可以先定义 Service,然后定义一个 RC来创建和控制相关联的 Pod,或者先定义 RC 来创建 Pod,然后定义与之关联的 Service。
首先为 redis-master 创建一个名为 redis-master 的 RC 定义文件 redis-master-controller.yaml。
# cat redis-master-controller.yaml apiVersion: v1 kind: ReplicationController #表示这是一个RC metadata: name: redis-master labels: name: redis-master spec: replicas: 1 selector: name: redis-master template: metadata: labels: name: redis-master spec: containers: - name: master image: kubeguide/redis-master ports: - containerPort: 6379
创建完成之后,在master节点上发布到集群中
# kubectl create -f redis-master-controller.yaml replicationcontroller/redis-master created
用kubectl get 命令确认RC和Pod 创建成功
# kubectl get rc NAME DESIRED CURRENT READY AGE redis-master 1 1 0 70s # kubectl get pods -o wide| grep redis redis-master-j58mw 1/1 Running 0 3m59s 172.17.39.7 192.168.200.130
redis-master Pod 已创建且正常运行后,在创建与之关联的Service
# cat redis-master-service.yaml apiVersion: v1 kind: Service metadata: name: redis-master labels: name: redis-master spec: ports: - port: 6379 targetPort: 6379 selector: name: redis-master
运行kubectl create 命令创建该service
# kubectl create -f redis-master-service.yaml service/redis-master created # kubectl get services | grep redis-master redis-master ClusterIP 10.0.0.1166379/TCP 40s
本示例启动启动 redis-slave 服务的两个副本,每个副本上的 Redis 进程都与 redis-master进行数据同步,与 redis-master 共同组成了一个具备读写分离能力的 Redis集群。留言板的PHP网页通过访问 redis-slave 服务来读取留言数据。
# cat redis-slave-controller.yaml apiVersion: v1 kind: ReplicationController metadata: name: redis-slave labels: name: redis-slave spec: replicas: 2 selector: name: redis-slave template: metadata: labels: name: redis-slave spec: containers: - name: slave image: kubeguide/guestbook-redis-slave env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 6379
在容器的配置部分设置了一个环境变量 GET_HOSTS_FROM=env ,意思是从环境变量中获取 redis-master服务的 IP 地址信息。
redis-slave 镜像中的启动脚本 /run.sh 的内容为:
# kubectl create -f redis-slave-controller.yaml replicationcontroller/redis-slave created # kubectl get rc | grep redis redis-master 1 1 1 45m redis-slave 2 2 2 103s # kubectl get pod | grep redis redis-master-j58mw 1/1 Running 0 45m redis-slave-c42bx 1/1 Running 0 2m3s redis-slave-s74b8 1/1 Running 0 2m3s
创建与redis-slave 相关的Service 服务,类似于 redis-master服务。
# cat redis-slave-service.yaml apiVersion: v1 kind: Service metadata: name: redis-slave labels: name: redis-slave spec: ports: - port: 6379 targetPort: 6379 selector: name: redis-slave
运行kubectl 创建 Service
# kubectl create -f redis-slave-service.yaml service/redis-slave created # kubectl get svc | grep redis redis-master ClusterIP 10.0.0.1166379/TCP 39m redis-slave ClusterIP 10.0.0.173 6379/TCP 49s
3.1 创建部署 frontend rc
# cat frontend-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: frontend
labels:
name: frontend
spec:
replicas: 3
selector:
name: frontend
template:
metadata:
labels:
name: frontend
spec:
containers:
- name: frontend
image: kubeguide/guestbook-php-frontend
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 80
在容器的配置部分设置了一个环境变量 GET_HOSTS_FROM=env ,意思是从环境变量中获取 redis-master 和 redis-slave 服务的 IP 地址信息。
# kubectl create -f frontend-controller.yaml replicationcontroller/frontend created
查看创建的
# kubectl get rc NAME DESIRED CURRENT READY AGE frontend 3 3 3 5m1s redis-master 1 1 1 67m redis-slave 2 2 2 24m # kubectl get pods NAME READY STATUS RESTARTS AGE frontend-mnd85 1/1 Running 0 5m43s frontend-pmpdb 1/1 Running 0 5m43s frontend-zd2n5 1/1 Running 0 5m43s
3.2 创建部署 frontend service
最后创建 frontend Service,主要目的是使用 Service 的 NodePort 给 Kuberbetes 集群中的 Service 映射一个外网可以访问的端口,这样,外部网络就可以通过 NodeIP+NodePort 的方式访问集群中的服务了。
# cat frontend-service.yaml
apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
name: frontend
spec:
type: NodePort
ports:
- port: 80
nodePort: 30003
selector:
name: frontend
运行kubectl create 命令发布到集群中
# kubectl create -f frontend-service.yaml service/frontend created # kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend NodePort 10.0.0.14580:30003/TCP 24s
web页面浏览
http://192.168.200.129:30003/,http://192.168.200.130:30003/ 备注:为 Node节点的IP
再次登录会查看到留言,说明数据读取写入没有问题。
“Kubernetes怎么实现留言板功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。