在openEuler 22.03 LTS SP4中通过kubeadm部署3节点k8s集群(3个Master,兼做node) cni为calico,模式为vxlan(如果做不了,做成ipip模式)
首先,我需要确认openEuler是否支持Kubernetes的组件,比如kubeadm、kubelet等。根据引用[3],安装这些组件通常是通过apt-get,但openEuler使用的是dnf或yum,可能需要配置合适的仓库。可能需要用户先添加Kubernetes的YUM源,或者使用其他方式安装。
接下来是节点初始化。三个Master节点需要高可用,所以可能需要配置负载均衡器或者使用kubeadm的配置来设置多控制平面。但用户希望三个Master同时作为工作节点,这意味着需要移除Master节点上的污点,允许Pod调度。这一步需要注意,因为默认Master节点有NoSchedule污点,需要修改。
然后是网络插件Calico的配置,用户希望用vxlan模式,如果不行再用ipip。Calico默认可能使用ipip,需要查阅Calico文档确认是否支持vxlan,以及如何配置。可能需要修改Calico的配置文件,设置vxlan的选项。同时,还要考虑Calico与Kubernetes版本的兼容性,确保选择的版本适配。
另外,用户提到kube-proxy的配置,引用[1]和[2]提到需要切换到ipvs模式,需要加载内核模块。在openEuler系统中,需要检查这些模块是否已加载,如果没有,需要安装相应的工具并加载。这可能会影响kube-proxy的性能,所以必须正确配置。
系统准备工作包括关闭swap、设置防火墙规则、配置SELinux等。openEuler可能默认使用firewalld,需要放行相关端口。同时,配置时间同步服务,确保节点时间一致。
在安装容器运行时方面,openEuler可能默认使用iSula,但Kubernetes通常推荐containerd或Docker。需要确认用户是否要使用containerd,并正确安装和配置,特别是cgroup驱动要与Kubernetes一致,否则会出现问题。
初始化集群时,使用kubeadm init生成配置文件,然后修改控制平面的Endpoint为负载均衡器的地址,或者使用多节点初始化。但用户有三个Master节点,可能需要使用kubeadm join添加其他两个Master节点,并配置etcd集群。
最后,加入工作节点,也就是三个Master节点自己作为工作节点,需要执行kubeadm join,并去除污点。同时,安装Calico CNI,并根据需要调整网络模式。
可能出现的问题包括内核模块缺失导致ipvs无法启用,Calico的vxlan模式需要的内核支持是否满足,以及多Master节点的高可用配置是否正确。需要提醒用户检查这些步骤,并提供故障排除方法,比如查看日志、验证网络等。
总结步骤应该是:系统准备→安装容器运行时→安装k8s组件→初始化第一个Master→加入其他Master→安装Calico→配置网络模式→移除污点→验证集群状态。需要详细写出每个步骤的具体命令和配置,并注意可能的错误点。### 部署三节点高可用 Kubernetes 集群(openEuler 22.03 LTS SP4)
一、系统准备(所有节点执行)
内核模块加载
验证是否已加载所需模块:sudo modprobe ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4 echo "ip_vs" | sudo tee /etc/modules-load.d/ipvs.conf
[^2]
禁用交换分区
sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
防火墙与 SELinux
sudo systemctl stop firewalld sudo systemctl disable firewalld sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
时间同步
sudo dnf install chrony -y sudo systemctl enable --now chronyd
二、安装容器运行时(containerd)
sudo dnf install containerd -y
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
三、安装 Kubernetes 组件
配置 YUM 源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 EOF
安装 kubeadm/kubelet
sudo dnf install kubeadm-1.28.0 kubelet-1.28.0 kubectl-1.28.0 -y sudo systemctl enable kubelet
四、初始化第一个 Master 节点
生成初始化配置
kubeadm config print init-defaults > kubeadm-init.yaml
修改以下字段:
apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: <当前节点IP> --- apiServer: timeoutForControlPlane: 4m0s controlPlaneEndpoint: "<虚拟IP>:6443" # 若未配置负载均衡器,使用第一个节点IP
执行初始化
sudo kubeadm init --config=kubeadm-init.yaml --upload-certs
五、加入其他 Master 节点
sudo kubeadm join <控制平面端点>:6443 --token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--control-plane --certificate-key <key>
六、安装 Calico CNI
下载 Calico 清单文件
curl https://docs.projectcalico.org/manifests/calico.yaml -O
配置 vxlan 模式
修改calico.yaml
:- name: CALICO_IPV4POOL_IPIP value: "Never" # 关闭 IPIP - name: CALICO_IPV4POOL_VXLAN value: "Always" # 启用 VXLAN
部署 Calico
kubectl apply -f calico.yaml
七、配置工作节点角色
kubectl taint nodes <节点名称> node-role.kubernetes.io/control-plane:NoSchedule-
八、验证集群状态
kubectl get nodes -o wide
kubectl get pods -n kube-system
关键配置说明
网络模式选择
- 若遇到
vxlan
模式无法通信,将CALICO_IPV4POOL_VXLAN
改为Never
,同时启用CALICO_IPV4POOL_IPIP: "Always"
[^1] - 检查内核是否支持 VXLAN:
lsmod | grep vxlan
- 若遇到
IPVS 模式强制启用
kubectl edit cm kube-proxy -n kube-system # 修改 mode: "ipvs"
相关推荐

















