基于腾讯云轻量云服务器搭建k8s集群
前言
Kubernetes,也被称为K8s,是一个开源平台,用于自动化容器的部署、扩展和管理。它源于Google,现被各类中大厂与云平台广泛使用。 后续所有项目的分享与改造均部署在Kubernetes集群上,故现在提供简单的部署教程,方便大家实践学习与交流。
服务器配置
- 腾讯云轻量云服务器
- 操作系统:Ubuntu Server 24.04 LTS 64bit
- 规格:2c 2G
- 数量:3(像平时做简单项目练习,1个也足够了)
- 位置:香港(推荐,如果是大陆的服务器可能会造成镜像拉不下来,被墙)
开启root登录
腾讯轻量服务器安装ubuntu后,系统的默认用户名是 ubuntu,并在安装过程中默认不设置 root 帐户和密码。 想要设置中开启允许 root 用户登录。具体操作步骤如下:
- 使用 ubuntu 帐户登录。
- 执行以下命令,设置 root 密码
▼js复制代码sudo passwd root
- 执行以下命令,打开 sshd_config 配置文件
▼text复制代码sudo vi /etc/ssh/sshd_config
-
找到#Authentication, 将 PermitRootLogin 参数修改为 yes,如果 PermitRootLogin 参数被注释,请去掉首行的注释符号(#)
-
依旧在 #Authentication, 将 PasswordAuthentication 参数修改为 yes,若 sshd_config 配置文件中无此配置项,则添加 PasswordAuthentication yes 项即可
-
保存/etc/ssh/sshd_config退出后,执行以下命令,重启 ssh 服务
▼js复制代码sudo service ssh restart
安装
设置 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 集群拉取所需的镜像。成功执行此命令后,我们将得到如下所示的输出。
在上面的输出中,我们将获得一系列命令。例如:如何与 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
在控制台开放端口
然后在浏览器:ip:port验证,至此,集群部署结束~


