当前位置: 首页 > news >正文

K8S(二)—— K8S 1.28 集群部署指南(kubeadm 方式)

文章目录

  • 前言
  • 一、K8s 集群部署环境准备(所有节点)
    • 1.1 环境架构
    • 1.2 配置主机名与主机映射
      • 1.2.1 设置主机名
      • 1.2.2 配置主机映射
    • 1.3 关闭防火墙与 SELinux
      • 1.3.1 关闭防火墙
      • 1.3.2 关闭 SELinux
    • 1.4 关闭 Swap 分区
    • 1.5 配置内核参数(网络优化)
    • 1.6 安装 IPVS 相关工具
    • 1.7 安装 Containerd(容器运行时)
      • 1.7.1 安装 Containerd 依赖
      • 1.7.2 添加阿里 Docker 源(加速 Containerd 下载)
      • 1.7.3 加载 Containerd 所需内核模块
      • 1.7.4 安装 Containerd
      • 1.7.5 配置 Containerd(适配 K8s)
      • 1.7.6 启动 Containerd 并设置开机启动
  • 二、安装 kubectl、kubelet、kubeadm(三个节点)
    • 2.1 添加阿里 Kubernetes 源(加速组件下载)
    • 2.2 安装指定版本的组件(1.28.2)
      • 2.2.1 查看 1.28 系列可用版本
      • 2.2.2 安装 1.28.2 版本
      • 2.2.3 启动 kubelet 并设置开机启动
  • 三、部署 Kubernetes 集群
    • 3.1 初始化 K8s 集群(master01 节点)
      • 3.1.1 查看初始化所需镜像
      • 3.1.2 编写初始化配置文件
      • 3.1.3 执行集群初始化
    • 3.2 配置 kubectl 客户端(master01 节点)
    • 3.3 查看集群初始状态(master01 节点)
      • 3.3.1 查看节点状态
      • 3.3.2 查看 Pod 状态
    • 3.4 安装 Calico 网络插件(CNI)(master01 节点)
      • 3.4.1 Flannel 与 Calico 对比
      • 3.4.2 安装 Calico
        • 方法一:
        • 方法二:
    • 3.5 验证集群状态(master01 节点)
      • 3.5.1 查看 Pod 状态(等待 1-2 分钟,Calico 组件启动)
      • 3.5.2 查看节点状态(master01 变为 `Ready`)
    • 3.6 工作节点加入集群(node01、node02 节点)
    • 3.7 验证所有节点状态(master01 节点)
    • 3.8 配置 kubectl 命令补全(所有节点可选)
    • 3.9 安装 Nerdctl(Containerd 客户端,所有节点可选)
  • 四、安装 Kubernetes Dashboard(可视化管理工具)(master01 节点)
    • 4.1 下载 Dashboard 配置文件
    • 4.2 修改配置文件(开启 NodePort 访问)
    • 4.3 部署 Dashboard 并验证
      • 4.3.1 应用配置文件
      • 4.3.2 查看 Dashboard 状态
    • 4.4 访问 Dashboard 页面
    • 4.5 创建 Dashboard 管理员用户(master01 节点)
    • 4.6 获取登录 Token(master01 节点)
      • 方法 1:直接创建 Token
      • 方法 2:从 Secret 中获取 Token(永久有效)
    • 4.7 登录 Dashboard
      • 常见问题:登录后无资源权限
  • 总结

前言

Kubernetes(简称 K8s)作为容器编排领域的事实标准,已成为企业级微服务部署、运维和扩展的核心工具。本文基于 kubeadm 工具,详细讲解 Kubernetes 1.28.2 版本集群的部署过程,适配自定义环境(master01:192.168.10.14,node01:192.168.10.15,node02:192.168.10.16),涵盖环境准备、组件安装、集群初始化、网络插件配置及可视化 Dashboard 部署,适合有 Linux 基础的运维或开发人员参考。

本文所有操作均基于 CentOS 7.9.2009 系统,需确保所有节点网络互通、权限为 root,且已配置好国内 yum 源(如阿里源)以加速依赖下载。


一、K8s 集群部署环境准备(所有节点)

环境准备是 K8s 集群稳定运行的基础,需在 所有节点(master01、node01、node02) 执行以下操作(特殊说明除外)。

1.1 环境架构

本次部署采用「1 主 2 从」架构,节点角色、IP、系统版本等信息如下表所示:

IP 地址主机名操作系统Kubelet 版本节点角色核心作用
192.168.10.14master01CentOS 7.9.2009v1.28.2管理节点集群控制平面(APIServer、etcd 等)
192.168.10.15node01CentOS 7.9.2009v1.28.2工作节点运行容器化应用(Pod)
192.168.10.16node02CentOS 7.9.2009v1.28.2工作节点运行容器化应用(Pod)

1.2 配置主机名与主机映射

1.2.1 设置主机名

主机名用于节点标识,需确保每个节点主机名唯一,执行以下命令(分别在对应节点执行):

  • master01 节点:
    hostnamectl set-hostname master01
    
  • node01 节点:
    hostnamectl set-hostname node01
    
  • node02 节点:
    hostnamectl set-hostname node02
    

1.2.2 配置主机映射

通过 /etc/hosts 文件实现节点间通过主机名访问,避免依赖 DNS,所有节点执行:

cat >> /etc/hosts << EOF
192.168.10.14 master01
192.168.10.15 node01
192.168.10.16 node02
EOF

1.3 关闭防火墙与 SELinux

K8s 集群内部需要频繁的网络通信(如 Pod 间通信、节点间同步),防火墙和 SELinux 可能会拦截相关流量,因此需关闭:

1.3.1 关闭防火墙

# 停止防火墙服务
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service

1.3.2 关闭 SELinux

SELinux 是 Linux 安全增强机制,可能会限制容器对宿主机资源的访问,需永久禁用:

# 临时关闭 SELinux(当前会话生效)
setenforce 0
# 永久关闭 SELinux(重启后生效)
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

1.4 关闭 Swap 分区

K8s 要求关闭 Swap 分区,以确保节点内存资源能被准确调度(避免容器使用 Swap 导致性能下降):

# 临时关闭 Swap(当前会话生效)
swapoff -a
# 永久关闭 Swap(注释 Swap 挂载项,重启后生效)
sed -i '/swap/s/^/#/g' /etc/fstab

1.5 配置内核参数(网络优化)

K8s 依赖特定内核参数实现网络转发、网桥过滤等功能,需手动配置并加载:

# 创建内核参数配置文件
cat > /etc/sysctl.d/k8s.conf << EOF
# 开启网桥的 IPv6 流量转发
net.bridge.bridge-nf-call-ip6tables = 1
# 开启网桥的 IPv4 流量转发
net.bridge.bridge-nf-call-iptables = 1
# 开启 IPv4 流量转发(支持 Pod 跨节点通信)
net.ipv4.ip_forward = 1
EOF=================================================================
cat >/etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF# 加载配置(立即生效)
sysctl --system

在这里插入图片描述

1.6 安装 IPVS 相关工具

K8s 支持 iptablesipvs 两种服务发现模式,ipvs 性能更优(支持更多负载均衡算法、更低延迟),需安装相关工具并加载内核模块:

# 安装依赖工具
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git# 配置 IPVS 内核模块开机加载
cat > /etc/modules-load.d/ipvs.conf << EOF
# 加载 IPVS 核心模块
ip_vs
# IPVS 轮询调度算法
ip_vs_rr
# IPVS 加权轮询调度算法
ip_vs_wrr
# IPVS 源哈希调度算法
ip_vs_sh
# 连接跟踪模块(支持会话保持)
nf_conntrack
# IPv4 连接跟踪模块
nf_conntrack_ipv4
EOF================================================================
cat > /etc/modules-load.d/ipvs.conf <<EOF
# Load IPVS at boot
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
nf_conntrack_ipv4
EOF
================================================================# 立即加载模块并设置开机启动
# 1. 确保服务开机自启
systemctl enable systemd-modules-load.service# 2. 重启服务使当前配置生效
systemctl restart systemd-modules-load.service# 验证模块加载成功(出现 ip_vs 和 nf_conntrack_ipv4 相关输出即正常)
lsmod | egrep "ip_vs|nf_conntrack_ipv4"

在这里插入图片描述

1.7 安装 Containerd(容器运行时)

K8s 从 1.24 版本开始不再默认支持 Docker 作为容器运行时,推荐使用 Containerd(Docker 的底层容器运行时),以下是安装步骤:

1.7.1 安装 Containerd 依赖

yum -y install yum-utils device-mapper-persistent-data lvm2

1.7.2 添加阿里 Docker 源(加速 Containerd 下载)

Containerd 属于 Docker 生态组件,可通过 Docker 源安装:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.7.3 加载 Containerd 所需内核模块

# 配置模块加载
cat >> /etc/modules-load.d/containerd.conf << EOF
# overlay 文件系统模块(容器分层存储依赖)
overlay
# 网桥过滤模块(容器网络依赖)
br_netfilter
EOF
=================================================================
cat >> /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF# 立即加载模块
modprobe overlay
modprobe br_netfilter

1.7.4 安装 Containerd

# 安装最新版本的 Containerd
yum -y install containerd.io

1.7.5 配置 Containerd(适配 K8s)

默认配置需调整以支持 K8s 的 Systemd 控制组和国内镜像源:

# 创建 Containerd 配置目录
mkdir -p /etc/containerd# 生成默认配置文件
containerd config default > /etc/containerd/config.toml# 1. 开启 Systemd 控制组(K8s 推荐,适配节点的 Systemd 服务管理)
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml# 2. 替换 Sandbox 镜像为阿里源(避免官方源访问超时)
sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml

1.7.6 启动 Containerd 并设置开机启动

systemctl enable containerd
systemctl start containerd# 验证 Containerd 运行状态(active (running) 即正常)
systemctl status containerd

在这里插入图片描述

二、安装 kubectl、kubelet、kubeadm(三个节点)

kubeadm 是 K8s 集群初始化工具,kubelet 是节点上的核心组件(管理 Pod 生命周期),kubectl 是 K8s 命令行客户端,需在所有节点安装。

2.1 添加阿里 Kubernetes 源(加速组件下载)

K8s 官方源在国内访问较慢,使用阿里源替代:

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
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2.2 安装指定版本的组件(1.28.2)

需确保 kubectlkubeletkubeadm 版本一致,避免兼容性问题:

2.2.1 查看 1.28 系列可用版本

yum --showduplicates list kubelet | grep 1.28

输出示例(确认 1.28.2 存在):

kubelet.x86_64  1.28.0-0  kubernetes
kubelet.x86_64  1.28.1-0  kubernetes
kubelet.x86_64  1.28.2-0  kubernetes

在这里插入图片描述

2.2.2 安装 1.28.2 版本

yum -y install kubectl-1.28.2 kubelet-1.28.2 kubeadm-1.28.2

2.2.3 启动 kubelet 并设置开机启动

systemctl enable kubelet
systemctl start kubelet# 验证 kubelet 状态(此时可能为 activating,初始化集群后会变为 running)
systemctl status kubelet

三、部署 Kubernetes 集群

集群部署核心操作在 master01 节点 执行,工作节点(node01、node02)仅需执行「加入集群」命令。

3.1 初始化 K8s 集群(master01 节点)

3.1.1 查看初始化所需镜像

K8s 初始化需拉取多个核心镜像(如 APIServer、etcd),先确认镜像列表:

kubeadm config images list --kubernetes-version=v1.28.2

输出示例(后续会通过阿里源拉取这些镜像):

registry.k8s.io/kube-apiserver:v1.28.2
registry.k8s.io/kube-controller-manager:v1.28.2
registry.k8s.io/kube-scheduler:v1.28.2
registry.k8s.io/kube-proxy:v1.28.2
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1

3.1.2 编写初始化配置文件

创建 kubeadm-init.yaml 配置文件,指定控制平面地址、镜像源、网络网段等:

cat > /tmp/kubeadm-init.yaml << EOF
# 集群配置(控制平面)
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.2
# 控制平面地址(master01 的 IP + K8s API 端口 6443)
controlPlaneEndpoint: 192.168.10.14:6443
# 镜像源(阿里源,加速拉取)
imageRepository: registry.aliyuncs.com/google_containers
# 网络配置
networking:podSubnet: 172.16.0.0/16  # Pod 网段(需与后续 Calico 配置一致)serviceSubnet: 172.15.0.0/16  # Service 网段(默认即可,避免与宿主机冲突)
---
# kube-proxy 配置(使用 IPVS 模式)
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
EOF================================================================================
=======
如果想修改网段可以在这边修改,用下面这个cat > /tmp/kubeadm-init.yaml << EOF
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.2
controlPlaneEndpoint: 192.168.10.14:6443
imageRepository: registry.aliyuncs.com/google_containers
networking:
podSubnet: 10.244.0.0/16 
serviceSubnet: 10.96.0.0/16 
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
EOF

3.1.3 执行集群初始化

kubeadm init --config=/tmp/kubeadm-init.yaml --ignore-preflight-errors=all
  • --config:指定上述配置文件;
  • --ignore-preflight-errors=all:忽略部分预检错误(如内核版本 minor 号不匹配、Swap 未完全关闭等非致命问题)。

关键输出保存:初始化成功后,会输出「工作节点加入集群」的命令(含 token 和 hash),需复制保存(后续 node01、node02 需执行),示例:

# 控制平面节点加入命令(本文单主架构,暂用不到)
kubeadm join 192.168.10.14:6443 --token bcxn70.0t4p9t6h8d8sb1my \--discovery-token-ca-cert-hash sha256:cee1a4b147576d76d4d49857d686886fab06fb24a785f03dc746d4ec91e7bf11 \--control-plane# 工作节点加入命令(重点保存)
kubeadm join 192.168.10.14:6443 --token bcxn70.0t4p9t6h8d8sb1my \--discovery-token-ca-cert-hash sha256:cee1a4b147576d76d4d49857d686886fab06fb24a785f03dc746d4ec91e7bf11 

3.2 配置 kubectl 客户端(master01 节点)

初始化后,需配置 kubectl 以连接集群(默认仅 root 用户可操作):

# 创建 kubectl 配置目录
mkdir -p $HOME/.kube# 复制集群配置文件(K8s 认证依赖此文件)
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config# 设置文件权限(确保当前用户可读写)
sudo chown $(id -u):$(id -g) $HOME/.kube/config# root 用户可直接设置环境变量(避免每次切换用户重新配置)
export KUBECONFIG=/etc/kubernetes/admin.conf

3.3 查看集群初始状态(master01 节点)

3.3.1 查看节点状态

kubectl get node

输出示例(此时 master01 状态为 NotReady,原因是缺少 CNI 网络插件):

NAME       STATUS     ROLES           AGE   VERSION
master01   NotReady   control-plane   5m    v1.28.2

3.3.2 查看 Pod 状态

kubectl get pod -A

输出示例(coredns 处于 Pending 状态,依赖网络插件启动):

NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-66f779496c-7crcg           0/1     Pending   0          95s
kube-system   coredns-66f779496c-gjwf9           0/1     Pending   0          95s
kube-system   etcd-master01                      1/1     Running   0          102s
kube-system   kube-apiserver-master01            1/1     Running   0          99s
kube-system   kube-controller-manager-master01   1/1     Running   0          100s
kube-system   kube-proxy-wzl4l                   1/1     Running   0          96s
kube-system   kube-scheduler-master01            1/1     Running   0          99s

3.4 安装 Calico 网络插件(CNI)(master01 节点)

CNI(容器网络接口)是 K8s 实现 Pod 跨节点通信的核心,常用插件有 Flannel 和 Calico。本文选择 Calico(性能更优、支持网络策略)。

3.4.1 Flannel 与 Calico 对比

特性FlannelCalico
通信方式Overlay 隧道(VXLAN/UDP)直接路由(BGP 协议)
性能中等(隧道封装有损耗)优秀(无封装,原生路由)
网络策略支持不支持支持(细粒度访问控制)
适用场景小型集群、简单场景中大型集群、需网络策略场景
配置复杂度中(需理解 BGP 基础)

3.4.2 安装 Calico

方法一:
  1. 下载 Calico 配置文件(v3.25 版本,适配 K8s 1.28):

    wget https://docs.tigera.io/archive/v3.25/manifests/calico.yaml
    
  2. 修改配置文件(确保网段与集群初始化一致):

    vim calico.yaml
    

    找到 CALICO_IPV4POOL_CIDR 配置项,取消注释并设置为 10.244.0.0/16(与 kubeadm-init.yaml 中的 podSubnet 一致):

    - name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16"
    
  3. 应用 Calico 配置:

    kubectl apply -f calico.yaml
    
方法二:

将calico相关镜像上传至所有节点

# 导入镜像
nerdctl -n k8s.io load -i calico-cni-v3.24.5.tar 
nerdctl -n k8s.io load -i calico-node-v3.24.5.tar
nerdctl -n k8s.io load -i coredns-v1.10.1.tar
nerdctl -n k8s.io load -i calico-controllers-v3.24.5.tar

在这里插入图片描述

在master01节点应用 Calico 配置:

kubectl apply -f calico.yaml

3.5 验证集群状态(master01 节点)

3.5.1 查看 Pod 状态(等待 1-2 分钟,Calico 组件启动)

kubectl get pod -A

输出示例(calico-nodecoredns 均为 Running 即正常):

NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-7d8788dbf-vpdhq   1/1     Running   0          4m50s
kube-system   calico-node-lg8mw                         1/1     Running   0          4m50s
kube-system   coredns-66f779496c-7crcg                  1/1     Running   0          29m
kube-system   coredns-66f779496c-gjwf9                  1/1     Running   0          29m
kube-system   etcd-master01                             1/1     Running   0          29m
kube-system   kube-apiserver-master01                   1/1     Running   0          29m
kube-system   kube-controller-manager-master01          1/1     Running   0          29m
kube-system   kube-proxy-wzl4l                          1/1     Running   0          29m
kube-system   kube-scheduler-master01                   1/1     Running   0          29m

在这里插入图片描述

3.5.2 查看节点状态(master01 变为 Ready

kubectl get node

输出示例:

NAME       STATUS   ROLES           AGE   VERSION
master01   Ready    control-plane   8m    v1.28.2

在这里插入图片描述

3.6 工作节点加入集群(node01、node02 节点)

在 node01 和 node02 节点分别执行 3.1.3 中保存的「工作节点加入命令」:

kubeadm join 192.168.10.14:6443 --token bcxn70.0t4p9t6h8d8sb1my \--discovery-token-ca-cert-hash sha256:cee1a4b147576d76d4d49857d686886fab06fb24a785f03dc746d4ec91e7bf11 

加入成功提示:

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

在这里插入图片描述

3.7 验证所有节点状态(master01 节点)

kubectl get node

输出示例(node01、node02 均为 Ready,集群部署完成):

NAME       STATUS   ROLES           AGE   VERSION
master01   Ready    control-plane   33m   v1.28.2
node01     Ready    <none>          67s   v1.28.2
node02     Ready    <none>          25s   v1.28.2

在这里插入图片描述

3.8 配置 kubectl 命令补全(所有节点可选)

为方便操作,配置 kubectl 命令补全(需安装 bash-completion):

# 安装 bash-completion
yum -y install bash-completion# 配置 kubectl 补全(永久生效)
echo "source <(kubectl completion bash)" >> /etc/profile# 立即生效
source /etc/profile

配置后,输入 kubectl get no 按 Tab 键即可补全为 kubectl get node

3.9 安装 Nerdctl(Containerd 客户端,所有节点可选)

nerdctl 是 Containerd 的命令行客户端,语法与 docker 兼容,适合管理容器:

yum -y install wget# 下载 nerdctl 1.7.0 版本(适配 Containerd 1.6+)
wget -q -c https://github.com/containerd/nerdctl/releases/download/v1.7.0/nerdctl-1.7.0-linux-amd64.tar.gz# 解压到 /usr/local/bin(全局可执行)
tar xf nerdctl-1.7.0-linux-amd64.tar.gz -C /usr/local/bin# 配置 nerdctl 命令补全(永久生效)
echo "source <(nerdctl completion bash)" >> ~/.bashrc
source ~/.bashrc# 验证(查看 K8s 集群内的容器)
nerdctl -n k8s.io ps#这个可以在任何节点测试下
nerdctl run -d --name nginx -p 8080:80 nginx:alpine

在这里插入图片描述

四、安装 Kubernetes Dashboard(可视化管理工具)(master01 节点)

Kubernetes Dashboard 是官方可视化工具,支持查看 Pod 状态、部署应用、查看日志等操作,需在 master01 节点部署。

4.1 下载 Dashboard 配置文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

4.2 修改配置文件(开启 NodePort 访问)

默认 Dashboard 仅支持集群内部访问(ClusterIP 类型),需修改为 NodePort 类型以支持外部浏览器访问:

vim recommended.yaml

找到 Service 配置段(kind: Servicename: kubernetes-dashboard),添加 type: NodePortnodePort: 30000

kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:type: NodePort  # 新增:开启 NodePort 访问ports:- port: 443targetPort: 8443nodePort: 30000  # 新增:外部访问端口(30000-32767 之间)selector:k8s-app: kubernetes-dashboard

4.3 部署 Dashboard 并验证

4.3.1 应用配置文件

kubectl apply -f recommended.yaml

4.3.2 查看 Dashboard 状态

# 查看 Pod(kubernetes-dashboard 命名空间)
kubectl get pod -n kubernetes-dashboard# 查看 Service(确认 NodePort 已生效)
kubectl get svc -n kubernetes-dashboard

输出示例(kubernetes-dashboard Service 类型为 NodePort,端口为 443:30000/TCP):

NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.103.113.1   <none>        8000/TCP        109s
kubernetes-dashboard        NodePort    10.97.98.190   <none>        443:30000/TCP   110s

在这里插入图片描述

4.4 访问 Dashboard 页面

  1. 打开浏览器,输入地址:https://192.168.10.14:30000(master01 的 IP + 30000 端口);
  2. 浏览器提示「不安全连接」(Dashboard 使用自签证书),点击「高级」→「继续访问」(仅测试环境,生产环境需配置可信证书);
  3. 进入登录页面,支持「Token」和「Kubeconfig」两种登录方式,本文使用「Token」登录。
    在这里插入图片描述

4.5 创建 Dashboard 管理员用户(master01 节点)

默认 Dashboard 无管理员权限,需创建 ServiceAccount 并绑定 cluster-admin 角色:

# 创建管理员配置文件
cat > dashboard-admin.yaml << EOF
# 1. 创建 ServiceAccount(kubernetes-dashboard 命名空间)
apiVersion: v1
kind: ServiceAccount
metadata:name: adminnamespace: kubernetes-dashboard
---
# 2. 绑定 ClusterRole(cluster-admin 为集群最高权限)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: adminnamespace: kubernetes-dashboard
---
# 3. 创建 Secret(关联 ServiceAccount,用于生成 Token)
apiVersion: v1
kind: Secret
metadata:name: kubernetes-dashboard-adminnamespace: kubernetes-dashboardannotations:kubernetes.io/service-account.name: "admin"
type: kubernetes.io/service-account-token
EOF# 应用配置
kubectl apply -f dashboard-admin.yaml

在这里插入图片描述

4.6 获取登录 Token(master01 节点)

方法 1:直接创建 Token

kubectl -n kubernetes-dashboard create token admin

输出示例(复制此 Token,用于登录):

eyJhbGciOiJSUzI1NiIsImtpZCI6Ik5EN1V5WWJxamRraGZSb29aeFBnOUpBOGZPaXdwSFk5WGNIQnNuQzRIdlUifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzYwMDE3MzE3LCJpYXQiOjE3NjAwMTM3MTcsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5...

方法 2:从 Secret 中获取 Token(永久有效)

# 1. 获取 Secret 名称
TokenSecret=$(kubectl -n kubernetes-dashboard get secret | awk '/kubernetes-dashboard-admin/ {print $1}')# 2. 提取 Token
kubectl describe secrets -n kubernetes-dashboard ${TokenSecret} | grep token | awk 'NR==NF {print $2}'或者直接执行:
kubectl describe secrets -n kubernetes-dashboard $(kubectl -n kubernetes-dashboard get secret | awk '/kubernetes-dashboard-admin/ {print $1}') | grep '^token:' | awk '{print $2}'

4.7 登录 Dashboard

  1. 在登录页面选择「Token」,粘贴上述获取的 Token,点击「登录」;

  2. 登录成功后,可查看集群节点、Pod、Service 等资源,也可通过「Deployments」页面部署新应用。
    在这里插入图片描述

  3. 创建一个名为 nginx 的部署,使用 nginx:1.14 镜像并维持 3 个运行的 Pod 副本

kubectl create deployment nginx --image=nginx:1.14 --replicas=3

在这里插入图片描述

常见问题:登录后无资源权限

若登录后提示「找不到资源」,执行以下命令重新绑定权限:

kubectl create clusterrolebinding serviceaccount-cluster-admin \--clusterrole=cluster-admin \--user=system:serviceaccount:kubernetes-dashboard:admin

总结

本文详细讲解了 Kubernetes 1.28.2 集群的部署流程,核心步骤可总结为:

  1. 环境准备:关闭防火墙/SELinux/Swap、配置内核参数、安装 Containerd,确保节点满足 K8s 运行条件;
  2. 组件安装:通过阿里源安装 kubeadm/kubelet/kubectl,保证版本一致;
  3. 集群初始化:在 master 节点编写配置文件并执行初始化,保存工作节点加入命令;
  4. 网络插件:安装 Calico 实现 Pod 跨节点通信,使节点状态变为 Ready
  5. 工作节点加入:在 node 节点执行加入命令,完成集群扩容;
  6. 可视化工具:部署 Dashboard 并配置管理员权限,实现集群可视化管理。

注意事项

  • 所有节点 IP 和主机名需与实际环境匹配(本文适配 192.168.10.14/15/16);
  • 初始化时的 podSubnet 需与 Calico 配置一致,否则网络插件无法正常工作;
  • Token 和 admin.conf 文件需妥善保存,避免泄露导致集群安全风险;
  • 若部署过程中出现节点 NotReady、Pod Pending 等问题,可通过 kubectl describe pod <pod-name> -n <namespace> 查看日志排查原因。

通过本文步骤,可快速搭建一个稳定的 K8s 1.28 集群,为后续部署微服务、持续集成/持续部署(CI/CD)奠定基础。

http://www.dtcms.com/a/462527.html

相关文章:

  • Eclipse Mosquitto 在小内存下怎么修改配置文件
  • 猫眼浏览器(Chrome内核增强版浏览器)官方便携版
  • 福建省住房和建设厅网站合同 制作 网站
  • 构建可信数据体系——解读数据治理指南-构建可信数据路线图【附全文阅读】
  • qemu调试edk2
  • 正规网站做菠菜广告焦作网站建设哪家正规
  • 有什么网站可以发布个人信息网站优化计划书
  • 小程序停车场名称动态化实现方案
  • 张家港建设工程质量监督站网站中国廉政文化建设网站
  • sunshine :Moonlight 的自托管游戏串流服务端
  • 防爆手机与普通手机的区别!
  • 铁路建设标准网站专业网站建
  • 免费建网站可信吗wordpress 仪表盘界面
  • SQL Server 限制IP访问数据库的设置方法及注意事项
  • 测试中的 AAA 模式与 Given–When–Then 模式详解
  • Android Studio 虚拟机启动失败/没反应,排查原因。提供一种排查方式。
  • 网站设计需要考虑的基本原则建房子找哪个网站设计
  • C#基础11-常用类
  • 流媒体 网站开发网站制作排版
  • 那个网站适合学生做兼职广州网站车管所
  • 公司内部网站系统微信小程序直播开通条件
  • 个人备案做门户网站wordpress 视频
  • 网站开发公司地址免费引流软件下载
  • 网站中的游戏是怎么做的濮阳新闻综合频道回看
  • 在springBoot项目如何进行视频压缩
  • 电商平台下载seo网站优化平台
  • Java面试常用算法api速刷
  • aspnet东莞网站建设抚州购物网站开发设计
  • 东营专业网站建设天河建设网站企业
  • 烤肉自助餐网站建设wordpress视频主题模板下载地址