Linux 系统安装部署 Kubernetes 教程

刘小猪 发布于 阅读:1 教程

Linux 系统安装部署 Kubernetes 教程

本教程基于 Ubuntu / Debian / CentOS 等常见 Linux 发行版,介绍如何使用 kubeadm 快速部署一个 Kubernetes 集群。默认以 Ubuntu 22.04 / 24.04 为例,CentOS 也可参考相同流程。

一、环境准备

1. 节点规划

建议至少准备 3 台服务器:

示例 IP:

2. 硬件要求

3. 主机名与 hosts 配置

在所有节点执行:

hostnamectl set-hostname k8s-master

worker 节点分别设置为:

hostnamectl set-hostname k8s-worker-1
hostnamectl set-hostname k8s-worker-2

编辑 hosts:

vim /etc/hosts

添加:

192.168.1.10 k8s-master
192.168.1.11 k8s-worker-1
192.168.1.12 k8s-worker-2

二、所有节点执行基础配置

以下操作需要在每台服务器上执行,包括 Master 和 Worker。

1. 更新系统

Ubuntu:

apt update
apt upgrade -y

CentOS:

yum update -y

2. 关闭 swap

临时关闭:

swapoff -a

永久关闭:

sed -i '/ swap / s/^\(.*\)$/\#\1/g' /etc/fstab

检查:

free -h

如果 Swap 显示 0,说明关闭成功。

3. 关闭防火墙

生产环境建议精细放行端口,测试环境可直接关闭。

Ubuntu:

systemctl disable --now ufw

CentOS:

systemctl stop firewalld
systemctl disable firewalld

4. 时间同步

安装 chrony:

apt install -y chrony

启动:

systemctl enable --now chrony

检查时间同步:

chronyc sources

三、配置内核模块

Kubernetes 需要加载 overlay 和 br_netfilter 模块。

创建配置文件:

vim /etc/modules-load.d/k8s.conf

内容:

overlay
br_netfilter

加载模块:

modprobe overlay
modprobe br_netfilter

检查模块:

lsmod | grep overlay
lsmod | grep br_netfilter

四、配置 sysctl 网络参数

创建配置文件:

vim /etc/sysctl.d/k8s.conf

内容:

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

生效配置:

sysctl --system

检查:

sysctl net.bridge.bridge-nf-call-iptables
sysctl net.ipv4.ip_forward

五、安装 containerd

Kubernetes 推荐使用 containerd 作为容器运行时。

1. 安装依赖

Ubuntu:

apt update
apt install -y ca-certificates curl gnupg

2. 添加 Docker 仓库

因为 containerd 通常可以通过 Docker 仓库安装。

创建 keyring 目录:

install -m 0755 -d /etc/apt/keyrings

导入 GPG Key:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

设置权限:

chmod a+r /etc/apt/keyrings/docker.gpg

添加仓库:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list

3. 安装 containerd

更新仓库:

apt update

安装:

apt install -y containerd.io

4. 配置 containerd

生成默认配置:

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

修改 SystemdCgroup:

sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

检查:

grep SystemdCgroup /etc/containerd/config.toml

输出应类似:

SystemdCgroup = true

5. 启动 containerd

systemctl enable --now containerd

检查状态:

systemctl status containerd

六、安装 crictl

crictl 是 Kubernetes CRI 接口调试工具。

下载:

VERSION="v1.28.0"
curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz -o crictl.tar.gz

解压:

tar zxvf crictl.tar.gz -C /usr/local/bin

配置 crictl:

vim /etc/crictl.yaml

内容:

runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 2

七、安装 kubeadm、kubelet、kubectl

1. 添加 Kubernetes 仓库

Ubuntu 可执行:

apt-get update
apt-get install -y apt-transport-https ca-certificates curl gpg

下载 Kubernetes GPG Key:

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

添加 apt 源:

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /" > /etc/apt/sources.list.d/kubernetes.list

2. 安装组件

更新:

apt-get update

安装:

apt-get install -y kubelet kubeadm kubectl

3. 锁定版本

防止 Kubernetes 组件被意外升级:

apt-mark hold kubelet kubeadm kubectl

4. 启动 kubelet

systemctl enable --now kubelet

八、初始化 Master 节点

以下操作只在 Master 节点执行。

1. 查看镜像仓库

如果需要指定镜像源,可以查看默认镜像:

kubeadm config images list

如果国内网络访问 Kubernetes 镜像较慢,可考虑使用国内镜像仓库,或者提前使用 docker 或 containerd 拉取并重打标签。

2. 初始化集群

执行:

kubeadm init --pod-network-cidr=10.244.0.0/16

如果希望指定 CNI 为 Calico,常见 CIDR 可写:

kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.1.10

这里 192.168.1.10 为 Master 节点 IP。

3. 配置 kubectl

初始化成功后,按提示执行:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

验证:

kubectl get nodes

4. 保存 join 命令

初始化完成后,终端会输出类似命令:

kubeadm join 192.168.1.10:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

请妥善保存,后续 Worker 节点加入需要用到。

如果忘记,可重新生成:

kubeadm token create --print-join-command

九、安装网络插件 Calico

Kubernetes 必须安装 CNI 网络插件,否则节点状态会显示 NotReady。

1. 下载 Calico Manifest

curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml -o calico.yaml

如果你初始化时使用了:

kubeadm init --pod-network-cidr=192.168.0.0/16

则 Calico 默认 IP Pool 可能可用。如果初始化使用的是 10.244.0.0/16,可以修改 calico.yaml 中的 CALICO_IPV4POOL_CIDR。

搜索:

vim calico.yaml

找到类似:

- name: CALICO_IPV4POOL_CIDR
  value: 192.168.0.0/16

改为:

- name: CALICO_IPV4POOL_CIDR
  value: 10.244.0.0/16

2. 安装 Calico

kubectl apply -f calico.yaml

3. 查看网络插件 Pod

kubectl get pods -n kube-system

等待 Calico Pod 状态变为 Running。

4. 查看节点状态

kubectl get nodes

正常应显示:

STATUS  Ready

十、Worker 节点加入集群

在每台 Worker 节点上执行 Master 初始化时输出的 join 命令。

示例:

kubeadm join 192.168.1.10:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

加入成功后,在 Master 查看:

kubectl get nodes

应能看到所有节点。


十一、部署 Nginx 测试应用

创建一个 Deployment:

kubectl create deployment nginx --image=nginx:alpine --replicas=2

暴露端口:

kubectl expose deployment nginx --port=80 --type=NodePort

查看服务:

kubectl get svc

输出示例:

NAME    TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.96.0.123   <none>        80:31234/TCP   10s

浏览器访问:

http://192.168.1.11:31234

或任意节点 IP + NodePort。


十二、常用 kubectl 命令

1. 查看节点

kubectl get nodes -o wide

2. 查看所有 Pod

kubectl get pods -A

3. 查看命名空间

kubectl get namespaces

4. 查看 Deployment

kubectl get deploy -n default

5. 查看服务

kubectl get svc -n default

6. 进入 Pod

kubectl exec -it nginx-pod-name -- sh

7. 查看 Pod 日志

kubectl logs nginx-pod-name

十三、集群常见问题

1. 节点长期 NotReady

常见原因是未安装 CNI 网络插件,或 CNI 的 Pod CIDR 与 kubeadm init 时配置不一致。

检查:

kubectl get nodes

查看 kube-system Pod:

kubectl get pods -n kube-system

如果 Calico Pod 不 Running,查看日志:

kubectl logs -n kube-system calico-node-xxxxx

2. kubeadm init 失败

可重置:

kubeadm reset -f

清理网络:

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
rm -rf /etc/cni/net.d

重新初始化:

kubeadm init --pod-network-cidr=192.168.0.0/16

3. containerd 拉取镜像失败

如果需要使用镜像加速器,可修改 containerd 配置。

vim /etc/containerd/config.toml

确认:

SystemdCgroup = true

重启 containerd:

systemctl restart containerd

查看 runtime:

crictl info

十四、总结

部署 Kubernetes 的核心步骤可以归纳为:

  1. 所有节点配置主机名、hosts、时间同步、关闭 swap。
  2. 配置内核模块和 sysctl 网络参数。
  3. 安装并配置 containerd 和 crictl。
  4. 安装 kubeadm、kubelet、kubectl。
  5. 使用 kubeadm init 初始化 Master。
  6. 配置 kubectl。
  7. 安装 Calico 或其他 CNI 网络插件。
  8. Worker 节点通过 kubeadm join 加入集群。
  9. 使用 Deployment 和 Service 验证集群可用性。

至此,一个基础的 Linux Kubernetes 集群就部署完成了。生产环境中还需要根据实际需求考虑高可用控制平面、证书备份、日志监控、存储方案、RBAC 权限、网络策略以及私有镜像仓库等配置。

k8s Kubernetes Linux 云原生 教程