Kubernetes 是一个免费的开源容器编排工具,它允许基于容器的应用程序的自动化部署、扩展和管理。
我们将介绍如何使用 Kubeadm 逐步在 Ubuntu 24.04 上安装 Kubernetes
此次演示中,我们将使用以下三个 Ubuntu 24.04 实例
- Instance 1 : Master Node (k8s-master-noble 192.168.1.120)
- Instance 2 : Worker Node (k8s-worker01-noble 192.168.1.121)
- Instance 3 : Worker Node (k8s-worker02-noble 192.168.1.122)
1) 设置 Host Name 更新 hosts 文件
登录到各个主机,并使用 hostnamectl 命令设置它们各自的主机名。
$ sudo hostnamectl set-hostname "k8s-master-noble" // Master Node
$ sudo hostnamectl set-hostname "k8s-worker01-noble" // Worker Node 1
$ sudo hostnamectl set-hostname "k8s-worker02-noble" // Worker Node 2
将以下行添加到每个实例上的 /etc/hosts 文件中。
192.168.1.120 k8s-master-noble
192.168.1.121 k8s-worker01-noble
192.168.1.122 k8s-worker02-noble
2) 禁用 swap,加载内核模块
在每个实例上运行以下命令来禁用交换空间,这样 Kubernetes 集群才能顺利工作。
$ sudo swapoff -a
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
使用 modprobe 命令加载以下内核模块。
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
要永久加载这些模块,请创建包含以下内容的文件。
$ sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
接下来,添加像 IP 转发这样的内核参数。创建一个文件,并使用 sysctl 命令加载参数。
$ sudo tee /etc/sysctl.d/kubernetes.conf <<EOT
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOT
运行以下命令,加载上述内核参数。
$ sudo sysctl --system
3) 安装配置 Containerd
Containerd 为 Kubernetes 提供了容器运行时,在所有三个实例上安装 containerd
首先,安装容器依赖项
$ sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
接下来,使用以下命令添加 containerd 存储库。
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/containerd.gpg
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
现在,使用以下 apt 命令安装 containerd
$ sudo apt update && sudo apt install containerd.io -y
接下来,配置 containerd,使其开始使用 SystemdCgroup 运行下面的命令。
$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
$ sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
重新启动 containerd 服务,使上述更改生效。
$ sudo systemctl restart containerd
4) 添加 Kubernetes Package Repository
Kubernetes 软件包在 Ubuntu 24.04 的默认包存储库中不可用,所以要先添加它的存储库。在每个实例上运行这些步骤。
注意: 在撰写本文时,Kubernetes 的最新版本是 1.30 所以你可以根据自己的需求选择版本。
使用 curl 命令下载 Kubernetes 包存储库的公共签名密钥。
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/k8s.gpg
接下来,通过运行以下命令添加 Kubernetes 存储库。
$ echo 'deb [signed-by=/etc/apt/keyrings/k8s.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/k8s.list
5) 安装 Kubernetes 部件 (Kubeadm, kubelet & kubectl)
安装 Kubernetes 组件,在所有实例上运行以下 apt 命令。
$ sudo apt update
$ sudo apt install kubelet kubeadm kubectl -y
6) 安装 Kubernetes
所有的先决条件都满足了,我们可以开始安装 Kubernetes 了。
在 master 节点上执行 Kubeadm 命令,仅用于初始化 Kubernetes 集群。
$ sudo kubeadm init --control-plane-endpoint=k8s-master-noble
该命令将为 Kubernetes 集群拉取所需的镜像。成功执行此命令后,我们将得到如下所示的输出。
在上面的输出中,我们将获得一系列命令。例如:如何与 kubernetes 群集互动,如何添加 worker 节点到此群集。
在 master 节点上运行以下命令。
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
接下来,从输出中复制命令以连接 woker 节点,在两个 woker 节点上运行它。
$ sudo kubeadm join k8s-master-noble:6443 --token p3sdpk.zn0s060af0089ioa \
--discovery-token-ca-cert-hash sha256:afa3d90b6cd8c5889fca12ea3e9b50659b933ab6c808e2906fd63bde5e695bfd
第一个 worker 节点的输出
第二个 worker 节点的输出
Now head back to the master node and run kubectl get nodes command to verify the status of worker nodes.
回到 master 节点,运行 kubectl get nodes 命令来验证 worker 节点的状态。
$ kubectl get nodes
输出确认 worker 节点已加入集群,但状态为 NotReady。我们需要在这个集群上安装 Network Add-on Plugin,例如:calico。
7) 安装 Calico Network Add-on Plugin
仅在 master 节点上运行如下的命令
$ kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
calico 安装成功后,节点状态会在 1 ~ 2 分钟后变为 Ready
$ kubectl get pods -n kube-system
$ kubectl get nodes
上面的输出确认所有节点处于 Ready 状态。
8) 测试 Kubernetes Installation
为了测试 Kubernetes 安装,我们将创建基于 nginx 的部署,副本计数为 2,在 master 节点上执行下面的kubectl 命令。
$ kubectl create ns demo-app
$ kubectl create deployment nginx-app --image nginx --replicas 2 --namespace demo-app
$ kubectl get deployment -n demo-app
$ kubectl get pods -n demo-app
接下来,使用 NodePort 类型公开此部署,运行如下命令
$ kubectl expose deployment nginx-app -n demo-app --type NodePort --port 80
$ kubectl get svc -n demo-app
现在,尝试使用 nodeport 访问您的应用程序,如下所示
$ curl http://<Any-worker-IP>:30336
很好,我们可以使用 nodeport 在Kubernetes 集群之外访问基于 nginx 的应用程序,这确认 Kubernetes 安装成功。
我的开源项目
- course-tencent-cloud(酷瓜云课堂 - gitee仓库)
- course-tencent-cloud(酷瓜云课堂 - github仓库)