跳到主要内容

Microk8s 单机集群上的服务负载均衡实践

· 阅读需 2 分钟
素明诚
Full stack development

部署结构

72b99c9f5f751e012cf7d0ab52ffc848## 安装 microk8s
素明诚:Ubuntu 安装 MicroK8s## 配置 microk8s

安装插件

MetalLB: 这是一个负载均衡器实现,可以为 Kubernetes 服务提供外部 IP 地址。在裸机 Kubernetes 集群(如单节点 Microk8s 集群)中,MetalLB 通常用来替代云平台上的负载均衡服务。

Ingress: Ingress 是一种 Kubernetes 资源,用于管理从集群外部到集群内服务的访问。它可以提供 SSL 终止、基于名称的虚拟主机等功能。

metallb

安装时候输入你的想要地址段192.168.1.240-192.168.1.250

microk8s enable metallb

查看是否正常

microk8s kubectl get pods -n metallb-system

ingress

microk8s enable ingress

测试

watch -n 0.5 curl http://192.168.1.240:9999

负载均衡效果

43cf27748d6ed22b09fa13243e449a3e

service

ee62e0086785c3531c31f0d1fd6b1c78

ingress

配置文件

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: go-sec-kill
spec:
replicas: 3
selector:
matchLabels:
app: go-sec-kill
template:
metadata:
labels:
app: go-sec-kill
spec:
containers:
- name: go-sec-kill
image: smcroot/go-sec-kill
ports:
- containerPort: 8080
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "1Gi" # 请求1GB内存
cpu: "500m" # 请求0.5 CPU
limits:
memory: "2Gi" # 限制最多使用2GB内存
cpu: "1" # 限制最多使用1个CPU

service.yaml

apiVersion: v1
kind: Service
metadata:
name: go-sec-kill
spec:
type: LoadBalancer
selector:
app: go-sec-kill
ports:
- protocol: TCP
name: http
port: 9999
targetPort: 8080

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: go-sec-kill-ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: go-sec-kill
port:
number: 9999

ipaddresspool.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: my-ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.240-192.168.1.250