目录贴: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,如下:

  1. [root@k8s-master ~]# kubectl cluster-info
  2. Kubernetes master is running at http://localhost:8080
  3. KubeDNS is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kube-dns
  4. kubernetes-dashboard is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard
  5.  
  6. To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
  7. [root@k8s-master ~]# kubectl get componentstatus
  8. NAME STATUS MESSAGE ERROR
  9. scheduler Healthy ok
  10. controller-manager Healthy ok
  11. etcd- Healthy {"health": "true"}
  12. [root@k8s-master ~]# kubectl get nodes
  13. NAME STATUS AGE
  14. k8s-node- Ready 7d
  15. k8s-node- Ready 7d
  16. [root@k8s-master ~]# kubectl get deployment --all-namespaces
  17. NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
  18. kube-system kube-dns 5d
  19. kube-system kubernetes-dashboard-latest 6d
  20. [root@k8s-master ~]#

2、运行redis-master

2.1yaml文件

  1)redis-master-controller.yaml

  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: redis-master
  5. labels:
  6. name: redis-master
  7. spec:
  8. replicas:
  9. selector:
  10. name: redis-master
  11. template:
  12. metadata:
  13. labels:
  14. name: redis-master
  15. spec:
  16. containers:
  17. - name: master
  18. image: redis
  19. ports:
  20. - containerPort:

  2)redis-master-service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: redis-master
  5. labels:
  6. name: redis-master
  7. spec:
  8. ports:
  9. # the port that this service should serve on
  10. - port:
  11. targetPort:
  12. selector:
  13. name: redis-master

2.2创建rc及service

  Master上执行:

  1. [root@k8s-master yaml]# kubectl create -f redis-master-controller.yaml
  2. replicationcontroller " redis-master" created
  3. [root@k8s-master yaml]# kubectl create -f redis-master-service.yaml
  4. service " redis-master" created
  5. [root@k8s-master yaml]# kubectl get rc
  6. NAME DESIRED CURRENT READY AGE
  7. redis-master 1d
  8. [root@k8s-master yaml]# kubectl get pod
  9. NAME READY STATUS RESTARTS AGE
  10. redis-master-5wyku / Running 1d

3、运行redis-slave

3.1yaml文件

  1)redis-slave-controller.yaml

  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: redis-slave
  5. labels:
  6. name: redis-slave
  7. spec:
  8. replicas:
  9. selector:
  10. name: redis-slave
  11. template:
  12. metadata:
  13. labels:
  14. name: redis-slave
  15. spec:
  16. containers:
  17. - name: worker
  18. image: gcr.io/google_samples/gb-redisslave:v1
  19. env:
  20. - name: GET_HOSTS_FROM
  21. value: dns
  22. ports:
  23. - containerPort:

  2)redis-slave-service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: redis-slave
  5. labels:
  6. name: redis-slave
  7. spec:
  8. ports:
  9. - port:
  10. selector:
  11. name: redis-slave

3.2创建rc及service

  Master上执行:

  1. [root@k8s-master yaml]# kubectl create -f redis-slave-controller.yaml
  2. replicationcontroller "redis-slave" created
  3. [root@k8s-master yaml]# kubectl create -f redis-slave-service.yaml
  4. service "redis-slave" created
  5. [root@k8s-master yaml]# kubectl get rc
  6. NAME DESIRED CURRENT READY AGE
  7. redis-master 1d
  8. redis-slave 44m
  9. [root@k8s-master yaml]# kubectl get pod
  10. NAME READY STATUS RESTARTS AGE
  11. redis-master-5wyku / Running 1d
  12. redis-slave-7h295 / Running 44m
  13. redis-slave-r355y / Running 44m

4、运行frontend

4.1yaml文件

  1)frontend-controller.yaml

  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: frontend
  5. labels:
  6. name: frontend
  7. spec:
  8. replicas:
  9. selector:
  10. name: frontend
  11. template:
  12. metadata:
  13. labels:
  14. name: frontend
  15. spec:
  16. containers:
  17. - name: frontend
  18. image: gcr.io/google_samples/gb-frontend:v3
  19. env:
  20. - name: GET_HOSTS_FROM
  21. value: dns
  22. ports:
  23. - containerPort:

  2)frontend-service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: frontend
  5. labels:
  6. name: fronted
  7. spec:
  8. type: NodePort
  9. ports:
  10. - port:
  11. nodePort:
  12. selector:
  13. name: frontend

4.2创建rc及service

  Master上执行:

  1. [root@k8s-master yaml]# kubectl create -f frontend-controller.yaml
  2. replicationcontroller "frontend" created
  3. [root@k8s-master yaml]# kubectl create -f frontend-service.yaml
  4. service "frontend" created
  5. [root@k8s-master yaml]# kubectl get rc
  6. NAME DESIRED CURRENT READY AGE
  7. frontend 28m
  8. redis-master 1d
  9. redis-slave 44m
  10. [root@k8s-master yaml]# kubectl get pod
  11. NAME READY STATUS RESTARTS AGE
  12. frontend-ax654 / Running 29m
  13. frontend-k8caj / Running 29m
  14. frontend-x6bhl / Running 29m
  15. redis-master-5wyku / Running 1d
  16. redis-slave-7h295 / Running 44m
  17. redis-slave-r355y / Running 44m
  18. [root@k8s-master yaml]# kubectl get service
  19. NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  20. frontend 10.254.93.91 <nodes> /TCP 47m
  21. kubernetes 10.254.0.1 <none> /TCP 7d
  22. redis-master 10.254.132.210 <none> /TCP 1d
  23. 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的更多相关文章

  1. 基于Kubernetes集群部署skyDNS服务

    目录贴:Kubernetes学习系列 在之前几篇文章的基础,(Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard.为Kubernetes集群部署本地镜像仓库 ...

  2. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  3. 基于k8s集群部署prometheus监控etcd

    目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...

  4. 基于kubernetes集群部署DashBoard

    目录贴:Kubernetes学习系列 在之前一篇文章:Centos7部署Kubernetes集群,中已经搭建了基本的K8s集群,本文将在此基础之上继续搭建K8s DashBoard. 1.yaml文件 ...

  5. 基于kubernetes集群的Vitess最佳实践

    概要 本文主要说明基于kubernetes集群部署并使用Vitess; 本文假定用户已经具备了kubernetes集群使用环境,如果不具备请先参阅基于minikube的kubernetes集群搭建, ...

  6. 为Kubernetes集群部署本地镜像仓库

    目录贴:Kubernetes学习系列 经过之前两篇文章:Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard,我们基本上已经能够在k8s的集群上部署一个应用了 ...

  7. 部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0)

    部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0) 部署Bookinfo示例程序   在下载的Istio安装包的samples目录中包含了示例应用程序. ...

  8. 基于pgpool搭建postgressql集群部署

    postgresql集群搭建 基于pgpool中间件实现postgresql一主多从集群部署,这里用两台服务器作一主一从示例 虚拟机名 IP 主从划分 THApps 192.168.1.31 主节点 ...

  9. 基于Tomcat的Solr3.5集群部署

    基于Tomcat的Solr3.5集群部署 一.准备工作 1.1 保证SOLR库文件版本相同 保证SOLR的lib文件版本,slf4j-log4j12-1.6.1.jar slf4j-jdk14-1.6 ...

随机推荐

  1. Vue双向数据绑定原理分析(转)

    add by zhj: 目前组里使用的是前端技术是jQuery + Bootstrap,后端使用的Django,Flask等,模板是在后端渲染的.前后端没有分离,这种做法有几个缺点 1. 模板一般是由 ...

  2. C# Asp.net使用FormData对象实现ajax提交表单及上传图片

    1.html代码: <form id="postForm"> 文件名:<input type="text" name="filena ...

  3. tortoisegit 常见错误disconnected no supported authentication methods available(server sent: publickey)

    按如图操作 如果不能应用,Enable Proxy Server选中,再点击下面的应用及确定. 操作完上一部,用tortoisegit 下拉一次(git pull),即可解决

  4. log4j layout日志信息格式

    Log4j提供的layout有以下几种 org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定 ...

  5. 简述 cookies 和 session 的区别

    1.cookie 和 session 的区别是:cookie数据保存在客户端,session数据保存在服务器端: 2.两个都可以用来存私密的东西,同样也都有有效期的说法,区别在于session是放在服 ...

  6. (1.16)mysql server优化之buffer pool

    (1.16)mysql server优化之buffer pool 1.innodb buffer pool 查看 show status like  'Innodb_buffer_pool_%'; 该 ...

  7. wc 统计命令

    [root@localhost ~]# wc /etc/passwd // 统计行数.单词数.字符数 /etc/passwd [root@localhost ~]# wc -l /etc/passwd ...

  8. mysql explain中的 “Select tables optimized away”

    mysql explain中的 “Select tables optimized away” http://blog.chinaunix.net/uid-10449864-id-2956845.htm ...

  9. [django]阅读笔记

    https://dwz.cn/FUcnVGi8 新建目录 django-admin.exe startproject myblog django-admin.exe startproject mybl ...

  10. gerrit设置非小组成员禁止下载代码

    对gerrit有所了解的同学,都知道gerrit 是我们常用的一个来做代码审核的工具,其中的权限管理,是一个非常重要的环节,关于每个权限的使用范围,可以参考博客https://blog.csdn.ne ...