使用K3在Ubuntu 20.04上安装Kubernetes集群

时间:2020-02-23 14:31:43  来源:igfitidea点击:

Kubernetes是用于混合云平台的容器编排工具。
它是由Google设计的。
Kubernetes允许用户跨不同的云和虚拟化平台管理Docker容器。
K3s是轻量级的kubernetes部署二进制文件,旨在减少"重载" k8s部署。
K3s由Rancher开发。

在本文中,我们将介绍如何使用k3s在Ubuntu 20.04 LTS上安装Kubernetes集群。
我们可以查看如何在带有kubeadm的Ubuntu 20.04上安装k8s作为替代方案。

Kubernetes体系结构涉及一个主节点和一个工作节点。
它们的功能如下:

Master-控制集群,API调用等
Workers-这些负责处理工作负载,部署Pod和运行应用程序的位置可以在集群中添加和删除它们。

因此,要设置k3s集群,我们至少需要两台主机,即主节点和一个工作节点。
在本文中,我们将使用一个主节点和两个工作节点,我们需要准备主机以在集群中运行k3.
使用以下步骤在Ubuntu 20.04上安装k3s集群:

步骤1:更新Ubuntu系统

在服务器安装了Ubuntu 20.04的情况下,对其进行更新和升级:

sudo apt update
sudo apt -y upgrade && sudo systemctl reboot

步骤2:在每个节点上映射主机名

确保我们已将主机名映射到每个节点上。
这是通过在 /etc/hosts每个主机的文件。
在我们的设置中,如下所示:

$sudo vim /etc/hosts
172.16.10.3 master
172.16.10.4 worker01
172.16.10.10 worker02

必须在所有主机上完成此操作,才能使用DNS名称。

步骤3:在Ubuntu 20.04上安装Docker

下一步是在主机上安装docker。
如前所述,Kubernetes用于管理混合云基础架构上的Docker容器。
因此我们需要在所有节点上启动并运行docker,然后才能设置K3.
添加Docker APT存储库:

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add 
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

在Ubuntu 20.04上安装Docker CE:

sudo apt update
sudo apt install docker-ce -y

这必须在包括主机节点在内的所有主机上完成。
成功安装后,启动并启用该服务。

sudo systemctl start docker
sudo systemctl enable docker

我们还可以检查服务是否已启动并正在运行:

$sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2017-10-30 08:30:39 CET; 19s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 9275 (dockerd)
      Tasks: 8
     Memory: 35.6M
     CGroup: /system.slice/docker.service
             └─9275 /usr/bin/dockerd -H fd://--containerd=/run/containerd/containerd.sock
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2017-10-30T08:30:39.460569874+01:00" level=warning msg="Your kernel does not support cgroup rt runtime"
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2017-10-30T08:30:39.460672730+01:00" level=warning msg="Your kernel does not support cgroup blkio weight"
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2017-10-30T08:30:39.460820506+01:00" level=warning msg="Your kernel does not support cgroup blkio weight_device"
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2017-10-30T08:30:39.461286028+01:00" level=info msg="Loading containers: start."
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2017-10-30T08:30:39.620849970+01:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0>
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2017-10-30T08:30:39.717281156+01:00" level=info msg="Loading containers: done."
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2017-10-30T08:30:39.754253372+01:00" level=info msg="Docker daemon" commit=4484c46d9d graphdriver(s)=overlay2 version>
Oct 30 08:30:39 ubuntu dockerd[9275]: time="2017-10-30T08:30:39.755461813+01:00" level=info msg="Daemon has completed initialization"
Oct 30 08:30:39 ubuntu systemd[1]: Started Docker Application Container Engine.

将用户添加到Docker组中,以避免每次运行docker命令时执行sudo。

sudo usermod -aG docker ${USER}
newgrp docker

步骤4:设置主k3s节点

在此步骤中,我们将安装并准备主节点。
这涉及安装k3s服务并启动它。

curl -sfL https://get.k3s.io | sh -s - --docker

运行以上命令在主节点上安装k3s。
该脚本将安装k3s并自动将其启动。

[INFO]  Finding release for channel stable
[INFO]  Using v1.18.9+k3s1 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.18.9+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.18.9+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[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

要检查服务是否成功安装,可以使用:

$sudo systemctl status k3s
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2017-10-30 08:32:46 CET; 53s ago
       Docs: https://k3s.io
    Process: 11151 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
    Process: 11152 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 11153 (k3s-server)
      Tasks: 0
     Memory: 420.9M
     CGroup: /system.slice/k3s.service
             └─11153 /usr/local/bin/k3s server --docker
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.532935   11153 reconciler.go:196] operationExecutor.UnmountVolume started for volume "helm-traefik-token-dmfz6">
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.533481   11153 reconciler.go:196] operationExecutor.UnmountVolume started for volume "values" (UniqueName: "kub>
Oct 30 08:33:32 ubuntu k3s[11153]: W1030 08:33:32.533849   11153 empty_dir.go:453] Warning: Failed to clear quota on /var/lib/kubelet/pods/d1fae0b1-f3ac-481a-b6a>
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.538649   11153 operation_generator.go:782] UnmountVolume.TearDown succeeded for volume "kubernetes.io/configmap>
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.555370   11153 operation_generator.go:782] UnmountVolume.TearDown succeeded for volume "kubernetes.io/secret/d1>
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.653113   11153 reconciler.go:319] Volume detached for volume "helm-traefik-token-dmfz6" (UniqueName: "kubernete>
Oct 30 08:33:32 ubuntu k3s[11153]: I1030 08:33:32.653137   11153 reconciler.go:319] Volume detached for volume "values" (UniqueName: "kubernetes.io/configmap/d1f>
Oct 30 08:33:33 ubuntu k3s[11153]: W1030 08:33:33.978774   11153 pod_container_deletor.go:77] Container "23d34e0acde3f4ab7e41d99e9cff16e7ba8cd76122158dfc18b64ae0>
Oct 30 08:33:33 ubuntu k3s[11153]: W1030 08:33:33.997821   11153 pod_container_deletor.go:77] Container "a52fe91aa3e7b137ebe4dd993e358c382f96b5df342cb1c098acadb6>
Oct 30 08:33:35 ubuntu k3s[11153]: W1030 08:33:35.022454   11153 pod_container_deletor.go:77] Container "2b9f302427059276bc2e1d012db5cbcaeb72ed373cb52218edb6eb4b

我们可以通过以下方法检查主节点是否正常工作:

sudo kubectl get nodes -o wide

输出应该是这样的:

Hyman@theitroad:~# sudo kubectl get nodes -o wide
NAME     STATUS   ROLES    AGE    VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
master   Ready    master   3m2s   v1.18.9+k3s1   172.16.10.3   <none>        Ubuntu 20.04.1 LTS   5.4.0-52-generic   docker://19.3.8

步骤5:在防火墙上允许端口

我们需要允许将用于在主节点与工作节点之间进行通信的端口。
端口是443和6443.

sudo ufw allow 6443/tcp
sudo ufw allow 443/tcp

我们需要从主节点提取令牌,该令牌将用于将节点连接到主节点。
在主节点上:

sudo cat /var/lib/rancher/k3s/server/node-token

然后,我们将获得一个类似于以下内容的令牌:

K1078f2861628c95aa328595484e77f831adc3b58041e9ba9a8b2373926c8b034a3::server:417a7c6f46330b601954d0aaaa1d0f5b

步骤6:在工作节点上安装K3S并将其连接到主设备

下一步是在工作节点上安装K3.
运行下面的命令在工作节点上安装K3s:

curl -sfL http://get.k3s.io | K3S_URL=https://<master_IP>:6443 K3S_TOKEN=<join_token> sh -s - --docker

其中 master_IP是主节点的IP和 join_token是从主人获得的令牌。
例如:

curl -sfL http://get.k3s.io | K3S_URL=https://172.16.10.3:6443 K3S_TOKEN=K1078f2861628c95aa328595484e77f831adc3b58041e9ba9a8b2373926c8b034a3::server:417a7c6f46330b601954d0aaaa1d0f5b sh -s - --docker

我们可以验证工作人员节点上的K3S-Agent是否正在运行:

sudo systemctl status k3s-agent

要验证我们的节点已成功添加到群集中,请运行:

sudo kubectl get nodes

输出应如下所示:

Hyman@theitroad:~# kubectl get nodes -o wide
NAME       STATUS   ROLES    AGE   VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
master     Ready    master   14m   v1.18.9+k3s1   172.16.10.3   <none>        Ubuntu 20.04.1 LTS   5.4.0-52-generic     docker://19.3.8
worker02   Ready    <none>   90s   v1.18.9+k3s1   172.16.10.10   <none>        Ubuntu 20.04.1 LTS   5.4.0-52-generic     docker://19.3.8
worker01   Ready    <none>   41s   v1.18.9+k3s1   172.16.10.4   <none>        Ubuntu 18.04.5 LTS   4.15.0-122-generic   docker://19.3.6

这表明我们已成功设置K3S群集,准备将应用程序部署到它。

将插件部署到K3S

K3S是一个轻量级的Kubernetes工具,它不会包装所有工具,但我们可以单独安装它们。

在K3S上安装Helm CommandLine工具

从此页面下载最新版本的Helm commandline工具.Extract使用tar文件 tar -xvcf @@@downloaded-file>将二进制文件移动到/usr/local/bin/helm

$mv linux-amd64/helm /usr/local/bin/helm

检查版本

$helm version

添加Helm图表存储库以允许使用Helm安装应用程序:

$helm repo add stable https://charts.helm.sh/stable
$helm repo update

在K3S上部署应用程序

我们现在可以在K3S集群上部署测试应用程序。

在k3s上部署nginx web-proxy

nginx可以用作Web代理,以公开群集中的入口Web流量路由。
我们可以使用helm安装nginx web-proxy:

$helm install nginx-ingress stable/nginx-ingress --namespace kube-system \
    --set defaultBackend.enabled=false

我们可以测试应用程序是否已安装:

$kubectl get pods -n kube-system -l app=nginx-ingress -o wide

输出应该是:

Hyman@theitroad:~# kubectl get pods -n kube-system -l app=nginx-ingress -o wide
NAME                                       READY   STATUS    RESTARTS   AGE   IP          NODE       NOMINATED NODE   READINESS GATES
nginx-ingress-controller-56547fb57-vsjdm   1/1     Running   0          28s   10.42.2.6   worker01   <none>           <none>

我们在K3S上成功部署了Nginx Web-Proxy。

删除K3s.

要在工作节点上删除K3S,请执行:

$sudo /usr/local/bin/k3s-agent-uninstall.sh
$sudo rm -rf /var/lib/rancher

要在主节点上删除k3s,请执行:

$sudo /usr/local/bin/k3s-uninstall.sh
$sudo rm -rf /var/lib/rancher