zoukankan      html  css  js  c++  java
  • 将博客部署到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. 其他方式的网络配置
  • 相关阅读:
    面板数据及其基本模型
    markdwon编辑公式入门
    向纳什大神致敬
    我和我的祖国观后感
    少年的你观后感
    特征选择学习笔记1(综述)
    时间序列学习笔记1
    《绿皮书》观后感
    《美丽心灵》观后感
    pycharm跨目录调用文件
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608657.html
Copyright © 2011-2022 走看看