Kubernetes 实战——部署基于 Redis 和 Docker 的留言簿

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Kubernetes 实战——部署基于 Redis 和 Docker 的留言簿

Kubernetes 实战——部署基于 Redis 和 Docker 的留言簿



一、实验环境


二、部署基于 Redis 和 Docker 的留言簿


2.配置 Redis Master

1)创建 Deployment 配置文件

2)创建 Service 配置文件

2.配置 Redis Slave

1)创建 Deployment 配置文件

2)创建 Service 配置文件

3.配置 Frontend GuestBook

1)创建 Deployment 配置文件

2)创建 Service 配置文件

3.查看外网网络访问 GuestBook


一、实验环境



需要三个 Docker 镜像:


  1. php-frontend web 前端镜像;
  2. redis master 镜像;
  3. redis slave 镜像;


  • 其中 Web 前端 通过 javascript redis api 和 redis master 交互。


整体架构如下:


image.png


  • 底层网络结构:通过 Flannel 实现不同物理机之间 Docker 容器的通信。


Kubernetes 体系架构:


image.png


二、部署基于 Redis 和 Docker 的留言簿



注意:


  • 如果未部署 Kubernetes 容器集群管理系统需看:部署 Kubernetes 容器集群管理系统 来进行部署。
  • 该实验需要的软件包从这个链接下载:https://pan.baidu.com/s/1A6SEpNuBvGm3a-EdGrFSJA
  • 提取码:owbr


上传镜像到 node1 和 node2 上并导入


[root@node1 ~]# mkdir /root/k8s
[root@node1 ~]# cd /root/k8s
[root@node1 k8s]# ls
[root@node1 k8s]# ls                    # 将镜像上传到该目录
docker.io-kubeguide-guestbook-php-frontend.tar
docker.io-kubeguide-guestbook-redis-slave.tar
docker.io-kubeguide-redis-master.tar
pod-infrastructure.tar


image.png


导入镜像


[root@node1 k8s]# docker load -i pod-infrastructure.tar 
[root@node1 k8s]# docker load -i docker.io-kubeguide-redis-master.tar 
[root@node1 k8s]# docker load -i docker.io-kubeguide-guestbook-redis-slave.tar
[root@node1 k8s]# docker load -i docker.io-kubeguide-guestbook-php-frontend.tar 
[root@node1 k8s]# docker images               # 查看镜像是否导入成功


image.png


2.配置 Redis Master


在 master 上操作


1)创建 Deployment 配置文件


[root@master ~]# mkdir /etc/kubernetes/yaml
[root@master ~]# cd /etc/kubernetes/yaml/
[root@master yaml]# vim redis-master-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: redis-master
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
        role: master
        tier: backend
    spec:
      containers:
      - name: master
        image: docker.io/kubeguide/redis-master:latest
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379


2)创建 Service 配置文件


[root@master yaml]# vim 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 Master 的 Deployment 和 Service


[root@master yaml]# kubectl create -f redis-master-deployment.yaml 
[root@master yaml]# kubectl create -f redis-master-service.yaml
[root@master yaml]# kubectl get deployment
[root@master yaml]# kubectl get pods
[root@master yaml]# kubectl get svc


image.png


2.配置 Redis Slave


在 master 上操作


1)创建 Deployment 配置文件


[root@master yaml]# vim redis-slave-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: redis-slave
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: redis
        role: slave
        tier: backend
    spec:
      containers:
      - name: slave
        image: docker.io/kubeguide/guestbook-redis-slave:latest
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 6379


2)创建 Service 配置文件


[root@master yaml]# vim redis-slave-service.yaml 
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 Salve 的 Deployment 和 Service


[root@master yaml]# kubectl create -f redis-slave-deployment.yaml 
[root@master yaml]# kubectl create -f redis-slave-service.yaml 
[root@master yaml]# kubectl get deployment
[root@master yaml]# kubectl get pods
[root@master yaml]# kubectl get pods -o wide


image.png


3.配置 Frontend GuestBook


在 master 上操作


1)创建 Deployment 配置文件


这是一个简单的 PHP 访问,用来和 master service(写请求)或 slave service(读请求)交互。


[root@master yaml]# vim frontend-deployment.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: guestbook
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: docker.io/kubeguide/guestbook-php-frontend:latest
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 80


2)创建 Service 配置文件


[root@master yaml]# vim frontend-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30001
  selector:
    app: guestbook
    tier: frontend


启动 Frontend GuestBook 的 Deployment 和 Service


[root@master yaml]# kubectl create -f frontend-deployment.yaml 
[root@master yaml]# kubectl create -f frontend-service.yaml 
[root@master yaml]# kubectl get deployment
[root@master yaml]# kubectl get pods -o wide
[root@master yaml]# kubectl get svc -o wide


image.png


3.查看外网网络访问 GuestBook


登录 node1 查看端口:


[root@node1 k8s]# netstat -anpt | grep 30001


image.png


使用浏览器访问:http://192.168.1.3:30001 或者访问:http://192.168.1.4:30001 都可以。


image.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
26天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
189 77
|
13天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
77 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
10天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
63 19
|
5天前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
43 14
|
2天前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
26 7
|
18天前
|
NoSQL 算法 Redis
docker高级篇(大厂进阶):安装redis集群
docker高级篇(大厂进阶):安装redis集群
81 24
|
2月前
|
Kubernetes 开发者 Docker
Docker与Kubernetes的协同工作
Docker与Kubernetes的协同工作
|
10天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
8天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
44 12
|
13天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
29 2