Kubernetes 1.20 集群部署完整教程

文章目录

  • [Kubernetes 1.20 集群部署完整教程](#Kubernetes 1.20 集群部署完整教程)
    • 前言
    • 一、环境说明
      • [1.1 节点配置清单](#1.1 节点配置清单)
      • [1.2 前置要求](#1.2 前置要求)
    • 二、所有节点环境初始化(必做)
      • [2.1 关闭防火墙(避免端口拦截)](#2.1 关闭防火墙(避免端口拦截))
      • [2.2 关闭 SELinux(避免权限限制)](#2.2 关闭 SELinux(避免权限限制))
      • [2.3 清空 iptables 规则(避免规则冲突)](#2.3 清空 iptables 规则(避免规则冲突))
      • [2.4 禁用 Swap 分区(K8s 核心要求)](#2.4 禁用 Swap 分区(K8s 核心要求))
      • [2.5 加载 ip_vs 模块(优化 K8s 服务调度)](#2.5 加载 ip_vs 模块(优化 K8s 服务调度))
      • [2.6 修改主机名(按节点角色执行)](#2.6 修改主机名(按节点角色执行))
        • [Master 节点(192.168.10.19)](#Master 节点(192.168.10.19))
        • [Node01 节点(192.168.10.20)](#Node01 节点(192.168.10.20))
        • [Node02 节点(192.168.10.21)](#Node02 节点(192.168.10.21))
      • [2.7 配置 hosts 文件(节点间域名解析)](#2.7 配置 hosts 文件(节点间域名解析))
      • [2.8 调整内核参数(适配 K8s 网络要求)](#2.8 调整内核参数(适配 K8s 网络要求))
    • [三、所有节点安装 Docker](#三、所有节点安装 Docker)
      • [3.1 安装 Docker 依赖包](#3.1 安装 Docker 依赖包)
      • [3.2 配置 Docker 阿里云 YUM 源(加速安装)](#3.2 配置 Docker 阿里云 YUM 源(加速安装))
      • [3.3 安装 Docker CE 版本](#3.3 安装 Docker CE 版本)
      • [3.4 配置 Docker 优化参数](#3.4 配置 Docker 优化参数)
      • [3.5 启动 Docker 并设置开机自启](#3.5 启动 Docker 并设置开机自启)
    • [四、所有节点安装 kubeadm、kubelet、kubectl](#四、所有节点安装 kubeadm、kubelet、kubectl)
      • [4.1 配置 K8s 阿里云 YUM 源](#4.1 配置 K8s 阿里云 YUM 源)
      • [4.2 安装指定版本(1.20.11)](#4.2 安装指定版本(1.20.11))
      • [4.3 设置 kubelet 开机自启](#4.3 设置 kubelet 开机自启)
    • [五、部署 K8s Master 节点(仅在 master01 执行)](#五、部署 K8s Master 节点(仅在 master01 执行))
      • [5.1 准备 K8s 镜像(本地加载,避免网络拉取失败)](#5.1 准备 K8s 镜像(本地加载,避免网络拉取失败))
      • [5.2 复制镜像到 Node 节点(避免重复上传)](#5.2 复制镜像到 Node 节点(避免重复上传))
      • [5.3 初始化 kubeadm(基于配置文件,方法一)](#5.3 初始化 kubeadm(基于配置文件,方法一))
        • [5.3.1 生成默认配置文件](#5.3.1 生成默认配置文件)
        • [5.3.2 修改配置文件(关键参数调整)](#5.3.2 修改配置文件(关键参数调整))
        • [5.3.3 执行初始化](#5.3.3 执行初始化)
      • [5.4 配置 kubectl 命令行工具](#5.4 配置 kubectl 命令行工具)
      • [5.5 修复集群不健康问题(可选)](#5.5 修复集群不健康问题(可选))
    • [六、部署 Flannel 网络插件(所有节点执行)](#六、部署 Flannel 网络插件(所有节点执行))
      • [6.1 加载 Flannel 本地镜像(所有节点)](#6.1 加载 Flannel 本地镜像(所有节点))
      • [6.2 在 Master 节点创建 Flannel 资源](#6.2 在 Master 节点创建 Flannel 资源)
    • [七、Node 节点加入集群(仅在 node01、node02 执行)](#七、Node 节点加入集群(仅在 node01、node02 执行))
      • [7.1 执行 join 命令(从 Master 日志获取)](#7.1 执行 join 命令(从 Master 日志获取))
      • [7.2 验证节点状态(Master 节点执行)](#7.2 验证节点状态(Master 节点执行))
    • [八、集群功能测试(Master 节点执行)](#八、集群功能测试(Master 节点执行))
      • [8.1 创建 Nginx 部署](#8.1 创建 Nginx 部署)
      • [8.2 暴露 NodePort 服务(外部访问)](#8.2 暴露 NodePort 服务(外部访问))
      • [8.3 扩展副本数(测试调度功能)](#8.3 扩展副本数(测试调度功能))
      • [8.4 测试访问](#8.4 测试访问)
    • [九、部署 Kubernetes Dashboard(Master 节点执行)](#九、部署 Kubernetes Dashboard(Master 节点执行))
      • [9.1 准备配置文件并修改](#9.1 准备配置文件并修改)
      • [9.2 部署 Dashboard](#9.2 部署 Dashboard)
      • [9.3 创建管理员账号并绑定权限](#9.3 创建管理员账号并绑定权限)
      • [9.4 访问 Dashboard](#9.4 访问 Dashboard)
    • 十、内核参数优化(可选,所有节点执行)
    • 十一、总结

Kubernetes 1.20 集群部署完整教程

前言

本文专注于通过 kubeadm 工具快速部署 Kubernetes 1.20 版本集群,全程采用「方法一」(本地镜像+配置文件部署),规避网络依赖问题。集群包含 1 个 Master 控制节点、2 个 Worker 工作节点,搭配 Flannel 网络插件实现 Pod 通信,以及 Dashboard 可视化管理界面,适用于测试环境或企业内网搭建。所有命令均附带详细注释,步骤清晰易懂,新手也能顺利完成部署~

一、环境说明

1.1 节点配置清单

节点角色 主机名 IP地址 硬件配置 所需组件
Master 控制节点 master01 192.168.10.19 2C/4G(CPU核心数≥2) docker、kubeadm、kubelet、kubectl、flannel
Worker 工作节点 node01 192.168.10.20 2C/2G docker、kubeadm、kubelet、kubectl、flannel
Worker 工作节点 node02 192.168.10.21 2C/2G docker、kubeadm、kubelet、kubectl、flannel

1.2 前置要求

  • 操作系统:所有节点均为 CentOS 7.x(内核版本 ≥ 3.10)
  • 网络要求:节点之间网络互通,无防火墙拦截关键端口
  • 环境限制:禁用 Swap 分区(K8s 强制要求)
  • 提前准备安装包:
    • K8s 1.20.11 镜像压缩包:v1.20.11.zip
    • Flannel 镜像包:flannel.tar
    • Flannel 配置文件:kube-flannel.yml
    • Dashboard 配置文件:recommended.yaml

二、所有节点环境初始化(必做)

以下操作需在 master01、node01、node02 所有节点执行,确保集群环境一致性。

2.1 关闭防火墙(避免端口拦截)

bash 复制代码
# 停止防火墙服务(临时关闭)
systemctl stop firewalld
# 禁止防火墙开机自启(永久关闭)
systemctl disable firewalld

2.2 关闭 SELinux(避免权限限制)

bash 复制代码
# 临时关闭 SELinux(当前会话生效,无需重启)
setenforce 0
# 永久关闭 SELinux(修改配置文件,重启后生效)
sed -i 's/enforcing/disabled/' /etc/selinux/config

2.3 清空 iptables 规则(避免规则冲突)

bash 复制代码
# 清空filter表规则、nat表规则、mangle表规则,删除自定义链
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

2.4 禁用 Swap 分区(K8s 核心要求)

bash 复制代码
# 临时关闭 Swap 分区(当前会话生效)
swapoff -a
# 永久关闭 Swap 分区(注释 /etc/fstab 中 Swap 相关配置)
# & 符号代表上一次匹配的 Swap 配置行,用 # 注释
sed -ri 's/.*swap.*/#&/' /etc/fstab

2.5 加载 ip_vs 模块(优化 K8s 服务调度)

K8s 的 kube-proxy 支持 ipvs 模式,性能优于默认的 iptables 模式,提前加载相关模块:

bash 复制代码
# 遍历 ip_vs 相关模块文件,逐一加载
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do
  echo $i  # 输出当前加载的模块名称,方便排查
  # 检查模块是否存在,存在则加载(忽略错误输出)
  /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i
done

2.6 修改主机名(按节点角色执行)

Master 节点(192.168.10.19)
bash 复制代码
hostnamectl set-hostname master01  # 设置主机名为 master01
Node01 节点(192.168.10.20)
bash 复制代码
hostnamectl set-hostname node01  # 设置主机名为 node01
Node02 节点(192.168.10.21)
bash 复制代码
hostnamectl set-hostname node02  # 设置主机名为 node02

2.7 配置 hosts 文件(节点间域名解析)

bash 复制代码
# 编辑 /etc/hosts 文件,添加节点 IP 与主机名映射(无需 DNS 服务器)
vim /etc/hosts

添加以下内容并保存:

复制代码
192.168.10.19 master01
192.168.10.20 node01
192.168.10.21 node02

2.8 调整内核参数(适配 K8s 网络要求)

bash 复制代码
# 创建 K8s 专用内核参数配置文件
cat > /etc/sysctl.d/kubernetes.conf << EOF
# 开启网桥模式,允许网桥流量传递到 iptables 链(Pod 网络通信必需)
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
# 关闭 IPv6 协议(避免与 IPv4 冲突,简化网络配置)
net.ipv6.conf.all.disable_ipv6=1
# 开启 IPv4 转发(容器跨节点通信必需)
net.ipv4.ip_forward=1
EOF

# 立即生效内核参数(无需重启系统)
sysctl --system

三、所有节点安装 Docker

K8s 依赖 Docker 作为容器运行时,所有节点统一安装 Docker CE 版本。

3.1 安装 Docker 依赖包

bash 复制代码
# 安装 yum 工具、设备映射器、LVM2 等基础依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

3.2 配置 Docker 阿里云 YUM 源(加速安装)

bash 复制代码
# 添加阿里云 Docker 镜像源,替代官方源(国内访问更快)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.3 安装 Docker CE 版本

bash 复制代码
# 安装 Docker 核心组件(docker-ce 为 Docker 引擎,docker-ce-cli 为命令行工具)
yum install -y docker-ce docker-ce-cli containerd.io

3.4 配置 Docker 优化参数

bash 复制代码
# 创建 Docker 配置目录(默认可能不存在)
mkdir /etc/docker

# 编写 Docker 配置文件 daemon.json
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],  # 阿里云镜像加速器(加速镜像拉取)
  "exec-opts": ["native.cgroupdriver=systemd"],  # 与 K8s 统一 Cgroup 驱动(提升稳定性)
  "log-driver": "json-file",  # 日志存储格式(支持按大小轮转,方便管理)
  "log-opts": {
    "max-size": "100m"  # 单个日志文件最大 100M(避免磁盘被日志占满)
  }
}
EOF

# 若阿里云加速器不可用,替换为华为云加速器(取消以下注释并执行)
# cat > /etc/docker/daemon.json <<EOF
# {
#   "registry-mirrors": ["https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com"],
#   "exec-opts": ["native.cgroupdriver=systemd"],
#   "log-driver": "json-file",
#   "log-opts": {
#     "max-size": "100m"
#   }
# }
# EOF

3.5 启动 Docker 并设置开机自启

bash 复制代码
# 重新加载系统服务配置(使 Docker 配置生效)
systemctl daemon-reload
# 启动 Docker 服务
systemctl restart docker.service
# 设置 Docker 开机自启(确保服务器重启后自动运行)
systemctl enable docker.service

# 验证 Cgroup 驱动配置(输出 "Cgroup Driver: systemd" 则配置正确)
docker info | grep "Cgroup Driver"

四、所有节点安装 kubeadm、kubelet、kubectl

这三个是 K8s 核心组件:kubeadm 用于集群初始化,kubelet 是节点代理(管理 Pod 生命周期),kubectl 是集群命令行管理工具。

4.1 配置 K8s 阿里云 YUM 源

bash 复制代码
# 创建 K8s YUM 源配置文件
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes  # 仓库名称(自定义)
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64  # 阿里云镜像源(国内快速访问)
enabled=1  # 启用该仓库
gpgcheck=0  # 禁用 GPG 校验(加速安装,避免校验失败)
repo_gpgcheck=0  # 禁用仓库 GPG 校验
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg  # GPG 密钥地址(备用)
EOF

4.2 安装指定版本(1.20.11)

bash 复制代码
# 安装 1.20.11 版本(三个组件版本必须一致,避免兼容性问题)
yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11

4.3 设置 kubelet 开机自启

bash 复制代码
# K8s 组件(如 apiserver、etcd)均以 Pod 形式运行,kubelet 是节点核心代理,必须开机自启
systemctl enable kubelet.service

五、部署 K8s Master 节点(仅在 master01 执行)

Master 节点是集群控制中心,负责调度、管理整个集群,以下操作仅在 master01 节点执行。

5.1 准备 K8s 镜像(本地加载,避免网络拉取失败)

bash 复制代码
# 1. 上传提前下载的 v1.20.11.zip 镜像压缩包到 /opt 目录
# 2. 解压压缩包到 /opt/k8s 目录(统一存储 K8s 镜像)
unzip v1.20.11.zip -d /opt/k8s

# 3. 进入镜像目录,批量加载所有 K8s 镜像
cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do
  docker load -i $i  # 加载单个镜像文件(-i 指定输入文件)
done

5.2 复制镜像到 Node 节点(避免重复上传)

bash 复制代码
# 把 master 节点的 K8s 镜像目录复制到 node01 和 node02 节点(scp 远程复制)
scp -r /opt/k8s root@node01:/opt
scp -r /opt/k8s root@node02:/opt

# ########################## 重要 ##########################
# 需在 node01 和 node02 节点单独执行以下命令加载镜像:
# cd /opt/k8s/v1.20.11
# for i in $(ls *.tar); do docker load -i $i; done
# ##########################################################

5.3 初始化 kubeadm(基于配置文件,方法一)

5.3.1 生成默认配置文件
bash 复制代码
# 生成 kubeadm 默认配置文件到 /opt 目录(基于默认配置修改,更高效)
kubeadm config print init-defaults > /opt/kubeadm-config.yaml
5.3.2 修改配置文件(关键参数调整)
bash 复制代码
# 编辑配置文件,调整 Master IP、版本、网段等关键参数
vim /opt/kubeadm-config.yaml

按以下内容修改(重点关注标注行):

yaml 复制代码
11 localAPIEndpoint:
12   advertiseAddress: 192.168.10.19  # 改为 Master 节点 IP(192.168.10.19),用于集群内部通信
13   bindPort: 6443  # API Server 监听端口(默认 6443,无需修改)
...
34 kubernetesVersion: v1.20.11  # K8s 版本(必须与安装版本一致)
35 networking:
36   dnsDomain: cluster.local  # DNS 域名(默认,无需修改)
37   podSubnet: "10.244.0.0/16"  # Pod 网段(必须与 Flannel 默认网段一致,否则网络不通)
38   serviceSubnet: 10.96.0.0/16  # Service 网段(默认,无需修改)
39 scheduler: {}
# 在文件末尾添加以下内容(启用 kube-proxy ipvs 模式,提升服务调度性能)
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs  # 调度模式改为 ipvs(替代默认的 iptables,转发效率更高)
5.3.3 执行初始化
bash 复制代码
# 基于配置文件初始化 Master 节点,同时输出日志到 kubeadm-init.log(方便后续排查问题)
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log

# 参数说明:
# --config:指定初始化配置文件(/opt/kubeadm-config.yaml)
# --upload-certs:自动分发证书到 Node 节点(后续 Node 加入时无需手动复制证书)
# tee kubeadm-init.log:将输出日志保存到文件,同时在终端显示

5.4 配置 kubectl 命令行工具

bash 复制代码
# kubectl 需通过配置文件与 API Server 通信,加载管理员权限配置
# 1. 创建 kubectl 配置目录(普通用户和 root 用户均需该目录)
mkdir -p $HOME/.kube

# 2. 复制 Master 节点的管理员配置文件(/etc/kubernetes/admin.conf)到该目录
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# 3. 修改配置文件权限(普通用户执行,root 用户可跳过,避免权限不足)
chown $(id -u):$(id -g) $HOME/.kube/config

5.5 修复集群不健康问题(可选)

若执行 kubectl get cs 发现 kube-schedulerkube-controller-manager 状态为 Unhealthy,需修改以下配置:

bash 复制代码
# 编辑 kube-scheduler 配置文件
vim /etc/kubernetes/manifests/kube-scheduler.yaml

# 编辑 kube-controller-manager 配置文件
vim /etc/kubernetes/manifests/kube-controller-manager.yaml

两个文件均修改以下内容:

yaml 复制代码
# 1. 把 --bind-address=127.0.0.1 改为 Master 节点 IP(192.168.10.19)
--bind-address=192.168.10.19

# 2. 把 httpGet 字段下的 host 从 127.0.0.1 改为 Master 节点 IP(共两处,livenessProbe 和 readinessProbe)
livenessProbe:
  httpGet:
    host: 192.168.10.19
    path: /healthz
    port: 10259
readinessProbe:
  httpGet:
    host: 192.168.10.19
    path: /healthz
    port: 10259

# 3. 搜索 --port=0,注释掉这一行(允许组件对外提供服务)
# - --port=0

修改完成后重启 kubelet 生效:

bash 复制代码
systemctl restart kubelet

六、部署 Flannel 网络插件(所有节点执行)

Flannel 是容器网络插件,负责为 Pod 分配 IP 地址,实现跨节点 Pod 通信,必须在 Node 节点加入前部署。

6.1 加载 Flannel 本地镜像(所有节点)

bash 复制代码
# 1. 上传 flannel.tar 镜像包到所有节点的 /opt 目录
# 2. 加载 Flannel 镜像(所有节点均需加载,否则 Pod 启动失败)
cd /opt
docker load < flannel.tar

6.2 在 Master 节点创建 Flannel 资源

bash 复制代码
# 1. 上传 kube-flannel.yml 配置文件到 Master 节点的 /opt 目录
# 2. 应用配置文件,创建 Flannel 网络资源
kubectl apply -f kube-flannel.yml

# 验证 Flannel 状态(所有节点的 flannel Pod 均为 Running 则正常)
kubectl get pods -n kube-system | grep flannel

七、Node 节点加入集群(仅在 node01、node02 执行)

Node 节点是工作节点,负责运行实际的应用 Pod,以下操作在 node01 和 node02 节点分别执行。

7.1 执行 join 命令(从 Master 日志获取)

在 Master 节点执行 cat kubeadm-init.log,查找 kubeadm join 开头的命令(集群加入指令),复制到 node01 和 node02 节点执行:

bash 复制代码
# 示例命令(实际以自己的 kubeadm-init.log 日志为准,请勿直接复制!)
kubeadm join 192.168.10.19:6443 --token wfjo7j.baa0aheyw39w3m7h \
    --discovery-token-ca-cert-hash sha256:77100ff66b20100cbd9f1c289788e43aee69c5b4e24cc2c74c2e5d634a074fdc

# 参数说明:
# --token:集群认证令牌(Master 初始化时生成,用于 Node 节点认证)
# --discovery-token-ca-cert-hash:CA 证书哈希值(验证 Master 节点身份,防止伪造)

7.2 验证节点状态(Master 节点执行)

bash 复制代码
# 查看所有节点状态(STATUS 为 Ready 表示节点加入成功,可正常工作)
kubectl get nodes

# 输出示例(三个节点均为 Ready 则集群基础部署完成):
# NAME       STATUS   ROLES    AGE   VERSION
# master01   Ready    master   1h    v1.20.11
# node01     Ready    <none>   30m   v1.20.11
# node02     Ready    <none>   25m   v1.20.11

八、集群功能测试(Master 节点执行)

部署完成后,创建测试应用验证集群是否正常工作。

8.1 创建 Nginx 部署

bash 复制代码
# 创建名为 nginx 的部署,使用官方 nginx 镜像(测试用)
kubectl create deployment nginx --image=nginx

# 查看 Pod 状态(STATUS 为 Running 表示 Pod 启动成功)
kubectl get pods -o wide

8.2 暴露 NodePort 服务(外部访问)

bash 复制代码
# 暴露 80 端口(容器内 Nginx 默认端口),服务类型为 NodePort(外部可通过 Node IP+端口访问)
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看服务状态(获取外部访问端口,如 32404,PORT(S) 列显示 80:32404/TCP)
kubectl get svc

8.3 扩展副本数(测试调度功能)

bash 复制代码
# 扩展 nginx 部署到 3 个副本(K8s 会自动将副本调度到不同 Node 节点)
kubectl scale deployment nginx --replicas=3

# 查看副本状态(3 个 Pod 均为 Running,且分布在 node01、node02 节点)
kubectl get pods -o wide

8.4 测试访问

bash 复制代码
# 通过任意 Node 节点 IP + 外部端口访问 Nginx(返回 Nginx 欢迎页则正常)
curl http://node01:32404  # 替换为实际的 Node IP 和端口(如 192.168.10.20:32404)

九、部署 Kubernetes Dashboard(Master 节点执行)

Dashboard 是 K8s 可视化管理界面,可通过浏览器查看集群资源、部署应用、监控状态,以下操作在 Master 节点执行。

9.1 准备配置文件并修改

bash 复制代码
# 1. 上传 recommended.yaml 配置文件到 /opt/k8s 目录
cd /opt/k8s

# 2. 编辑配置文件,将 Service 改为 NodePort 类型(默认仅集群内部可访问,需暴露到外部)
vim recommended.yaml

找到 Service 部分,按以下内容修改:

yaml 复制代码
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001  # 新增:指定外部访问端口(30000-32767 之间,避免端口冲突)
  type: NodePort  # 新增:服务类型改为 NodePort(支持外部访问)
  selector:
    k8s-app: kubernetes-dashboard

9.2 部署 Dashboard

bash 复制代码
# 应用配置文件,创建 Dashboard 相关资源(Deployment、Service 等)
kubectl apply -f recommended.yaml

9.3 创建管理员账号并绑定权限

默认 Dashboard 无管理员权限,需创建账号并绑定 cluster-admin 角色(超级管理员):

bash 复制代码
# 1. 创建 serviceaccount(命名空间:kube-system)
kubectl create serviceaccount dashboard-admin -n kube-system

# 2. 绑定 cluster-admin 角色(授予超级管理员权限,方便管理所有资源)
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

# 3. 获取登录 Token(复制输出结果中的 token 字符串,用于浏览器登录)
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

9.4 访问 Dashboard

  1. 浏览器访问:https://MasterIP:30001(如 https://192.168.10.19:30001
  2. 浏览器提示「不安全连接」,选择「添加例外」→「确认安全例外」(自签名证书正常现象)
  3. 登录方式选择「Token」,粘贴上一步获取的 Token,点击「登录」
  4. 成功登录后,可查看集群节点、Pod、Service 等资源,支持可视化部署应用

十、内核参数优化(可选,所有节点执行)

为提升集群稳定性和性能,可优化内核参数(适用于生产环境):

bash 复制代码
# 覆盖之前的内核参数配置文件,添加优化项
cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0  # 禁用 TCP 连接快速回收(避免网络异常)
vm.swappiness=0  # 禁止使用 Swap 空间,仅当系统内存不足(OOM)时允许使用
vm.overcommit_memory=1  # 不检查物理内存是否够用(提升 Pod 调度效率)
vm.panic_on_oom=0  # 开启 OOM(内存不足时杀死进程,避免系统挂起)
fs.inotify.max_user_instances=8192  # 提高 inotify 最大实例数(支持更多文件监控)
fs.inotify.max_user_watches=1048576  # 提高 inotify 最大监控文件数
fs.file-max=52706963  # 指定系统最大文件句柄数(支持更多进程)
fs.nr_open=52706963  # 单个进程最大文件句柄数(仅内核 4.4 以上版本支持)
net.ipv6.conf.all.disable_ipv6=1  # 关闭 IPv6
net.netfilter.nf_conntrack_max=2310720  # 提高最大连接跟踪数(支持更多网络连接)
EOF

# 生效优化后的内核参数
sysctl --system

十一、总结

至此,Kubernetes 1.20 集群(1 Master + 2 Worker)已部署完成,包含核心功能:

  • 集群基础架构:Master 节点控制 + Worker 节点运行应用
  • 网络通信:Flannel 插件实现跨节点 Pod 通信
  • 可视化管理:Dashboard 界面便捷操作集群
  • 功能验证:Nginx 部署、服务暴露、副本扩展均正常
相关推荐
酒醉的胡铁17 分钟前
Docker Desktop 数据迁移完整流程(Windows 10/11 x64)
windows·docker·容器
小北方城市网23 分钟前
第 6 课:云原生架构终极落地|K8s 全栈编排与高可用架构设计实战
大数据·人工智能·python·云原生·架构·kubernetes·geo
❀͜͡傀儡师27 分钟前
Kubernetes 1.34.3部署PostgresSQL的v18.1
云原生·容器·kubernetes·postgressql
Y.O.U..34 分钟前
Kubernetes-资源清单(1)
容器·kubernetes
释怀不想释怀39 分钟前
Docker(安装软件)
运维·docker·容器
奔波霸的伶俐虫1 小时前
windows docker desktop 安装修改镜像学习
学习·docker·容器
原神启动11 小时前
K8S(六)—— 企业级,Rancher安装配置与核心功能实操
容器·kubernetes·rancher
阿杰 AJie1 小时前
安装 docker.io(不走外网 Docker 域名)
docker·容器·eureka
.hopeful.1 小时前
Docker——镜像仓库和镜像
运维·docker·容器
m0_485614671 小时前
K8S项目生命周期管理
云原生·容器·kubernetes