service 控制器案例(demo)
- 服务发现:
基于标签管理器关联后端的Pod列表。
- 负载均衡:
将用户请求转发给不同的Pod以均衡流量。
使用rc控制器部署3个副本,并使用svc的10.200.100.100:99端口进行服务的访问;
(1)不允许制作一个镜像,要求访问首页文件时出现以下信息;
<所在节点 ---> Pod名称 ---> Pod的IP地址>
举个例子:
解题思路:
- 向容器传递环境变量:
- 将这个写过写入到网站根目录即可:
echo "<${baimei_POD_NAMENAME} ---> ${baimei_POD_NAME} ---> ${baimei_POD_IP}>" > /usr/share/nginx/html/index.html
(2)使用rc控制器部署3个副本,并使用svc的10.200.100.100:99端口进行服务的访问;
参考案例:
(1)编写资源清单
cat 01-rc-svc-initContainers.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
# 指定service的IP地址
clusterIP: 10.200.100.100
# 基于标签选择器关联Pod
selector:
school: baimei
# 配置端口映射
ports:
# 指定Service服务本身的端口号
- port: 99
# 后端Pod提供服务的端口号
targetPort: 80
---
apiVersion: v1
kind: ReplicationController
metadata:
name: baimei-rc-web
spec:
replicas: 3
template:
metadata:
labels:
school: baimei
class: dashu
spec:
volumes:
- name: data
emptyDir: {}
initContainers:
- name: init
image: harbor.baimei.com/baimei-web/nginx:1.25.1-alpine
command:
- "/bin/sh"
- "-c"
- "echo \"<h1>${baimei_POD_NAMENAME} ---> ${baimei_POD_NAME} ---> ${baimei_POD_IP}</h1>\" > /data/index.html"
env:
- name: baimei_POD_NAMENAME
valueFrom:
fieldRef:
fieldPath: "spec.nodeName"
- name: baimei_POD_NAME
valueFrom:
fieldRef:
fieldPath: "metadata.name"
- name: baimei_POD_IP
valueFrom:
fieldRef:
fieldPath: "status.podIP"
volumeMounts:
- name: data
mountPath: /data
containers:
- name: web
image: harbor.baimei.com/baimei-web/nginx:1.25.1-alpine
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
(2)创建资源
kubectl apply -f 01-rc-svc-initContainers.yaml
kubectl get svc,pods
(3)查看资源
for i in `seq 30`;do curl -s 10.200.100.100:99;done | sort | uniq -c