如何在具有 1 个 Master 节点和 1 个或多个 Worker 节点的单台服务器上安装 Kubernetes?
我想在一台服务器上安装 Kubernetes 集群。服务器很重。
以下是服务器信息。
我无法安装单节点集群,因为这不是要求。
花了整整一周时间并尝试了互联网上提供的不同指南后,我终于在我的服务器上安装了 Kubernetes 集群。
以下是我遵循的步骤,这些步骤对我有用。
操作系统:Ubuntu 22.04
VM-1(主节点)
内存:16 GB
处理器:8 个 vcpu
硬盘:50GB
VM-2(工作节点)
内存:16 GB
处理器:8 个 vcpu
硬盘:100GB
您可以使用这样的较低配置,RAM:4GB,CPU:4,HD:25GB。
$ sudo hostnamectl set-hostname“主节点”
$ 执行bash
$ sudo hostnamectl set-hostname“worker-node1”
$ 执行bash
获取您的Master节点和Worker节点的IP地址。使用此命令获取 IP 地址“$ ip addr show”
在我的例子中,工作节点 IP 地址是 192.168.54.22
转到 /etc/hosts 并在文件末尾添加 2 个条目,如下所示
192.168.54.21大师
192.168.54.22工人
转到主节点的终端并像这样 ping 工作节点
$ ping 工人
您应该能够得到如下回复。
在下图中,忽略 ip 地址。我有多个虚拟机正在运行。该图片只是一个示例,向您展示工作节点的响应。
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
设置所需的 sysctl 参数,参数在重新启动后仍然存在
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
应用 sysctl 参数而不重新启动
sudo sysctl --system
通过运行以下命令验证 br_netfilter、overlay 模块是否已加载:
lsmod | grep br_netfilter
lsmod | grep overlay
通过运行以下命令,验证 sysctl 配置中的 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量是否设置为 1 :
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
curl -LO https://github.com/containerd/containerd/releases/download/v1.7.14/containerd-1.7.14-linux-amd64.tar.gz
sudo tar Cxzvf /usr/local containerd-1.7.14-linux-amd64.tar.gz
curl -LO https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
sudo mkdir -p /usr/local/lib/systemd/system/
sudo mv containerd.service /usr/local/lib/systemd/system/
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
sudo systemctl daemon-reload
sudo systemctl enable --now containerd
systemctl status containerd
curl -LO https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64
sudo install -m 755 runc.amd64 /usr/local/sbin/runc
curl -LO https://github.com/containernetworking/plugins/releases/download/v1.5.0/cni-plugins-linux-amd64-v1.5.0.tgz
sudo mkdir -p /opt/cni/bin
sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.5.0.tgz
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl enable --now kubelet
kubeadm version
kubelet --version
kubectl version --client
sudo crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
在工作节点上执行上述所有步骤。
我们将使用 Flannel 进行 Pod 网络。
--pod-network-cidr=10.244.0.0/16
选项是 Flannel 的必需项。不要更改该网络地址!
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
执行上述命令后,您将得到
kubeadm-join
命令。您将在工作节点上执行此命令,以便工作人员可以加入主节点。复制整个 kubeadm join
令牌并保存。
You can now join any number of machines by running the following on each node as root:
kubeadm join --token <token> <IP>:6443
集群初始化完成后,请执行以下命令
sudo cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf
kubectl apply -f https://github.com/coreos/flannel/raw/master/Documentation/kube-flannel.yml
此时,请稍等一下,查看集群的状态。运行 kubectl get pods --all-namespaces 并查看它返回的内容。如果一切都显示正在运行,那么您就可以开始营业了!
如果忘记复制命令,可以在master节点执行以下命令重新生成加入命令
**kubeadm token create --print-join-command**
希望以上步骤能够帮助您快速在机器上搭建 Kubernetes 集群。