K3S 部署记录 — 集群&监控&K9S

之前辛辛苦苦折腾的 K8S 集群由于是在是太重了,感觉没有很好的运营起来,导致被最后一堆交错的问题劝退。
后面偶尔看到了 K3S这个东西,自己孤陋寡闻,以为又是国人搞得什么山寨项目(笑)
后面偶然机会去仔细看了下,发现真是个好东西,对K8S基本能做到全部兼容,自己拿来用是足够了。
全部的依赖都在二进制包里,很方便的就可以跑起来。

安装

由于只是一个 二进制文件,所以安装起来十分的简单,官方给了一键安装的脚本。
但是这里需要改一下,因为后面需要安装管理面板,以及master访问,所以在安装的时候需要指定参数,来使用 docker。

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

k3s 默认是使用 的 containerd 来作为容器平台的。这里使用Docker来代替之,因为后面要跑起来一个 管理平台是 使用 Docker 来构建的。
命令跑完之后,k3s 就差不多安装好了。安装之后执行 k3s check-config,来检查k3s 的环境。发现有一个 fail

#   (RHEL7/CentOS7: User namespaces disabled; add 'user_namespace.enable=1' to boot command line) (fail)
# https://zhuanlan.zhihu.com/p/31871814
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"

自定义配置

k3s 在完成安装之后,需要自定义一些配置,

  • 使用 docker 作为容器引擎
  • 使用自身IP来作为bind ip
  • 改写 kubeconfig 为到默认目录
  • kubeconfig 的权限

修改 vim /etc/systemd/system/k3s.service Systemde的配置文件里面的启动参数来对这些东西来进行设置

ExecStart=/usr/local/bin/k3s \
    server \
        '--docker' \
        '--bind-address=apiserver.cluster.local' \
        '--write-kubeconfig=/root/.kube/config' \
        '--write-kubeconfig-mode=644'

问题

k3s 的一些默认配置在 /var/lib/rancher/k3s/server/manifests 下面放置的。

k3s-Helm

诡异的问题

等待安装好之后,随便访问 127.0.0.1:80 发现返回的是 404,而实际上我们并没有 服务跑在 80 端口。之后查看当前的service情况,发现有 ingress 配置在了 80和 443 端口。

➜  manifests kubectl get services  -n kube-system
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                         AGE
traefik              LoadBalancer   10.43.127.25    192.168.66.100   8080:32635/TCP,8443:31959/TCP   138m

所以我们这里需要改一下 这里的 load banlance的设置,把绑定在 80的端口,指定到其他端口

kubectl edit service/traefik -n kube-system
kubectl get service/traefik -n kube-system -o yaml > traefik-svc.yaml

修改内容如下:

  ports:
  - name: http
    nodePort: 32635
    port: 8080
    protocol: TCP
    targetPort: http
  - name: https
    nodePort: 31959
    port: 8443
    protocol: TCP
    targetPort: https

Rancher 管理平台安装

前面的集群搭建好之后,这里需要部署集群管理工具。使用 rancher 来进行集群的管理。

docker run -d -v /data/docker/rancher-server/var/lib/rancher/:/var/lib/rancher/ --restart=unless-stopped --name rancher-server -p 80:80 -p 443:443 rancher/rancher:stable

跑起来之后,直接根据界面上的提示来进行初始化操作即可。

sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.4.5 --server https://192.168.66.10 --token ** --ca-checksum *** --controlplane --worker

但是在服务重启的情况,会出现证书不正确, 和下面的情况类似

https://github.com/rancher/rancher/issues/24125

Have FUN

之后直接打开master节点的80 便可以进行访问。
可以展示集群状态。等信息,另外有dashboard的功能。可以直接来进行使用
而且可以直接一件部署基于 Prometheus 和 grafana方案的监控系统。

加入节点

有了前面建立的master节点之后,可以吧更多的节点加入集群。有了master 节点就可以很快的将其他的work接入进来。一个命令即可,token在 /var/lib/rancher/k3s/server/node-token 里面。

curl -sfL https://get.k3s.io | K3S_URL=https://192.168.66.10:6443 K3S_TOKEN=K10d2345a3d61da39b00e17780bbd151996d6559e926620035d5e2f83fba0678cd1::server:25cd47269d7e52fe7edfb5b208102b82 sh -

加入节点之后,就可以在控制台看到我们的新节点。

监控

Rancher 本身自带了监控系统,可谓非常的全面了。 grafana 和 prometheus 的监控技术栈,也是非常好用的了。
在部署的时候,基本上实现了 oneClick 的安装,但是在安装之后,发现node节点出现了CrashRollBack的情况,看日志发现是 dial tcp 10.43.0.1:443: i/o timeout 这就奇怪了,这个是K3S 内部的clusterIP,不应该出现 的问题。

Unable to communicate, dial tcp 10.43.0.1:443: i/o timeout #10322

问题类似这种情况,解决方法重启机器解决。

K9S

K3S 集群本身已经可以使用 CLI 工具来进行管理,但是为了更好的来实现操作,这里推荐一个神器 ,K9S
安装方法,直接按照上面的intro来,不在赘述,对集群管理非常的方便。

后面的话

综上,这次上K3S 还算成功,看看后面如何用到真正的项目中去。来感受微服务的快乐

相关内容

留下点什么吧