首页 > 其他分享 >kube-vip的实例应用

kube-vip的实例应用

时间:2024-01-27 15:56:46浏览次数:29  
标签:forever Kubernetes -- vip 实例 ff kube

kube-vip的实例应用

1. 简介

kube-vip 是一个用于 Kubernetes 集群的轻量级负载均衡器和虚拟 IP 解决方案,主要用于为 Kubernetes 控制平面和服务提供高可用性和负载均衡功能。它可以在 Kubernetes 集群中用作多种角色,包括作为 Kubernetes 控制平面节点的静态端点或者为 Kubernetes 服务提供负载均衡。

1.1. kube-vip的主要特点和功能

  1. 高可用性:kube-vip 可以通过虚拟 IP 和多个节点之间的故障转移来实现 Kubernetes API服务器的高可用性。

  2. 负载均衡:它还可以作为一个内置的负载均衡器,用于分发到 Kubernetes 服务和 Pod 的流量,从而平衡负载和提高性能。

  3. 简单实用:kube-vip 提供了简化的配置和部署流程,可以很容易地集成到现有的 Kubernetes 集群中。

  4. 没有外部依赖:kube-vip 不依赖于外部负载均衡器或额外的硬件,因此适合在裸机、本地开发环境、云环境或边缘计算场景中使用。

  5. 支持多种环境:可以在多种环境中使用,包括本地部署、边缘计算和云平台。

  6. 使用 ARP 或 BGP 协议:kube-vip 可以使用 ARP(地址解析协议)或 BGP(边界网关协议)广播虚拟 IP 地址。

  7. 与Kubernetes集成:尽管是一个独立的组件,kube-vip 仍然和 Kubernetes 控制平面以及服务高度集成,可以作为静态 Pod 或者 DaemonSet 运行在 Kubernetes 集群中。

1.2. 如何使用 kube-vip

kube-vip 的部署和配置通常涉及几个步骤,包括创建配置文件、部署 kube-vip 作为静态 Pod 或 DaemonSet,以及配置虚拟 IP 和选举机制。kube-vip 也可以集成到 Kubernetes 集群安装工具中,比如kubeadm

官方文档和 GitHub 仓库提供了详细的部署指导,地址为:https://github.com/kube-vip/kube-vip

在部署kube-vip之前,建议详细阅读官方文档和安装指南,确保正确理解如何部署和配置它以及如何解读提供的数据。此外,了解你的环境和需求来选择最合适的部署方式和配置选项。

2.部署使用

链接地址:

2.1. 方式一-命令启动

# 设置要用于控制平面的地址:VIP
export VIP=192.168.80.100
# 将名称设置为控制平面上将宣布 VIP 的接口的名称。
export INTERFACE=ens33
# 通过解析 GitHub API 获取最新版本的 kube-vip 版本。此步骤需要并安装。
KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases | jq -r ".[0].name")
# 创建一个kube-vip 命令
alias kube-vip="docker run --network host --rm ghcr.io/kube-vip/kube-vip:$KVVERSION"
kube-vip manifest daemonset \
    --interface $INTERFACE \
    --address $VIP \
    --inCluster \
    --taint \
    --controlplane \
    --services \
    --arp \
    --leaderElection | tee kube-vip-ds.yaml

注:方式一只是做演示,后续如果对于命令部署感兴趣可以看看官网,目前部署使用第二种方式。

2.2. 方式二-DaemonSet启动

2.2.1. 创建 RBAC 设置

由于 kube-vip 作为 DaemonSet 作为常规资源而不是静态 Pod 运行,因此它仍然需要正确的访问权限才能监视 Kubernetes 服务和其他对象。为此,必须创建 RBAC 资源,其中包括 ServiceAccount、ClusterRole 和 ClusterRoleBinding,并可通过以下命令应用:

mkdir -p  ~/kube-vip && cd ~/kube-vip
# https://kube-vip.io/manifests/rbac.yaml
cat > kube-vip-rabc.yaml <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-vip
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  name: system:kube-vip-role
rules:
  - apiGroups: [""]
    resources: ["services/status"]
    verbs: ["update"]
  - apiGroups: [""]
    resources: ["services", "endpoints"]
    verbs: ["list","get","watch", "update"]
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["list","get","watch", "update", "patch"]
  - apiGroups: ["coordination.k8s.io"]
    resources: ["leases"]
    verbs: ["list", "get", "watch", "update", "create"]
  - apiGroups: ["discovery.k8s.io"]
    resources: ["endpointslices"]
    verbs: ["list","get","watch", "update"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: system:kube-vip-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:kube-vip-role
subjects:
- kind: ServiceAccount
  name: kube-vip
  namespace: kube-system
EOF

备注:vip_cidr环境变量改成24依然还是32。

- name: vip_cidr
  value: "24"

github问题链接:https://github.com/kube-vip/kube-vip/issues/324

2.2.2. 创建资源

下载镜像地址实例:

cat > kube-vip-ds.yaml <<EOF
apiVersion: apps/v1
kind: DaemonSet
metadata:
  creationTimestamp: null
  name: kube-vip-ds
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: kube-vip-ds
  template:
    metadata:
      creationTimestamp: null
      labels:
        name: kube-vip-ds
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: node-role.kubernetes.io/master
                operator: Exists
            - matchExpressions:
              - key: node-role.kubernetes.io/control-plane
                operator: Exists
      containers:
      - args:
        - manager
        env:
        - name: vip_arp
          value: "true"
        - name: port
          value: "6443"
        - name: vip_interface
          value: ens33
        - name: vip_cidr
          value: "24"
        - name: vipSubnet
          value: ""
        - name: cp_enable
          value: "true"
        - name: cp_namespace
          value: kube-system
        - name: vip_ddns
          value: "false"
        - name: svc_enable
          value: "true"
        - name: vip_leaderelection
          value: "true"
        - name: vip_leaseduration
          value: "5"
        - name: vip_renewdeadline
          value: "3"
        - name: vip_retryperiod
          value: "1"
        - name: address
          value: 192.168.80.100  #定义的vip地址
        image: ghcr.io/kube-vip/kube-vip:v0.6.4
        imagePullPolicy: Always
        name: kube-vip
        resources: {}
        securityContext:
          capabilities:
            add:
            - NET_ADMIN
            - NET_RAW
            - SYS_TIME
      hostNetwork: true
      serviceAccountName: kube-vip
      tolerations:
      - effect: NoSchedule
        operator: Exists
      - effect: NoExecute
        operator: Exists
  updateStrategy: {}
status:
  currentNumberScheduled: 0
  desiredNumberScheduled: 0
  numberMisscheduled: 0
  numberReady: 0
EOF

创建资源:

kubectl apply -f kube-vip-rabc.yaml
kubectl apply -f kube-vip-ds.yaml
​
# 查看资源创建
kubectl get pods  -n kube-system  -l  name=kube-vip-ds
NAME                READY   STATUS    RESTARTS   AGE
kube-vip-ds-bxg4s   1/1     Running   0          5m17s
​
kubectl get ServiceAccount -n kube-system | grep kube-vip
kube-vip                             0         45m

2.2.3. 查看master节点网关

ip addr
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:7e:01:43 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.80.45/24 brd 192.168.80.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.80.100/32 scope global ens33 # 这里可以看到我们的vip地址
       valid_lft forever preferred_lft forever
    inet6 fe80::1b63:e692:3239:41db/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
5: kube-ipvs0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
    link/ether 02:67:68:41:61:e5 brd ff:ff:ff:ff:ff:ff
    inet 10.96.0.1/32 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
    inet 10.96.0.10/32 scope global kube-ipvs0
       valid_lft forever preferred_lft forever
       
# 测试ip地址连通性
telnet 192.168.80.100 6443
Trying 192.168.80.100...
Connected to 192.168.80.100.
Escape character is '^]'.

结尾:本地vip地址已经可以访问到,后续逻辑就是需要重新更细创建k8s集群时创建的证书,将vip地址加入进去然后重新签发证书在分配到每一个节点上。

标签:forever,Kubernetes,--,vip,实例,ff,kube
From: https://www.cnblogs.com/-k8s/p/17991520

相关文章

  • Ubuntu安装helm3实例
    为了在Ubuntu系统上部署Helm,你需要按照以下步骤操作:先决条件:确保你有一个Kubernetes集群,并且你的本地机器已经安装了kubectl工具,并且配置好了与你的Kubernetes集群通信。下载Helm:你可以从Helm的官方发布页面下载最新版本的Helm包。或者,你可以使用脚本自动安装它。使用H......
  • Kubernetes 推荐学习资料 课程 视频
    以下是一些推荐的Kubernetes学习资料、课程和视频:学习资料:Kubernetes官方文档:https://kubernetes.io/docs/home/《Kubernetes操作指南》(KubernetesUp&Running)一书,由KelseyHightower、BrendanBurns、JoeBeda著。《KubernetesinAction》一书,由MarkoLuksa著。《Kuberne......
  • 在linux中安装nginx 集群 步骤 实例 双语版
    以下是在Linux中安装Nginx集群的步骤:在每个节点上安装Nginx软件包。可以使用包管理系统安装,如apt-get或yum,或者从Nginx官方网站下载源码进行编译和安装。创建一个共享的存储区来存放Nginx配置文件和日志文件。这可以是本地文件系统的共享目录,也可以是网络文件系统(NFS)。创建一个Ngin......
  • kubeadm生成集群时指定所有证书过期时间为99年
    使用kubeadm初始化Kubernetes集群时生成99年有效期的所有证书,可以通过以下步骤操作:编辑kubeadm的配置文件kubeadm-config.yaml:apiVersion:kubeadm.k8s.io/v1beta2kind:ClusterConfigurationapiServer:extraArgs:certificate-duration:868320hcertifica......
  • STP协议实例
    拓扑图:相关配置:进入每台交换机,关闭信息中心修改名称交换机配置:进入每台交换,查询生成树信息查询命令displaystp查看第一行和第四行物理地址是否一致,一致为根桥;(第一行为当前设备的网桥地址,第四行为当前网络内的根桥地址,如上图)经查,S4为根桥主机;但S4为S3700,S1为S5700,S1性能更改,故通......
  • 数据库安全||数据库安全性控制的方法及其实例(用户身份识别、存取控制、视图、审计、数
    数据库安全性控制是确保数据库系统中的数据不被非法访问、修改或破坏的一系列技术和策略。以下是数据库安全性控制的详细介绍:用户身份鉴别:静态口令鉴别:用户设置一个固定的密码,每次登录时使用相同的密码。动态口令鉴别:每次登录时生成一个新的密码,通常与时间或事件相关联,提高了安全性......
  • K8S 集群 apiserver-advertise-address实例节点IP切换VIP
    1.备份当前k8s集群配置文件(3个master都备份) cp-r/etc/kubernetes/etc/kubernetes.bak2.删除当前k8s集群的apiserver的cert和keyrm-rf/etc/kubernetes/pki/apiserver.*3.生成新的apiserver的cert和key,cd到pki目录下cd/etc/kubernetes/pki/---apiserver-advertise-......
  • kubernetes 导出干净的 yaml内容
    从Kubernetes集群导出对象的完整清单很容易,但它会包含无关的会计字段,这不仅难以直观地评估和与其原始形式进行比较,而且还可能导致重新申请失败。结合使用jq和yq实用程序,我们可以使用以下语法导出干净的yaml清单。 安装yq jq sudoadd-apt-repositoryppa:rmescando......
  • Kubectl使用
     #检查Deployment的历史版本kubectlrollouthistorydeployment/sscpabm#查看revision(版本)的详细信息kubectlrollouthistorydeployment/sscpabmn--revision=2#将当前版本回滚到前一个版本kubectlrolloutundodeployment/sscpabm#使用--to-revision选项回......
  • 三、kubernetes 集群 YAML 文件详解
    1、YAML文件概述k8s集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML格式文件中,我们把这种文件叫做资源清单文件,通过kubectl命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。2、YA......