文章详细介绍了如何在国内配置K3s镜像源、部署仪表盘、配置角色和权限、获取仪表盘token、进行端口转发以及使用nerdctl和buildkitd构建容器镜像的方法,并附带了注意事项和验证步骤

k3s国内下载地址

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

配置镜像源

tee /etc/rancher/k3s/registries.yaml <<'EOF'
mirrors:
  "docker.io":
    endpoint:
      - "https://docker.m.daocloud.io"
      - "https://docker.mirrors.ustc.edu.cn"
      - "https://hub-mirror.c.163.com"
      - "https://mirror.baidubce.com"
      - "https://docker.nju.edu.cn"
      - "https://mirrors.tuna.tsinghua.edu.cn"
      - "https://registry-1.docker.io"
EOF

部署仪表盘

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

配置仪表盘角色

dashboard.admin-user-role.yml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: admin-user
    namespace: kubernetes-dashboard

dashboard.admin-user.yml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

部署用户角色配置

kubectl create -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml

获取仪表盘 token

kubectl -n kubernetes-dashboard create token admin-user

端口转发

–address 0.0.0.0 可以远程访问

kubectl port-forward -n kubernetes-dashboard --address 0.0.0.0 svc/kubernetes-dashboard 8443:443

以NodePort的方式进行暴露

直接端口转发命令需要一直保持命令行运行状态,如果需要后台需要使用 NodePort 来对外暴露服务。

apiVersion: v1
kind: Service
metadata:
  name: dashboard-nodeport
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  selector:
     k8s-app: kubernetes-dashboard
  ports:
    - name: dashboard-https
      port: 443 #应用端口
      targetPort: 8443 #pod端口
      nodePort: 30443 # 转发端口

访问https://192.168.204.137:30443/地址,根据自己服务器实际情况来。

安装nerdctl + buildkitd 构建容器镜像

nerdctl地址:https://github.com/containerd/nerdctl/releases/download/v1.5.0/nerdctl-1.5.0-linux-amd64.tar.gz

buildkitd地址:https://github.com/moby/buildkit/releases/download/v0.12.1/buildkit-v0.12.1.linux-amd64.tar.gz

1. 安装buildkitd

解压缩包

tar xf buildkit-v0.12.1.linux-amd64.tar.gz

复制两个文件夹到bin目录下

cp bin/buildkitd bin/buildctl /usr/local/bin/

创建service文件

[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true
User=root
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

启动buildkitd服务

systemctl daemon-reload
systemctl enable buildkitd --now
# systemctl enable buildkitd --now
# 相当于systemctl enable buildkitd 和 systemctl start buildkitd

2. 安装nerdctl

解压缩

tar xf nerdctl-1.5.0-linux-amd64.tar.gz 

复制到bin目录下

mv nerdctl /usr/local/bin/

由于直接使用的k3s的容器,所以没有/run/containerd/containerd.sock,使用nerdctl会报错

创建符号链接

ln -sf /run/k3s/containerd/containerd.sock /run/containerd/containerd.sock

# 验证链接
ls -la /run/containerd/containerd.sock

3. 注意事项

nerdctl拉取的镜像默认在default命名空间,这样子k3s查询不到,部署会有问题。

方案1:拉取的时候指定命名空间k8s.io

nerdctl -n k8s.io pull docker.1ms.run/library/nginx:alpine3.22

方案2:修改环境变量

echo 'export CONTAINERD_NAMESPACE=k8s.io' >> ~/.bashrc
source ~/.bashrc

方案3:修改nerdctl配置文件(推荐)

mkdir -p /etc/nerdctl
echo 'namespace = "k8s.io"' | tee /etc/nerdctl/nerdctl.toml

验证nerdctl命名空间

验证,使用nerdctl拉取镜像,如果在crictl查询出来就是成功了

nerdctl pull docker.1ms.run/library/nginx:alpine3.22

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持5186建站网。

您可能感兴趣的文章:

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。