IT 铁人赛 k8s 入门30天 -- day21 k8s Task Deploying PHP Guestbook application with Redis

前言

今天这个章节将要来实作 Deploying PHP Guestbook application with Redis 这个任务

主要结构如下

一个 Redis instance 用来储存 guestbook 的项目
多个网页前端 instance 存取 Redis

布署目标

1 建构一个 Redis leader

2 建构二个 Redis follower 作为 Redis leader 的 Replica

3 建立 guestbook 网页前端

4 把 guestbook 对外开启并且浏览

5 清除布署

建构一个 Redis leader

建立 Redis leader Deployment

建立设定档 redis-leader-deployment.yaml 如下:

# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-leader
  labels:
    app: redis
    role: leader
    tier: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
        role: leader
        tier: backend
    spec:
      containers:
      - name: leader
        image: "docker.io/redis:6.0.5"
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379

建立一个 Deployment

设定名称为 redis-leader

container image 选用 docker.io/redis:6.0.5

设定 resource cpu 使用 100m

设定 resource memory 使用 100Mi

设定 containerPort 为 6379 , 此为 container 对外的 Port

布署指令如下:

kubectl apply -f redis-leader-deployment.yaml

查看 deploy 的 Pod 使用以下指令:

kubectl get pods

查看 Pod 运行 log

kubectl logs -f deployemnt/redis-leader

建立 Redis Leader Service

建立一个 Redis Leader Service 让 guestbook 应用可以透过这个 Service 来储存资料到 Redis

设定 redis-leader-service.yaml 如下

# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook
apiVersion: v1
kind: Service
metadata:
  name: redis-leader
  labels:
    app: redis
    role: leader
    tier: backend
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis
    role: leader
    tier: backend

建立一个 Service

设定名称为 redis-leader

设定 selector 为筛选具有以下 label 的 Pod

条件为 app: redis, role: leader, tier: backend

设定 Service 的 Port 为 6379

设定目标 Pod 的 Port 为 6379

建构指令如下:

kubectl apply -f redis-leader-service.yaml

查看 Service 状况

kubectl get service

建构二个 Redis follower 作为 Redis leader 的 Replica

建立 Redis follower Deployment

建构 redis-follower-deployment.yaml 如下:

# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-follower
  labels:
    app: redis
    role: follower
    tier: backend
spec:
  replicas: 2
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
        role: follower
        tier: backend
    spec:
      containers:
      - name: follower
        image: gcr.io/google_samples/gb-redis-follower:v2
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379

设定一个 Deployment

设定名称为 redis-follower

设定 replicas 为 2, 这个设定会建立两个 Pod 在 ReplicaSet

设定 Pod 的 label 如下

app: redis
role: follower
tier: backend

设定 container image 使用 gcr.io/google_samples/gb-redis-follower:v2

设定 resource cpu 使用 100m

设定 resource memory 使用 100Mi

设定 containerPort 为 6379 , 此为 container 对外的 Port

布署指令如下:

kubectl apply -f redis-follower-deployment.yaml

查看 Pod 布署状态用以下指令

kubectl get pods

建立 Redis follower service

建立一个 Redis follower Service 让 guestbook 应用可以透过这个 Service 读取 Redis 资料

设定 redis-follower-service.yaml 如下

# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook
apiVersion: v1
kind: Service
metadata:
  name: redis-follower
  labels:
    app: redis
    role: follower
    tier: backend
spec:
  ports:
    # the port that this service should serve on
  - port: 6379
  selector:
    app: redis
    role: follower
    tier: backend

建立一个 Service

设定名称为 redis-follower

设定 selector 为筛选具有以下 label 的 Pod

条件为 app: redis, role: follower, tier: backend

设定 Service 的 Port 为 6379

建构指令如下:

kubectl apply -f redis-follower-service.yaml

查看 Service 状况

kubectl get service

建立 guestbook 网页前端

guestbook 应用使用的是 PHP 作为 frontend, 透过 Redis follower Service 读取资料, 透过 Redis Leader Service 写入资料. 沟通的介面是 JSON, 而前端互动是用 jQuery-Ajax

建立 guestbook Deployment

建立 frontend-deployment.yaml 如下:

# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
        app: guestbook
        tier: frontend
  template:
    metadata:
      labels:
        app: guestbook
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v5
        env:
        - name: GET_HOSTS_FROM
          value: "dns"
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 80

建立一个 Deployment

名称设定为 frontend

设定 replias 为 3, 代表会建立 3 个 Pod

设定 selector 筛选 labels 符合条件如下:

app: guestbook
tier: frontend

设定 Pod 的 labels 如下

app: guestbook
tier: frontend

设定 container image 为 gcr.io/google_samples/gb-frontend:v5

设定环境参数 GET_HOSTS_FROM: "dns"

设定 resources cpu 为 100m

设定 resource memory 为 100Mi

设定 containerPort 为 80

布署指令如下:

kubectl apply -f frontend-deployment.yaml

查询 Pod 状况指令如下:

kubectl get pods -l app=guestbook -l tier=frontend

建立 frontend Service

建立一个内部 Service 给 guestbook

然後再使用 kubectl port-forward 指令让这个 Service 能够透过外部 IP 存取

建立 frontend-service.yaml 如下:

# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook
apiVersion: v1
kind: Service
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  # if your cluster supports it, uncomment the following to automatically create
  # an external load-balanced IP for the frontend service.
  # type: LoadBalancer
  #type: LoadBalancer
  ports:
    # the port that this service should serve on
  - port: 80
  selector:
    app: guestbook
    tier: frontend

建立一个 Service

设定名称为 frontend

设定 selector 筛选 labels 符合条件如下:

app: guestbook
tier: frontend

设定 Service 服务的 Port 为 80

建立布署指令如下:

kubectl apply -f frontend-service.yaml

查询 Service 状况

kubectl get services

把 guestbook 对外开启并且浏览

透过 kubectl port-forward 指令

可以把内部服务开启对外 Port

指令如下:

kubectl port-forward svc/frontend 8080:80

指令内容为 把 service frontend 透过 host port 8080 对应到 Service port 80

接下来就可以透过 http://localhost:8080 从浏览器打开 guestbook

拓展 frontend

scale up frontend 成为 5 个, 可以透过以下指令

kubectl scale deployment frontend --replicas=5

执行完使用以下指令查看 Pod

kubectl get pods

会发现 frontend pod 会从 3 个变成 5 个

scale down frontend 成为 2 个, 可以透过以下指令

kubectl scale deployment frontend --replicas=2

执行完使用以下指令查看 Pod

kubectl get pods

会发现 frontend pod 会从 5 个变成 2 个

清除布署

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

<<:  Day 21 - WooCommerce: 信用卡付款设定选项 (上)

>>:  行动应用APP资安篇

10 有局数就可以打分数

昨天做到双方都出卡後,增加 turn 数 现在在做 每到 3 turn 换一局 round + 1 ...

【Day 7】Dockerfile x 连千毅:从一排汉堡认识容器映像档

tags: 铁人赛 Docker Dockerfile 汉堡 概述 碎念时间 【以皮毛技术与 AWS...

Visual studio 2019 使用AddressSanitizer检查程序码

AddressSanitizer (ASan) 是一种编译器和执行时间技术,会以 零 误报来公开许多...

DAY27:GCP架设VM

GCP启用 点击此处开启免费试用。 申请免费试用,先填写个人资料,并且需填写信用卡号(会扣款1美金测...

Day 29 - 大杂烩好吃

总之就是非常杂 在这个领域 只能用一个杂字形容 各种由 0 跟 1 构成的资料 都有可能出现在这之中...