使用K3在Ubuntu 20.04上安装Kubernetes集群
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