我计划将数据库(MySQL)也使用 K8S 来进行部署(别问为什么, 可能就是闲的蛋疼吧), 如果使用之前文章中介绍的 NFS 方式(Kubernetes 配置 NFS 服务)来提供持久化卷的话, 可能会有性能问题, 因为我不需要数据库有漂移到其他节点的能力, 所以这里选择使用 local 的方式.

阅读全文 »

按照我之前的规划, 我的两个节点的 K3S 集群中, 应当有且仅有与下载相关的容器被分配到 node 节点上. 为了实现这一目标, 我需要给节点添加标签和污点(Taint).

阅读全文 »

Kubernetes 要使用 NFS 协议提供卷储存的功能, 首先得有一个 NFS 服务提供者, 如果还没有的话, 需要先配置一个 NFS 服务.

安装配置 NFS 服务

安装依赖

首先安装 NFS 服务器需要的软件包

1
2
sudo apt update
sudo apt install nfs-kernel-server

在使用端安装 NFS 客户端需要的软件包

1
2
sudo apt update
sudo apt install nfs-common
阅读全文 »

按照 Cloudflare 文章的说法, Argo Tunnel 的 Ingress Controller 在 2019 年年底已经停止维护, 建议用户使用 Sidecar 的方式使用 Argo Tunnel, 所以这里使用 Sidecar 的方式进行部署.

阅读全文 »

我使用的是 K3S 搭建的 Kubernetes 集群, 它默认安装了一个 Ingress 工具 treafik , 这里直接使用 treafik 并使用 echo server 来举例说明 Ingress 的配置.

首先定义 echo server 的 deployment 信息.

阅读全文 »

安装 Kube-Prometheus

安装 prometheus 的方法有很多, 这里选择直接安装 kube-prometheus, 先根据兼容性列表确认可以安装的 kube-prometheus 版本, 然后下载兼容的版本.

1
wget https://github.com/prometheus-operator/kube-prometheus/archive/v0.6.0.tar.gz

然后解压进入目录

1
2
tar zxvf v0.6.0.tar.gz
cd kube-prometheus-0.6.0

首先安装 setup 目录内的配置.

1
kubectl apply -f manifests/setup/

安装好后再应用外层目录下的配置.

1
kubectl apply -f manifests/
阅读全文 »

Kubernetes Dashboard

Kubernetes Dashboard 是 Kubernetes 团队开源的一个平台, 可以使用它查询最基本的 Kubernetes 运行信息.

安装 Kubernetes Dashboard

这一步很简单, 在 Github 上的 dashboard 项目 release 上选择兼容的版本, 然后执行对应的安装命令即可, 例如:

1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml

创建人员权限

创建一个配置文件 dashboard-adminuser.yaml 来记录以下的代码段

首先创建一个账号

1
2
3
4
5
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard

接着绑定对应的权限

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard

应用上述的两个代码段

1
kubectl apply -f dashboard-adminuser.yaml

使用 Kubernetes Dashboard

相关的账号就创建好了, 接着可以使用命令获取到对应的 Token 信息

1
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

使用命令 kubectl proxy 可以在本地启动对应的转发, 接着用浏览器打开链接

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

并输入上一步获取的 Token 信息即可访问 Kubernetes 的运行信息.

k3s 默认使用 containerd 作为容器运行时, 因为我更熟悉 docker, 所以打算在 k3s 中使用 docker 代替 containerd.

先升级一下系统

1
2
apt update
apt upgrade -y

在系统中安装 docker, 直接使用 apt 安装

1
apt install docker.io

然后安装 k3s 的 master 节点

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

安装完成后, 从 master 节点上的 /var/lib/rancher/k3s/server/node-token 获取到 token 值. 然后用 token 值安装 node 节点

1
curl -sfL https://get.k3s.io | K3S_URL=https://server:6443 K3S_TOKEN=token sh -s - --docker

给 node 节点添加 role.

1
kubectl label node node node-role.kubernetes.io/worker=worker

计划中 master 和 node 将使用两个网络出口, 给两种服务提供支撑, 所以我们需要给节点打标记来让应用可以正确的部署到对应的节点中.

1
2
kubectl label nodes master network=proxy
kubectl label nodes node network=direct

创建一个 Ubuntu 虚拟机, 使用 openvswitch 的方式使虚拟机拥有与宿主机同级的 IP 地址, 方便后续在路由器上针对此虚拟机做路由策略.

配置暂定为 1c2g, 安装盘镜像为 /zfs-pool/kvm/image/ubuntu-20.04-live-server-amd64.iso, 系统盘存放在 /mnt/sdf1/kvm/disk/ 目录下, sdf1 为一块 SSD 硬盘, 使用 openvswitch 管理网络.

首先创建一个系统盘, 并调整文件权限, 系统盘容量暂定为 40G

1
2
qemu-img create -f qcow2 ubuntu.qcow2 40G
chown libvirt-qemu:kvm ubuntu.qcow2

然后使用命令行创建一个虚拟机

1
2
3
4
5
6
7
8
virt-install --name ubuntu \
--vcpus=1 \
--ram 2048 \
--cdrom=/zfs-pool/kvm/image/ubuntu-20.04-live-server-amd64.iso \
--disk=/mnt/sdf1/kvm/disk/ubuntu.qcow2 \
--os-variant=ubuntu20.04 \
--boot machine=q35 \
--graphics vnc,listen=0.0.0.0

然后使用 vnc 链接进虚拟机, 一路 Enter 安装完成. 接着使用命令 virsh edit ubuntu 进入配置文件调整配置.

1
2
3
4
5
6
7
8
<!-- 调整网络配置 -->
<!-- 从 network 调整为 bridge -->
<interface type='bridge'>
<!-- 从 network 调整为 bridge, 从 default 调整为 osvbr0 -->
<source bridge='ovsbr0'/>
<!-- 新增一行 -->
<virtualport type='openvswitch'/>
</interface>

虚拟机就创建好了.

研究了半天把博客搭建好了, 然而并不知道该写些什么东西……

0%