基于Kubernetess集群部署完整示例——Guestbook
目录贴:Kubernetes学习系列
本文依赖环境:Centos7部署Kubernetes集群、基于Kubernetes集群部署skyDNS服务
该示例中,我们将创建一个redis-master、两个redis-slave、三个frontend。其中,slave会实时备份master中数据,frontend会向master中写数据,之后会从slave中读取数据。所有系统间的调用(例如slave找master同步数据;frontend找master写数据;frontend找slave读数据等),采用的是dns方式实现。
1、准备工作
1.1镜像准备
本示例中依赖以下几个镜像,请提前准备好:
docker.io/redis:latest 1a8a9ee54eb7 registry.access.redhat.com/rhel7/pod-infrastructure:latest 34d3450d733b gcr.io/google_samples/gb-frontend:v3 c038466384ab gcr.io/google_samples/gb-redisslave:v1 5f026ddffa27 |
1.2环境准备
需要一套kubernetes运行环境,及Cluster DNS,如下:
- [root@k8s-master ~]# kubectl cluster-info
- Kubernetes master is running at http://localhost:8080
- KubeDNS is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kube-dns
- kubernetes-dashboard is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard
- To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
- [root@k8s-master ~]# kubectl get componentstatus
- NAME STATUS MESSAGE ERROR
- scheduler Healthy ok
- controller-manager Healthy ok
- etcd- Healthy {"health": "true"}
- [root@k8s-master ~]# kubectl get nodes
- NAME STATUS AGE
- k8s-node- Ready 7d
- k8s-node- Ready 7d
- [root@k8s-master ~]# kubectl get deployment --all-namespaces
- NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
- kube-system kube-dns 5d
- kube-system kubernetes-dashboard-latest 6d
- [root@k8s-master ~]#
2、运行redis-master
2.1yaml文件
1)redis-master-controller.yaml
- apiVersion: v1
- kind: ReplicationController
- metadata:
- name: redis-master
- labels:
- name: redis-master
- spec:
- replicas:
- selector:
- name: redis-master
- template:
- metadata:
- labels:
- name: redis-master
- spec:
- containers:
- - name: master
- image: redis
- ports:
- - containerPort:
2)redis-master-service.yaml
- apiVersion: v1
- kind: Service
- metadata:
- name: redis-master
- labels:
- name: redis-master
- spec:
- ports:
- # the port that this service should serve on
- - port:
- targetPort:
- selector:
- name: redis-master
2.2创建rc及service
Master上执行:
- [root@k8s-master yaml]# kubectl create -f redis-master-controller.yaml
- replicationcontroller " redis-master" created
- [root@k8s-master yaml]# kubectl create -f redis-master-service.yaml
- service " redis-master" created
- [root@k8s-master yaml]# kubectl get rc
- NAME DESIRED CURRENT READY AGE
- redis-master 1d
- [root@k8s-master yaml]# kubectl get pod
- NAME READY STATUS RESTARTS AGE
- redis-master-5wyku / Running 1d
3、运行redis-slave
3.1yaml文件
1)redis-slave-controller.yaml
- apiVersion: v1
- kind: ReplicationController
- metadata:
- name: redis-slave
- labels:
- name: redis-slave
- spec:
- replicas:
- selector:
- name: redis-slave
- template:
- metadata:
- labels:
- name: redis-slave
- spec:
- containers:
- - name: worker
- image: gcr.io/google_samples/gb-redisslave:v1
- env:
- - name: GET_HOSTS_FROM
- value: dns
- ports:
- - containerPort:
2)redis-slave-service.yaml
- apiVersion: v1
- kind: Service
- metadata:
- name: redis-slave
- labels:
- name: redis-slave
- spec:
- ports:
- - port:
- selector:
- name: redis-slave
3.2创建rc及service
Master上执行:
- [root@k8s-master yaml]# kubectl create -f redis-slave-controller.yaml
- replicationcontroller "redis-slave" created
- [root@k8s-master yaml]# kubectl create -f redis-slave-service.yaml
- service "redis-slave" created
- [root@k8s-master yaml]# kubectl get rc
- NAME DESIRED CURRENT READY AGE
- redis-master 1d
- redis-slave 44m
- [root@k8s-master yaml]# kubectl get pod
- NAME READY STATUS RESTARTS AGE
- redis-master-5wyku / Running 1d
- redis-slave-7h295 / Running 44m
- redis-slave-r355y / Running 44m
4、运行frontend
4.1yaml文件
1)frontend-controller.yaml
- apiVersion: v1
- kind: ReplicationController
- metadata:
- name: frontend
- labels:
- name: frontend
- spec:
- replicas:
- selector:
- name: frontend
- template:
- metadata:
- labels:
- name: frontend
- spec:
- containers:
- - name: frontend
- image: gcr.io/google_samples/gb-frontend:v3
- env:
- - name: GET_HOSTS_FROM
- value: dns
- ports:
- - containerPort:
2)frontend-service.yaml
- apiVersion: v1
- kind: Service
- metadata:
- name: frontend
- labels:
- name: fronted
- spec:
- type: NodePort
- ports:
- - port:
- nodePort:
- selector:
- name: frontend
4.2创建rc及service
Master上执行:
- [root@k8s-master yaml]# kubectl create -f frontend-controller.yaml
- replicationcontroller "frontend" created
- [root@k8s-master yaml]# kubectl create -f frontend-service.yaml
- service "frontend" created
- [root@k8s-master yaml]# kubectl get rc
- NAME DESIRED CURRENT READY AGE
- frontend 28m
- redis-master 1d
- redis-slave 44m
- [root@k8s-master yaml]# kubectl get pod
- NAME READY STATUS RESTARTS AGE
- frontend-ax654 / Running 29m
- frontend-k8caj / Running 29m
- frontend-x6bhl / Running 29m
- redis-master-5wyku / Running 1d
- redis-slave-7h295 / Running 44m
- redis-slave-r355y / Running 44m
- [root@k8s-master yaml]# kubectl get service
- NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- frontend 10.254.93.91 <nodes> /TCP 47m
- kubernetes 10.254.0.1 <none> /TCP 7d
- redis-master 10.254.132.210 <none> /TCP 1d
- redis-slave 10.254.104.23 <none> /TCP 1h
4.3页面验证
至此,Guestbook已经运行在了kubernetes中了,但是外部是无法通过通过frontend-service的IP10.0.93.91这个IP来进行访问的。Service的虚拟IP是kubernetes虚拟出来的内部网络,在外部网络中是无法寻址到的,这时候就需要增加一层外网到内网的网络转发。我们的示例中采用的是NodePort的方式实现的,之前在创建frontend-service时设置了nodePort: 30001,即kubernetes将会在每个Node上设置端口,成为NodePort,通过NodePort端口可以访问到真正的服务。
基于Kubernetess集群部署完整示例——Guestbook的更多相关文章
- 基于Kubernetes集群部署skyDNS服务
目录贴:Kubernetes学习系列 在之前几篇文章的基础,(Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard.为Kubernetes集群部署本地镜像仓库 ...
- 基于k8s集群部署prometheus监控ingress nginx
目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...
- 基于k8s集群部署prometheus监控etcd
目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...
- 基于kubernetes集群部署DashBoard
目录贴:Kubernetes学习系列 在之前一篇文章:Centos7部署Kubernetes集群,中已经搭建了基本的K8s集群,本文将在此基础之上继续搭建K8s DashBoard. 1.yaml文件 ...
- 基于kubernetes集群的Vitess最佳实践
概要 本文主要说明基于kubernetes集群部署并使用Vitess; 本文假定用户已经具备了kubernetes集群使用环境,如果不具备请先参阅基于minikube的kubernetes集群搭建, ...
- 为Kubernetes集群部署本地镜像仓库
目录贴:Kubernetes学习系列 经过之前两篇文章:Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard,我们基本上已经能够在k8s的集群上部署一个应用了 ...
- 部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0)
部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0) 部署Bookinfo示例程序 在下载的Istio安装包的samples目录中包含了示例应用程序. ...
- 基于pgpool搭建postgressql集群部署
postgresql集群搭建 基于pgpool中间件实现postgresql一主多从集群部署,这里用两台服务器作一主一从示例 虚拟机名 IP 主从划分 THApps 192.168.1.31 主节点 ...
- 基于Tomcat的Solr3.5集群部署
基于Tomcat的Solr3.5集群部署 一.准备工作 1.1 保证SOLR库文件版本相同 保证SOLR的lib文件版本,slf4j-log4j12-1.6.1.jar slf4j-jdk14-1.6 ...
随机推荐
- Vue双向数据绑定原理分析(转)
add by zhj: 目前组里使用的是前端技术是jQuery + Bootstrap,后端使用的Django,Flask等,模板是在后端渲染的.前后端没有分离,这种做法有几个缺点 1. 模板一般是由 ...
- C# Asp.net使用FormData对象实现ajax提交表单及上传图片
1.html代码: <form id="postForm"> 文件名:<input type="text" name="filena ...
- tortoisegit 常见错误disconnected no supported authentication methods available(server sent: publickey)
按如图操作 如果不能应用,Enable Proxy Server选中,再点击下面的应用及确定. 操作完上一部,用tortoisegit 下拉一次(git pull),即可解决
- log4j layout日志信息格式
Log4j提供的layout有以下几种 org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定 ...
- 简述 cookies 和 session 的区别
1.cookie 和 session 的区别是:cookie数据保存在客户端,session数据保存在服务器端: 2.两个都可以用来存私密的东西,同样也都有有效期的说法,区别在于session是放在服 ...
- (1.16)mysql server优化之buffer pool
(1.16)mysql server优化之buffer pool 1.innodb buffer pool 查看 show status like 'Innodb_buffer_pool_%'; 该 ...
- wc 统计命令
[root@localhost ~]# wc /etc/passwd // 统计行数.单词数.字符数 /etc/passwd [root@localhost ~]# wc -l /etc/passwd ...
- mysql explain中的 “Select tables optimized away”
mysql explain中的 “Select tables optimized away” http://blog.chinaunix.net/uid-10449864-id-2956845.htm ...
- [django]阅读笔记
https://dwz.cn/FUcnVGi8 新建目录 django-admin.exe startproject myblog django-admin.exe startproject mybl ...
- gerrit设置非小组成员禁止下载代码
对gerrit有所了解的同学,都知道gerrit 是我们常用的一个来做代码审核的工具,其中的权限管理,是一个非常重要的环节,关于每个权限的使用范围,可以参考博客https://blog.csdn.ne ...