📅  最后修改于: 2023-12-03 14:53:31.778000             🧑  作者: Mango
kube-vip 是一个简单易用的项目,它允许你在 Kubernetes 集群中为服务实现高可用性、负载均衡和故障转移。kube-vip 监听 etcd 中的 Service Endpoints,可以动态将 VIP 转发到对应的 Endpoint。
kube-vip 的安装可以使用现有的工具,如 kubeadm 或 helm。
在安装 kube-vip 之前,请确保已经有一个 Kubernetes 集群,并配置了 kubeadm。
创建一个名为 kube-vip 的命名空间:
$ kubectl create ns kube-vip
安装 kube-vip:
$ curl -s https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/images/kube-vip/v0.3.4/docker/kube-vip-amd64.run | \
sh -s -- install \
--version v0.3.4 \
--namespace kube-vip \
--manifests-only
此命令会下载并运行 kube-vip-amd64.run 脚本,安装名为 kube-vip 的 DaemonSet 到当前 Kubernetes 集群的 kube-vip 命名空间中。此命令还根据当前 Kubernetes 版本生成名为 kube-vip.yaml 的 YAML 文件。
应用生成的 YAML 文件:
$ kubectl apply -f kube-vip.yaml
验证 kube-vip 是否已经安装:
$ kubectl get ds -n kube-vip
添加 multus-cni 的 Helm 仓库:
$ helm repo add multus-cni https://multus-cni.github.io/helm-mirrors/
$ helm repo update
安装 kube-vip:
$ helm install kube-vip multus-cni/kube-vip --version v0.3.4 \
--namespace kube-vip \
--create-namespace
kube-vip 需要通过配置文件指定如何监听 etcd 并转发 VIP。可以定义多个配置文件,每个配置文件指定一个 VIP,并定义它应该如何处理。这些配置文件将用于在 kube-vip DaemonSet 中启动 kube-vip。
创建 config.yaml 配置文件:
# config.yaml
kind: Config
apiVersion: kubevip.weave.works/v1alpha1
version: v1
metadata:
name: my-vip
spec:
virtualAddresses:
- 192.168.99.100/24
controlPlaneVIP: 192.168.99.254/24
etcd:
endpoints:
- http://10.0.1.10:2379
- http://10.0.1.11:2379
- http://10.0.1.12:2379
certFile: /etc/ssl/etcd/server.crt
keyFile: /etc/ssl/etcd/server.key
caFile: /etc/ssl/etcd/ca.crt
将配置文件添加到 ConfigMap 中:
$ kubectl create configmap kube-vip --from-file=config.yaml -n kube-vip
搜索 kube-vip DaemonSet 中的 env 中的环境变量 KUBE_VIP_CONFIG_NAME ,使用自定义名称启动 kube-vip:
$ kubectl set env ds kube-vip -n kube-vip KUBE_VIP_CONFIG_NAME=my-vip
现在,你可以部署一个服务来使用该 VIP。假设我们有一个部署,名为 nginx-deployment:
$ kubectl create deployment nginx --image=nginx
并且有一个名为 nginx 的 Service:
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- name: http
port: 80
selector:
app: nginx
type: LoadBalancer
应用 nginx-service.yaml:
$ kubectl apply -f nginx-service.yaml
kube-vip 现在会监听 Service 的 Endpoints,如果有任何 Endpoints 更改,它将立即更改 VIP 的转发。可以在其他节点上测试此行为,但是使用以下命令测试最简单:
$ kubectl get svc nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
kube-vip 确实可以将 VIP 转发到正确的 Endpoint!