K3s简介及使用

1. 简介

1.1 K3s简介

K3s是由Rancher开发的轻量级 Kubernetes。安装简单,内存只有一半,所有的二进制都不到 100MB。K3s 是一个完全符合 Kubernetes 的发行版。

官方文档:https://docs.rancher.cn/k3s/

官方Github:https://github.com/k3s-io/k3s

1.2 为什么使用K3s

这里主要介绍下使用K3s的背景及为什么使用K3s。

在2020年上半年项目组决定开发一套可以在容器中快速启动集群以及云平台的PoC系统,该系统内不仅需要在容器内启动云平台所有服务,还需要在容器内启动K8s集群以提供系统功能。在第一版系统开发中采用了在容器内使用minikube来进行启动集群方案,由于minikube在容器中启动受到了一定的限制。(因此最高支持K8s版本为1.10.0。因此在这个版本下我们的云平台被限制在了v1.13版本。到v1.15版本时由于mantins方案的引入,最低支持的K8s版本为1.13因此在集成Moebius v1.15 的PoC系统时不得不舍弃了mantins的部署。

随着业务的发展,mantins方案的成熟,以及后续版本引入的istio服务网格,PoC容器内K8s版本的升级已经迫在眉睫,在经过调研后编译了minikube源码以及解决了在容器内无法使用systemctl命令以及内核问题,启动PoC已经变的不是十分友好。具体包括:

  • 确定内核版本
  • 挂载内核文件
  • 使用/sbin/init初始化容器
  • 手动执行云平台启动脚本
  • 镜像占用空间20G+

综上,使用minikube搭建K8s集群方案可用,但是启动比较麻烦。因此K3s进入了我的视线,其具有以下优点:

  • 提供离线部署方案
  • 紧跟K8s发行版本
  • 提供证书轮换策略
  • 支持Helm以及istio
  • 支持容器内部署
  • 支持docker和containerd作为容器运行时方案

虽然具有以上优势,但是和具体Moebius业务融合还有待后续开发验证,如不支持某些场景或需求,还会采用minikube部署的K8s作为PoC底层环境支持。

2. K3s使用

2.1 部署

K8s部署使用十分简单,在线安装单节点仅需一条命令,当然如果您想配置更多参数,还需要手动配置,这里我只更换了默认容器运行时(containerd)更换为了docker。其他均使用默认配置进行后续部署。具体部署步骤参见官方文档:https://docs.rancher.cn/docs/k3s/installation/_index

2.2 使用

2.2.1 查看节点

bash-5.0# k3s kubectl get nodes
NAME   STATUS   ROLES    AGE   VERSION
k3s    Ready    master   14h   v1.18.4+k3s1

2.2.2 使用kubectl以及helm

方案一:通过KUBECONFIG环境变量指定kubeconfig文件:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

方案二:在命令中指定 kubeconfig 文件的位置

kubectl --kubeconfig /etc/rancher/k3s/k3s.yaml
helm --kubeconfig /etc/rancher/k3s/k3s.yaml

3. Docker容器中使用K3s

原GitHub链接:https://github.com/unboundedsystems/k3s-dind

3.1 kubeconfig位置

bash-5.0# pwd
/var/lib/rancher/k3s/server/cred
bash-5.0# ls
admin.kubeconfig             api-server.kubeconfig        cloud-controller.kubeconfig  controller.kubeconfig        ipsec.psk                    node-passwd                  passwd                       scheduler.kubeconfig

4. K3s验证istio功能

bash-5.0# kubectl get po -n istio-system
NAME                                    READY   STATUS    RESTARTS   AGE
kiali-d45468dc4-5669r                   1/1     Running   0          15h
svclb-istio-ingressgateway-9k5pm        5/5     Running   0          15h
istio-tracing-9dd6c4f7c-thd2w           1/1     Running   0          15h
istiod-85d7db7d57-st2j8                 1/1     Running   0          15h
grafana-54b54568fc-rmnlv                1/1     Running   0          15h
istio-ingressgateway-7d8cdc4ddc-kjhzj   1/1     Running   0          15h
istio-egressgateway-f97cf498c-dcsdk     1/1     Running   0          15h
prometheus-5bb9c77d74-gq8p7             2/2     Running   0          15h
bash-5.0# kubectl get po
NAME                                   READY   STATUS    RESTARTS   AGE
ratings-v2-7f5576697d-zw2gk            2/2     Running   0          22m
details-v2-78c975b754-w666p            2/2     Running   0          22m
mongodb-v1-5d8d79b944-xwfql            2/2     Running   0          22m
ratings-v2-mysql-698754865-ggtf6       2/2     Running   0          22m
mysqldb-v1-785c94cd7f-7pfkr            2/2     Running   0          22m
reviews-v1-54b8794ddf-hl4p7            2/2     Running   0          22m
reviews-v3-7f66977689-nmqsd            2/2     Running   0          22m
reviews-v2-c4d6568f9-rzmg7             2/2     Running   0          22m
ratings-v1-6f855c5fff-xzwtk            2/2     Running   0          22m
ratings-v2-mysql-vm-6fcf6c7f47-hh9tz   2/2     Running   0          22m
details-v1-6fc55d65c9-7kd74            2/2     Running   0          22m
productpage-v1-7f44c4d57c-4x5lc        2/2     Running   0          22m

kiali视图

5. k3s验证Helm功能

bash-5.0# helm list
NAME    NAMESPACE       REVISION        UPDATED STATUS  CHART   APP VERSION
bash-5.0# helm env
HELM_BIN="helm"
HELM_DEBUG="false"
HELM_KUBEAPISERVER=""
HELM_KUBECONTEXT=""
HELM_KUBETOKEN=""
HELM_NAMESPACE="default"
HELM_PLUGINS="/root/.local/share/helm/plugins"
HELM_REGISTRY_CONFIG="/root/.config/helm/registry.json"
HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"

8. K3d

8.1 简介

k3d creates containerized k3s clusters. This means, that you can spin up a multi-node k3s cluster on a single machine using docker.

8.2 项目仓库地址

https://github.com/rancher/k3d

9. K3x

https://github.com/inercia/k3x

发表评论

邮箱地址不会被公开。

Captcha Code