资讯详情

ubuntu虚拟机安装k3s集群

k3s 介绍

k3s 是经 CNCF 一致性认证 Kubernetes 发行版,专为物联网及边缘计算设计。

K3s 官网:https://k3s.io/ 中文网站:https://www.rancher.cn/k3s/

k3s 功能介绍:K3s - 轻量级 Kubernetes | Rancher文档

k3s 结构介绍:结构介绍 | Rancher文档

k3s 版本号命名采用 <K8s version> k3s<number> 例如,格式 v1.22.7 k3s1 对应的 Kubernetes 1.22.7 版本。

环境准备

操作环境:

  • 操作系统:Windows 10
  • 虚拟机:Virtual Box 6.1.30 r148432
  • Linux 发行版:Ubuntu Focal 20.04 (LTS)
  • Linux 内核:5.4.0-90-generic
  • 虚拟机工具:Vagrant 2.2.19
  • 可用内存: 最低 512MB(建议至少 1GB)

k3s 集群方案

  • 单节点架构:server × 1 worker × 2
  • K3s 版本:v1.22.7 k3s1

server 是运行 k3s server 命令机(裸机或虚拟机), worker 节点是运行 k3s agent 命令机。

在这里插入图片描述

如上图所示,该集群有一个嵌入式集群 SQLite 单节点数据库 K3s server。

每个 agent 在同一个节点注册 server 节点。K3s 用户可以调用 server 节点上的 K3s API 来操作 Kubernetes 资源。

安装虚拟机环境

  1. 安装虚拟机软件 Virtual Box

  2. 安装虚拟机管理工具 Vagrant

    • 下载:https://www.vagrantup.com/downloads
  3. Vagrant 添加操作系统 box 镜像

    • box 下载:https://app.vagrantup.com/generic/boxes/ubuntu2004
      • currently released version:v3.5.4
    • 修改镜像默认安装路径 [可选]:setx VAGRANT_HOME "/your/path"
    • 添加到 box 列表:vagrant box add generic/ubuntu2004 下载的box路径

vagrant 详细说明可参考:vagrant 搭建 CentOS 7 虚拟机开发环境-CSDN博客

创建虚拟机

例如,新项目目录 k3s_study:

$ mkidr k3s_study $ cd k3s_study # 创建 Vagrantfile 文件 $ touch Vagrantfile 

编辑 Vagrantfile:

# 要使用的 box IMAGE_NAME = "generic/ubuntu2004" # server 节点 HOST_NAME = "k3s-s01" # worker 节点数 N = 2  Vagrant.configure("2") do |config|     # up 时不检查box的更新     config.vm.box_check_update = false          # 配置 server 节点     config.vm.define HOST_NAME do |master|         master.vm.box = IMAGE_NAME         # 网络: 配置私有网络IP地址         master.vm.network "private_network", ip: "192.168.3.30"         # 主机名         master.vm.hostname = HOST_NAME         # 配置 2核CPU 1.5G内存         maser.vm.provider "virtualbox" do |v|
            v.name = HOST_NAME
            v.memory = 1536
            v.cpus = 2
        end        
    end
	
    # 配置 worker 节点
    (1..N).each do |i|
        config.vm.define "k3s-node-#{ 
          i}"  do |node|
            node.vm.box = IMAGE_NAME
            # 网络: 私有网络,IP地址需要与server节点同一个网段
            node.vm.network "private_network", ip: "192.168.3.#{ 
          i + 30}"
            node.vm.hostname = "k3s-node-#{ 
          i}"
            node.vm.provider "virtualbox" do |v|
                v.name = "k3s-node-#{ 
          i}"
                v.memory = 1536
                v.cpus = 2
        	end    
        end
    end
end

启动虚拟机:

$ vagrant up

等待 3 台虚拟机启动成功后,查看状态:

$ vagrant status
Current machine states:

k3s-s01               running (virtualbox)  # 192.168.3.30
k3s-node-1            running (virtualbox)  # 192.168.3.31
k3s-node-2            running (virtualbox)  # 192.168.3.32

开3个终端,分别用 ssh 登录每个节点:

# 在项目根目录 k3s_study 下使用 vagrant ssh
$ vagrant ssh k3s-s01
$ vagrant ssh k3s-node-1
$ vagrant ssh k3s-node-2 

CTRL+D 可以登出虚拟机,回到宿主机。

Ubuntu 配置

# 查看内核版本
$ uname -rs
Linux 5.4.0-90-generic

# 查看系统版本
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:        20.04
Codename:       focal

关闭 swap 交换分区

# 临时关闭,重启后会恢复
$ swapoff -a
# 永久关闭,注释掉swap行
$ sed -ri 's/.*swap.*/#&/' /etc/fstab

原因:当内存不足时,linux 会自动使用 swap,将部分内存数据存放到磁盘中,这样会使性能下降,为了性能考虑推荐关掉。

(可选)设置系统时区:

$ sudo timedatectl set-timezone Asia/Shanghai

# 查看时区
$ timedatectl status
# Time zone: Asia/Shanghai (CST, +0800)

启用时间同步:

# 激活 timesyncd
$ sudo timedatectl set-ntp on

# 查看同步状态
$ systemctl status systemd-timesyncd
# ● systemd-timesyncd.service - Network Time Synchronization
# Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
# Active: active (running)

# 按 q 退出查看

离线安装 K3s

参考:离线安装 | Rancher文档

下载安装文件

下载地址:https://github.com/k3s-io/k3s/releases

页面右上角搜索需要的版本,下载以下文件:

  • 离线镜像:k3s-airgap-images-amd64.tar.gz
  • 二进制文件:k3s

如果下载速度较慢,推荐使用迅雷等工具下载。

本文使用的 v1.22.7+k3s1 版本下载地址:

  • 离线镜像:https://github.com/k3s-io/k3s/releases/download/v1.22.7%2Bk3s1/k3s-airgap-images-amd64.tar.gz
  • 二进制文件:https://github.com/k3s-io/k3s/releases/download/v1.22.7%2Bk3s1/k3s

在宿主机操作:

# 将下载的文件上传到每个节点的 ./k3s/
# 下面的路径需换为你下载的文件路径
vagrant upload d:/temp/k3s-airgap-images-amd64.tar.gz ./k3s/ k3s-s01
vagrant upload d:/temp/k3s-airgap-images-amd64.tar.gz ./k3s/ k3s-node-1
vagrant upload d:/temp/k3s-airgap-images-amd64.tar.gz ./k3s/ k3s-node-2

vagrant upload d:/temp/k3s ./k3s/ k3s-s01
vagrant upload d:/temp/k3s ./k3s/ k3s-node-1
vagrant upload d:/temp/k3s ./k3s/ k3s-node-2

在每个节点操作:

cd k3s
# 解压文件
gzip -d k3s-airgap-images-amd64.tar.gz

# 将 tar 文件放到 images 目录下
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
sudo cp ./k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/

# 将二进制文件放在每个节点的 /usr/local/bin 中
sudo cp k3s /usr/local/bin
# 授予可执行权限
sudo chmod +x /usr/local/bin/k3s

# 下载 K3s 安装脚本,并命名为 install_k3s.sh
wget -c -O install_k3s.sh https://get.k3s.io
# 授予可执行权限
chmod +x ./install_k3s.sh

在启动 K3s 时,会检查 images 是否存在可用的镜像压缩包,如果存在,就将该镜像导入到containerd 镜像列表中。

备份虚拟机

注:此步骤非必须项。

在宿主机创建虚拟机快照,方便后面安装失败时还原:

# 同时备份3台虚拟机,快照命名为 before_install_k3s
$ vagrant snapshot save before_install_k3s

# 也可在save后指定需要备份的主机
# vagrant snapshot save k3s-s01 before_install_k3s

# 查看快照列表
$ vagrant snapshot list
==> k3s-s01:
before_install_k3s
==> k3s-node-1:
before_install_k3s
==> k3s-node-2:
before_install_k3s

如需恢复到快照状态,使用:

# 指定恢复k3s-s01节点到快照before_install_k3s状态
$ vagrant snapshot restore k3s-s01 before_install_k3s

单节点安装

安装 server 节点

要在单个服务器上安装 K3s,只需在 server 节点上执行以下操作:

# 在k3s-s01执行
# --advertise-address 需替换为server节点配置的IP 
$ INSTALL_K3S_SKIP_DOWNLOAD=true K3S_KUBECONFIG_MODE="644" INSTALL_K3S_EXEC="--advertise-address 192.168.3.30" ./install_k3s.sh 
# [INFO] Skipping k3s download and verify
# [INFO] Skipping installation of SELinux RPM
# [INFO] Creating /usr/local/bin/kubectl symlink to k3s
# [INFO] Creating /usr/local/bin/crictl symlink to k3s
# [INFO] Creating /usr/local/bin/ctr symlink to k3s
# [INFO] Creating killall script /usr/local/bin/k3s-killall.sh
# [INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
# [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
# Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → # /etc/systemd/system/k3s.service.
# [INFO] systemd: Starting k3s

启动参数:

  • INSTALL_K3S_SKIP_DOWNLOAD=true:跳过下载可执行文件。
  • --write-kubeconfig-mode 644K3S_KUBECONFIG_MODE="644":修改配置文件权限为非所有者也可读,使 kubectl 命令无需 rootsudo
  • --advertise-address IP:apiserver 用来向集群成员发布的 IP 地址,多网卡环境需指定通信网卡 IP。
  • INSTALL_K3S_EXEC="...":启动服务时使用的额外参数。如:"–advertise-address 192.168.3.30"
  • --docker,使用 docker 而不是默认的 containerd。本文使用默认的 containerd。

更多参数,见 K3s Server 配置参考 | Rancher文档

查看集群状态:

$ 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:https/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

当集群状态全部 running 后,查看节点状态:

$ kubectl get node -o wide
NAME      STATUS   ROLES                  AGE   VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
k3s-s01   Ready    control-plane,master   37s   v1.22.7+k3s1   10.0.2.15     <none>        Ubuntu 20.04.3 LTS   5.4.0-90-generic   containerd://1.5.9-k3s1

查看添加 worker 节点使用的 token:

$ sudo cat /var/lib/rancher/k3s/server/node-token
# K10e903b153e357f6de73205841342678d142f2df0c2f46d7a3205350a214329d1d::server:078...950

默认情况下,k3s 启动的 server 节点也同时具有 worker 角色,是可调度的,因此可以在它们上启动工作。

添加 worker 节点

在每个 worker 节点上执行: INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken INSTALL_K3S_EXEC="--node-ip IP" ./install_k3s.sh

myservermynodetoken,需替换为 server 节点的值。IP 需替换为当前 worker 节点的 IP。

# 在 k3s-node-1 执行:
$ INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://192.168.3.30:6443 K3S_TOKEN=K10...d1d::server:078...950 INSTALL_K3S_EXEC="--node-ip 192.168.3.31" ./install_k3s.sh

# 在 k3s-node-2 执行:
$ INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://192.168.3.30:6443 K3S_TOKEN=K10...d1d::server:078...950 INSTALL_K3S_EXEC="--node-ip 192.168.3.32" ./install_k3s.sh
# [INFO] Skipping k3s download and verify
# [INFO] Skipping installation of SELinux RPM
# [INFO] Creating /usr/local/bin/kubectl symlink to k3s
# [INFO] Creating /usr/local/bin/crictl symlink to k3s
# [INFO] Creating /usr/local/bin/ctr symlink to k3s
# [INFO] Creating killall script /usr/local/bin/k3s-killall.sh
# [INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
# [INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
# [INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
# [INFO] systemd: Enabling k3s-agent unit
# Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
# [INFO] systemd: Starting k3s-agent
  • myserver:server 的 IP 或有效的 DNS;
  • mynodetoken:server 节点的 token,通常在 /var/lib/rancher/k3s/server/node-token
  • --node-ip:worker 节点发布的 IP;多网卡环境需指定。

查看节点状态,看是否有报错:

$ sudo systemctl status k3s-agent

集群访问

存储在 /etc/rancher/k3s/k3s.yaml 的 kubeconfig 文件用于对 Kubernetes 集群的访问。

设置 kubectl 使用的上下文环境变量:

$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

查看节点状态:

$ kubectl get node -o wide
NAME         STATUS   ROLES                  AGE     VERSION        INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
k3s-node-1   Ready    <none>                 8m58s   v1.22.7+k3s1   192.168.3.31   <none>        Ubuntu 20.04.3 LTS   5.4.0-90-generic   containerd://1.5.9-k3s1
k3s-node-2   Ready    <none>                 3m33s   v1.22.7+k3s1   192.168.3.32   <none>        Ubuntu 20.04.3 LTS   5.4.0-90-generic   containerd://1.5.9-k3s1
k3s-s01      Ready    control-plane,master   16m     v1.22.7+k3s1   10.0.2.15      <none>        Ubuntu 20.04.3 LTS   5.4.0-90-generic   containerd://1.5.9-k3s1

可以看到 k3s-node-1 和 k3s-node-2 节点为 Ready 状态。

查看所有对象:

$ kubectl get all -A
# ----------------------
NAMESPACE     NAME                                          READY   STATUS      RESTARTS   AGE
kube-system   pod/coredns-96cc4f57d-zldh9                   1/1     Running     0          14m
kube-system   pod/local-path-provisioner-84bb864455-88sdj   1/1     Running     0          14m
kube-system   pod/metrics-server-ff9dbcb6c-2h92d            1/1     Running     0          14m
kube-system   pod/helm-install-traefik-crd--1-bxblt         0/1     Completed   0          14m
kube-system   pod/helm-install-traefik--1-5d25g             0/1     Completed   2          14m
kube-system   pod/svclb-traefik-7z5nf                       2/2     Running     0          13m
kube-system   pod/traefik-56c4b88c4b-58kmv                  1/1     Running     0          13m
kube-system   pod/svclb-traefik-j5b8f                       2/2     Running     0          7m1s
kube-system   pod/svclb-traefik-8s68h                       2/2     Running     0          97s

NAMESPACE     NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP                           PORT(S)                      AGE
default       service/kubernetes       ClusterIP      10.43.0.1      <none>                                443/TCP                      14m
kube-system   service/kube-dns         ClusterIP      10.43.0.10     <none>                                53/UDP,53/TCP,9153/TCP       14m
kube-system   service/metrics-server   ClusterIP      10.43.95.28    <none>                                443/TCP                      14m
kube-system   service/traefik          LoadBalancer   10.43.32.206   10.0.2.15,192.168.3.31,192.168.3.32   80:31801/TCP,443:31782/TCP   13m

NAMESPACE     NAME                           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
kube-system   daemonset.apps/svclb-traefik   3         3         3       3            3           <none>          13m

NAMESPACE     NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/local-path-provisioner   1/1     1            1           14m
kube-system   deployment.apps/coredns                  1/1     1            1           14m
kube-system   deployment.apps/metrics-server           1/1     1            1           14m
kube-system   deployment.apps/traefik                  1/1     1            1           13m

NAMESPACE     NAME                                                DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/coredns-96cc4f57d                   1         1         1       14m
kube-system   replicaset.apps/local-path-provisioner-84bb864455   1         1         1       14m
kube-system   replicaset.apps/metrics-server-ff9dbcb6c            1         1         1       14m
kube-system   replicaset.apps/traefik-56c4b88c4b                  1         1         1       13m

NAMESPACE     NAME                                 COMPLETIONS   DURATION   AGE
kube-system   job.batch/helm-install-traefik-crd   1/1           44s        14m
kube-system   job.batch/helm-install-traefik       1/1           65s        14m

安装仪表盘 Dashboard

详见:k8s-安装仪表盘Dashboard笔记-CSDN博客

从外部访问集群

/etc/rancher/k3s/k3s.yaml 复制到集群外部的计算机上的 ~/.kube/config。然后用你的 K3s 服务器的 IP 或名称替换 “localhost”。

就可以用外部安装的 kubectl 管理 K3s 集群。

常用命令

重启 k3s 服务

# 手动重启 k3s server
$ sudo systemctl restart k3s
# 手动重启 k3s agent
$ sudo systemctl restart k3s-agent

卸载 K3s

server 节点

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

worker 节点

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

标签: d142对射式光电传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台