将博客部署到k3s中

之前已经把博客部署到docker中了,这次是要通过k8s部署。

k8s官方文档使用的kubeadm,配置需求比较高,我的破虚拟机达不到要求,于是试都没试,而找到了这个轻量级的k3s

cluster环境搭建

最开始是直接下载的release镜像包,不过不好管理,后来使用了git仓库的安装脚本进行安装。

注:
k3s安装好后,应该是k8s本身的一些配置原因,我的80端口被莫名的转发了,之前docker部署的博客也不能访问,一直提示404 page not found,原因不明。

博客配置

比起docker启动时,指定配置选项,k8s通过yaml配置文件指定这些选项,对我来说,主要是文件系统的挂载。

k8s整个生态还是比较复杂的,我这里使用了比较简单的形式。

Deployment

  • 应用增加app=myblog的label,供后面service 引用
  • 把数据文件、数据库和日志目录,通过hostPath挂载出来
    • 这里没有用localhost,因为hostPath不需要预先创建,比较简单
  • replicas 仅有一个
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myblog-deployment
  labels:
    app: myblog
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myblog
  template:
    metadata:
      labels:
        app: myblog
    spec:
      containers:
      - name: myblog
        image: mosakashaka/blog:latest
        volumeMounts:
        - name: blog-data
          mountPath: /app/wwwroot/data
        - name: blog-db
          mountPath: /data
        - name: blog-log
          mountPath: /app/Logs
      volumes:
        - name: blog-data
          hostPath:
            # directory location on host
            path: /root/sync/BlogDatabase/blogdata
            # this field is optional
            type: Directory
        - name: blog-db
          hostPath:
            # directory location on host
            path: /root/sync/BlogDatabase/blogdb
            # this field is optional
            type: Directory
        - name: blog-log
          hostPath:
            # directory location on host
            path: /root/kube/bloglog
            # this field is optional
            type: Directory

Service

这里选择通过Ingress来使能外界访问,所以需要一个Service,map 80端口即可。

apiVersion: v1
kind: Service
metadata:
  name: myblog-service
spec:
  selector:
    app: myblog
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Ingress

通过NodePort或者LoadBalancer也可以达到这个目的,不过Ingress在有Ingress Controller的情况下,似乎是我所了解的最简单的方式。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: myblog-ingress
spec:
  backend:
    serviceName: myblog-service
    servicePort: 80

启动运行

将以上三个文件存储为yaml格式放在一个目录中,如blog,在父目录中执行

kubectl apply -f myblog

即可启动。

遗留问题

  1. 80端口被k3s的哪个服务所占用/拦截?
  2. 其他方式的网络配置
原文地址:https://www.cnblogs.com/mosakashaka/p/12608657.html