k3s入门--踩坑解决AutoK3s运行K3d集群

先简单介绍下各个名词,k3s理解为是k8s的简化版只保留核心模块。

k3s集群怎么搭建呢?一种熟练的会敲命令行,另一群入门的会用可视化界面搭建集群,即AutoK3s

k3s集群运行在什么环境呢?一种是普遍的有多台linux机器(或虚拟机),另一种入门的就是在一台linux机器上,让k3s集群运行在docker容器里面。

今天我们就在一台虚拟机上用 AutoK3s 可视化界面搭建一套多节点的 k3s 集群,这种集群的类型官方就叫 k3d,即 k3s in docker 模式。

这篇文章视频 www.bilibili.com/video/BV1g3...

一些参考资料:

rancher官网

【K3s踩坑记录】1-集群搭建

使用K3s快速搭建集群

国内镜像地址

干净centos服务器安装docker

swift 复制代码
# 设置yum国内源
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
          -e 's|^#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' \
          -i.bak \
          /etc/yum.repos.d/CentOS-*.repo

# 同步
yum makecache

#关闭防火墙
systemctl stop firewalld 
systemctl disable firewalld

#关闭selinx
setenforce 0
sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/sysconfig/selinux
 
#安装 docker 依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

#配置 docker-ce 国内 yum 源(阿里云)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装 docker-ce
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker

#修改daemon
mkdir -p /etc/docker
  echo -e "{
  \"registry-mirrors\": [
    \"https://dockerpull.org\",
    \"https://s1qalke8.mirror.aliyuncs.com\",
    \"https://registry.docker-cn.com\",
    \"http://hub-mirror.c.163.com\",
    \"https://docker.mirrors.ustc.edu.cn\"
  ],
  \"insecure-registries\":[],
  \"log-driver\": \"json-file\",
  \"log-opts\": {
    \"max-size\": \"100m\",
    \"max-file\": \"3\",
    \"labels\": \"production_status\",
    \"env\": \"os,customer\"
  }
}" > /etc/docker/daemon.json

# 重启docker
systemctl daemon-reload
systemctl restart docker

运行AutoK3s并支持k3d

arduino 复制代码
docker run -itd --restart=unless-stopped --net host -v /var/run/docker.sock:/var/run/docker.sock cnrancher/autok3s:v0.6.0

现在可以访问8080端口打开AutoK3sUI界面配置集群

新建集群

在Cluster界面,点Create新建,选k3d,点开Advance

设置Ports

注意端口范围必须 30000-32767,其中30181和30180可以用同一个端口,也可不同

java 复制代码
30181:30180@loadbalancer

更多格式参考

java 复制代码
30182:30180@agent:0
30180:30180@loadbalancer

设置Registry

lua 复制代码
mirrors:
  docker.io:
    endpoint:
      - "https://docker.linkedbus.com"
      - "https://dockerpull.org"
      - "https://docker.xuanyuan.me"
      - "https://registry.cn-hangzhou.aliyuncs.com/"
      - "https://registry.dockermirror.com"
  quay.io:
    endpoint:
      - "https://quay.tencentcloudcr.com/"
  registry.k8s.io:
    endpoint:
      - "https://registry.aliyuncs.com/v2/google_containers"
  gcr.io:
    endpoint:
      - "https://gcr.m.daocloud.io/"
  k8s.gcr.io:
    endpoint:
      - "https://registry.aliyuncs.com/google_containers"
  ghcr.io:
    endpoint:
      - "https://ghcr.m.daocloud.io/"

成功运行后,看虚拟机多了三个docker容易,分别是我们新建的 master,worker和loadbalancer,如果刚才master和worker写多,也会相应多容器,后面我们部署的应用就会在这些master和worker里面运行。

填坑修复agent执行kubectl命令报错

在两个节点中去执行 kubuctl 命令,发现只有 server节点有效,agent节点报错

需要拷贝server节点的配置文件到agent节点中,并修改里面url地址

sql 复制代码
kubectl describe pod

server 节点执行命令正常

agent 节点执行命令报错 The connection to the server localhost:8080 was refused - did you specify the right host or port?

现在要把server节点的 kubeconfig.yaml 拷贝到 agent 节点 k3s.yaml 文件

查看 server 的 containerid 是 b88f5391ac22

查看 agent 的 containerid 是 1e190b196813

bash 复制代码
docker cp b88f5391ac22:/output/kubeconfig.yaml k3s.yaml

docker inspect b88f5391ac22

看到其中ip地址

修改 k3s.yaml 地址

复制代码
vi k3s.yaml
bash 复制代码
# 在agent中新建目录
docker exec 1e190b196813 mkdir /.kube

# 复制到agent中
docker cp k3s.yaml 1e190b196813:/.kube/config

# 重启agent节点
docker restart 1e190b196813

现在一切正常了,agent中也可执行kubectl命令

在集群中部署nginx应用

打开Explorer

点Explorer进入管理,路由出错,点 Back to Home

在 Deployments 中 Create 新建应用

我使用我腾讯云上镜像

bash 复制代码
ccr.ccs.tencentyun.com/rootegg/nginx:1.27.2

注意要填前面loaderbalance的30180端口,这样我们就可以用30181来访问nginx了

可以到前面cluster页面查看部署日志

sql 复制代码
kubectl describe pod

显示 active 就成功了,如果这里一直显示 Deployment does not have minimum availability. 刚才那句,就说明刚才registry设置docker.io镜像那里地址被墙了,要重新换国内镜像地址。

成功访问nginx

相关推荐
戳气球的爱玛镇皇后19 小时前
BroadcastChannel 使用总结
前端
戳气球的爱玛镇皇后20 小时前
wps加载项不同窗口间通信
前端
心在飞扬20 小时前
LangGraph 基础知识
前端·后端
Lee川21 小时前
深入浅出JavaScript事件机制:从捕获冒泡到事件委托
前端·javascript
光影少年21 小时前
async/await和Promise的区别?
前端·javascript·掘金·金石计划
恋猫de小郭21 小时前
Flutter 发布官方 Skills ,Flutter 在 AI 领域再添一助力
android·前端·flutter
心在飞扬21 小时前
工具调用出错捕获提升程序健壮性
前端·后端
HelloReader21 小时前
Tauri 命令作用域(Command Scopes)精细化控制你的应用权限
前端
心在飞扬21 小时前
基于工具调用的智能体设计与实现(*)
前端·后端
心在飞扬21 小时前
函数调用快速提取结构化数据使用技巧
前端·后端