今天,我们将要带来入门hello world示例,它是一个web留言板应用,基于PHP+Redis的两层分布式架构的web应用,前端PHP web网站通过访问后端Redis数据库完成用户留言的查询和添加功能,具备读写分离能力,留言板内容是从redis中查询到的,首页中添加留言并提交后,留言会被添加到redis中。

有三个前端节点:php-frontend,对网站的访问进行负载均衡

有两个redis后端节点:一个redis-master和两个redis-slave,两个redis-slave从redis-master进行同步数据

php-frontend进行了读写分离,即在写入的时候写入主库,而读取的时候从从库读取。

客户通过客户端访问的时候,访问前端相应的地址即可。

整体的架构是这个样子:

1.创建redis-master Pod和服务

先定义RC来创建pod,然后定义与之关联的service。

为redis-master服务新建一个名为redis-master-controller.yaml的replicationcontroller定义文件,内容为:

[root@uat-app01 etc]# mkdir /etc/k8s_yaml
[root@uat-app01 k8s_yaml]# vim /etc/k8s_yaml/redis-master-controller.yaml
apiVersion: v1    #指定api版本号
kind: ReplicationController    #创建资源的类型:这里为ReplicationController
metadata:    #资源元数据name: redis-master    #资源名称labels:     #资源标签name: redis-master    #标签名
spec:     #容器的详细定义replicas: 1    #副本数量:这里为1selector:     #RC通过spec.selector来筛选要控制的Podname: redis-mastertemplate:    # pod的定义metadata:  # pod元数据labels:    #pod标签name: redis-masterspec:     #指定资源内容containers:    #容器- name: master    #容器名image: kubeguide/redis-master    #使用的镜像ports:     #容器开放对外的端口号:这里为6379- containerPort: 6379

创建好文件后,执行如下命令:

[root@uat-app01 k8s_yaml]# kubectl create -f /etc/k8s_yaml/redis-master-controller.yaml
replicationcontroller "redis-master" created

查看刚才新建的RC信息:

[root@uat-app01 k8s_yaml]# kubectl get rc
NAME           DESIRED   CURRENT   READY     AGE
redis-master   1         1         0         48s

查看pods信息:

[root@uat-app01 k8s_yaml]# kubectl get pods
NAME                 READY     STATUS              RESTARTS   AGE
redis-master-2qftt   0/1       ContainerCreating   0          1m

查看pod redis-master-2qftt 信息:

[root@uat-app01 k8s_yaml]# kubectl describe pod redis-master-2qftt
Name:        redis-master-2qftt
Namespace:    default
Node:        uat-ucs02.insightcredit/192.168.1.47
Start Time:    Wed, 20 Dec 2017 15:27:07 +0800
Labels:        name=redis-master
Status:        Pending
IP:
Controllers:    ReplicationController/redis-master
Containers:master:Container ID:        Image:            kubeguide/redis-masterImage ID:            Port:            6379/TCPState:            WaitingReason:            ContainerCreatingReady:            FalseRestart Count:        0Volume Mounts:        <none>Environment Variables:    <none>
Conditions:Type        StatusInitialized     True Ready     False PodScheduled     True
No volumes.
QoS Class:    BestEffort
Tolerations:    <none>
Events:FirstSeen    LastSeen    Count    From                    SubObjectPath    Type        Reason        Message---------    --------    -----    ----                    -------------    --------    ------        -------3m        3m        1    {default-scheduler }                    Normal        Scheduled    Successfully assigned redis-master-2qftt to uat-ucs02.insightcredit3m        18s        5    {kubelet uat-ucs02.insightcredit}            Warning        FailedSync    Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request.  details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"2m    7s    10    {kubelet uat-ucs02.insightcredit}        Warning    FailedSync    Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""

这里看到是发生了异常的:

在pull registry.access.redhat.com/rhel7/pod-infrastructure:latest 镜像时出现问题,问题原因是 /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt文件不存在

尝试去pull这个镜像,发现缺失文件/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt

[root@uat-app01 k8s_yaml]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...
open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory

查看该缺失的文件,发现为软连接,缺少名叫rhsm的依赖,查找关于rhsm的依赖包

经过查阅发现,该缺少的rhsm包为:python-rhsm

使用yum安装

[root@uat-ucs01 kubernetes]# yum install python-rhsm.x86_64 0:1.19.10-1.el7_4

安装后,该文件存在,问题解决

创建于redis-master pod相关联的service,文件内容如下:

[root@uat-app01 k8s_yaml]# vi /etc/k8s_yaml/redis-master-service.yamlapiVersion: v1
kind: Service
metadata: name: redis-masterlabels:name: redis-master
spec:ports:- port: 6379    #服务监听的端口号targetPort: 6379    #需要转发到后端pod的端口号,就是容器对外开放的端口号selector:name: redis-master

创建service:

[root@uat-app01 k8s_yaml]# kubectl create -f /etc/k8s_yaml/redis-master-service.yaml
service "redis-master" created

查看新建的service:

[root@uat-app01 k8s_yaml]# kubectl get services
NAME           CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes     10.254.0.1      <none>        443/TCP    5h
redis-master   10.254.227.87   <none>        6379/TCP   1m

2.创建redis-slave Pod和服务

为redis-slave服务新建一个名为redis-slave-controller.yaml的replicationcontroller定义文件,内容为:

apiVersion: v1
kind: ReplicationController
metadata:name: redis-slavelabels:name: redis-slave
spec:replicas: 2selector:name: redis-slavetemplate:metadata:labels:name: redis-slavespec: containers:- name: slaveimage: kubeguide/guestbook-redis-slaveenv:- name: GET_HOSTS_FROMvalue: envports:- containerPort: 6379

创建好文件后,执行如下命令:

[root@uat-app01 k8s_yaml]# kubectl create -f /etc/k8s_yaml/redis-slave-controller.yaml
replicationcontroller "redis-slave" created

查看刚才新建的RC信息:

[root@uat-app01 k8s_yaml]# kubectl get rc redis-slave
NAME          DESIRED   CURRENT   READY     AGE
redis-slave   2         2         0         39s

配置文件redis-salve-service.yaml内容如下:

[root@uat-app01 k8s_yaml]# vim /etc/k8s_yaml/redis-slave-service.yaml apiVersion: v1
kind: Service
metadata:name: redis-slavelabels:name: redis-slave
spec:ports:- port: 6379selector:name: redis-slave

创建service:

[root@uat-app01 k8s_yaml]# kubectl create -f redis-slave-service.yaml
service "redis-slave" created

检查service:

[root@uat-app01 k8s_yaml]# kubectl get service
NAME           CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes     10.254.0.1      <none>        443/TCP    5h
redis-master   10.254.227.87   <none>        6379/TCP   29m
redis-slave    10.254.71.156   <none>        6379/TCP   35s

3.创建fronted pod和服务

创建frontend的rc

[root@uat-app01 k8s_yaml]#  vi /etc/k8s_yaml/frontend-controller.yamlapiVersion: v1
kind: ReplicationController
metadata:name: frontendlabels:name: frontend
spec:replicas: 3selector:name: frontendtemplate:metadata:labels:name: frontendspec:containers:- name: frontendimage: kubeguide/guestbook-php-frontendenv: - name: GET_HOSTS_FROMvalue: envports:- containerPort: 80

创建rc

[root@uat-app01 k8s_yaml]#  kubectl create -f /etc/k8s_yaml/frontend-controller.yaml
replicationcontroller "frontend" created

创建frontend的service,前端的service是需要外部访问的,所以进行如下配置

[root@uat-app01 k8s_yaml]# vi /etc/k8s_yaml/frontend-service.yamlapiVersion: v1
kind: Service
metadata:name: frontendlabels:name: frontend
spec:type: NodePort    #外部访问端口形式为:通过node端口形式进行访问ports:- port: 80    #服务监听的端口号nodePort: 30001    #node上开放的外部端口selector:name: frontend
[root@uat-app01 k8s_yaml]# kubectl create -f /etc/k8s_yaml/frontend-service.yaml
service "frontend" created

创建好以上rc、pod、service后查看pod情况

[root@uat-app01 ~]# kubectl get pods
NAME                 READY     STATUS    RESTARTS   AGE
frontend-3bv0p       1/1       Running   0          15h
frontend-kmth2       1/1       Running   0          15h
frontend-vltkp       1/1       Running   0          15h
redis-master-f59zp   1/1       Running   0          15h
redis-slave-6rxl8    1/1       Running   0          15h
redis-slave-j4jz0    1/1       Running   0          15h

在浏览器中输入任意运行frontend的pod的ip地址加上我们定义好的node port 30001

我这里是192.168.1.40:30001

留言板出现了,快来提交我们的留言吧~

hello world

kubernetes的hello world实例到此完成啦。

转载:http://www.louisvv.com/archives/1179.html

转载于:https://www.cnblogs.com/linyouyi/p/10691060.html

kubernetes集群应用部署实例相关推荐

  1. 在Kubernetes集群上部署和管理JFrog Artifactory

    JFrog Artifactory是一个artifacts仓库管理平台,它支持所有的主流打包格式.构建工具和持续集成(CI)服务器.它将所有二进制内容保存在一个单一位置并提供一个接口,这使得用户在整个 ...

  2. 容器集群k8s从入门到精通实战第一天 kubernetes集群简介及其实例

    第一章 kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念.组件和工作原理. 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署 ...

  3. 在Kubernetes集群上部署高可用Harbor镜像仓库

    这里主要介绍使用kubectl部署Harbor镜像仓库到Kubernetes集群中. 使用Helm部署,参考: https://my.oschina.net/u/2306127/blog/181969 ...

  4. Kubernetes集群的部署方式及详细步骤

    一.部署环境架构以及方式 第一种部署方式 1.针对于 master 节点 将 API Server.etcd.controller-manager.schedule各组件进行 yum install. ...

  5. k8s和harbor的集成_在Kubernetes集群上部署高可用Harbor镜像仓库

    在Kubernetes集群上部署高可用Harbor镜像仓库 一.Kubernetes上的高可用Harbor方案 首先,我可以肯定给出一个回答:Harbor支持在Kubernetes部署.只不过Harb ...

  6. kubernetes集群快速部署1.23

    kubernetes集群快速部署1.23 文章目录 kubernetes集群快速部署1.23 1.环境准备(所有节点) 2.配置免密登录 3.配置ipv4 4.安装docker(所有节点) 5.部署k ...

  7. 革命性新特性 | 单一应用跨多Kubernetes集群的部署与管理

    近日,全球领先的容器管理软件供应商Rancher Labs宣布,其旗舰产品Rancher--开源的企业级Kubernetes管理平台--全面发布的最新版本Rancher 2.2 Preview 2中, ...

  8. Kubernetes集群中部署Node节点

    Kubernetes集群中的Node节点部署 kubernetes的Node节点包含如下组件: flanneld docker kubelet kube-proxy 环境变量 需要的变量. $ # 替 ...

  9. Kubernetes——Kubernetes集群docekr部署

    摘要 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规 ...

最新文章

  1. Spring Boot 解决跨域问题的 3 种方案
  2. mybatis使用statement.getGenreatedKeys(); useGeneratedKeys=”true”;使用自增主键获取主键值策略和Oracle不支持自增,Oracle使用序列
  3. Linux 实操 —— 日志筛选操作(sed与wc命令介绍)
  4. MVVM架构~knockoutjs系列之验证信息自定义输出~再续
  5. 因为项目管理知识体系指南(PMBOK)初识宝地
  6. 荣耀路由器外界硬盘与win10
  7. 深入浅出量化对冲Alpha基金的操作
  8. detach的简易用法
  9. 用计算机术语写毕业寄语,毕业寄语大全一句话
  10. [MIT6.006 算法导论] 1. Peak Finding 寻峰
  11. ConvertUtil
  12. Word为什么会报告磁盘空间已满
  13. Linux学习之socket编程(一)
  14. 2021职业院校新一代信息技术专业群1+X职业技能等级证书汇总
  15. gRPC教程 — 第一章
  16. 怎么通过示波器测永磁电机的极对数(PMSM+BLDC)
  17. win10使用C语言运行坦克大战游戏(转载)
  18. 落谷P1189 `SEARCH`
  19. (2022,MoCA)Few-shot 图像生成的原型记忆(Prototype Memory)和注意力机制
  20. 备忘录怎么运行Java_备忘录 - 廖雪峰 Java 教程

热门文章

  1. intellij idea rearrange code
  2. Hibernate读书笔记---继承映射
  3. 【渗透测试实战】具体案例——讲讲SQL注入攻击是怎么回事?
  4. PlantUML in a nutshell(官方文档)
  5. 走进我的交易室07_资金管理公式
  6. javabean和java类_java对象 POJO和JavaBean的区别
  7. 冯诺依曼体系下 计算机主机不包括,计算机组装第一张测试
  8. python 函数中参数的传递方式(三分钟读懂)
  9. 如何自学成为设计师_如何成为平面设计师?平面设计师平时做什么?教你做好平面设计...
  10. linux下keytool生成证书_Keytool生成https证书步骤0014