K3s - 轻量级 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解析,访问即可

posted @ 2024-03-06 15:25  梦里花落知多少sl  阅读(67)  评论(0编辑  收藏  举报