首页 > 其他分享 >K3s - 轻量级 Kubernetes

K3s - 轻量级 Kubernetes

时间:2024-03-06 15:37:58浏览次数:38  
标签:k3s K3s -- K3S system server rancher Kubernetes 轻量级

一、k3s介绍

1.1、什么是k3s

中文网站: http://docs.rancher.cn/docs/k3s/quick-start/_index/

k3s是经过CNCF认证的由Rancher公司开发维护的一个轻量级的 Kubernetes 发行版,内核机制还是和 k8s 一样,但是剔除了很多外部依赖以及 K8s 的 alpha、beta 特性,同时改变了部署方式和运行方式,目的是轻量化 K8s,简单来说,K3s 就是阉割版 K8s,消耗资源极少。它主要用于边缘计算、物联网等场景。K3s 具有以下特点:

1)安装简单,占用资源少,只需要512M内存就可以运行起来;
2)apiserver 、schedule 等组件全部简化,并以进程的形式运行在节点上,把程序都打包为单个二进制文件,每个程序只需要占用100M内存;
3)使用基于sqlite3的轻量级存储后端作为默认存储机制。同时支持使用etcd3、MySQL 和PostgreSQL作为存储机制;
4)默认使用 local-path-provisioner 提供本地存储卷;
5)默认安装了Helm controller 和 Traefik Ingress controller;
6)所有 Kubernetes control-plane 组件的操作都封装在单个二进制文件和进程中,使 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。
7)减少外部依赖,操作系统只需要安装较新的内核(centos7.6就可以,不需要升级内核)以及支持cgroup即可,k3s安装包已经包含了containerd、Flannel、CoreDNS,非常方便地一键式安装,不需要额外安装Docker、Flannel等组件。

1.2、边缘计算

 

1.3、k3s架构

1.3.1、单节点的k3s架构

 


1)k3s server节点是运行k3s server命令的机器(裸机或者虚拟机),而k3s Agent 节点是运行k3s agent命令的机器。

2)单点架构只有一个控制节点(在 K3s 里叫做server node,相当于 K8s 的 master node),而且K3s的数据存储使用 sqlite 并内置在了控制节点上

3)在这种配置中,每个 agent 节点都注册到同一个 server 节点。K3s 用户可以通过调用server节点上的K3s API来操作Kubernetes资源。

1.3.2、高可用的K3S架构

 


虽然单节点 k3s 集群可以满足各种用例,但对于 Kubernetes control-plane 的正常运行至关重要的环境,可以在高可用配置中运行 K3s。一个高可用 K3s 集群由以下几个部分组成:

1)K3s Server 节点:两个或者更多的server节点将为 Kubernetes API 提供服务并运行其他 control-plane 服务

2)外部数据库:外部数据存储(与单节点 k3s 设置中使用的嵌入式 SQLite 数据存储相反)

二、部署

主机信息:

# cat /etc/hosts
10.0.8.105      k3s-master     www.saneri.io
10.0.8.116      k3s-work-01
10.0.8.117      k3s-work-02

因为k3s的默认容器运行环境为containerd,本文指定容器运行环境为docker,所以各节点就需要先安装docker环境

安装docker服务:

复制代码
安装docker环境依赖包
# yum install yum-utils device-mapper-persistent-data lvm2
添加阿里云镜像加上服务
# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos//docker-ce.repo
#安装docker镜像地址
#查看包含docker版本
# yum list |grep docker-ce #从高到底列出版本  yum list docker-ce.x86_64  --showduplicates | sort -r

# 安装最新版本
# yum install -y docker-ce 

#安装指定版本,比如指定18的
# yum -y install docker-ce-18.06.1.ce-3.el7
启动docker并查看版本
# systemctl enable docker && systemctl start docker
# docker --version
复制代码

在Master节点上安装k3s:

复制代码
[root@k3s-master ~]# curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server --docker
[INFO]  Finding release for channel stable
[INFO]  Using v1.21.3+k3s1 as release
[INFO]  Downloading hash http://rancher-mirror.cnrancher.com/k3s/v1.21.3-k3s1/sha256sum-amd64.txt
[INFO]  Skipping binary downloaded, installed k3s matches hash
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos, subscription-manager
......

[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
[root@k3s-master ~]#
复制代码

安装完成之后,服务会自动启动,查看服务状态.

复制代码
[root@k3s-master ~]# systemctl status k3s
● k3s.service - Lightweight Kubernetes
   Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-08-27 16:13:04 CST; 15min ago
     Docs: https://k3s.io
 Main PID: 20452 (k3s-server)
   CGroup: /system.slice/k3s.service
           └─20452 /usr/local/bin/k3s server
复制代码

在Worker节点上安装k3s:

要在Woker节点上安装k3s,我们应该将K3S_URL以及K3S_TOKEN或K3S_CLUSTER_SECRET环境变量一起传递。

K3S_TOKEN在第一个节点k3s-master上的/var/lib/rancher/k3s/server/node-token中创建.

[root@k3s-master~]# cat /var/lib/rancher/k3s/server/node-token 
K10a3faef2c7c35eae8a485434cd2e13fa122ba11f96dd2c81518103f399954d7c3::server:77dfc7de49b279c749053375bf9f48a0
[root@k3s-master~]# 

将worker节点加入到k3s集群中,将运行如下命令:

k3s-work-01 加入集群:

curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://k3s-master:6443 \
K3S_TOKEN=K10c11ceb3aefefa01455648cbb57941da65423101aaad5f70d8d6df55b8887a301::server:4edb14a7e730ff50548cb19d7386d887 \
INSTALL_K3S_EXEC="--docker" sh - 

k3s-work-02加入集群:

curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://k3s-master:6443 \
K3S_TOKEN=K10c11ceb3aefefa01455648cbb57941da65423101aaad5f70d8d6df55b8887a301::server:4edb14a7e730ff50548cb19d7386d887 \
INSTALL_K3S_EXEC="--docker" sh - 

查看k3s-work服务状态:

复制代码
# systemctl status k3s-agent
● k3s-agent.service - Lightweight Kubernetes
   Loaded: loaded (/etc/systemd/system/k3s-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-08-27 16:43:05 CST; 1s ago
     Docs: https://k3s.io
  Process: 10226 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
  Process: 10224 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
 Main PID: 10229 (k3s-agent)
    Tasks: 9
   Memory: 37.5M
   CGroup: /system.slice/k3s-agent.service
           └─10229 /usr/local/bin/k3s agent
复制代码

这样如果集群状态都正常,在master节点查看k3s集群。

[root@k3s-master ~]# kubectl get nodes
NAME              STATUS   ROLES                  AGE     VERSION
k3s-master        Ready    control-plane,master   3h54m   v1.21.3+k3s1
k3s-work-01       Ready    <none>                 3h27m   v1.21.3+k3s1
k3s-work-02       Ready    <none>                 3h28m   v1.21.3+k3s1

查看pod信息;

复制代码
[root@k3s-master ~]# kubectl config get-clusters 
NAME
default
[root@k3s-master ~]# kubectl cluster-info 
Kubernetes control plane is running at https://127.0.0.1:6443
CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@k3s-master ~]# kubectl get pod -A
NAMESPACE                 NAME                                      READY   STATUS      RESTARTS   AGE
kube-system               local-path-provisioner-5ff76fc89d-k4w4b   1/1     Running     0          3h57m
kube-system               metrics-server-86cbb8457f-rfjht           1/1     Running     0          3h57m
kube-system               helm-install-traefik-78d4b                0/1     Completed   0          3h57m
kube-system               coredns-854c77959c-qpmrx                  1/1     Running     0          3h57m
kube-system               traefik-6f9cbd9bd4-fpxgj                  1/1     Running     0          3h57m
kube-system               svclb-traefik-mkhtk                       2/2     Running     0          3h57m
kube-system               svclb-traefik-hlk88                       2/2     Running     0          3h31m
kube-system               svclb-traefik-dhzvq                       2/2     Running     0          3h30m
cattle-system             rancher-5d6c49674d-mlh5r                  1/1     Running     0          3h1m
fleet-system              gitjob-568c57cfb9-skm7c                   1/1     Running     0          3h1m
fleet-system              fleet-controller-79554fcbf5-9xwvd         1/1     Running     0          3h1m
cattle-system             rancher-5d6c49674d-gnb7q                  1/1     Running     0          3h1m
cattle-system             rancher-5d6c49674d-xdrfr                  1/1     Running     1          3h1m
fleet-system              fleet-agent-d59db746-q5cbb                1/1     Running     0          3h
cattle-system             rancher-webhook-6cccfd96b5-fh7w6          1/1     Running     0          3h
rancher-operator-system   rancher-operator-595ddc6db9-ppwtl         1/1     Running     0          3h
cattle-system             rancher-5d6c49674d-lbl5q                  1/1     Running     0          171m
cattle-system             rancher-5d6c49674d-jvjkb                  1/1     Running     0          171m
复制代码

至此,k3s集群就部署成功,如果需要高级配置请参考k3s官方文档..

卸载 K3s:
如果您使用安装脚本安装了 K3s,那么在安装过程中会生成一个卸载 K3s 的脚本。
要从 server 节点卸载 K3s,请运行:

# /usr/local/bin/k3s-uninstall.sh

要从 agent 节点卸载 K3s,请运行:

# /usr/local/bin/k3s-agent-uninstall.sh

 安装指定版本k3s:

复制代码
master端执行如下:
# export INSTALL_K3S_VERSION=v1.20.6+k3s1
# curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server --docker
# systemctl status k3s


agent加入master集群:

export K3S_URL=https://10.0.8.105:6443
export K3S_TOKEN="K10a3faef2c7c35eae8a485434cd2e13fa122ba11f96dd2c81518103f399954d7c3::server:77dfc7de49b279c749053375bf9f48a0"

curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_EXEC="--docker" sh -

查看服务状态:
# systemctl status k3s-agent

在master上查看集群状态:
# kubectl get nodes
NAME              STATUS   ROLES                  AGE   VERSION
k3s-master       Ready    control-plane,master   27m   v1.20.6+k3s1
k3s-work-01       Ready    <none>                 19s   v1.20.6+k3s1
k3s-work-02       Ready    <none>                 82s   v1.20.6+k3s1
复制代码

K3s设置环境变量的选项:

目前版本的k3s提供的安装选项信息如下所示:

安装时的环境变量 设定值 设定说明
INSTALL_K3S_SKIP_DOWNLOAD true、false 设定为true时,将不会下载k3s的二进制文件
INSTALL_K3S_SYMLINK skip、force 设定为skip时不会创建链接
INSTALL_K3S_SKIP_START true、false 设定为true时将不会启动k3s服务
NSTALL_K3S_VERSION 版本 如果不指定时将会从github上下载最新版本的k3s
INSTALL_K3S_BIN_DIR 安装目录 k3s二进制文件的安装目录,缺省时使用/usr/local/bin
INSTALL_K3S_BIN_DIR_READ_ONLY true、false 设定为true时不会向INSTALL_K3S_BIN_DIR目录下生成文件,会强制设定INSTALL_K3S_SKIP_DOWNLOAD为true
INSTALL_K3S_SYSTEMD_DIR sytemd服务目录 设定systemd服务所使用的目录,缺省使用/etc/systemd/system
INSTALL_K3S_EXEC 脚本参数 传递给k3s服务的参数,可以指定agent或者server。
NSTALL_K3S_NAME systemd服务名称 缺省使用k3s作为systemd服务名,可以通过此环境变量进行修改,一旦修改会将前缀设定为k3s-
INSTALL_K3S_TYPE systemd服务的类型 可以指定sytemd的类型,如未指定,server的情况下为notify,其他为exec
K3S_* systemd服务所使用到的环境变量 使用K3S_开头的环境变量是为systemd服务所预留的,比如K3S_URL、K3S_TOKEN与K3S_CLUSTER_SECRET等。

K3s参数化部署,添加变量和参数:

复制代码
# # k3s env
export INSTALL_K3S_MIRROR=cn
export INSTALL_K3S_CHANNEL=stable
export INSTALL_K3S_SKIP_SELINUX_RPM=true
export INSTALL_K3S_SELINUX_WARN=true
export INSTALL_K3S_VERSION=v1.20.6+k3s1
export INSTALL_K3S_EXEC=server

# Master端执行:
bash k3s-install.sh     --flannel-backend=vxlan --node-name=node-02 --node-ip=192.168.10.20 --docker --data-dir=/data/k3s \
--tls-san=k3s-test.saneri.io --tls-san=192.168.10.20 --tls-san=192.168.10.30 --tls-san=192.168.10.40

#Master端查看token地址:
[root@node-02 server]# cat /data/k3s/server/node-token 
K107860e4019f096644ef537b341f881bb8d73b4f901b49d5e575e1f492de9e9350::server:2fd1020026331c20b6b78a6c8d49a548

# work加入集群:
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://node-02:6443 \
K3S_TOKEN=K107860e4019f096644ef537b341f881bb8d73b4f901b49d5e575e1f492de9e9350::server:2fd1020026331c20b6b78a6c8d49a548 \
INSTALL_K3S_EXEC="--docker" sh - 
复制代码

文档地址: https://docs.rancher.cn/docs/k3s/installation/install-options/server-config/_index

参考文档:

    https://docs.rancher.cn/docs/k3s/_index

    https://blog.csdn.net/liumiaocn/article/details/103249803

    https://www.cnblogs.com/rancherlabs/p/11775610.html

基于k3s平台,使用Helm3安装Rancher2.5.9高可用集群

安装Helm3,在master节点安装:

# wget -c https://get.helm.sh/helm-v3.6.2-linux-amd64.tar.gz
# tar zxvf helm-v3.6.2-linux-amd64.tar.gz
# cp -rp  linux-amd64/helm  /usr/local/bin/helm && chmod +x /usr/local/bin/helm
# helm version

执行helm命令时报错:

# helm list
Error: Kubernetes cluster unreachable

导入环境变量即可:
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

生成自签证书,脚本域名就是默认的:www.rancher.local,需要修改域名直接更改脚本即可,本节域名为www.saneri.io。

# bash  create-key.sh  --ssl-size=2048 --ssl-date=3650
 create-key.sh

创建 rancher 的 namespace:

# kubect create namespace cattle-system

helm 渲染中 --set privateCA=true 用到的证书.

kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem

helm 渲染中 --set additionalTrustedCAs=true 用到的证书

cp cacerts.pem ca-additional.pem
kubectl -n cattle-system create secret generic tls-ca-additional --from-file=ca-additional.pem

helm 渲染中 --set ingress.tls.source=secret 用到的证书和密钥

kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=tls.crt --key=tls.key

通过Helm将helm 包下载到本地:

helm fetch rancher-stable/rancher
当前目录会多一个rancher-2.5.9.tgz

使用以下命令安装rancher:

复制代码
helm install -name rancher rancher-2.5.9.tgz \
--set hostname=www.saneri.io \
--set ingress.tls.source=secret \
--set privateCA=true \
--set useBundledSystemChart=true \
--namespace cattle-system
复制代码

查询helm部署服务 

复制代码
[root@k3s-master~]# helm list -n cattle-system
NAME               NAMESPACE        REVISION    UPDATED                                    STATUS      CHART                              APP VERSION
rancher            cattle-system    1           2021-08-30 16:59:30.493076524 +0800 CST    deployed    rancher-2.5.9                      v2.5.9     
rancher-webhook    cattle-system    1           2021-08-30 09:00:47.242700834 +0000 UTC    deployed    rancher-webhook-0.1.100+up0.1.1    0.1.1      
[root@k3s-master~]# 

[root@k3s-master~]# kubectl get pod -n cattle-system
NAME                               READY   STATUS    RESTARTS   AGE
rancher-5d6c49674d-mlh5r           1/1     Running   0          5h24m
rancher-5d6c49674d-gnb7q           1/1     Running   0          5h24m
rancher-5d6c49674d-xdrfr           1/1     Running   1          5h24m
rancher-webhook-6cccfd96b5-fh7w6   1/1     Running   0          5h23m

[root@k3s-master~]# 
复制代码

检查 Rancher Server 是否运行成功:

# kubectl -n cattle-system rollout status deploy/rancher

检查 deployment 的状态:

# kubectl -n cattle-system get deploy rancher

然后在windows绑定host解析,访问即可

标签:k3s,K3s,--,K3S,system,server,rancher,Kubernetes,轻量级
From: https://www.cnblogs.com/user-sunli/p/18056717

相关文章

  • Kubernetes 证书过期问题的处理方法
    问题现象出现KubernetesAPI无法调取的现象,使用kubectl命令获取资源均返回如下报错.Unabletoconnecttotheserver:x509:certificatehasexpiredorisnotyetvalid经网上搜索之后发现。应该是Kubernetes集群的证书过期了,使用命令排查证书的过期时间.#kubea......
  • 极狐GitLab Runner Kubernetes(k8s)配置
    GitLab是一个全球知名的一体化DevOps平台,很多人都通过私有化部署GitLab来进行源代码托管。极狐GitLab是GitLab在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。资料Kubernetes高级配置添加额外主机别名Pod的DNS配置极狐GitLabRunner......
  • kubernetes可视化管理工具KubePi体验简介
    kubernetes可视化管理工具KubePi体验简介原创 zhuhb 运维笔谈 2024-03-0111:55 上海 听全文推荐一个飞致云开源的kubernetes可视化面板KubePi,Github地址https://github.com/1Panel-dev/KubePiKubePi可以导入多个Kubernetes集群,并且通过权限控制,将不同cluster......
  • kubernetes的pod中获取客户端真实ip
    kubernetes的pod中获取客户端真实ip在Kubernetes中,Pod拿到的远程IP是Kubernetes集群内部的IP,而不是客户端的真实IP。这是由于Kubernetes的网络模型和网络配置方式导致的。Kubernetes使用了一种称为"Service"的抽象来提供网络连接和负载均衡功能。当您创建一个Ser......
  • 教你如何用Keepalived和HAproxy配置高可用 Kubernetes 集群
    本文分享自华为云社区《使用Keepalived和HAproxy创建高可用Kubernetes集群》,作者:江晚正愁余。高可用Kubernetes集群能够确保应用程序在运行时不会出现服务中断,这也是生产的需求之一。为此,有很多方法可供选择以实现高可用。本教程演示了如何配置Keepalived和HAproxy......
  • synchronized 原理 (偏向锁、轻量级锁、锁膨胀、自旋)
    synchronized原理Synchronized是Java中用于实现线程同步的关键字,它可以用于方法或代码块。当一个方法或代码块被synchronized修饰时,它将在任意时刻只允许一个线程访问,保证了多线程环境下的数据安全性。synchronized可用于修饰对象或方法:方法上的synchronizedclassTest......
  • 动手实践丨轻量级目标检测与分割算法开发和部署(RK3568)
    本文分享自华为云社区《自动驾驶(AIOT)-轻量级目标检测与分割算法开发和部署(RK3568)【玩转华为云】》,作者:HouYanSong。本文将在ModelArts平台上开发轻量级目标检测与分割算法,并使用ModelBox框架在RK3568开发板上实现模型推理和部署。数据准备我们收集了一份200张由Labelme......
  • Kubernetes配合Jenkins实现轻量自动持续集成
    Kubernetes配合Jenkins实现轻量自动持续集成原创 王先森sec 王先森Sec 2024-02-1913:16 北京 听全文这是一个分享运维,DevOps,安全等知识的微信公众号。王先森Sec王先森Sec分享运维,DevOps,安全等知识。23篇原创内容公众号背景介绍在当今的软件开......
  • Kubernetes ConfigMap挂载导致容器目录中的文件被覆盖
    容器的/apps/pero/src/resources/文件夹下有多个文件,如果挂载一个文件进去,会把其他文件都覆盖掉,只剩挂载的文件按如下修改即可volumeMounts:-name:pero-configmountPath:/apps/pero/src/resources/application.propertiessubPath:a......
  • Kubernetes leader election 源码分析
    0.前言Kubernetes:kube-scheduler源码分析介绍了kube-scheduler调度Pod的逻辑。文中有一点未提的是,在Kubernetes集群中,kube-scheduler组件是多副本,单实例运行。仅有一个副本作为leader运行,当发生故障时,其它副本会抢占为leader继续运行。这种机制通过leaderelect......