使用Helm部署MetalLB并使用LoadBalancer
你好。
我是Class Act公司基础设施事业部的大塚。
在之前的文章中,我们已经在kubetnetes集群上部署了Helm。这一次,我想通过使用Helm来部署MetalLB,以便能够使用LoadBalancer。
以下是之前文章的链接。
此外,我们正在使用不使用Helm的MetalLB部署方法进行实施。即使我忘记了做过什么,也不能说出来。
MetalLB是什么
希望您能點擊以下連結,以便查看我在文章中提供的清晰引用來源。
建立形象
我們將建構的映像如下所示:
在k8s集群中建立metal-lb命名空間和wp命名空間,並在metal-lb命名空間中部署metallb相關的pod和service。然後,我們將在wp命名空間中部署所需的WordPress環境。
参考网站
环境建设
创建命名空间
使用以下命令创建命名空间。
root@k8s-master:~/yaml/configmap# kubectl create ns metal-lb
namespace/metal-lb created
root@k8s-master:~/yaml/configmap# kubectl create ns wp
namespace/wp created
root@k8s-master:~/yaml/configmap# kubectl get ns
NAME STATUS AGE
default Active 21d
kube-node-lease Active 21d
kube-public Active 21d
kube-system Active 21d
metal-lb Active 14s
observability Active 7d5h
wp Active 6s
MetalLB的部署
使用Helm部署MetalLB。
添加MetalLB的存储库后,进行部署。
通过使用–namespace选项,它将在指定的namespace中进行部署。
root@k8s-master:~/yaml/metal-lb# helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
root@k8s-master:~/yaml/metal-lb# helm repo add metallb https://metallb.github.io/metallb
root@k8s-master:~/yaml/metal-lb# helm install metallb metallb/metallb --namespace metal-lb
NAME: metallb
LAST DEPLOYED: Sat Jul 1 14:01:52 2023
NAMESPACE: metal-lb
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
MetalLB is now running in the cluster.
Now you can configure it via its CRs. Please refer to the metallb official docs
on how to use the CRs.
我将检查Pod和Service。
Speaker和Controller的角色如下所示。由于我的K8s环境由7台构成,因此会有7个Speaker Pod。
Speaker:在所有节点上运行的Pod。确保MetalLB服务的可访问性。
Controller:负责管理和分配IP地址。
root@k8s-master:~/yaml/metal-lb# kubectl get pod,svc -n metal-lb
NAME READY STATUS RESTARTS AGE
pod/metallb-controller-5cd9b4944b-hdbkj 1/1 Running 0 34s
pod/metallb-speaker-k84gr 4/4 Running 0 34s
pod/metallb-speaker-pvc82 4/4 Running 0 34s
pod/metallb-speaker-pzqdg 4/4 Running 0 34s
pod/metallb-speaker-s7vk2 4/4 Running 0 34s
pod/metallb-speaker-t86kq 4/4 Running 0 34s
pod/metallb-speaker-xsgsf 4/4 Running 0 34s
pod/metallb-speaker-zfptn 4/4 Running 0 34s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/metallb-webhook-service ClusterIP 10.109.95.209 <none> 443/TCP 35s
定义MetalLB的地址池
MetalLB定义了用于向负载均衡器分配地址的地址池。
准备以下的yaml文件。在本例中,将使用192.168.2.45~49的地址范围。
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default
namespace: metal-lb
spec:
addresses:
- 192.168.2.45-192.168.2.49
autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: default
namespace: metal-lb
spec:
ipAddressPools:
- default
我要部署这个。
root@k8s-master:~/yaml/configmap# kubectl apply -f metallb-config.yaml
ipaddresspool.metallb.io/default created
l2advertisement.metallb.io/default created
部署相关的WordPress应用
准备四个YAML文件。
apiVersion: v1
kind: Pod
metadata:
name: wordpress-pod
namespace: wp
labels:
app: wordpress
spec:
containers:
- name: wordpress-con
image: wordpress:php8.1-apache
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: mysql-clusterip
- name: WORDPRESS_DB_USER
value: devuser
- name: WORDPRESS_DB_PASSWORD
value: password
- name: WORDPRESS_DB_NAME
value: gke-wordpress-database
apiVersion: v1
kind: Pod
metadata:
name: mysql-pod
namespace: wp
labels:
app: mysql
spec:
containers:
- name: mysql-con
image: mysql:8.0-debian
ports:
- containerPort: 3306
env:
- name: MYSQL_USER
value: devuser
- name: MYSQL_PASSWORD
value: password
- name: MYSQL_ROOT_PASSWORD
value: password
- name: MYSQL_DATABASE
value: gke-wordpress-database
apiVersion: v1
kind: Service
metadata:
name: mysql-clusterip
namespace: wp
spec:
selector:
app: mysql
type: ClusterIP
ports:
- name: mysql
port: 3306
protocol: TCP
targetPort: 3306
apiVersion: v1
kind: Service
metadata:
name: wordpress-loadbalancer
namespace: wp
spec:
type: LoadBalancer
selector:
app: wordpress
ports:
- protocol: TCP
port: 60000
targetPort: 80
我們將進行部署。
root@k8s-master:~/yaml/wp# kubectl apply -f mysql-clusterip.yaml
service/mysql-clusterip created
root@k8s-master:~/yaml/wp# kubectl apply -f mysql-pod.yaml
pod/mysql-pod created
root@k8s-master:~/yaml/wp# kubectl apply -f wordpress-loadbalancer.yaml
service/wordpress-loadbalancer created
root@k8s-master:~/yaml/wp# kubectl apply -f wordpress-pod.yaml
pod/wordpress-pod createdz
我要确认部署已经完成。
我要确认Pod已经处于运行状态,并且通过MetalLB分配的IP地址已经附加到LoadBalancer的EXTERNAL-IP上。
root@k8s-master:~/yaml/wp# kubectl get pod,svc -n wp
NAME READY STATUS RESTARTS AGE
pod/mysql-pod 1/1 Running 0 52s
pod/wordpress-pod 1/1 Running 0 39s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mysql-clusterip ClusterIP 10.96.152.58 <none> 3306/TCP 58s
service/wordpress-loadbalancer LoadBalancer 10.105.94.140 192.168.2.45 60000:31847/TCP 45s