之前辛辛苦苦折腾的 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
下面放置的。
诡异的问题
等待安装好之后,随便访问 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 还算成功,看看后面如何用到真正的项目中去。来感受微服务的快乐