【K3s 系列 01】从零搭建 K3s

一、获取系统基础硬件信息

#基础架构 (输出参考:如果是 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

K3s 官方经典架构与安装文档

## 二、配置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 可访问并登录成功
本文阅读量: ---