一、获取系统基础硬件信息
#基础架构 (输出参考:如果是 x86_64 或 aarch64,即可完美支持。)
pig@vm-debian-13:~$ uname -m
x86_64
#处理器 (K3s 单节点极其轻量,最低仅需 1核 CPU 和 512MB 内存(推荐 1核1G 以上)。)
pig@vm-debian-13:~$ lscpu | grep -E "Model name|CPU\(s\):"
CPU(s): 2
Model name: 13th Gen Intel(R) Core(TM) i5-13400
NUMA node0 CPU(s): 0,1
#内存大小
pig@vm-debian-13:~$ free -m
total used free shared buff/cache available
Mem: 3883 886 1917 0 1334 2997
Swap: 0 0
安装脚本
官方的脚本太慢,国内用户使用这个脚本进行加速
$ curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
检查k3s服务状态
$ systemctl status k3s
查看集群节点状态
$ sudo kubectl get node
查看集群中运行的pod
$ sudo kubectl get pods -A
## 二、配置kubectl (普通用户) {.wp-block-heading}
普通用户执行命令 kubectl get nodes 提示没有权限
pig@vm-debian:~$ mkdir -p ~/.kube #创建 .kube 目录
pig@vm-debian:~$ sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config #复制 K3s 默认配置
pig@vm-debian:~$ sudo chown $USER:$USER ~/.kube/config #修改文件所属用户
pig@vm-debian:~$ echo 'export KUBECONFIG=$HOME/.kube/config' >> ~/.bashrc #配置环境变量
source ~/.bashrc
pig@vm-debian:~$ kubectl get nodes #验证配置
NAME STATUS ROLES AGE VERSION
vm-debian-13 Ready control-plane 175m v1.35.5+k3s1
如上,说明当前普通用户已经可以正常访问 Kubernetes API。
运维思考
生产环境中,不建议长期使用root用户进行Kubernetes管理。
推荐使用普通用户,通过 sudo 执行系统级操作(如管理服务、修改配置),而将 kubectl 配置为普通用户直接使用。
这样既符合Linux最小权限原则,也更符合企业运维的实际工作方式。
## 三、配置dashboard {.wp-block-heading}为了避免下载失败的情况,这里使用国内可访问的镜像仓库
### 3.1下载YAML {.wp-block-heading}wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
### 3.2修改类似内容 {.wp-block-heading}
找到类似内容:
image: kubernetesui/dashboard:v2.7.0
改成(示例):
image: docker.m.daocloud.io/kubernetesui/dashboard:v2.7.0
再找到:
image: kubernetesui/metrics-scraper:v1.0.8
改成:
image: docker.m.daocloud.io/kubernetesui/metrics-scraper:v1.0.8
### 3.3开始部署 {.wp-block-heading}
$ kubectl apply -f recommended.yaml
namespace/kubernetes-dashboard unchanged
serviceaccount/kubernetes-dashboard unchanged
service/kubernetes-dashboard unchanged
secret/kubernetes-dashboard-certs unchanged
secret/kubernetes-dashboard-csrf unchanged
secret/kubernetes-dashboard-key-holder unchanged
configmap/kubernetes-dashboard-settings unchanged
role.rbac.authorization.k8s.io/kubernetes-dashboard unchanged
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard unchanged
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard unchanged
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard unchanged
deployment.apps/kubernetes-dashboard configured
service/dashboard-metrics-scraper unchanged
deployment.apps/dashboard-metrics-scraper configured
3.4验证是否成功
这里有2个之前创建创建的pod
$ kubectl get pods -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7764d6f57c-r26sm 0/1 ContainerCreating 0 13m
dashboard-metrics-scraper-8d46b45f6-4c6bv 0/1 ContainerCreating 0 23h
kubernetes-dashboard-659cf4fdd5-l2gp9 0/1 ContainerCreating 0 13m
kubernetes-dashboard-b44857bbb-9k9kc 0/1 ContainerCreating 0 23h
这里READY一直是0,失败了,需要 排查一下。
查看pod卡在哪里了
kubectkubectl describe pod -n kubernetes-dashboard-659cf4fdd5-l2gp9
No resources found in kubernetes-dashboard-659cf4fdd5-l2gp9 namespace.
pig@vm-debian:~$
pig@vm-debian:~$ kubectl describe pod -n kubernetes-dashboard dashboard-metrics-scraper-7764d6f57c-r26sm |tail
Warning FailedCreatePodSandBox 17m kubelet Failed to create pod sandbox: rpc error: code = DeadlineExceeded desc = failed to start sandbox "74e4795e553dc82c49e53c89a724293525e65e3134fa2ae09787ff197831d938": failed to get sandbox image "rancher/mirrored-pause:3.6": failed to pull image "rancher/mirrored-pause:3.6": failed to pull and unpack image "docker.io/rancher/mirrored-pause:3.6": failed to resolve reference "docker.io/rancher/mirrored-pause:3.6": failed to do request: Head "https://registry-1.docker.io/v2/rancher/mirrored-pause/manifests/3.6": dial tcp 182.50.139.56:443: i/o timeout-n kubernetes-dashboard-659cf4fdd5-l2gp9
No resources found in kubernetes-dashboard-659cf4fdd5-l2gp9 namespace.
pig@vm-debian:~$
pig@vm-debian:~$ kubectl describe pod -n kubernetes-dashboard dashboard-metrics-scraper-7764d6f57c-r26sm |tail
Warning FailedCreatePodSandBox 17m kubelet Failed to create pod sandbox: rpc error: code = DeadlineExceeded desc = failed to start sandbox "74e4795e553dc82c49e53c89a724293525e65e3134fa2ae09787ff197831d938": failed to get sandbox image "rancher/mirrored-pause:3.6": failed to pull image "rancher/mirrored-pause:3.6": failed to pull and unpack image "docker.io/rancher/mirrored-pause:3.6": failed to resolve reference "docker.io/rancher/mirrored-pause:3.6": failed to do request: Head "https://registry-1.docker.io/v2/rancher/mirrored-pause/manifests/3.6": dial tcp 182.50.139.56:443: i/o timeout
Kubernetes 无法拉取 pause 镜像(sandbox基础镜像)
解决方案:
#修改 K3s 的 pause 镜像
$ sudo vi /etc/rancher/k3s/registries.yaml #编辑以下文件
mirrors:
docker.io:
endpoint:
- "https://docker.m.daocloud.io"
#然后进行重启
$sudo systemctl restart k3s
$ kubectl get pods -n kubernetes-dashboard #这个时候已经创建成功了
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7764d6f57c-r26sm 1/1 Running 0 28m
kubernetes-dashboard-659cf4fdd5-l2gp9 1/1 Running 1 (2m45s ago) 28m
3.4配置Dashboard进行访问
可以通过 kubectl proxy,或者配置NodePort进行进行访问。
我们这里通过配置NodePort来继续。
$kubectl edit svc -n kubernetes-dashboard kubernetes-dashboard
#找到:
type: ClusterIP
#修改成
type: NodePort
$kubectl get svc -n kubernetes-dashboard #查看端口
主机访问:https://ip:port
生成token
$ kubectl -n kubernetes-dashboard create token admin-user
eyJhbGciOiJSUz.....qGeyA #这里进行省略输出
获取token并进行登录
至此,K3s 单节点环境已完成基础验证,包括:
- kubectl 可用
- Pod 正常运行
- Dashboard 可访问并登录成功