编程语言及工具
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配置文件
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配置文件
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一样的方式复制修改配置文件即可成功搭建。
测试使用
首先把域名解析到对应的pod的ip之后,直接用域名访问。访问成功即创建博客成功,然后根据提示进行下一步安装。
提示
这里建议选择我标注出来的这个。
5、总结
Kubernetes提供了强大的高可用性特性,它可以自动管理和调度容器实例,确保应用程序在集群中始终可用。还可以监控和自动修复故障的容器实例,提高博客的稳定性和可靠性。它的弹性伸缩的特性,可以根据负载变化自动调整程序。当博客访问量增加时,Kubernetes可以自动扩展应用程序的实例数以满足需求,并在访问量下降时自动缩减资源的使用。
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !