K3s课堂实验手册(一) - 搭建K3s集群主节点

本实验手册旨在帮助学员完成K3s微服务系统的搭建和使用,以帮助学员在实践中深入理解微服务的概念。

本次课堂实验使用的是操作系统为: Ubuntu 18.04 Server版。 K3s的版本为当前官方最新版(v1.17.0)。

安装K3s

与Kubernets (K8s) 相比,K3s的安装简单了许多。

按照国籍惯例,安装之前先更新操作系统,执行:

1
sudo apt-get update

更新完成后,执行以下命令安装K3s

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

以上命令是官方文档中的命令,但在我的网络环境中执行该命令有些问题,因此我改为执行:

1
curl --insecure -L https://get.k3s.io | sh -

执行以后,系统显示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[sudo] password for stu: 
[INFO] Finding latest release
[INFO] Using v1.17.0+k3s.1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.0+k3s.1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.0+k3s.1/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] 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

可以看到,该命令下载了k3s的最新版本,将其安装在/usr/local/bin目录,并构建了后台运行的服务 k3s.service, 最后完成了服务的启动。

安装完成后,可以通过命令:

1
ps -ax | grep k3s

看到在系统中运行了很多相关的进程:

1
2
3
4
5
6
7
2121 ?        Ssl    0:20 /usr/local/bin/k3s server
2207 ? Sl 0:14 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
2672 ? Sl 0:00 /var/lib/rancher/k3s/data/c67259f824ace42864ead7655dbe15a5b736ad91050498224cd42f777416d8dd/bin/containerd-shim-runc-v2 -namespace k8s.io -id 91346a690347c4c862741aea4db9047c73d72bc9b40e590ca6ea19e5c9f702e4 -address /run/k3s/containerd/containerd.sock
2674 ? Sl 0:00 /var/lib/rancher/k3s/data/c67259f824ace42864ead7655dbe15a5b736ad91050498224cd42f777416d8dd/bin/containerd-shim-runc-v2 -namespace k8s.io -id 4e2a54248822d07ec711cb618873578d62c41a693cbf4e10a4ff64600845db22 -address /run/k3s/containerd/containerd.sock
2675 ? Sl 0:00 /var/lib/rancher/k3s/data/c67259f824ace42864ead7655dbe15a5b736ad91050498224cd42f777416d8dd/bin/containerd-shim-runc-v2 -namespace k8s.io -id 03fc386d6f3e6704f399a5d7a8864c2a10ac480801f651ac999efdf75a9ca4fc -address /run/k3s/containerd/containerd.sock
3647 ? Sl 0:00 /var/lib/rancher/k3s/data/c67259f824ace42864ead7655dbe15a5b736ad91050498224cd42f777416d8dd/bin/containerd-shim-runc-v2 -namespace k8s.io -id 4589badfe06e52d871a02989ae073fa7eb17caa3ffd68b9f941721a849dc6cc8 -address /run/k3s/containerd/containerd.sock
3659 ? Sl 0:00 /var/lib/rancher/k3s/data/c67259f824ace42864ead7655dbe15a5b736ad91050498224cd42f777416d8dd/bin/containerd-shim-runc-v2 -namespace k8s.io -id 10b4c65a8066ed4bd7fc6fd751f9d2b7edbafe85e63694b2356cf2576bbd311f -address /run/k3s/containerd/containerd.sock

验证安装

为了验证安装结果,可以执行一些命令,查看当前启动的k3s集群的情况。

执行:

1
kubectl get pods

系统反馈:

1
2
NAME         STATUS   ROLES    AGE   VERSION
k3s-master Ready master 36m v1.17.0+k3s.1

如果系统反馈以下错误信息:

1
2
 WARN[2020-01-24T02:49:04.982837381Z] Unable to read /etc/rancher/k3s/k3s.yaml, please start server with --write-kubeconfig-mode to modify kube config permissions 
error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied

说明权限不够,可以采用以下两种方式解决:

  1. 使用 sudo 运行命令
1
sudo kubectl get pods
  1. 改变 k3s.yaml 的文件属性,使普通用户访问该文件
1
sudo chmod -R 777 /etc/rancher/k3s/k3s.yaml

发布一个简单的应用

在集群安装、配置领域, 发布一个 nginx 服务,几乎是最常见的做法,就像在编程领域编写一个 hello world 应用一样。

下面,我们向刚才构建的k3s集群发布一个 nginx 服务,执行:

1
kubectl create deployment nginx --image=nginx

系统显示:

1
deployment.apps/nginx created

执行 get pod, 查看是否建立了相应的 pod,

1
kubectl get pods

系统显示

1
2
NAME                     READY   STATUS    RESTARTS   AGE
nginx-86c57db685-rrh7w 1/1 Running 0 61s

为了让外部可以访问nginx,我们构建一个k3s中的 nodeport 服务,执行:

1
kubectl create service nodeport nginx --tcp=80:80

系统显示

1
service/nginx created

执行 get svc 命令,可以查看建立好的 k3s 服务:

1
kubectl get svc

系统显示:

1
2
3
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 45m
nginx NodePort 10.43.150.48 <none> 80:30424/TCP 45s

可以看到,系统建立了一个 nodeport 服务,并把内部端口 30424 绑定道内部端口 80。 接下来,我们就可以通过 30424 端口访问 nginx 了。执行

1
curl http://localhost:30424

可以得到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

这正是 nginx 的默认输出。 说明集群安装正常,应用发布也正常。

也可以再执行以下命令,获取更多的集群的信息:

1
kucectl get all

系统显示:

1
2
3
4
5
6
7
8
9
10
11
12
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-86c57db685-rrh7w 1/1 Running 0 4m57s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 47m
service/nginx NodePort 10.43.150.48 <none> 80:30424/TCP 2m18s

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 1/1 1 1 4m57s

NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-86c57db685 1 1 1 4m57s

下一步

下一篇文章,我们将练习在集群中加入一个工作节点。

本文标题:K3s课堂实验手册(一) - 搭建K3s集群主节点

文章作者:晨星

发布时间:2020年01月24日 - 15:01

最后更新:2020年09月16日 - 08:09

原始链接:https://www.mls-tech.info/microservice/k3s/k3s-practise-manual-01/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。