1. 环境准备
需部署三个容器组件:前端应用容器、主Redis实例和从Redis实例。前端容器通过JavaScript接口与主Redis节点通信。
2. 网络插件配置
Flannel作为默认网络方案,采用L3 Overlay模式实现跨节点通信。该方案通过以下机制运作:
- 每个节点运行flanneld代理
- 动态分配子网段给各节点
- 使用VXLAN/UDP/host-gw协议栈进行数据包转发
- 通过etcd存储网络配置信息
3. 镜像准备
在两个工作节点执行以下操作:
# docker pull myregistry/redis-frontend:latest
# docker pull myregistry/redis-primary:latest
# docker pull myregistry/redis-secondary:latest
4. 配置文件部署
4.1 主Redis部署文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-primary
spec:
replicas: 1
selector:
matchLabels:
app: redis
role: primary
template:
metadata:
labels:
app: redis
role: primary
spec:
containers:
- name: redis
image: myregistry/redis-primary:latest
resources:
requests:
memory: "512Mi"
cpu: "500m"
ports:
- containerPort: 6379
4.2 主Redis服务定义
apiVersion: v1
kind: Service
metadata:
name: redis-primary
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
role: primary
4.3 从Redis部署文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-secondary
spec:
replicas: 2
selector:
matchLabels:
app: redis
role: secondary
template:
metadata:
labels:
app: redis
role: secondary
spec:
containers:
- name: redis
image: myregistry/redis-secondary:latest
env:
- name: REDIS_MASTER
value: "redis-primary"
resources:
requests:
memory: "512Mi"
cpu: "500m"
ports:
- containerPort: 6379
4.4 从Redis服务定义
apiVersion: v1
kind: Service
metadata:
name: redis-secondary
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
role: secondary
4.5 前端部署文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: guestbook-frontend
spec:
replicas: 3
selector:
matchLabels:
app: guestbook
tier: frontend
template:
metadata:
labels:
app: guestbook
tier: frontend
spec:
containers:
- name: web
image: myregistry/redis-frontend:latest
env:
- name: REDIS_MASTER
value: "redis-primary"
resources:
requests:
memory: "256Mi"
cpu: "200m"
ports:
- containerPort: 80
4.6 前端服务定义
apiVersion: v1
kind: Service
metadata:
name: guestbook-frontend
spec:
type: NodePort
ports:
- port: 80
nodePort: 30001
selector:
app: guestbook
tier: frontend
5. 部署执行
$ kubectl apply -f redis-primary-deployment.yaml
$ kubectl apply -f redis-primary-service.yaml
$ kubectl apply -f redis-secondary-deployment.yaml
$ kubectl apply -f redis-secondary-service.yaml
$ kubectl apply -f frontend-deployment.yaml
$ kubectl apply -f frontend-service.yaml
6. 网络配置
# sysctl -w net.ipv4.ip_forward=1
# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
# sysctl -p
7. 访问验证
通过浏览器访问任意节点的30001端口,验证留言系统功能。