• 人民网评:涉及群众利益的事,必须“马上就办” 2019-04-25
  • 胡世忠在泰和调研经济运行和项目建设 2019-04-25
  • “基因魔剪”安全性再遭质疑 2019-04-23
  • 女孩面试“女二号”,车内试戏被脱裤子 2019-04-22
  • 财政部:对原产于美国的500亿美元进口商品加征关税 2019-04-18
  • 李白是哪一种书法家? 2019-04-10
  • 重庆夜色让人如此沉醉文章中国国家地理网 2019-04-04
  • 男子高速酒驾飞出立交桥 车身粉碎人无碍 2019-03-30
  • 成都康弘药业集团股份有限公司董事长柯尊洪获第十二届人民企业社会责任奖年度人物奖 2019-03-30
  • 驻最高检纪检组健全廉政档案 力求精准"画像" 2019-03-27
  • 游客被指捡石子砸老虎 北京野生动物园:正在核实 2019-03-27
  • 10月26日十九大新闻发言人专题新闻发布会 2019-03-22
  • 多交140分“亚裔税”?哈佛大学被控歧视亚裔学生 2019-03-22
  • 男子农田挖到古董抠出吓得魂飞魄散 2019-03-17
  • 瑞典南部城市发生枪击案致5人伤 警方:与恐袭无关 2019-03-10
  • 今天看啥
      热点:

        北京赛车pk10历史记录 www.zwahn.com

        在Kubernetes集群中使用Redis部署PHP留言簿应用程序


        本教程介绍如何构建和部署使用Kubernetes和一个简单的,多层次的Web应用程序Guestbook。

        实验目标

        • 启动一个Redis Master
        • 启动一个Redis Slave
        • 启动guestbook程序
        • 展示和查看前端服务
        • 清理

        实验环境

        需要有一个Kubernetes集群,以及kubectl命令行工具必须配置与集群通信

        • 参考://www.zwahn.com/Linux/2018-03/151479.htm

        在此可以检查k8s及相关工具版本:kubectl version

        [[email protected] ~]# kubectl version
        Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T10:09:24Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
        Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T09:42:01Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}

        下载实验用到的配置文件:

        • redis-master-deployment.yaml
        • redis-master-service.yaml
        • redis-slave-deployment.yaml
        • redis-slave-service.yaml
        • frontend-deployment.yaml
        • frontend-service.yaml

        笔者在k8s集群master服务器上创建了/opt/k8s/guestbook目录,下载上面的文件到目录如下:

        [[email protected] ~]# cd /opt/k8s/guestbook/
        [[email protected] guestbook]# ll
        total 24
        -rw-r--r-- 1 root root 1086 Feb  6 16:28 frontend-deployment.yaml
        -rw-r--r-- 1 root root  438 Feb  6 16:29 frontend-service.yaml
        -rw-r--r-- 1 root root  561 Feb  6 17:01 redis-master-deployment.yaml
        -rw-r--r-- 1 root root  233 Feb  6 17:14 redis-master-service.yaml
        -rw-r--r-- 1 root root 1117 Feb  6 16:28 redis-slave-deployment.yaml
        -rw-r--r-- 1 root root  209 Feb  6 16:28 redis-slave-service.yaml

        启动Redis Master

        留言簿应用程序使用Redis来存储其数据。它将其数据写入Redis主实例,并从多个Redis从实例中读取数据

        创建Redis Master部署配置文件

        清单文件(如下所示)指定运行单个副本Redis master Pod的Deployment Controller。

        • 在下载清单文件的目录中启动一个终端窗口
        • redis-master-deployment.yaml文件应用Redis Master部署

        [root@aniu-k8s guestbook]# kubectl apply -f redis-master-deployment.yaml Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply deployment "redis-master" configured

        • redis-master-deployment.yam

        apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
        kind: Deployment
        metadata:
          name: redis-master
        spec:
          selector:
            matchLabels:
              app: redis
              role: master
              tier: backend
          replicas: 1
          template:
            metadata:
              labels:
                app: redis
                role: master
                tier: backend
            spec:
              containers:
              - name: master
                image: k8s.gcr.io/redis:e2e  # or just image: redis
                resources:
                  requests:
                    cpu: 100m
                    memory: 100Mi
                ports:
                - containerPort: 6379

        • 查询Pod的列表以验证Redis Master Pod正在运

        [[email protected] guestbook]# kubectl get pods
        NAME                            READY    STATUS    RESTARTS  AGE
        redis-master-585798d8ff-g69wc  1/1      Running  0          28m

        • 运行以下命令查看Redis Master Pod中的日志:

        [[email protected] guestbook]# kubectl logs -f redis-master-585798d8ff-g69wc
                        _._                                                 
                  _.-``__ ''-._                                           
              _.-``    `.  `_.  ''-._          Redis 2.8.19 (00000000/0) 64 bit
          .-`` .-```.  ```\/    _.,_ ''-._                                 
         (    '      ,      .-`  | `,    )    Running in stand alone mode
         |`-._`-...-` __...-.``-._|'` _.-'|    Port: 6379
         |    `-._  `._    /    _.-'    |    PID: 1
          `-._    `-._  `-./  _.-'    _.-'                                 
         |`-._`-._    `-.__.-'    _.-'_.-'|                                 
         |    `-._`-._        _.-'_.-'    |          //redis.io       
          `-._    `-._`-.__.-'_.-'    _.-'                                 
         |`-._`-._    `-.__.-'    _.-'_.-'|                                 
         |    `-._`-._        _.-'_.-'    |                                 
          `-._    `-._`-.__.-'_.-'    _.-'                                 
              `-._    `-.__.-'    _.-'                                     
                  `-._        _.-'                                         
                      `-.__.-'                                             
        [1] 06 Feb 09:14:33.096 # Server started, Redis version 2.8.19
        [1] 06 Feb 09:14:33.097 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
        [1] 06 Feb 09:14:33.097 * The server is now ready to accept connections on port 6379

        创建Redis Master服务

        留言簿应用程序需要与Redis主站通信以写入其数据。您需要应用服务将流量代理到Redis主Pod。服务定义访问Pod的策略

        • 应用以下redis-master-service.yaml文件中的Redis Master服务

        [[email protected] guestbook]# kubectl apply -f redis-master-service.yaml
        service "redis-master" created

        • redis-master-service.yaml

        apiVersion: v1
        kind: Service
        metadata:
          name: redis-master
          labels:
            app: redis
            role: master
            tier: backend
        spec:
          ports:
          - port: 6379
            targetPort: 6379
          selector:
            app: redis
            role: master
            tier: backend

        • 查询服务列表以验证Redis主服务正在运行:

        [[email protected] guestbook]# kubectl get service
        NAME          TYPE        CLUSTER-IP      EXTERNAL-IP  PORT(S)    AGE
        kubernetes    ClusterIP  10.96.0.1      <none>        443/TCP    6d
        redis-master  ClusterIP  10.109.193.22  <none>        6379/TCP  6s

        启动Redis Slaves服务

        虽然Redis master是一个单独的pod,但是可以通过添加副本Redis Slaves来使其高度可用以满足流量需求

        创建Redis Slaves部署

        部署根据清单文件中设置的配置进行缩放。在这种情况下,Deployment对象指定两个副本

        如果没有任何副本正在运行,则此部署将在您的容器群集上启动两个副本。相反,如果有两个以上的副本正在运行,则会缩小直到两个副本正在运行

        • redis-slave-deployment.yaml文件应用Redis Slave部署:

        [[email protected] guestbook]# kubectl apply -f redis-slave-deployment.yaml
        deployment "redis-slave" created

        • redis-slave-deployment.yam

        apiVersion: v1
        kind: Service
        metadata:
          name: redis-master
          labels:
            app: redis
            role: master
            tier: backend
        spec:
          ports:
          - port: 6379
            targetPort: 6379
          selector:
            app: redis
            role: master
            tier: backend
        [[email protected] guestbook]# cat redis-slave-deployment.yaml
        apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
        kind: Deployment
        metadata:
          name: redis-slave
        spec:
          selector:
            matchLabels:
              app: redis
              role: slave
              tier: backend
          replicas: 2
          template:
            metadata:
              labels:
                app: redis
                role: slave
                tier: backend
            spec:
              containers:
              - name: slave
                image: gcr.io/google_samples/gb-redisslave:v1
                resources:
                  requests:
                    cpu: 100m
                    memory: 100Mi
                env:
                - name: GET_HOSTS_FROM
                  value: dns
                  # Using `GET_HOSTS_FROM=dns` requires your cluster to
                  # provide a dns service. As of Kubernetes 1.3, DNS is a built-in
                  # service launched automatically. However, if the cluster you are using
                  # does not have a built-in DNS service, you can instead
                  # instead access an environment variable to find the master
                  # service's host. To do so, comment out the 'value: dns' line above, and
                  # uncomment the line below:
                  # value: env
                ports:
                - containerPort: 6379

        • 查询Pod的列表以验证Redis Slave Pod是否正在运行:

        [[email protected] guestbook]# kubectl get pods
        NAME                            READY    STATUS              RESTARTS  AGE
        redis-master-585798d8ff-g69wc  1/1      Running            0          3m
        redis-slave-865486c9df-tjvfn    0/1      ContainerCreating  0          27s
        redis-slave-865486c9df-x76gb    1/1      Running

        创建Redis Slave服务

        留言簿应用程序需要与Redis Slave进行通信以读取数据。为了使Redis Slave可以被发现,需要建立一个服务。服务为一组Pod提供透明的负载平衡。

        • 应用以下redis-slave-service.yaml文件中的Redis从服务

        [[email protected] guestbook]# kubectl apply -f redis-slave-service.yaml
        service "redis-slave" created

        • redis-slave-service.yam

        apiVersion: v1
        kind: Service
        metadata:
          name: redis-slave
          labels:
            app: redis
            role: slave
            tier: backend
        spec:
          ports:
          - port: 6379
          selector:
            app: redis
            role: slave
            tier: backend

        • 查询服务列表以验证Redis Slave服务是否正在运行

        [[email protected] guestbook]# kubectl get services
        NAME          TYPE        CLUSTER-IP      EXTERNAL-IP  PORT(S)    AGE
        kubernetes    ClusterIP  10.96.0.1        <none>        443/TCP    6d
        redis-master  ClusterIP  10.109.193.22    <none>        6379/TCP  2m
        redis-slave    ClusterIP  10.101.252.227  <none>        6379/TCP  21s

        设置和公开留言簿前端

        留言簿应用程序有一个Web前端,用于使用PHP编写的HTTP请求。它被配置为连接到redis-master服务的写请求和redis-slave服务的读请求

        创建留言簿前端部署

        • 从以下frontend-deployment.yaml文件应用前端部署:

        [[email protected] guestbook]# kubectl apply -f frontend-deployment.yaml
        deployment "frontend" created

        • frontend-deployment.yam

        apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
        kind: Deployment
        metadata:
          name: frontend
        spec:
          selector:
            matchLabels:
              app: guestbook
              tier: frontend
          replicas: 3
          template:
            metadata:
              labels:
                app: guestbook
                tier: frontend
            spec:
              containers:
              - name: php-redis
                image: gcr.io/google-samples/gb-frontend:v4
                resources:
                  requests:
                    cpu: 100m
                    memory: 100Mi
                env:
                - name: GET_HOSTS_FROM
                  value: dns
                  # Using `GET_HOSTS_FROM=dns` requires your cluster to
                  # provide a dns service. As of Kubernetes 1.3, DNS is a built-in
                  # service launched automatically. However, if the cluster you are using
                  # does not have a built-in DNS service, you can instead
                  # instead access an environment variable to find the master
                  # service's host. To do so, comment out the 'value: dns' line above, and
                  # uncomment the line below:
                  # value: env
                ports:
                - containerPort: 80

        • 查询Pod的列表以验证三个前端副本正在运行:

        [[email protected] guestbook]# kubectl get pods -l app=guestbook -l tier=frontend
        NAME                      READY    STATUS    RESTARTS  AGE
        frontend-67f65745c-lr25s  1/1      Running  0          1m
        frontend-67f65745c-n798g  1/1      Running  0          1m
        frontend-67f65745c-n92r4  1/1      Running  0          1m

        创建前端服务

        应用的redis-slave和redis-master服务只能在容器群集内访问,因为服务的默认类型是ClusterIP。 ClusterIP为服务指向的一组Pod提供一个IP地址。 该IP地址只能在群集内访问。

        如果希望guest虚拟机能够访问您的留言簿,则必须将前端服务配置为外部可见,以便客户端可以从容器群集外部请求该服务。 Minikube只能通过NodePort公开服务

        • 应用以下frontend-service.yaml文件中的前端服务

        [[email protected] guestbook]# kubectl apply -f frontend-service.yaml
        service "frontend" created

        • frontend-service.yam

        apiVersion: v1
        kind: Service
        metadata:
          name: frontend
          labels:
            app: guestbook
            tier: frontend
        spec:
          # comment or delete the following line if you want to use a LoadBalancer
          type: NodePort
          # if your cluster supports it, uncomment the following to automatically create
          # an external load-balanced IP for the frontend service.
          # type: LoadBalancer
          ports:
          - port: 80
          selector:
            app: guestbook
            tier: frontend

        • 查询服务列表以验证前端服务正在运

        [[email protected] guestbook]# kubectl get services
        NAME          TYPE        CLUSTER-IP      EXTERNAL-IP  PORT(S)        AGE
        frontend      NodePort    10.103.1.159    <none>        80:31546/TCP  7s
        kubernetes    ClusterIP  10.96.0.1        <none>        443/TCP        6d
        redis-master  ClusterIP  10.109.193.22    <none>        6379/TCP      5m
        redis-slave    ClusterIP  10.101.252.227  <none>        6379/TCP      4m

        通过NodePort查看前端服务

        如果您将此应用程序部署到Minikube或本地群集,则需要查找IP地址才能查看您的留言簿。

        • 行以下命令获取前端服务的IP地址

        minikube service frontend --url

        复制IP地址,然后在浏览器中加载页面以查看您的留言簿。

        通过LoadBalancer查看前端服务

        • 运行以下命令获取前端服务的IP地址

        [[email protected] guestbook]# kubectl get service frontend

        复制外部IP地址,并在浏览器中加载页面以查看您的留言簿

        扩展Web前端

        放大或缩小很容易,因为我们的服务器被定义为使用部署控制器的服务

        • 运行以下命令以放大前端Pod的数量

        [[email protected] guestbook]# kubectl scale deployment frontend --replicas=5
        deployment "frontend" scaled

        • 查询Pod的列表以验证正在运行的前端Pod的数量

        [[email protected] guestbook]# kubectl get pods
        NAME                            READY    STATUS    RESTARTS  AGE
        frontend-67f65745c-lr25s        1/1      Running  0          5m
        frontend-67f65745c-n798g        1/1      Running  0          5m
        frontend-67f65745c-n92r4        1/1      Running  0          5m
        frontend-67f65745c-nsnfs        1/1      Running  0          7s
        frontend-67f65745c-spjnm        1/1      Running  0          7s
        redis-master-585798d8ff-g69wc  1/1      Running  0          10m
        redis-slave-865486c9df-tjvfn    1/1      Running  0          8m
        redis-slave-865486c9df-x76gb    1/1      Running  0          8m

        • 运行以下命令以缩小前端Pod的数量:

        [[email protected] guestbook]# kubectl scale deployment frontend --replicas=2
        deployment "frontend" scaled
        [[email protected] guestbook]# kubectl get pods
        NAME                            READY    STATUS        RESTARTS  AGE
        frontend-67f65745c-lr25s        1/1      Running      0          50m
        frontend-67f65745c-n798g        1/1      Running      0          50m
        frontend-67f65745c-n92r4        0/1      Terminating  0          50m
        frontend-67f65745c-spjnm        0/1      Terminating  0          45m
        redis-master-585798d8ff-g69wc  1/1      Running      0          56m
        redis-slave-865486c9df-tjvfn    1/1      Running      0          53m
        redis-slave-865486c9df-x76gb    1/1      Running      0          53m

        清理pods及services

        删除部署和服务也会删除任何正在运行的Pod。使用标签可以用一个命令删除多个资源。

        • 运行以下命令删除所有Pod,Deployments和Services。

        kubectl delete deployment -l app=redis
        kubectl delete service -l app=redis
        kubectl delete deployment -l app=guestbook
        kubectl delete service -l app=guestbook

        • 回显如下:

        deployment "redis-master" deleted
        deployment "redis-slave" deleted
        service "redis-master" deleted
        service "redis-slave" deleted
        deployment "frontend" deleted   
        service "frontend" deleted

        • 查询Pod的列表以验证没有Pod正在运行:

        kubectl get pods
        #
        No resources found.

        CentOS 7.3利用kubeadm安装Kubernetes 1.7.3完整版  //www.zwahn.com/Linux/2018-01/150517.htm
        在Kubernetes集群中部署MySQL主从  //www.zwahn.com/Linux/2018-03/151282.htm
        国内获取 Kubernetes 镜像的方法  //www.zwahn.com/Linux/2018-02/151015.htm
        Kubernetes数据持久化方案  //www.zwahn.com/Linux/2018-03/151280.htm
        Kubernetes集群配置笔记  //www.zwahn.com/Linux/2018-03/151136.htm

        Kubernetes 的详细介绍:请点这里
        Kubernetes 的下载地址:请点这里

        本文永久更新链接地址://www.zwahn.com/Linux/2018-03/151480.htm

        北京赛车pk10历史记录 www.zwahn.comtrue//www.zwahn.com/Linux/1315882.htmlTechArticle在Kubernetes集群中使用Redis部署PHP留言簿应用程序 本教程介绍如何构建和部署使用Kubernetes和一个简单的,多层次的Web应用程序Guestbook。 实验...

        相关文章

        相关搜索: Kubernetes集群

        帮客评论

        视觉看点
      • 人民网评:涉及群众利益的事,必须“马上就办” 2019-04-25
      • 胡世忠在泰和调研经济运行和项目建设 2019-04-25
      • “基因魔剪”安全性再遭质疑 2019-04-23
      • 女孩面试“女二号”,车内试戏被脱裤子 2019-04-22
      • 财政部:对原产于美国的500亿美元进口商品加征关税 2019-04-18
      • 李白是哪一种书法家? 2019-04-10
      • 重庆夜色让人如此沉醉文章中国国家地理网 2019-04-04
      • 男子高速酒驾飞出立交桥 车身粉碎人无碍 2019-03-30
      • 成都康弘药业集团股份有限公司董事长柯尊洪获第十二届人民企业社会责任奖年度人物奖 2019-03-30
      • 驻最高检纪检组健全廉政档案 力求精准"画像" 2019-03-27
      • 游客被指捡石子砸老虎 北京野生动物园:正在核实 2019-03-27
      • 10月26日十九大新闻发言人专题新闻发布会 2019-03-22
      • 多交140分“亚裔税”?哈佛大学被控歧视亚裔学生 2019-03-22
      • 男子农田挖到古董抠出吓得魂飞魄散 2019-03-17
      • 瑞典南部城市发生枪击案致5人伤 警方:与恐袭无关 2019-03-10