今天这个章节将要来实作 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-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 让 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-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 让 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 应用使用的是 PHP 作为 frontend, 透过 Redis follower Service 读取资料, 透过 Redis Leader Service 写入资料. 沟通的介面是 JSON, 而前端互动是用 jQuery-Ajax
建立 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
建立一个内部 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
透过 kubectl port-forward 指令
可以把内部服务开启对外 Port
指令如下:
kubectl port-forward svc/frontend 8080:80
指令内容为 把 service frontend 透过 host port 8080 对应到 Service port 80
接下来就可以透过 http://localhost:8080 从浏览器打开 guestbook
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: 信用卡付款设定选项 (上)
昨天做到双方都出卡後,增加 turn 数 现在在做 每到 3 turn 换一局 round + 1 ...
tags: 铁人赛 Docker Dockerfile 汉堡 概述 碎念时间 【以皮毛技术与 AWS...
AddressSanitizer (ASan) 是一种编译器和执行时间技术,会以 零 误报来公开许多...
GCP启用 点击此处开启免费试用。 申请免费试用,先填写个人资料,并且需填写信用卡号(会扣款1美金测...
总之就是非常杂 在这个领域 只能用一个杂字形容 各种由 0 跟 1 构成的资料 都有可能出现在这之中...