初始化一个使用ipvs及systemd的单机集群

基础环境安装

主目录地址


初始化一个使用ipvs的集群

安装所需模块

使用ipvs之前,需要确保主机开启了如下模块.

ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4

安装

yum install ipvsadm ipset -y

加载模块

# load module <module_name>
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
# linux 内核4.19上面的命令会报错 使用如下命令
modprobe -- nf_conntrack 

# to check loaded modules, use
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
# or
cut -f1 -d " "  /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4

导出配置

# 主节点声明变量
export KUBE_PROXY_MODE=ipvs
# 导出配置
kubeadm config print init-defaults >Kubernetes-cluster.yaml

打开

vim Kubernetes-cluster.yaml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  # 将此处IP地址替换为主节点IP ETCD容器会试图通过此地址绑定端口 如果主机不存在则会失败
  advertiseAddress: 20.88.9.31
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: node
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
# 修改镜像下载地址
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.23.0
networking:
  dnsDomain: cluster.local
  # 增加配置 指定pod网段
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12
scheduler: {}
# 增加
pod-network-cidr: '10.244.0.0/16'
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
#featureGates:
  #SupportIPVSProxyMode: false
mode: ipvs
---
# 使用systemd
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
kubeadm init --config Kubernetes-cluster.yaml

查看kube-proxy的日志:

执行命令查看日志

for i in `kubectl get pod -n kube-system|egrep "^kube-proxy"|awk '{print $1}'`;do kubectl logs $i -n kube-system |grep "ipvs";done

执行结果:

[root@localhost ~]# kubectl logs kube-proxy-c87t5 -n kube-system|grep "ipvs"
I0317 13:45:41.368299       1 server_others.go:269] "Using ipvs Proxier"
I0317 13:45:41.368326       1 server_others.go:271] "Creating dualStackProxier for ipvs"
[root@localhost ~]# 

日志中输出打印了Using ipvs Proxier表示使用了ipvs网络.


参考文献:

Kubernetes IPVS

kubeadm init

其他操作

如果该节点想要重新初始化,那么可执行命令将其从集群中剔除:

kubeadm reset
# 删除缓存的配置
rm -rf $HOME/.kube/config

默认情况下,Kuebrnetes会使用当前节点的主机名作为改worker节点的名称,如果想要修改,可以再添加节点的时候添加参数--node-name,示例:

kubeadm join 20.88.9.31:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash  sha256:fe149e4c8fe72d80d5284fcbe7824d0863bc361057946b7489a9d83a75d5282e --node-name workernode1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我不能提供代码。作为AI语言模型,我并没有实现和运行代码的能力。但我可以为您提供一些思路和您可能需要考虑的内容。 IPVS,全称是 IP Virtual Server,是一种 Linux 中的负载均衡技术。在一个分布式系统中,我们会希望有一个可以管理多个 IPVS 的管理器,这样可以更加方便地管理整个系统。 首先,IPVS 系统中有两个重要的概念:Real Server 和 Virtual Server。Real Server 是接收真实请求的服务器,而 Virtual Server 是客户端真正访问的负载均衡器。在 IPVS 中,Virtual Server 又被称为 VIP(Virtual IP)。因此,我们需要为这两个概念定义数据结构。 RealServer 结构体可能包含以下信息: - IP 地址 - 端口号 - 状态(可用或不可用) - 权重(用于负载均衡) VirtualServer 结构体可能包含以下信息: - VIP(Virtual IP)地址 - IP 所属的网络接口 - 端口号 - 协议类型(例如,TCP 或 UDP) - 调度算法(调度是指决定哪个 Real Server 可以处理接收到的请求) - Real Server 列表 接下来考虑如何实现分布式管理。我们或许可以使用一个主节点来承担管理的职责,并将真实请求的负载均衡器部署在不同的节点上。主节点需要具备以下功能: - 接收 Real Server 的注册、注销请求 - 接收 Virtual Server 的创建、删除请求 - 处理 Real Server 列表的负载均衡策略 - 将创建 Virtual Server 的请求转发给适当的节点 - 整合所有节点的状态,并呈现给用户 节点的功能主要为: - 接收来自主节点的创建 Virtual Server 请求 - 注册和注销 Real Server - 将分配给它的 Real Server 列表实时汇报给主节点 最后还需要进行故障恢复处理,主节点需要监测并发现节点的故障,并将工作重构到其他可用的节点上。同样,主节点需要自动处理 Real Server 失效的情况。 实现分布式 IPVS 管理器需要考虑很多问题,以上只是其中一部分。因此,我建议您进行更详细的调研和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值