K3s 是 K8s 的一个轻量版本,可以在普通配置的单台服务器上运行,同时它也足够稳定,可以用在生产环境,适合访问量不那么大的项目,再配合 Rancher 进行管理的话,就对非专业运维人员非常友好了。下面记录一下我的折腾踩坑记录。
本文对应的版本:K3s v1.22.7 / Rancher 2.6.4 。其中 K3s 和 Rancher 分别安装在两台不同的服务器上。
安装 K3s
K3s 官方提供了一键安装脚本,可以通过以下方式安装:
curl -sfL https://get.k3s.io | sh -
如果你的环境中使用官方脚本安装太慢,也可以试试下面的脚本,用国内源安装:
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
装好之后根据需要,可以调整下 K3s 的服务配置文件,以将 K3s 的默认容器引擎从 Containerd 切换到 Docker。
修改 K3S 服务的配置文件:
vim /etc/systemd/system/multi-user.target.wants/k3s.service
需要修改 ExecStart 的值:
# 原值
# ExecStart=/usr/local/bin/k3s server
# 新值
ExecStart=/usr/local/bin/k3s server --docker --no-deploy traefik
之后保存退出,执行命令重新加载新的服务配置文件:
systemctl daemon-reload
service k3s restart
最后,可以通过命令确认 K3s 服务是否就绪:
k3s kubectl get node
如果你看到类似下面的输出,表示 K3s 已经安装完成并且正常运行了:
NAME STATUS ROLES AGE VERSION
izuf63s1bimz3ojiw82wbhz Ready control-plane,master 90s v1.22.7+k3s1
到此,K3s 就启动了,可以使用命令行或者相关工具进行管理了。
安装 Rancher
Rancher 是一个可视化的容器管理平台,可以简化 K8s/K3s 的管理工作。
注意,在本例中,Rancher 和 上面的 K3s 安装在不同的服务器上。
安装 Rancher 之前,需要先安装 Docker,如果你的服务环境中已经有了 Docker,可以跳过这一步:
# 安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
接下来,运行以下命令下载并安装 Rancher:
mkdir -p /var/lib/rancher
docker run --privileged -d --restart=unless-stopped -p 80:80 -p 443:443 -v /var/lib/rancher:/var/lib/rancher/ rancher/rancher:stable
安装成功之后,稍等一会儿,即可通过 https://{服务器 IP} 这样的地址访问 Rancher 的 Web 界面。首次访问浏览器会提示证书错误,如果你使用的是 Chrome 浏览器,错误类似下图所示:
这个错误可以忽略,点击左下角的“高级”按钮,继续访问即可。
如果你看到类似下面的页面,表示安装成功了。
根据页面上的提示,去服务器上找到初始密码,登录,随后根据页面的提示一路下一步,中间会提示你设置新的登录密码。最后,会看到类似下面的集群列表:
现在还只有一个集群,也是 K3s 的,这是 Rancher 本身。
使用 Rancher 管理 K3s
接下来,我们要将刚才安装好的 K3s 导入到 Rancher 中,以便使用 Rancher 对它进行管理。
首先,点击 Rancher 集群列表上方的“Import Existing”按钮,如下图所示:
在下一页的列表中,选择“Generic”:
下一步,需要给这个即将导入的 K3s 集群取一个名字,比如叫“my-k3s”,如下图所示:
点击“Create”按钮,Rancher 会给出一系列命令:
根据提示做即可。登录 K3s 所在的服务器,运行第一个命令,如果遇到 certificate signed by unknown authority 错误,则运行第二个命令。
命令运行成功之后,等一会儿,Rancher 页面即会发生变化,显示新的集群注册成功。
此时再去看 Rancher 的面板首页,可以看到集群列表增加了:
接下来,就可以在 Rancher 中点击进入这个 my-k3s 集群,愉快地玩耍了。🎉
评论:
Docker: 18.09
本机k3s: v1.24.4+k3s1
rancher:v2.7.1 (里面k3s是 v1.24.4+k3s1)
我本机安装k3s,然后本机容器方式安装rancher,再在rancher中导入k3s ,但是发现本机中cattle-cluster-agent出错了,
```
# kubectl logs pod/cattle-cluster-agent-55cb88648-zlrx5 -n cattle-system
INFO: Environment: CATTLE_ADDRESS=10.42.0.10 CATTLE_CA_CHECKSUM=86b55d1496321bddd191cf2943a54dfe3fa2a88d6c1ad0dd3638e70bcd7a46c0 CATTLE_CLUSTER=true CATTLE_CLUSTER_AGENT_PORT=tcp://10.43.216.129:80 CATTLE_CLUSTER_AGENT_PORT_443_TCP=tcp://10.43.216.129:443 CATTLE_CLUSTER_AGENT_PORT_443_TCP_ADDR=10.43.216.129 CATTLE_CLUSTER_AGENT_PORT_443_TCP_PORT=443 CATTLE_CLUSTER_AGENT_PORT_443_TCP_PROTO=tcp CATTLE_CLUSTER_AGENT_PORT_80_TCP=tcp://10.43.216.129:80 CATTLE_CLUSTER_AGENT_PORT_80_TCP_ADDR=10.43.216.129 CATTLE_CLUSTER_AGENT_PORT_80_TCP_PORT=80 CATTLE_CLUSTER_AGENT_PORT_80_TCP_PROTO=tcp CATTLE_CLUSTER_AGENT_SERVICE_HOST=10.43.216.129 CATTLE_CLUSTER_AGENT_SERVICE_PORT=80 CATTLE_CLUSTER_AGENT_SERVICE_PORT_HTTP=80 CATTLE_CLUSTER_AGENT_SERVICE_PORT_HTTPS_INTERNAL=443 CATTLE_CLUSTER_REGISTRY= CATTLE_INGRESS_IP_DOMAIN=sslip.io CATTLE_INSTALL_UUID=d909f8d9-a76a-4ef6-bf4b-f26cc3adee84 CATTLE_INTERNAL_ADDRESS= CATTLE_IS_RKE=false CATTLE_K8S_MANAGED=true CATTLE_NODE_NAME=cattle-cluster-agent-55cb88648-zlrx5 CATTLE_SERVER=https://127.0.0.1:8043 CATTLE_SERVER_VERSION=v2.7.1
INFO: Using resolv.conf: search cattle-system.svc.cluster.local svc.cluster.local cluster.local nameserver 10.43.0.10 options ndots:5
ERROR: https://127.0.0.1:8043/ping is not accessible (Failed to connect to 127.0.0.1 port 8043 after 0 ms: Connection refused)
```
我尝试在本机执行: curl https://127.0.0.1:8043/ping 成功返回pong,
但是进入容器内执行 curl https://127.0.0.1:8043/ping,出错:curl: (7) Failed to connect to 127.0.0.1 port 8043 after 0 ms: Connection refused。
我的resolv.conf如下:
```
# cat resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients directly to
# all known uplink DNS servers. This file lists all configured search domains.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
nameserver 10.151.6.6
nameserver 10.151.6.7
```
想请问大家遇到过这个我问题吗?
Docker: 18.09
本机k3s: v1.24.4+k3s1
rancher:v2.7.1 (里面k3s是 v1.24.4+k3s1)
我本机安装k3s,然后本机容器方式安装rancher,再在rancher中导入k3s ,但是发现本机中cattle-cluster-agent出错了,
# kubectl logs pod/cattle-cluster-agent-55cb88648-zlrx5 -n cattle-system
INFO: Environment: CATTLE_ADDRESS=10.42.0.10 CATTLE_CA_CHECKSUM=86b55d1496321bddd191cf2943a54dfe3fa2a88d6c1ad0dd3638e70bcd7a46c0 CATTLE_CLUSTER=true CATTLE_CLUSTER_AGENT_PORT=tcp://10.43.216.129:80 CATTLE_CLUSTER_AGENT_PORT_443_TCP=tcp://10.43.216.129:443 CATTLE_CLUSTER_AGENT_PORT_443_TCP_ADDR=10.43.216.129 CATTLE_CLUSTER_AGENT_PORT_443_TCP_PORT=443 CATTLE_CLUSTER_AGENT_PORT_443_TCP_PROTO=tcp CATTLE_CLUSTER_AGENT_PORT_80_TCP=tcp://10.43.216.129:80 CATTLE_CLUSTER_AGENT_PORT_80_TCP_ADDR=10.43.216.129 CATTLE_CLUSTER_AGENT_PORT_80_TCP_PORT=80 CATTLE_CLUSTER_AGENT_PORT_80_TCP_PROTO=tcp CATTLE_CLUSTER_AGENT_SERVICE_HOST=10.43.216.129 CATTLE_CLUSTER_AGENT_SERVICE_PORT=80 CATTLE_CLUSTER_AGENT_SERVICE_PORT_HTTP=80 CATTLE_CLUSTER_AGENT_SERVICE_PORT_HTTPS_INTERNAL=443 CATTLE_CLUSTER_REGISTRY= CATTLE_INGRESS_IP_DOMAIN=sslip.io CATTLE_INSTALL_UUID=d909f8d9-a76a-4ef6-bf4b-f26cc3adee84 CATTLE_INTERNAL_ADDRESS= CATTLE_IS_RKE=false CATTLE_K8S_MANAGED=true CATTLE_NODE_NAME=cattle-cluster-agent-55cb88648-zlrx5 CATTLE_SERVER=https://127.0.0.1:8043 CATTLE_SERVER_VERSION=v2.7.1
INFO: Using resolv.conf: search cattle-system.svc.cluster.local svc.cluster.local cluster.local nameserver 10.43.0.10 options ndots:5
ERROR: https://127.0.0.1:8043/ping is not accessible (Failed to connect to 127.0.0.1 port 8043 after 0 ms: Connection refused)
我尝试在本机执行: curl https://127.0.0.1:8043/ping 成功返回pong,
但是进入容器内执行 curl https://127.0.0.1:8043/ping,出错:curl: (7) Failed to connect to 127.0.0.1 port 8043 after 0 ms: Connection refused。
我的resolv.conf如下:
# cat resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients directly to
# all known uplink DNS servers. This file lists all configured search domains.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
nameserver 10.151.6.6
nameserver 10.151.6.7
想请问大家遇到过这个我问题吗?