确保每个节点上 MAC 地址和 product_uuid 的唯一性
# 查MAC
ip link
# 查product_uuid
sudo cat /sys/class/dmi/id/product_uuid
允许 iptables 检查桥接流量
# 确保 br_netfilter 模块被加载
lsmod | grep br_netfilter
# 显式加载该模块
sudo modprobe br_netfilter
# 配置br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 应用配置
sudo sysctl --system
检查所需端口
- 控制平面节点
| 协议 | 方向 | 端口范围 | 作用 | 使用者 |
|---|---|---|---|---|
| TCP | 入站 | 6443 | Kubernetes API | 服务器 |
| TCP | 入站 | 2379-2380 | etcd | 服务器客户端 API |
| TCP | 入站 | 10250 | Kubelet API | kubelet |
| TCP | 入站 | 10251 | kube-scheduler | kube-scheduler |
| TCP | 入站 | 10252 | kube-controller-manager | kube-controller-manager |
- 工作节点
| 协议 | 方向 | 端口范围 | 作用 | 使用者 |
|---|---|---|---|---|
| TCP | 入站 | 10250 | Kubelet API | kubelet |
| TCP | 入站 | 30000-32767 | NodePort 服务† | 所有组件 |
# 查看防火墙端口
sudo ufw status
# 开发端口
sudo ufw allow proto tcp from any to any port 6443,2379:2380,10250,10251,10252,30000:32767
安装 kubeadm、kubelet 和 kubectl
# 安装前置软件
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 下载 Google Cloud 公开签名秘钥
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
# 添加 Kubernetes apt 仓库
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
初始化Kubernetes
# 初始化并打开CoreDNS
kubeadm init
# 设置配置文件
export KUBECONFIG=/etc/kubernetes/admin.conf
# "/<当前用户>/.profile"文件添加
export KUBECONFIG=/etc/kubernetes/admin.conf
重置Kubernetes(卸载或重新初始化时执行)
kubeadm reset
使master能部署pod(单机部署)
kubectl taint nodes --all node-role.kubernetes.io/master-
可能的问题
# 查询node状态
kubectl get nodes
# 当Node NotReady时,使用下面命令查询详细
kubectl describe nodes
# 当异常为缺少cni时,在下面网址下载最新版本
https://github.com/containernetworking/plugins/releases
# 创建文件夹
mkdir ./cni
# 解压
cd ./cni
tar -zxvf ../cni-plugins-linux-arm64-v0.9.1.tgz
# 复制到系统路径
cd ..
mkdir -p /opt/cni/bin/
cp -r ./cni/* /opt/cni/bin/
# 配置
mkdir -p /etc/cni/net.d
cat >/etc/cni/net.d/10-mynet.conf <<EOF
{
"cniVersion": "0.2.0",
"name": "mynet",
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "10.22.0.0/16",
"routes": [
{ "dst": "0.0.0.0/0" }
]
}
}
EOF
cat >/etc/cni/net.d/99-loopback.conf <<EOF
{
"cniVersion": "0.2.0",
"name": "lo",
"type": "loopback"
}
EOF
# 重启服务
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
参考资料
博客介绍了Kubernetes安装与初始化的相关内容,包括确保节点MAC地址和product_uuid唯一性、允许iptables检查桥接流量、检查所需端口等前期准备,还涉及控制平面节点和工作节点操作,以及kubeadm、kubelet和kubectl的安装、Kubernetes初始化与重置等,同时提及可能问题和参考资料。
612

被折叠的 条评论
为什么被折叠?



