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

相关推荐
崔庆才丨静觅17 分钟前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment20 分钟前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅35 分钟前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊37 分钟前
jwt介绍
前端
爱敲代码的小鱼44 分钟前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
Cobyte1 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
NEXT061 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
剪刀石头布啊1 小时前
生成随机数,Math.random的使用
前端
剪刀石头布啊1 小时前
css外边距重叠问题
前端
剪刀石头布啊1 小时前
chrome单页签内存分配上限问题,怎么解决
前端