仓库源文站点原文


title: 单机部署k3s toc: true cover: 'https://img.paulzzh.com/touhou/random?3' date: 2022-10-21 23:08:19 categories: Kubernetes tags: [Kubernetes, k3s]

description: 最近将单节点的k8s换成了更加轻量级的k3s,这里记录一下;

最近将单节点的k8s换成了更加轻量级的k3s,这里记录一下;

Gist 仓库:

<br/>

<!--more-->

单机部署k3s

k3s介绍

K3s 是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进行了高度优化。K3s 有以下增强功能:

k3s 名称由来:

我们希望安装的 Kubernetes 在内存占用方面只是一半的大小。Kubernetes 是一个 10 个字母的单词,简写为 K8s。所以,有 Kubernetes 一半大的东西就是一个 5 个字母的单词,简写为 K3s;

K3s 没有全称,也没有官方的发音。

K3s 适用于以下场景:

由于运行 K3s 所需的资源相对较少,所以 K3s 也适用于开发和测试场景;

在这些场景中,如果开发或测试人员需要对某些功能进行验证,或对某些问题进行重现,那么使用 K3s 不仅能够缩短启动集群的时间,还能够减少集群需要消耗的资源;

与此同时,Rancher 中国团队推出了一款针对 K3s 的效率提升工具:AutoK3s。只需要输入一行命令,即可快速创建 K3s 集群并添加指定数量的 master 节点和 worker 节点;

上述内容来自,k3s 中文文档:

总结一下就是:

k8s 里面带的东西太多了,我们将很多k8s的功能打到了一个二进制里面,你直接使用这个二进制去玩就好了!

<br/>

k3s安装与配置

安装k3s

相比于k8s,k3s的安装过程非常简单,直接使用:

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

安装即可;

国内用户,可以使用以下方法加速安装:

curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

需要注意的是:

<br/>

卸载k3s

使用install.sh脚本安装了 K3s,在安装过程中会生成一个卸载脚本;

该脚本在节点的/usr/local/bin/k3s-uninstall.sh上创建(或者是k3s-agent-uninstall.sh):

./k3s-uninstall.sh #或是以下命令
./k3s-agent-uninstall.sh

运行该脚本即可卸载 K3s;

<br/>

配置helm

Helm 是 Kubernetes 的首选包管理工具,Helm Chart 为 Kubernetes YAML 清单文件提供了模板化语法;

通过 Helm,我们可以创建可配置的部署,而不仅仅是使用静态文件;

更多信息:

对于在 k3s 下使用 helm,其实官方已经提供了,可以直接参考:

<br/>

下面是额外安装 helm 的指南,也比较简单:

首先是下载并安装:

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh
chmod u+x install-helm.sh
./install-helm.sh
helm init
# Or: https://www.cnblogs.com/breezey/p/9398927.html
# helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.0 --service-account=tiller --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

随后是将 Helm 和 Tiller 连接:

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'      
helm init --service-account tiller --upgrade

注:在 Helm 3.x 版本,舍弃了 Tiller;

最后校验 Helm 安装:

helm repo update
helm search postgres

上面所有的安装内容,这里也提供了一个 Gist,可以参考:

<br/>

其他内容

除了上面列出的,还有一些其他内容:

尤其是 网络卷和存储 建议看一下!

<br/>

部署Dashboard

推荐使用 Kuborad,比官方的面板要好用:

在 k3s 中部署 Kubernetes Dashboard 的官方文档如下:

Dashboard:

只要跟着通过 kubectl 创建资源,随后创建 RBAC 配置即可;

在登陆 Dashboard 的时候,需要首先通过:

sudo k3s kubectl -n kubernetes-dashboard create token admin-user

创建 Bearer Token,然后通过Token登陆;

同时,默认情况下 Dashboard 只支持通过 localhost 访问:

sudo k3s kubectl proxy

Dashboard 部署完成后主要有两个常见的问题:

下面分别来看;

<br/>

设置远程访问

默认情况下 Dashboard 只能通过本地访问,我们可以通过:

多种方法来设置远程访问,其中 NodePort 的方法一劳永逸,下面来介绍;

编辑 dashboard service:

type: ClusterIP 修改为:type: NodePort

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
...
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
  resourceVersion: "343478"
  selfLink: /api/v1/namespaces/kubernetes-dashboard/services/kubernetes-dashboard
  uid: 8e48f478-993d-11e7-87e0-901b0e532516
spec:
  clusterIP: 10.100.124.90
  externalTrafficPolicy: Cluster
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
-  type: ClusterIP
+  type: NodePort
status:
  loadBalancer: {}

随后检查服务:

$ kubectl -n kubernetes-dashboard get service kubernetes-dashboard

NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.43.224.49   <none>        443:31048/TCP   18h

可以通过 https://<ip>:31048 访问!

文档:

<br/>

Chrome证书拦截

解决了远程访问的问题之后,还有另一个问题。

Dashboard 需要使用 https 访问,并且默认提供的自签名证书 chrome 是不认的!

在使用 Chrome 访问时会提示:您的连接不是私密连接,然后无法打开页面;

解决方法也有很多种,比如:

上面的方法都可以解决,但是比较麻烦,但是网上大多数都是这种方法;

但是,其实最简单的方法是:

直接在当前页面输入:

thisisunsafe

就可以访问了!

<font color="#f00">**因为Chrome不信任这些自签名ssl证书,为了安全起见,直接禁止访问了,`thisisunsafe` 这个命令,说明你已经了解并确认这是个不安全的网站;**</font>

参考:

<br/>

附录

Gist 仓库:

K3s 官方文档:

<br/>