📜  安装 kube-vip - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:53:31.778000             🧑  作者: Mango

安装 kube-vip

kube-vip 是一个简单易用的项目,它允许你在 Kubernetes 集群中为服务实现高可用性、负载均衡和故障转移。kube-vip 监听 etcd 中的 Service Endpoints,可以动态将 VIP 转发到对应的 Endpoint。

1. 在 Kubernetes 中安装 kube-vip

kube-vip 的安装可以使用现有的工具,如 kubeadm 或 helm。

使用 kubeadm 安装 kube-vip

在安装 kube-vip 之前,请确保已经有一个 Kubernetes 集群,并配置了 kubeadm。

  1. 创建一个名为 kube-vip 的命名空间:

    $ kubectl create ns kube-vip
    
  2. 安装 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 文件。

  3. 应用生成的 YAML 文件:

    $ kubectl apply -f kube-vip.yaml
    
  4. 验证 kube-vip 是否已经安装:

    $ kubectl get ds -n kube-vip
    

使用 Helm 安装 kube-vip

  1. 添加 multus-cni 的 Helm 仓库:

    $ helm repo add multus-cni https://multus-cni.github.io/helm-mirrors/
    $ helm repo update
    
  2. 安装 kube-vip:

    $ helm install kube-vip multus-cni/kube-vip --version v0.3.4 \
      --namespace kube-vip \
      --create-namespace
    
2. 配置 kube-vip

kube-vip 需要通过配置文件指定如何监听 etcd 并转发 VIP。可以定义多个配置文件,每个配置文件指定一个 VIP,并定义它应该如何处理。这些配置文件将用于在 kube-vip DaemonSet 中启动 kube-vip。

  1. 创建 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
    
  2. 将配置文件添加到 ConfigMap 中:

    $ kubectl create configmap kube-vip --from-file=config.yaml -n kube-vip
    
  3. 搜索 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
    
3. 部署服务

现在,你可以部署一个服务来使用该 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!