基于腾讯云轻量云服务器搭建k8s集群

前言

Kubernetes,也被称为K8s,是一个开源平台,用于自动化容器的部署、扩展和管理。它源于Google,现被各类中大厂与云平台广泛使用。 后续所有项目的分享与改造均部署在Kubernetes集群上,故现在提供简单的部署教程,方便大家实践学习与交流。

服务器配置

  1. 腾讯云轻量云服务器
  2. 操作系统:Ubuntu Server 24.04 LTS 64bit
  3. 规格:2c 2G
  4. 数量:3(像平时做简单项目练习,1个也足够了)
  5. 位置:香港(推荐,如果是大陆的服务器可能会造成镜像拉不下来,被墙)

开启root登录

腾讯轻量服务器安装ubuntu后,系统的默认用户名是 ubuntu,并在安装过程中默认不设置 root 帐户和密码。 想要设置中开启允许 root 用户登录。具体操作步骤如下:

  1. 使用 ubuntu 帐户登录。
  2. 执行以下命令,设置 root 密码
js
复制代码
sudo passwd root
  1. 执行以下命令,打开 sshd_config 配置文件
text
复制代码
sudo vi /etc/ssh/sshd_config
  1. 找到#Authentication, 将 PermitRootLogin 参数修改为 yes,如果 PermitRootLogin 参数被注释,请去掉首行的注释符号(#)

  2. 依旧在 #Authentication, 将 PasswordAuthentication 参数修改为 yes,若 sshd_config 配置文件中无此配置项,则添加 PasswordAuthentication yes 项即可

  3. 保存/etc/ssh/sshd_config退出后,执行以下命令,重启 ssh 服务

js
复制代码
sudo service ssh restart
undefined

安装

设置 Host Name 更新 hosts 文件

登录到各个主机,并使用 hostnamectl 命令设置它们各自的主机名。

js
复制代码
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

禁用 swap,加载内核模块

在每个实例上运行以下命令来禁用交换空间,这样 Kubernetes 集群才能顺利工作。

js
复制代码
sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

使用 modprobe 命令加载以下内核模块。

js
复制代码
sudo modprobe overlay sudo modprobe br_netfilter

要永久加载这些模块,请创建包含以下内容的文件。

js
复制代码
sudo tee /etc/modules-load.d/k8s.conf <<EOF overlay br_netfilter EOF

添加像 IP 转发这样的内核参数。创建一个文件,并使用 sysctl 命令加载参数。

js
复制代码
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

运行以下命令,加载上述内核参数。

js
复制代码
sudo sysctl --system

安装配置 Containerd

Containerd 为 Kubernetes 提供了容器运行时,在所有三个实例上安装 containerd 首先,安装容器依赖项

js
复制代码
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

接下来,使用以下命令添加 containerd 存储库。

js
复制代码
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

js
复制代码
sudo apt update && sudo apt install containerd.io -y

接下来,配置 containerd,使其开始使用 SystemdCgroup 运行下面的命令。

js
复制代码
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 使用正确的 pause 镜像

js
复制代码
sudo sed -i 's|registry.k8s.io/pause:3.8|registry.aliyuncs.com/google_containers/pause:3.9|g' /etc/containerd/config.toml

重新启动 containerd 服务,使上述更改生效。

js
复制代码
sudo systemctl restart containerd

添加 Kubernetes Package Repository

Kubernetes 软件包在 Ubuntu 24.04 的默认包存储库中不可用,所以要先添加它的存储库。在每个实例上运行这些步骤。 使用 curl 命令下载 Kubernetes 包存储库的公共签名密钥。

js
复制代码
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/k8s.gpg

接下来,通过运行以下命令添加 Kubernetes 存储库。

js
复制代码
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

安装 Kubernetes 部件 (Kubeadm, kubelet & kubectl)

js
复制代码
sudo apt update sudo apt install kubelet kubeadm kubectl -y

安装 Kubernetes

所有的先决条件都满足了,我们可以开始安装 Kubernetes 了。

在 master 节点上执行 Kubeadm 命令,仅用于初始化 Kubernetes 集群。

js
复制代码
sudo kubeadm init --pod-network-cidr=192.168.0.0/16

该命令将为 Kubernetes 集群拉取所需的镜像。成功执行此命令后,我们将得到如下所示的输出。

image.png

在上面的输出中,我们将获得一系列命令。例如:如何与 kubernetes 群集互动,如何添加 worker 节点到此群集。 在 master 节点上运行以下命令。

js
复制代码
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 节点上运行它(当然如果你是单节点,那就没必要了)。

js
复制代码
kubeadm join k8s-master-noble:6443 --token qim97y.l0elbuslud7v4yex \ --discovery-token-ca-cert-hash sha256:b3142f33f7cda9a25cfba0c1ab630e2dfbe724887160493edb6d40df014f94df \ --control-plane

运行 kubectl get nodes 命令来验证 worker 节点的状态。

js
复制代码
root@k8s-master-noble:~# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master-noble NotReady control-plane 3m27s v1.30.9

输出确认 worker 节点已加入集群,但状态为 NotReady。我们需要在这个集群上安装 Network Add-on Plugin,例如:calico。

安装 Calico Network Add-on Plugin

安装 Tigera Calico 操作员和自定义资源定义。

js
复制代码
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/tigera-operator.yaml

通过创建必要的自定义资源来安装 Calico

js
复制代码
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/custom-resources.yaml

使用以下命令确认所有 pod 都在运行。

js
复制代码
kubectl get pods -n calico-system k8s-master-noble: Sun Feb 9 18:17:15 2025 NAME READY STATUS RESTARTS AGE calico-kube-controllers-7bcb4d87c9-2mb2s 1/1 Running 0 11m calico-node-7wc66 1/1 Running 0 11m calico-typha-7bfcc9fcc6-t92tw 1/1 Running 0 11m csi-node-driver-rrwlj 2/2 Running 0 11m

删除控制平面上的污点,以便您可以在其上调度 pod

js
复制代码
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

运行 kubectl get nodes 命令来验证 worker 节点的状态

js
复制代码
root@VM-4-7-ubuntu:~# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master-noble Ready control-plane 3m48s v1.30.9

ready,表面集群已经拉起

测试 Kubernetes Installation

为了测试 Kubernetes 安装,我们将创建基于 nginx 的部署,副本计数为 1在 master 节点上执行下面的kubectl 命令。

js
复制代码
kubectl create ns demo-app kubectl create deployment nginx-app --image nginx --replicas 1--namespace demo-app kubectl get deployment -n demo-app kubectl get pods -n demo-app root@VM-4-7-ubuntu:~# kubectl get pods -n demo-app NAME READY STATUS RESTARTS AGE nginx-app-69999bf9b8-txj9h 1/1 Running 0 14s

接下来,使用 NodePort 类型公开此部署,运行如下命令

js
复制代码
kubectl expose deployment nginx-app -n demo-app --type NodePort --port 80 kubectl get svc -n demo-app NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-app NodePort 10.104.112.105 <none> 80:32556/TCP 0s

在控制台开放端口

image.png

然后在浏览器:ip:port验证,至此,集群部署结束~

image.png
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP