一、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=3650create-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