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

Kubernetes——部署

1、准备工作

版本:v1.3.5

部署方式:kubeadm

服务器:龙蜥8.10

节点:一台master,两台node

根据最新的官方文档,Kubernetes v1.35 对运行环境有明确的要求,请务必在每台节点机器上完成以下检查和配置。

准备项具体要求验证/配置方法 (Linux)
操作系统支持 Linux (Debian/Red Hat 系等) 或 Windows Server。建议使用 Ubuntu 24.04 LTS、Debian 12、CentOS 9 等现代发行版。cat /etc/os-release
硬件资源控制平面节点:至少 2 CPU 核心,2 GB 内存。所有节点:建议 2 CPU 核心,2 GB+ 内存,确保节点间网络互通。lscpu,free -h
主机标识所有节点的MAC 地址product_uuid必须唯一。ip linkifconfig -a查看 MAC;sudo cat /sys/class/dmi/id/product_uuid查看 UUID。
网络正确配置网络适配器,确保 Kubernetes 组件之间及与 API Server 的端口可通(如 6443)。关键端口需开放,可使用nc 127.0.0.1 6443 -zv -w 2检查。
Linux 内核必须支持并配置为使用 cgroup v2。Kubernetes v1.35 已移除对 cgroup v1 的支持,若使用 v1,kubelet 将无法启动。stat -fc %T /sys/fs/cgroup/若输出cgroup2fs则表示已使用 cgroup v2。
容器运行时必须安装一个兼容 CRI (容器运行时接口) 的运行时,如containerd v2.0+(v1.x 的支持已终止) 或 CRI-O。根据所选运行时安装。后续步骤会详述。
Swap 内存kubelet 默认无法在开启 Swap 的节点上运行。你需要禁用 Swap或配置 kubelet 容忍 Swap。临时禁用:sudo swapoff -a。永久禁用:注释掉/etc/fstab中的 swap 条目。

部署方式:

1.kubeadm (官方推荐,生产环境首选)

这是 Kubernetes 官方提供的集群部署工具,让你能够用几条命令就搭建一个符合最佳实践的集群。它隐藏了复杂的底层细节,同时又给予了很大的定制空间,是搭建生产集群的黄金标准

  • 优点: 官方工具,社区最广,配置灵活,支持高可用,升级路径清晰。

  • 缺点: 需要手动安装和配置容器运行时、CNI 网络插件等组件。

  • 适用场景: 生产环境、对集群有定制化需求、希望学习 Kubernetes 官方部署逻辑的场景。

关键步骤概览:

  1. 在所有节点安装运行时:以 containerd 2.x 为例,安装并配置 systemd 作为 cgroup 驱动。

  2. 在所有节点安装 kubeadm, kubelet, kubectl:配置 Kubernetes 的 apt/yum 源 (pkgs.k8s.io) 并安装对应 v1.35 的版本。

  3. 使用 kubeadm 初始化控制平面:在控制平面节点执行kubeadm init

  4. 安装 CNI 网络插件:如 Calico, Cilium 等,使 Pod 之间可以通信。

  5. 加入工作节点:在工作节点执行kubeadm join命令。

2.二进制部署 (手动部署,用于学习)

这种方式需要你从 GitHub 上下载 Kubernetes 各个组件的二进制文件,然后手动配置证书、配置文件,并用 systemd 等工具将其启动起来。

  • 优点: 可以让你深入理解 Kubernetes 各组件的功能和交互方式,是学习的绝佳途径。

  • 缺点: 操作复杂、容易出错、维护困难,不适合生产环境。

  • 适用场景: 主要用于深度学习和测试,或对系统有极端定制需求且团队有足够能力维护的场景。

关键步骤概览:

  1. 分别为 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy 下载二进制文件。

  2. 手动生成各种 TLS 证书。

  3. 编写各个组件的 systemd unit 文件,配置启动参数。

  4. 按顺序启动服务 (etcd -> API Server -> 控制器 -> 调度器 -> 节点组件)。

3.自动化工具 (如 Kubespray, Canonical Kubernetes)

利用 Ansible 等自动化工具,或发行版提供的封装好的 Kubernetes 发行版,可以一键部署集群。

  • 优点: 部署速度最快,屏蔽了所有复杂细节,通常内置了高可用、监控等解决方案。

  • 缺点: 灵活性相对较低,排查问题需要理解工具本身的逻辑。

  • 适用场景: 快速搭建环境、标准化部署、不太关心底层实现细节的场景。

代表工具:

  • Kubespray: 基于 Ansible,可以部署生产可用的高可用集群,支持多种操作系统和网络插件。当前版本已支持部署 Kubernetes 1.33.5。

  • Canonical Kubernetes: Ubuntu 官方提供的 Kubernetes 发行版,可通过snap命令快速安装,对 v1.35 有专门的优化和支持。

2、部署

2.1 准备工作

三台主机分别修改主机名,解析,时间同步(3台)

[root@master ~]# hostnamectl set-hostname master

[root@node1 ~]# hostnamectl set-hostname node1

[root@node2 ~]# hostnamectl set-hostname node2

[root@master ~]# more /etc/hosts | grep 192
192.168.137.134 master
192.168.137.139 node1
192.168.137.141 node2
[root@master ~]# scp /etc/hosts root@192.168.137.139:/etc/
root@192.168.137.139's password:
hosts 100% 225 127.4KB/s 00:00
[root@master ~]# scp /etc/hosts root@192.168.137.141:/etc/
root@192.168.137.141's password:
hosts 100% 225 102.8KB/s 00:00

或者用chrony同步

[root@master ~]# ntpdate ntp.aliyun.com

关闭防火墙、selinux、swap(3台)

[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
[root@master ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
[root@master ~]# setenforce 0
setenforce: SELinux is disabled
[root@master ~]# swapoff -a
[root@master ~]# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

配置内核参数(3台)

启用桥接的IPv4流量传递给iptables,并启用cgroup v2(Kubernetes v1.35必需)。

[root@master ~]# cat <<EOF | tee /etc/modules-load.d/k8s.conf
> overlay
> br_netfilter
> EOF
overlay
br_netfilter

[root@master ~]# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-iptables = 1
> net.bridge.bridge-nf-call-ip6tables = 1
> net.ipv4.ip_forward = 1
> EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

[root@master ~]# sysctl --system

验证是否是cgroups v2,发现不是

[root@master ~]# stat -fc %T /sys/fs/cgroup/
tmpfs

龙蜥8.10修改如下,若已经是cgroups v2,则不需要执行以下操作
[root@master ~]# grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
[root@master ~]# reboot

[root@master ~]# stat -fc %T /sys/fs/cgroup/
cgroup2fs
[root@node1 ~]# stat -fc %T /sys/fs/cgroup/
cgroup2fs
[root@node2 ~]# stat -fc %T /sys/fs/cgroup/
cgroup2fs

2.2 安装容器(三台)

Kubernetes v1.35已不再支持dockershim,containerd是官方首选的CRI运行时。根据搜索结果,需要安装containerd v2.0+

安装yum-utils和dnf-utils

[root@master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

添加源
[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装containerd

[root@master ~]# yum install -y containerd.io

配置加速

[root@master ~]# sed -i 's#registry.k8s.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g' /etc/containerd/config.toml

确保使用cgroups,若非true,执行下面的sed,或者手动修改

[root@master ~]# more /etc/containerd/config.toml | grep 'SystemdCgroup'
SystemdCgroup = true
[root@master ~]# sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

启动容器并设置开机自启

[root@master ~]# systemctl restart containerd
[root@master ~]# systemctl enable containerd

2.3 使用kubeadm部署集群

安装 kubeadm, kubelet, kubectl(三台)

在所有节点上安装Kubernetes核心组件。写入k8s官方源

[root@master ~]# cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
> [kubernetes]
> name=Kubernetes
> baseurl=https://pkgs.k8s.io/core:/stable:/v1.35/rpm/
> enabled=1
> gpgcheck=1
> gpgkey=https://pkgs.k8s.io/core:/stable:/v1.35/rpm/repodata/repomd.xml.key
> exclude=kubelet kubeadm kubectl
> EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.35/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.35/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl


建立缓存

[root@master ~]# yum clean all && yum makecache

安装最新v1.35版本的kubeadm, kubelet, kubectl
[root@master ~]# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

设置开机自启

[root@master ~]# systemctl enable --now kubelet

版本验证

[root@master ~]# kubelet --version
Kubernetes v1.35.3
[root@master ~]# kubectl version --client
Client Version: v1.35.3
Kustomize Version: v5.7.1
[root@master ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"35", EmulationMajor:"", EmulationMinor:"", MinCompatibilityMajor:"", MinCompatibilityMinor:"", GitVersion:"v1.35.3", GitCommit:"6c1cd99aef09161ddb07b8ade6c9564e9b9bfe27", GitTreeState:"clean", BuildDate:"2026-03-18T18:32:11Z", GoVersion:"go1.25.7", Compiler:"gc", Platform:"linux/amd64"}

2.4 初始化master

在Master节点(192.168.137.136)上执行初始化。这里我们指定Pod的网段为10.244.0.0/16(Flannel默认),并设置apiserver-advertise-address为本机IP。

[root@master ~]# kubeadm init \
> --apiserver-advertise-address=192.168.137.136 \
> --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
> --kubernetes-version v1.35.0 \
> --pod-network-cidr=10.244.0.0/16

参数说明:

  • --apiserver-advertise-address: 指定API Server监听的地址,即Master的内网IP。

  • --image-repository: 指定从国内镜像仓库拉取Kubernetes组件镜像,加速部署。

  • --kubernetes-version: 指定版本,如果不指定,将默认安装最新版。

  • --pod-network-cidr: Pod网络的CIDR,后续CNI网络插件会用到。

得到kubeadm join,保存好,后续join需要

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.137.136:6443 --token lv0vwp.5hrn3zd5tdcnkccn \
--discovery-token-ca-cert-hash sha256:be73b9348fbd90660c300edc86cebdad5fcd9367e2c2cabe57a56d826b98b7f7

在Master上配置kubectl访问凭证:

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

在Master节点执行,为集群安装CNI网络插件 (Flannel),使Pod间能够通信

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created


等待Flannel Pod启动完成

[root@master ~]# kubectl get pods -n kube-system -w

[root@master ~]# kubectl get pods -n kube-system -w
NAME READY STATUS RESTARTS AGE
coredns-764897d7b-98249 0/1 Pending 0 5m10s
coredns-764897d7b-wxxrv 0/1 Pending 0 5m10s
etcd-master 1/1 Running 0 5m15s
kube-apiserver-master 1/1 Running 0 5m15s
kube-controller-manager-master 1/1 Running 0 5m15s
kube-proxy-rjfm7 1/1 Running 0 5m11s
kube-scheduler-master 1/1 Running 0 5m15s

Master节点已经成功初始化,核心组件(etcd、api-server等)都在正常运行。coredns处于Pending状态是完全正常的,因为还没有安装CNI网络插件,等加入Node并安装网络插件后它就会自动运行。

2.5 node加入(node执行)

使用上面的kubeadm join的命令加入集群

[root@node1 ~]# kubeadm join 192.168.137.136:6443 --token lv0vwp.5hrn3zd5tdcnkccn \
> --discovery-token-ca-cert-hash sha256:be73b9348fbd90660c300edc86cebdad5fcd9367e2c2cabe57a56d826b98b7f7
[preflight] Running pre-flight checks
[preflight] Some fatal errors occurred:
[ERROR CRI]: could not connect to the container runtime: failed to create new CRI runtime service: validate service connection: validate CRI v1 runtime API for endpoint "unix:///var/run/containerd/containerd.sock": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService
[ERROR ContainerRuntimeVersion]: could not connect to the container runtime: failed to create new CRI runtime service: validate service connection: validate CRI v1 runtime API for endpoint "unix:///var/run/containerd/containerd.sock": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
error: error execution phase preflight: preflight checks failed
To see the stack trace of this error execute with --v=5 or higher

这个报错是node1 节点的 containerd 没配置好 CRI 接口

问题:若报上面的错,执行下面的:

备份旧配置

[root@node1 ~]# cp /etc/containerd/config.toml /etc/containerd/config.toml.bak

生成 containerd 标准配置(自动开启 CRI)

[root@node1 ~]# containerd config default > /etc/containerd/config.toml

启用 systemd cgroup(K8s v1.35 强制要求)
[root@node1 ~]# sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

重启容器
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart containerd

然后再加入
[root@node1 ~]# kubeadm join 192.168.137.136:6443 --token lv0vwp.5hrn3zd5tdcnkccn --discovery-token-ca-cert-hash sha256:be73b9348fbd90660c300edc86cebdad5fcd9367e2c2cabe57a56d826b98b7f7
[preflight] Running pre-flight checks
[WARNING ContainerRuntimeVersion]: You must update your container runtime to a version that supports the CRI method RuntimeConfig. Falling back to using cgroupDriver from kubelet config will be removed in 1.36. For more information, see https://git.k8s.io/enhancements/keps/sig-node/4033-group-driver-detection-over-cri
[preflight] Reading configuration from the "kubeadm-config" ConfigMap in namespace "kube-system"...
[preflight] Use 'kubeadm init phase upload-config kubeadm --config your-config-file' to re-upload it.
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/instance-config.yaml"
[patches] Applied patch of type "application/strategic-merge-patch+json" to target "kubeletconfiguration"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-check] Waiting for a healthy kubelet at http://127.0.0.1:10248/healthz. This can take up to 4m0s
[kubelet-check] The kubelet is healthy after 502.319611ms
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap

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.

问题:若token过期,在master执行,重新生成

[root@master ~]# kubeadm token create --print-join-command

2.5 查看

查看节点状态,等待所有节点变为Ready

[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 15m v1.35.3
node1 NotReady <none> 5m57s v1.35.3
node2 NotReady <none> 3m13s v1.35.3

查看所有命名空间的Pod,确认所有核心组件和网络插件Pod正常运行
[root@master ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-8wczw 0/1 Init:0/2 0 2m55s
kube-flannel kube-flannel-ds-sb29j 1/1 Running 0 11m
kube-flannel kube-flannel-ds-ws7fd 0/1 Init:0/2 0 5m39s
kube-system coredns-764897d7b-98249 1/1 Running 0 14m
kube-system coredns-764897d7b-wxxrv 1/1 Running 0 14m
kube-system etcd-master 1/1 Running 0 14m
kube-system kube-apiserver-master 1/1 Running 0 14m
kube-system kube-controller-manager-master 1/1 Running 0 14m
kube-system kube-proxy-9vnxf 0/1 ContainerCreating 0 2m55s
kube-system kube-proxy-pz2xt 0/1 ContainerCreating 0 5m39s
kube-system kube-proxy-rjfm7 1/1 Running 0 14m
kube-system kube-scheduler-master 1/1 Running 0 14m

当所有节点状态为Ready,并且kube-system命名空间下的核心Pod(如coredns)都处于Running状态时。集群部署成功

若和我一样卡住,去两个node节点看容器状态,发现是网络问题,未配置加速

[root@node1 ~]# sed -i "s#registry.k8s.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g" /etc/containerd/config.toml
[root@node1 ~]# sed -i 's#sandbox_image = "registry.k8s.io/pause.*"#sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10"#g' /etc/containerd/config.toml
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart containerd
[root@node1 ~]# systemctl restart kubelet

配置完成后,等待拉取完成,如下

[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 27m v1.35.3
node1 Ready <none> 18m v1.35.3
node2 Ready <none> 15m v1.35.3
[root@master ~]# kubectl get pods --all-namespaces -w
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-5kr6d 1/1 Running 0 14s
kube-flannel kube-flannel-ds-8kl8g 1/1 Running 0 14s
kube-flannel kube-flannel-ds-ct8x6 1/1 Running 0 14s
kube-system coredns-764897d7b-98249 1/1 Running 0 27m
kube-system coredns-764897d7b-wxxrv 1/1 Running 0 27m
kube-system etcd-master 1/1 Running 0 27m
kube-system kube-apiserver-master 1/1 Running 0 27m
kube-system kube-controller-manager-master 1/1 Running 0 27m
kube-system kube-proxy-9vnxf 1/1 Running 0 15m
kube-system kube-proxy-pz2xt 1/1 Running 0 18m
kube-system kube-proxy-rjfm7 1/1 Running 0 27m
kube-system kube-scheduler-master 1/1 Running 0 27m

集群部署成功

3、验证

简单验证

# 1. 查看所有节点状态(应该都是Ready)
[root@master ~]# kubectl get nodes

# 2. 查看所有系统组件Pod状态(应该都是Running)
[root@master ~]# kubectl get pods -n kube-system

# 3. 查看集群信息
[root@master ~]# kubectl cluster-info

部署nginx验证

[root@master ~]# kubectl create deployment nginx-test --image=nginx --replicas=2

或者下面的命令

[root@master ~]# kubectl create deployment nginx-test --image=docker.registry.k8s.com/library/nginx --replicas=2

1. kubectl K8s 的命令行工具,用来给集群发指令。
2. create 创建一个资源。
3. deployment 创建一种叫 “部署” 的 K8s 资源作用:管理一组 Pod,保证它们永远正常运行。
4. nginx-test 给这个 deployment 起的名字,随便起。
5. --image=nginx 告诉 K8s:我要运行的容器镜像 = nginxK8s 会自动去拉取官方最新版 Nginx 镜像。
6. --replicas=2 副本数 = 2意思是:我要同时启动 2 个完全一样的 Nginx 容器!

查看Pod创建状态(等待变成Running)
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-test-6ff8854996-h8ct2 1/1 Running 0 4s
nginx-test-6ff8854996-sss5x 1/1 Running 0 4s

查看pods分布的节点

[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-test-6ff8854996-h8ct2 1/1 Running 0 29s 10.244.2.7 node2 <none> <none>
nginx-test-6ff8854996-sss5x 1/1 Running 0 29s 10.244.1.6 node1 <none> <none>

查看部署详情

[root@master ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-test 2/2 2 2 93s
[root@master ~]# kubectl get replicaset
NAME DESIRED CURRENT READY AGE
nginx-test-6ff8854996 2 2 2 2m5s

暴露这个部署为服务(创建Service)

[root@master ~]# kubectl expose deployment nginx-test --port=80 --type=NodePort
service/nginx-test exposed

查看服务信息,找到暴露的端口

[root@master ~]# kubectl get svc nginx-test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-test NodePort 10.107.173.53 <none> 80:30503/TCP 38s

测试访问,任意节点都可

[root@master ~]# curl 192.168.137.136:30503

[root@master ~]# echo $?
0

[root@node1 ~]# curl 192.168.137.136:30503

[root@node1 ~]# echo $?
0

[root@node2 ~]# curl 192.168.137.136:30503

[root@node2 ~]# echo $?
0
访问正常

4、Dashboard(非必须)

Kubernetes Dashboard是 Kubernetes 官方提供的Web 可视化管理界面,用于通过图形化方式管理集群资源、监控应用状态与排查问题。重要提示:截至 2026 年,该项目已被官方归档、不再维护,官方推荐使用Headlamp作为替代。

4.1 部署headlamp

master

安装helm

[root@master ~]# helm version
version.BuildInfo{Version:"v3.20.1", GitCommit:"a2369ca71c0ef633bf6e4fccd66d634eb379b371", GitTreeState:"clean", GoVersion:"go1.25.8"}

[root@master ~]# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
[root@master ~]# chmod 700 get_helm.sh
[root@master ~]# ./get_helm.sh

添加 Headlamp 的 Helm 仓库

[root@master ~]# helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/

在 headlamp 命名空间中安装 Headlamp

[root@master ~]# helm install my-headlamp headlamp/headlamp --namespace headlamp --create-namespace

这个命令会创建一个名为headlamp的命名空间,并在其中部署 Headlamp 的相关 Pod 和服务

4.2 创建访问 ServiceAccount 和 ClusterRoleBinding

Headlamp 需要知道以谁的身份来访问集群。我们可以创建一个管理员级别的 ServiceAccount 来获得完整视图(仅供初始管理和学习使用,生产环境请遵循最小权限原则)。

创建 ServiceAccount 和对应的 ClusterRoleBinding

[root@master ~]# cat <<EOF | kubectl apply -f -
> apiVersion: v1
> kind: ServiceAccount
> metadata:
> name: headlamp-admin
> namespace: headlamp
> ---
> apiVersion: rbac.authorization.k8s.io/v1
> kind: ClusterRoleBinding
> metadata:
> name: headlamp-admin
> roleRef:
> apiGroup: rbac.authorization.k8s.io
> kind: ClusterRole
> name: cluster-admin
> subjects:
> - kind: ServiceAccount
> name: headlamp-admin
> namespace: headlamp
> EOF

为上面创建的用户生成一个长期有效的 Token,用于登录 Headlamp:

[root@master ~]# kubectl -n headlamp create token headlamp-admin --duration=8760h

复制并保存命令输出的一长串字符串,这就是你的登录密码。

4.3 访问

为了让外部能够访问 Headlamp 服务,我们将其 Service 类型改为NodePort

[root@master ~]# kubectl patch svc my-headlamp -n headlamp -p '{"spec":{"type":"NodePort"}}'

查看分配端口

[root@master ~]# kubectl get svc -n headlamp my-headlamp
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-headlamp NodePort 10.103.12.86 <none> 80:30485/TCP 3m29s

现在,你就可以在浏览器中通过https://<任意节点IP>:3xxxx访问 Headlamp 了。

若安装指定版本:

[root@master ~]# helm uninstall my-headlamp -n headlamp
release "my-headlamp" uninstalled
[root@master ~]# kubectl delete namespace headlamp
namespace "headlamp" deleted
[root@master ~]# helm search repo headlamp/headlamp --versions
NAME CHART VERSION APP VERSION DESCRIPTION
headlamp/headlamp 0.40.1 0.40.1 Headlamp is an easy-to-use and extensible Kuber...
headlamp/headlamp 0.40.0 0.40.0 Headlamp is an easy-to-use and extensible Kuber...
headlamp/headlamp 0.39.0 0.39.0 Headlamp is an easy-to-use and extensible Kuber...

[root@master ~]# helm install my-headlamp headlamp/headlamp \
> --namespace headlamp \
> --create-namespace \
> --version 0.40.0 \ 这里替换你要安装的版本
> --set service.type=NodePort \
> --set service.nodePort=30485

等待变为running
[root@master ~]# kubectl get pods -n headlamp -w

[root@master ~]# kubectl get svc -n headlamp

然后测试访问

查看pod详情

[root@master ~]# kubectl describe pod -n headlamp my-headlamp-86cbcd4f87-988zm | grep -A 5 Events

填入令牌token

http://www.cnnetsun.cn/news/1388937.html

相关文章:

  • SMUDebugTool全栈调试指南:从硬件交互到性能优化的认知升级之路
  • 通义千问1.8B-Chat快速体验:用chainlit前端,3步搭建个人AI助手
  • 6SL3244-0BB12-1FA0西门子总线型控制单元
  • Qwen3-Embedding-4B效果展示:多轮对话与长文档理解能力实测
  • DDColor智能修复老照片:ComfyUI可视化界面,操作简单效果惊艳
  • 使用VSCode开发StructBERT情感分类模型的技巧
  • Youtu-Parsing模型获取与部署:GitHub替代方案与国内镜像加速
  • 从‘拍清楚’到‘算得准’:手把手教你用海康工业相机搞定视觉定位与测量(附分辨率计算Excel模板)
  • VMware Unlocker深度解析:如何让macOS在虚拟机中完美运行
  • 高效解放双手:番茄小说下载工具全方位使用指南
  • Kafka集成Zookeeper安全加固实战:从漏洞扫描到权限配置全流程
  • 【Dify自动化评估系统实战指南】:从零搭建LLM-as-a-judge评估流水线,3天上线生产级AI评测能力
  • Gemini3.1Pro实战:C++ 高并发服务内存泄漏定位与工程级修复方案
  • Universal-x86-Tuning-Utility:释放x86处理器潜能的效能优化工具
  • AI开发者必读:DeepSeek-R1-Distill-Qwen-1.5B多场景部署趋势实战指南
  • CIFAR-10数据集下载与图片恢复保姆级教程(附Python代码)
  • 网易云音乐歌单数据分析:用Python和Matplotlib揭秘热门歌单的秘密
  • Qwen3-VL-8B AI聊天系统部署教程:快速搭建,免费使用
  • java微信小程序的宠物生活服务预约系统 宠物陪玩遛狗溜猫馆设计与实现 商家_
  • 【C++算法】DFS深度搜索-组队问题
  • Qwen3智能字幕对齐系统部署排错:常见问题与403 Forbidden解决方案
  • 手把手教你用DeepSeek-OCR-2:表格、标题、段落精准识别全攻略
  • 数字后端实战:ICG使能端setup违例的根源分析与优化策略
  • 如何用pywencai构建高效数据获取解决方案?3大核心优势解析
  • std::unique_lock 与 std::lock_guard
  • 别再只怪网络了!排查Moonlight/SteamLink串流失败的另一个关键:Windows会话状态
  • Windows任务栏分组管理终极指南:Taskbar Groups让桌面井井有条
  • Qwen2.5-VL-7B-Instruct与MySQL集成:构建智能问答知识库系统
  • Nanbeige 4.1-3B部署教程:OpenTelemetry集成实现像素终端全链路追踪
  • RexUniNLU实战:用零样本框架快速解析社交媒体热点话题