在openEuler 22.03 LTS SP4中通过kubeadm部署3节点k8s集群(3个Master,兼做node) cni为calico,模式为vxlan(如果做不了,做成ipip模式)
时间: 2025-03-19 10:20:31 浏览: 92
<think>好的,用户想在openEuler 22.03 LTS SP4系统上用kubeadm部署一个包含三个Master节点同时作为工作节点的Kubernetes集群,并使用Calico CNI的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→配置网络模式→移除污点→验证集群状态。需要详细写出每个步骤的具体命令和配置,并注意可能的错误点。</think>### 部署三节点高可用 Kubernetes 集群(openEuler 22.03 LTS SP4)
#### 一、系统准备(所有节点执行)
1. **内核模块加载**
验证是否已加载所需模块:
```bash
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]
2. **禁用交换分区**
```bash
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
```
3. **防火墙与 SELinux**
```bash
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
```
4. **时间同步**
```bash
sudo dnf install chrony -y
sudo systemctl enable --now chronyd
```
#### 二、安装容器运行时(containerd)
```bash
sudo dnf install containerd -y
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
```
#### 三、安装 Kubernetes 组件
1. **配置 YUM 源**
```bash
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
```
2. **安装 kubeadm/kubelet**
```bash
sudo dnf install kubeadm-1.28.0 kubelet-1.28.0 kubectl-1.28.0 -y
sudo systemctl enable kubelet
```
#### 四、初始化第一个 Master 节点
1. **生成初始化配置**
```bash
kubeadm config print init-defaults > kubeadm-init.yaml
```
修改以下字段:
```yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: <当前节点IP>
---
apiServer:
timeoutForControlPlane: 4m0s
controlPlaneEndpoint: "<虚拟IP>:6443" # 若未配置负载均衡器,使用第一个节点IP
```
2. **执行初始化**
```bash
sudo kubeadm init --config=kubeadm-init.yaml --upload-certs
```
#### 五、加入其他 Master 节点
```bash
sudo kubeadm join <控制平面端点>:6443 --token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--control-plane --certificate-key <key>
```
#### 六、安装 Calico CNI
1. **下载 Calico 清单文件**
```bash
curl https://docs.projectcalico.org/manifests/calico.yaml -O
```
2. **配置 vxlan 模式**
修改 `calico.yaml`:
```yaml
- name: CALICO_IPV4POOL_IPIP
value: "Never" # 关闭 IPIP
- name: CALICO_IPV4POOL_VXLAN
value: "Always" # 启用 VXLAN
```
3. **部署 Calico**
```bash
kubectl apply -f calico.yaml
```
#### 七、配置工作节点角色
```bash
kubectl taint nodes <节点名称> node-role.kubernetes.io/control-plane:NoSchedule-
```
#### 八、验证集群状态
```bash
kubectl get nodes -o wide
kubectl get pods -n kube-system
```
### 关键配置说明
1. **网络模式选择**
- 若遇到 `vxlan` 模式无法通信,将 `CALICO_IPV4POOL_VXLAN` 改为 `Never`,同时启用 `CALICO_IPV4POOL_IPIP: "Always"`[^1]
- 检查内核是否支持 VXLAN:`lsmod | grep vxlan`
2. **IPVS 模式强制启用**
```bash
kubectl edit cm kube-proxy -n kube-system
# 修改 mode: "ipvs"
```
阅读全文
相关推荐

















