基于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 ...
随机推荐
- 第一章:深入.NET框架
1..net框架结构 主要包含公共语言运行时(CLR)和框架类库(.NET Framework 类库 ,FCL) 2.CLR 1.对于一个将要面向.NET平台进行开发的人来说,了解一下.NET平台的 ...
- pip的问题小结
Q:同时安装py2和py3后,pip2不能用 A:使用:python2 -m pip install xxx 代替 pip2 install xxx 命令 Q:怎么用pip更新第三方包 A:pip2 ...
- mysql sysbench基准测试
git项目地址: https://github.com/akopytov/sysbench 利用sysbench很容易对mysql做性能基准测试(当然这个工具很强大,除了测试主流数据库性能,还能测试其 ...
- shell字符串数组
数组 声明数组 declare -a ARRAY_NAME declare -A ARRAY_NAME: 关联数组 注意:两者不可相互转换 数组名和下标(索引) 索引:编号从0开始,属于数值索引 注意 ...
- vue中$emit 和$on 和$set的用法
1.$set的用法:给 student对象新增 age 属性 data () { return { student: { name:"里斯'} } } 直接给student赋值不会触发视图更 ...
- 小程序编辑器vscode
安装中文版 1)打开vscode工具: 2)使用快捷键组合[Ctrl+Shift+p],在搜索框中输入“configure display language”,点击确定后: 3)如图所示 =>安 ...
- C++的函数功能总结
1. string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,返回npos. 2.string的substr(pos=0, count=npos)返回字符串[pos, pos+ ...
- PHPUnit单元测试的简单使用
何为单元测试: 指对软件中的基本单元进行测试,如函数.方法等,以检查其返回值或行为是否符合预期:实际中软件是很复杂的,由许多组件构成,执行流程连贯在一起,要进行单元片段的测试,就需要为其提供执行上下文 ...
- 适用于 Windows 7 SP1 和 Windows Server 2008 R2 SP1 的 .NET Framework 4.6、4.6.1、4.6.2 和 4.7 以及适用于 Windows Server 2008 SP2 的 .NET Framework 4.6 仅安全更新说明:2017 年 9 月 12 日
https://support.microsoft.com/zh-cn/help/4040957/description-of-the-security-only-update-for-the-net ...
- VUE中过了一遍还不熟悉的东西
1.computed/watch/和methods computed是依赖于数据来变动的,有缓存,当不需要缓存的时候就用方法,watch不建议乱用,当有异步请求的时候就用watch 写法一样 2.wa ...