00:00:00
加载中...
Kubernetes 流量权重负载均衡实战笔记
本文最后更新于151 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

Kubernetes 流量权重负载均衡实战笔记

以下是基于你提供的 YAML 配置文件和网页解析内容整理的作业笔记,已去除多余文字并补充了执行命令:


Kubernetes 流量权重负载均衡实战笔记

一、实验环境与资源定义

1. 命名空间

  • 名称:oldboyedu

2. 复制控制器 (RC) 配置

RC 名称镜像地址镜像版本标签 (Labels)角色说明
lbregistry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/appsv1apps: lb负载均衡器
web01registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/appsv1apps: web01后端节点 1
web02registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/appsv2apps: web02后端节点 2

3. 服务 (Service) 配置

Service 名称类型端口映射选择器作用
svc-lbNodePort80:30080apps: lb对外暴露
svc-web01ClusterIP80/TCPapps: web01内部服务
svc-web02ClusterIP80/TCPapps: web02内部服务

二、执行命令

1. 应用配置文件

kubectl apply -f 06-ns-svc-pods.yaml
kubectl apply -f 06-rc-xiuxian.yaml

06-ns-svc-pods.yaml

apiVersion: v1
kind: Namespace
metadata:
name: oldboyedu
​
---
# --- Service for lb ---
apiVersion: v1
kind: Service
metadata:
name: svc-lb
namespace: oldboyedu
labels:
  apps: lb
spec:
type: NodePort  
selector:  
  apps: lb
ports:    
   - port: 80
    targetPort: 80  
    nodePort: 30080  
​
---
# --- Service for web01 ---
apiVersion: v1
kind: Service
metadata:
name: svc-web01
namespace: oldboyedu
labels:
  apps: web01
spec:
selector:
  apps: web01
ports:
   - port: 80
    targetPort: 80
​
---
# --- Service for web02 ---
apiVersion: v1
kind: Service
metadata:
name: svc-web02
namespace: oldboyedu
labels:
  apps: web02
spec:
selector:
  apps: web02
ports:
   - port: 80
    targetPort: 80

06-rc-xiuxian.yaml

# --- 第一个 RC: 管理 lb ---
apiVersion: v1
kind: ReplicationController
metadata:
name: lb
namespace: oldboyedu
spec:
replicas: 1
selector:
  apps: lb
template:
  metadata:
    labels:
        apps: lb
        version: v1
  spec:
    containers:
     - name: c1
      image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
​
---
# --- 第二个 RC: 管理 web01 ---
apiVersion: v1
kind: ReplicationController
metadata:
name: web01
namespace: oldboyedu
spec:
replicas: 1
selector:
  apps: web01
template:
  metadata:
    labels:
        apps: web01
        version: v1
  spec:
    containers:
     - name: c1
      image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
​
---
# --- 第三个 RC: 管理 web02 ---
apiVersion: v1
kind: ReplicationController
metadata:
name: web02
namespace: oldboyedu
spec:
replicas: 1
selector:
  apps: web02
template:
  metadata:
    labels:
        apps: web02
        version: v1
  spec:
    containers:
     - name: c1
      image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2

2. 验证资源状态

kubectl get rc,svc,pods -n oldboyedu

三、关键配置说明

第一步:修改后端 Pod 的页面内容(做标记)

我们需要先确认 lb 到底有没有转发流量。如果 web01 和 web02 返回的内容一样,你就无法判断比例了。

1. 修改 web01 的页面

kubectl exec -it web01-mv54m -n oldboyedu -- sh -c "echo '我是 Web01' > /usr/share/nginx/html/index.html"

2. 修改 web02 的页面

kubectl exec -it web02-hfvlf -n oldboyedu -- sh -c "echo '我是 Web02' > /usr/share/nginx/html/index.html"

第二步:检查并修正 lb 的 Nginx 配置

这是最关键的一步。你之前报错 unknown directive "tream",说明配置写错了。必须修正为标准的 Nginx 反向代理配置。

1. 进入 lb 的 Pod

kubectl exec -it lb-mwmvx -n oldboyedu -- sh

2. 编辑配置文件 由于容器里可能没有 vi 或者不好用,建议使用 cat 直接覆盖写入,这样最稳妥,不容易出错。

在 Pod 的命令行里执行以下命令:

cat > /etc/nginx/conf.d/default.conf << 'EOF'
upstream myapp {
  server svc-web01:80 weight=4;
  server svc-web02:80 weight=1;
}
​
server {
  listen       80;
  server_name localhost;
​
  location / {
      proxy_pass http://myapp;
      proxy_set_header Host $host;
  }
}
EOF

3. 验证并重载 Nginx 写入后,执行以下两条命令检查是否生效:

nginx -t
nginx -s reload

如果 nginx -t 显示 syntax is ok,说明配置成功了。

4. 退出 Pod

exit

第三步:再次测试

现在,再次在你的 Master 节点上执行循环测试:

for i in {1..10}; do curl 10.0.0.231:30080; echo ""; done

预期结果: 你应该能看到类似下面的输出(顺序可能不同,但比例大约是 4:1):

我是 Web01
我是 Web01
我是 Web02
我是 Web01
我是 Web01
我是 Web01
我是 Web02
...

总结

你之前看到“都一样”,是因为 lb 没有正确转发,或者 web01 和 web02 的内容本身就没区别。按照上面步骤修改后,你就能清晰地看到负载均衡的效果了。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇