Kubernetes(K8S)实战快速搭建typecho个人博客

Kubernetes(K8S)快速搭建typecho个人博客

1、准备工作

K8S集群环境,搭建教程参考腾讯云Lighthouse组建跨地域Kubernetes集群

K8S集群面板,搭建教程参考Kubernetes集群管理面板的安装及使用 - 青阳のblog-一个计算机爱好者的个人博客 (hipyt.cn)

注意

如果没有集群或者服务器不够可以通过传送门新购。

腾讯云轻量应用服务器购买地址:传送门

2、部署说明

说明:本文的教程是基于Kubernetes集群的,搭建了kuboard管理面板,之后在进行搭建typecho博客的教程。

本文使用的对应docker镜像的地址如下:

MySQL:mysql - Official Image | Docker Hub

typecho:rehiy/typecho - Docker Image | Docker Hub

3、创建mysql数据库

3.1 mysql配置文件

代码语言:txt
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: &name mysql   # Deployment的标签,用于标识资源为mysql应用程序
  name: *name  # Deployment的名称为mysql
  namespace: default  # Deployment所在的命名空间为default
spec:
  replicas: 1  # Deployment副本数量为1
  selector:  # 标签选择器,选择包含标签app:mysql的资源
    matchLabels:
      app: *name
  template:  # Pod的模板,用于选择或创建Pod
    metadata:  # Pod的元数据
      labels:
        app: *name
    spec:
      affinity:  # Pod亲和性设置
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchFields:
                  - key: metadata.name
                    operator: In
                    values:
                      - vm-4-13-ubuntu  # 选择节点名称为vm-4-13-ubuntu的节点作为部署目标
      containers:  # 容器定义
      - name: *name  # 容器的名称为mysql
        image: mysql:latest  # 使用最新版的MySQL镜像
        ports:  # 容器端口映射
        - containerPort: 3306  # 将容器的3306端口暴露出来
        env:  # 环境变量设置
        - name: MYSQL_ROOT_PASSWORD  # MySQL的root用户密码
          value: typecho@123
        - name: MYSQL_DATABASE  # MySQL数据库名称
          value: typecho
        - name: MYSQL_USER  # MySQL用户名
          value: typecho
        - name: MYSQL_PASSWORD  # MySQL用户密码
          value: typecho@123
        volumeMounts:  # 容器的卷挂载设置
        - name: db  # 指定卷的名称为db
          mountPath: /var/lib/mysql  # 将卷挂载到容器的/var/lib/mysql路径下
      volumes:  # 卷定义
      - name: db  # 卷的名称为db
        hostPath:
          path: /var/lib/mysql  # 指定主机上的路径/var/lib/mysql作为卷的路径

apiVersion: v1
kind: Service
metadata:
name: mysql # Service的名称为mysql
namespace: default # Service所在的命名空间为default
spec:
type: ClusterIP # Service类型为ClusterIP,内部集群使用
selector:
app: mysql
ports:

  • name: db-port
    protocol: TCP
    port: 3306 # Service的端口号为3306
    targetPort: 3306 # Service转发流量到Pod的3306端口

3.2使用配置文件创建mysql服务

输入图片说明
输入图片说明
输入图片说明

把上面的yaml配置修改之后复制粘贴到这里直接提交确定。

输入图片说明

这样就是成功搭建了mysql服务,点击进去可以看到具体信息。

4、创建typecho

4.1 mysql配置文件

代码语言:txt
复制
kind: Deployment  # 创建Deployment资源
apiVersion: apps/v1
metadata:
name: &name myblog # 定义名为myblog的标量锚点,值为"myblog"。并将锚点引用到name字段中
namespace: default
labels:
app: *name # 将锚点引用到app标签的值上
spec:
selector:
matchLabels:
app: *name # 根据app标签选择匹配的Pod
template:
metadata:
labels:
app: *name # 在Pod模板中使用app标签,并引用锚点
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchFields:
- key: metadata.name
operator: In
values:
- vm-4-13-ubuntu # 选择节点名称为vm-4-13-ubuntu的节点作为部署目标
containers:
- name: typecho # 定义一个名为typecho的容器
image: rehiy/typecho # 使用rehiy/typecho镜像
ports:
- containerPort: 80 # 容器暴露的端口号为80
- containerPort: 443 # 容器暴露的端口号为443
volumeMounts:
- name: *name # 引用锚点指定的卷名
subPath: usr # 指定挂载到容器的子路径为usr
mountPath: /var/www/default/usr # 将卷挂载到容器的/var/www/default/usr路径下
volumes:
- name: *name # 引用锚点指定的卷名
hostPath:
path: /srv/myblog # 指定主机上的路径/srv/myblog作为卷的路径
type: DirectoryOrCreate # 如果路径不存在,则创建目录

kind: Service # 创建Service资源
apiVersion: v1
metadata:
name: &name myblog # 引用锚点指定的名称
namespace: default
labels:
app: *name # 引用锚点指定的标签值
spec:
selector:
app: *name # 根据app标签选择匹配的Pod
ports:
- name: http # 定义名为http的端口
port: 80 # Service监听的端口号为80
targetPort: 80 # Service转发流量到Pod的端口号为80
- name: https # 定义名为https的端口
port: 443 # Service监听的端口号为443
targetPort: 443 # Service转发流量到Pod的端口号为443


kind: Ingress # 创建Ingress资源
apiVersion: networking.k8s.io/v1
metadata:
name: &name myblog # 引用锚点指定的名称
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure # Traefik路由入口配置
spec:
rules:
- host: blog.eg.cn # 定义访问Ingress的域名
http:
paths:
- path: / # 匹配路径为/
pathType: Prefix # 路径类型为前缀匹配
backend:
service:
name: *name # 引用锚点指定的Service名称
port:
name: http # 引用锚点指定的端口名称
tls:
- secretName: default # 使用名为default的TLS证书密钥对,用于HTTPS访问

4.2使用配置文件创建typecho博客

输入图片说明
输入图片说明

和创建mysql一样的方式复制修改配置文件即可成功搭建。

4、测试使用

首先把域名解析到对应的pod的ip之后,直接用域名访问。访问成功即创建博客成功,然后根据提示进行下一步安装。

提示

输入图片说明

这里建议选择我标注出来的这个。

输入图片说明

5、总结

Kubernetes提供了强大的高可用性特性,它可以自动管理和调度容器实例,确保应用程序在集群中始终可用。还可以监控和自动修复故障的容器实例,提高博客的稳定性和可靠性。它的弹性伸缩的特性,可以根据负载变化自动调整程序。当博客访问量增加时,Kubernetes可以自动扩展应用程序的实例数以满足需求,并在访问量下降时自动缩减资源的使用。大家如果发现它别的特点功能可以和我讨论!或者还有什么类似的程序大家也可以分享一下!