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