1 概述:

1.1 k3s是什么

k3s是经CNCF一致性认证的Kubernetes发行版,专为物联网及边缘计算设计。K3s 有以下增强功能:

  • 打包为单个二进制文件。
  • 使用基于sqlite3的轻量级存储后端作为默认存储机制(v1.19开始使用内置etcd)。同时支持使用 etcd3、MySQL 和 PostgreSQL 作为存储机制。
  • 封装在简单的启动程序中,通过该启动程序处理很多复杂的 TLS 和选项。
  • 默认情况下是安全的,对轻量级环境有合理的默认值。
  • 添加了简单但功能强大的batteries-included功能,例如:本地存储提供程序,服务负载均衡器,Helm controller 和 Traefik Ingress controller。
  • 所有 Kubernetes control-plane 组件的操作都封装在单个二进制文件和进程中,使 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。
  • 最大程度减轻了外部依赖性,K3s 仅需要 kernel 和 cgroup 挂载。 K3s 软件包需要的依赖项包括:
    • containerd(作为k3s-server或k3s-agent的子进程)
    • Flannel(作为k3s-server的线程)
    • CoreDNS(以pod的形式存在于集群中)
    • CNI
    • 主机实用程序(iptables、socat 等)
    • Ingress controller(Traefik)
    • 嵌入式服务负载均衡器(service load balancer)
    • 嵌入式网络策略控制器(network policy controller)

1.2 适用场景

K3s 适用于以下场景:

  • 边缘计算-Edge
  • 物联网-IoT
  • Development
  • ARM
  • 嵌 K8s

1.3 架构图

1.3.1 精简版

1.3.2 单master架构图

1.3.3 高可用架构图

2 单进程的细节

2.1 原k8s控制面板组件以线程形式存在

kubernetes控制面板中的组件(kube-apiserver、kube-scheduler、kube-controller-manager)、kube-proxy服务、flannel服务等是以进程形式存在节点上,在k3s,控制面板组件以系统线程形式存在。在代码中则是以协程方式启动组件。


单进程k3s server下有着多个线程,其实它们就是kube-apiserver等。

2.2 containerd以子进程形式存在

containerd是k3s默认的容器运行时,k3s server和k3s agent以子进程方式执行自带的containerd二进制文件(位于/var/lib/rancher/k3s/data/xxxxx/bin/目录下),因此containerd是k3s server或k3s agent的子进程。


通过ps命令,可见containerd是k3s server进程的子进程。

containerd二进制文件位于:/var/lib/rancher/k3s/data/77457d0b09d8b94d6f5029bcbc70f94b7ae9c50a08b539b76612e713ea818256/bin/目录下,可见它是k3s自带的。

[root@edge02 tmp]# lsof -p 8452 | grep containerd
container 8452 root  txt       REG              253,0 125747904  67178187 /var/lib/rancher/k3s/data/77457d0b09d8b94d6f5029bcbc70f94b7ae9c50a08b539b76612e713ea818256/bin/containerd
container 8452 root  mem-W     REG              253,0    262144 100961995 /var/lib/rancher/k3s/agent/containerd/io.containerd.metadata.v1.bolt/meta.db
container 8452 root  mem-W     REG              253,0     65536 100962004 /var/lib/rancher/k3s/agent/containerd/io.containerd.snapshotter.v1.overlayfs/metadata.db
container 8452 root    7uW     REG              253,0    262144 100961995 /var/lib/rancher/k3s/agent/containerd/io.containerd.metadata.v1.bolt/meta.db
container 8452 root   13u     unix 0xffff8ad44529d400       0t0    477044 /run/k3s/containerd/containerd.sock.ttrpc
container 8452 root   14u     unix 0xffff8ad44529cc00       0t0    477046 /run/k3s/containerd/containerd.sock

3 部署

3.1 部署环境

3.1.1 版本信息如下:

a、操作系统:centos 7.6
b、内核: 3.10
c、k3s版本:v1.21.1+k3s1

3.1.2 节点列表

IP地址 主机名 角色
192.168.101.177 edge01 master1
192.168.101.178 edge02 master2
192.168.101.179 edge03 master3
192.168.101.180 edge04 worker1

3.1.3 介质要求(在每个节点上执行)

需要下载k3s二进制文件,安装脚本k3s.sh,以及包含coredns等镜像的k3s-airgap-images-amd64.tar.gz。

cd /opt
wget https://github.com/k3s-io/k3s/releases/download/v1.21.1%2Bk3s1/k3s
wget https://github.com/k3s-io/k3s/releases/download/v1.21.1%2Bk3s1/k3s-airgap-images-amd64.tar.gz
curl -sfL https://get.k3s.io > k3s.sh

3.2 安装命令

3.2.1 master1执行的命令

# 位于master1
# master1的ip为192.168.101.177
cd /opt/
/bin/cp -f k3s /usr/local/bin/
chmod 755 k3s.sh
export INSTALL_K3S_VERSION=v1.21.1+k3s1
export INSTALL_K3S_EXEC="--cluster-init --disable traefik --disable-cloud-controlle --disable-network-policy"
export INSTALL_K3S_SKIP_DOWNLOAD=true
./k3s.sh server
gzip -d k3s-airgap-images-amd64.tar.gz
k3s ctr --namespace k8s.io image import k3s-airgap-images-amd64.tar
# token位于/var/lib/rancher/k3s/server/token文件
cat /var/lib/rancher/k3s/server/token
# 得知token为 K10e0d390ffe95e47bafc96eb6d4582796aa14f1486030731063d8f477713e194a4::server:c466dbcea8301a88ba669a8dfebfcfdf

token位于/var/lib/rancher/k3s/server/token文件,得知token为 K10e0d390ffe95e47bafc96eb6d4582796aa14f1486030731063d8f477713e194a4::server:c466dbcea8301a88ba669a8dfebfcfdf

3.2.2 master2执行的命令

# 位于master2
# master1的ip为192.168.101.177
cd /opt/
/bin/cp -f k3s /usr/local/bin/
chmod 755 k3s.sh
export K3S_MASTER_IP=192.168.101.177
export INSTALL_K3S_VERSION=v1.21.1+k3s1
export INSTALL_K3S_SKIP_DOWNLOAD=true
export K3S_URL=https://${K3S_MASTER_IP}:6443
export K3S_TOKEN="K10e0d390ffe95e47bafc96eb6d4582796aa14f1486030731063d8f477713e194a4::server:c466dbcea8301a88ba669a8dfebfcfdf"
./k3s.sh server
gzip -d k3s-airgap-images-amd64.tar.gz
k3s ctr --namespace k8s.io image import k3s-airgap-images-amd64.tar

3.2.3 master3执行的命令

#位于master3
#master1的ip为192.168.101.177
cd /opt/
/bin/cp -f k3s /usr/local/bin/
chmod 755 k3s.sh
export K3S_MASTER_IP=192.168.101.177
export INSTALL_K3S_VERSION=v1.21.1+k3s1
export INSTALL_K3S_SKIP_DOWNLOAD=true
export K3S_URL=https://${K3S_MASTER_IP}:6443
export K3S_TOKEN="K10e0d390ffe95e47bafc96eb6d4582796aa14f1486030731063d8f477713e194a4::server:c466dbcea8301a88ba669a8dfebfcfdf"
./k3s.sh server
gzip -d k3s-airgap-images-amd64.tar.gz
k3s ctr --namespace k8s.io image import k3s-airgap-images-amd64.tar

3.2.4 worker1执行的命令

# 位于worker1
# master1的ip为192.168.101.177
export K3S_MASTER_IP=192.168.101.177
export INSTALL_K3S_VERSION=v1.21.1+k3s1
export INSTALL_K3S_SKIP_DOWNLOAD=true
export K3S_URL=https://${K3S_MASTER_IP}:6443
export K3S_TOKEN="K10e0d390ffe95e47bafc96eb6d4582796aa14f1486030731063d8f477713e194a4::server:c466dbcea8301a88ba669a8dfebfcfdf"
./k3s.sh agent
gzip -d k3s-airgap-images-amd64.tar.gz
k3s ctr --namespace k8s.io image import k3s-airgap-images-amd64.tar

4 效果

5 总结

本文介绍了在centos7上以离线方式部署k3s集群的过程,并从ps等系统命令和部分源码两方面解释k3s是将原本以进程形式存在的控制面板组件以线程形式启动,自带containerd运行时,containerd是k3s进程的子进程。

离线安装k3s v1.21.1 和单进程原理相关推荐

  1. 离线安装K3S Server(v1.19.8+k3s1)

    离线安装K3S Server(v1.19.8+k3s1) 离线安装K3S Server 官方文档:https://rancher.com/docs/k3s/latest/en/installation ...

  2. centOS 7 离线安装 nginx 1.21

    NGINX 离线安装 centOS 7 离线安装 nginx 1.21.6 准备环境 1.离线 centOS 7 2.nginx 安装文件 (nginx-***.tar.gz 已放到下面的链接中,请自 ...

  3. k3s 卸载_离线安装K3S Server(v1.17.4+k3s1)

    整体的流程图 离线镜像包 k3s的bin包 关于文件对应的架构,参考如下表格 先查看系统的架构,通过命令uname -a即可以查看到架构,我现在这台服务器是在阿里云的CentOS7.6的服务器 下载离 ...

  4. K8S实战部署系列-K3S v1.22.5+k3s1(CentOS7.9)

    使用初始化完成系统 [root@master01 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 1.系统环境 名称 ...

  5. 轻量级Kubernetes之k3s:4:离线安装与部署

    k3s安装已经非常方便,考虑到企业内网无法直接联网的情况,可以考虑使用设定INSTALL_K3S_SKIP_DOWNLOAD进行安装.使用官方脚本无需做任何改动即可进行离线安装. 步骤1: 手动下载指 ...

  6. K3S 系列文章-RHEL7.8 离线有代理条件下安装 K3S

    一 基础信息 1.1 前提 本次安装的为 k3s 1.21.7+k3s1 VM 版本为 RHEL 7.8, 7.9 或 8.2, 8.3, 8.4(K3s 官网要求) VM YUM 仓库:已配置对应版 ...

  7. K3s离线安装-四种类型

    前 言 K3s 是一个轻量级的 Kubernetes 发行版,在 2020 年统计的 K3s 下载量中,K3s 的全球下载量已经超过 100 万次,每周平均被安装超过 2 万次,其中 30%的下载量来 ...

  8. 二进制安装Kubernetes(k8s) v1.21.13 IPv4/IPv6双栈

    二进制安装Kubernetes(k8s) v1.21.13 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了

  9. kubesphere 3.0离线安装

    离线安装 离线安装几乎与在线安装相同,不同之处是您必须创建一个本地仓库来托管 Docker 镜像.本教程演示了如何在离线环境中将 KubeSphere 安装到 Kubernetes 上. 开始下方步骤 ...

最新文章

  1. 生活有时会有点苦涩——一位第六年还没发paper的PHD的自述
  2. OnClickListener冲突的问题
  3. Spring系列(七):@FactoryBean注解用法介绍
  4. Android stduio之Plugin with id ‘com.android.application‘ not found解决办法
  5. java super.start,java – 在字节码中确定哪里是super()方法调用所有构造函数必须在JVM上执行...
  6. 不到2公里要价5400元,货拉拉还能拉多久?
  7. 字典树(Trie树)的实现及应用
  8. 《MySQL必知必会》学习笔记——第七章(数据过滤)
  9. 计算机组成cpu性能公式,2020考研计算机组成原理知识点:计算机性能指标
  10. stm8L 触摸库使用教程 一步一步
  11. 火狐(firefox)使用Tilt插件实现3D视图查看网页+解决安装tilt.xpi插件安装失败问题
  12. 【中间件技术】第四部分 Web Service规范(10) Web Service规范
  13. Ubuntu安装eog遇到的坑及解决方案
  14. 阿里云开发者大会观后感
  15. 树莓派驱动数码管c 语言,用树莓派驱动八段数码管实现倒计时
  16. PAT 甲级 1014. Waiting in Line
  17. FFmpeg流拼接滤镜concat原理与使用注意事项
  18. Redis的Java客户端之Jedis(Jedis)
  19. 【详解】位运算符:位逻辑运算符,位移运算符(<<左移,>>右移)
  20. 全国快递物流查询-快递单号查询接口api

热门文章

  1. LVI-SAM坐标系外参分析与代码修改,以适配各种数据集
  2. 2022 SWPU NSS新生赛|MISC知识点
  3. 服务器线路有几种分类?
  4. 赛道持续降温!又一家自动驾驶公司裁员,市值曾超50亿美元
  5. PPTP 配置PNS 的基本
  6. Vim插件#Vim Project项目管理
  7. 高级办公自动化试题及答案(一)
  8. 驴商人和胡萝卜的算法逻辑思维问题
  9. 古希腊就有象形文字为什么西方人却用字母文字?
  10. DNS中的SPF记录