基础环境安装
主目录地址
初始化一个使用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网络.
参考文献:
其他操作
如果该节点想要重新初始化,那么可执行命令将其从集群中剔除:
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