Kubernetes 部署 MySQL 应用
我计划将数据库(MySQL)也使用 K8S 来进行部署(别问为什么, 可能就是闲的蛋疼吧), 如果使用之前文章中介绍的 NFS 方式(Kubernetes 配置 NFS 服务)来提供持久化卷的话, 可能会有性能问题, 因为我不需要数据库有漂移到其他节点的能力, 所以这里选择使用 local
的方式.
我计划将数据库(MySQL)也使用 K8S 来进行部署(别问为什么, 可能就是闲的蛋疼吧), 如果使用之前文章中介绍的 NFS 方式(Kubernetes 配置 NFS 服务)来提供持久化卷的话, 可能会有性能问题, 因为我不需要数据库有漂移到其他节点的能力, 所以这里选择使用 local
的方式.
按照我之前的规划, 我的两个节点的 K3S 集群中, 应当有且仅有与下载相关的容器被分配到 node 节点上. 为了实现这一目标, 我需要给节点添加标签和污点(Taint).
按照 Cloudflare 文章的说法, Argo Tunnel 的 Ingress Controller 在 2019 年年底已经停止维护, 建议用户使用 Sidecar 的方式使用 Argo Tunnel, 所以这里使用 Sidecar 的方式进行部署.
我使用的是 K3S 搭建的 Kubernetes 集群, 它默认安装了一个 Ingress 工具 treafik , 这里直接使用 treafik 并使用 echo server 来举例说明 Ingress 的配置.
首先定义 echo server 的 deployment 信息.
安装 prometheus 的方法有很多, 这里选择直接安装 kube-prometheus, 先根据兼容性列表确认可以安装的 kube-prometheus 版本, 然后下载兼容的版本.
1 | wget https://github.com/prometheus-operator/kube-prometheus/archive/v0.6.0.tar.gz |
然后解压进入目录
1 | tar zxvf v0.6.0.tar.gz |
首先安装 setup 目录内的配置.
1 | kubectl apply -f manifests/setup/ |
安装好后再应用外层目录下的配置.
1 | kubectl apply -f manifests/ |
Kubernetes Dashboard 是 Kubernetes 团队开源的一个平台, 可以使用它查询最基本的 Kubernetes 运行信息.
这一步很简单, 在 Github 上的 dashboard 项目 release 上选择兼容的版本, 然后执行对应的安装命令即可, 例如:
1 | kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml |
创建一个配置文件 dashboard-adminuser.yaml
来记录以下的代码段
首先创建一个账号
1 | apiVersion: v1 |
接着绑定对应的权限
1 | apiVersion: rbac.authorization.k8s.io/v1 |
应用上述的两个代码段
1 | kubectl apply -f dashboard-adminuser.yaml |
相关的账号就创建好了, 接着可以使用命令获取到对应的 Token 信息
1 | kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') |
使用命令 kubectl proxy
可以在本地启动对应的转发, 接着用浏览器打开链接
并输入上一步获取的 Token 信息即可访问 Kubernetes 的运行信息.
k3s 默认使用 containerd 作为容器运行时, 因为我更熟悉 docker, 所以打算在 k3s 中使用 docker 代替 containerd.
先升级一下系统
1 | apt update |
在系统中安装 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 | kubectl label nodes master network=proxy |
创建一个 Ubuntu 虚拟机, 使用 openvswitch 的方式使虚拟机拥有与宿主机同级的 IP 地址, 方便后续在路由器上针对此虚拟机做路由策略.
配置暂定为 1c2g, 安装盘镜像为 /zfs-pool/kvm/image/ubuntu-20.04-live-server-amd64.iso
, 系统盘存放在 /mnt/sdf1/kvm/disk/
目录下, sdf1 为一块 SSD 硬盘, 使用 openvswitch 管理网络.
首先创建一个系统盘, 并调整文件权限, 系统盘容量暂定为 40G
1 | qemu-img create -f qcow2 ubuntu.qcow2 40G |
然后使用命令行创建一个虚拟机
1 | virt-install --name ubuntu \ |
然后使用 vnc 链接进虚拟机, 一路 Enter 安装完成. 接着使用命令 virsh edit ubuntu
进入配置文件调整配置.
1 | <!-- 调整网络配置 --> |
虚拟机就创建好了.
研究了半天把博客搭建好了, 然而并不知道该写些什么东西……