遇到的问题包括但不限
-
master 节点初始化卡死
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
-
node 节点 join 卡死
[preflight] Running pre-flight checks
-
启动一个 pod 时,一直
ContainerCreating
-
master 节点 ping 不通 pod 的 ip(如果能把这个ping通,网络问题应该就算是解决了)
2024 年 2 月 25 日 23:51 终于通了!!!
对比内网环境,公网部署 k8s 需要额外进行一些操作
- 需要为每台机器配置一个虚拟网卡
- 需要为每台机器配置 kubelet 启动参数(--node-ip <公网 ip>)
- flannel 网络插件启动前,需要修改特定配置
配置虚拟网卡
云服务器上的网卡用到的 ip 通常不是公网 ip,导致部署 k8s 遇到很多问题
解决方案是配置一个虚拟网卡,绑定至云服务的默认网卡,将虚拟网卡的 ip 设置为公网 ip
bash
# 临时开启一个虚拟网卡
sudo ifconfig eth0:1 111.229.192.102 up
配置后大概长这样:
若要永久开启,可以将该命令写入至 /etc/profile
bash
sudo vim /etc/profile
将sudo ifconfig eth0:1 111.229.192.102 up
添加至末尾
这样每次启动时会自动执行这段命令
注意 eth0:1 这一段,eth0 是你的真实网卡名称;后续的 ip 是你的公网 ip
也是后续配置 flannel 插件,需要用的到的网卡名
不同服务器的网卡名不一样怎么办?
在ubuntu22系统(其它系统暂不清楚)下,可以用set-name属性指定网卡名
文件在/etc/netplan/xxx.yaml
yaml
network:
version: 2
ethernets:
ens3: # 不要改这里,否则网络会挂掉
dhcp4: true
match:
macaddress: fa:16:3e:4d:56:4c
mtu: 1450
set-name: ens3 # 设置网卡名
这里的网卡名设置很关键,后续fannel插件启动时就要指定一个网卡名,如果服务器间的网卡名不同,则fannel网络就会出现问题
为 kubelet 配置启动参数,(指定 node-ip,每台服务器都要设置)
编辑配置文件
bash
sudo vim /lib/systemd/system/kubelet.service.d/10-kubeadm.conf
在ExecStart后面添加--node-ip=公网ip
conf
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip=111.229.192.102
重启服务
bash
sudo systemctl daemon-reload
Flannel 网络插件启动配置
编辑 kube-flannel.yml 配置文件
yaml
...
containers:
- name: kube-flannel
image: docker.io/flannel/flannel:v0.24.2
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
- --public-ip=$(PUBLIC_IP) # 在此添加,PUBLIC_IP定义在下方env:
- --iface=eth0 # 在此添加,指定你的网卡名
resources:
requests:
cpu: "100m"
memory: "50Mi"
securityContext:
privileged: false
capabilities:
add: ["NET_ADMIN", "NET_RAW"]
env:
- name: PUBLIC_IP # 在此添加
valueFrom: # 在此添加
fieldRef: # 在此添加
fieldPath: status.podIP # 在此添加
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: EVENT_QUEUE_DEPTH
value: "5000"
volumeMounts:
- name: run
mountPath: /run/flannel
- name: flannel-cfg
mountPath: /etc/kube-flannel/
- name: xtables-lock
mountPath: /run/xtables.lock
...
感谢
公网环境搭建 Kubernetes (k8s) 集群的详细图解
多个公网服务器搭建 k8s 集群
在 Linux 公网、云服务器搭建 K8s 集群
Comments | 0条评论