前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K3S从放弃到入门(三) 搞点有用的

K3S从放弃到入门(三) 搞点有用的

原创
作者头像
一介程序员
修改2022-04-14 11:05:51
8590
修改2022-04-14 11:05:51
举报

搞了两天集群了,得搞点有实际用途的东西出来,所以决定搭建一个WordPress的博客。

这次的总体思路是使用WordPress的官方镜像跑WordPress,使用MySQL镜像跑MySQL,尽可能的保持简单。

具体规划是,使用longhorn提供底层的存储支撑,MySQL跑在MySQL的独立namespace里面,因为我打算把他做成公共的服务,WordPress跑在default命名空间中,并且同时部署两个节点。

文中的一些MySQL的基础操作,会忽略具体细节,毕竟这不在K3S讨论的范畴内。

安装longhorn

首先,根据这篇文章介绍,如果需要ReadWriteMany (RWX) 支持,centos需要安装NFSv4 client:

代码语言:shell
复制
yum install nfs-utils

https://raw.githubusercontent.com/longhorn/longhorn/v1.2.4/deploy/longhorn.yaml 下载到服务器上,通过kubectl apply -f longhorn.yaml安装

通过ingress配置外网访问longhorn的dashboard,这里加了一个简单的登录。

运行命令(记得替换里面的用户名、密码):

代码语言:shell
复制
USER=<USERNAME_HERE>; PASSWORD=<PASSWORD_HERE>; echo "${USER}:$(openssl passwd -stdin -apr1 <<< ${PASSWORD})" >> auth
kubectl -n longhorn-system create secret generic basic-auth --from-file=auth

新建文件longhorn-ingress.yam

代码语言:yaml
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: longhorn-ingress
  namespace: longhorn-system
  annotations:
    kubernetes.io/ingress.class: nginx
    # type of authentication
    nginx.ingress.kubernetes.io/auth-type: basic
    # prevent the controller from redirecting (308) to HTTPS
    nginx.ingress.kubernetes.io/ssl-redirect: 'false'
    # name of the secret that contains the user/password definitions
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    # message to display with an appropriate context why the authentication is required
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
    # custom max body size for file uploading like backing image uploading
    nginx.ingress.kubernetes.io/proxy-body-size: 10000m
spec:
  rules:
  - host: longhorn.example.com #注意把域名换一下
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: longhorn-frontend
            port:
              number: 80

解析好域名,就可以使用设置的用户名、密码登录了。

其实这里也可以不用密码,直接查看,但是毕竟公网访问,还是加个简单的密码比较好。

安装MySQL

新建文件mysql.yaml

代码语言:yaml
复制
apiVersion: v1
kind: Namespace
metadata:
  name: mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: mysql
  labels:
    app: mysql
spec:
  storageClassName: longhorn
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name:  mysql
  namespace: mysql
  labels:
    app:  mysql
spec:
  selector:
    matchLabels:
      app: mysql
  replicas: 1
  template:
    metadata:
      labels:
        app:  mysql
    spec:
      containers:
      - name:  mysql
        image:  mysql
        imagePullPolicy: IfNotPresent
        volumeMounts:
          - mountPath: /var/lib/mysql
            name: mysql
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: root
      volumes:
        - name: mysql
          persistentVolumeClaim:
            claimName: mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: mysql
spec:
  selector:
    app: mysql
  ports:
  - name: mysql
    protocol: TCP
    port: 3306
    targetPort: 3306
  • 创建了一个名为mysql 的 namespace。
  • 创建了一个名为mysql-pvc的存储卷,数据库的文件就保存在这个数据卷中。注意,这里的模式是ReadWriteOnce,保证同一时刻只能有一个Pod对他进行读写。
  • 创建了一个Deployment,他的环境变量中设置数据库的root密码,这个地方优雅一点的话,应该弄个Config Maps或者Secrets存以下的,但是我们是初学者嘛,就直接简单粗暴一点。
  • 创建了一个Service,暴露mysql服务。

运行命令:kubectl apply -f mysql.yaml创建

这里需要说明的是,mysql-pvc默认需要2个副本,但是我们这里只有两个节点,所以longhorn的dashboard里面会报错,可以用longhorn的dashboard里面,手动改成2副本.

设置副本
设置副本

这里我就不改系统默认的设置了,因为我之后还是会再加节点进集群,改来改去麻烦。

安装WordPress

首先需要在数据库中新建一个名为wordpress的数据库,分配好用户名密码,这一部分涉及MySQL的基础知识,就不细说了,链接数据库的话,可以通过kubectl exec这个命令直接进pod节点直接扣命令,也可以临时把mysql的服务类型设为nodeport,用gui工具连上去搞。

新建文件wordpress.yaml

代码语言:yaml
复制
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: blog-example-com
  namespace: default
  labels:
    app: wordpress
spec:
  secretName: blog-example-com-tls
  issuerRef:
    kind: ClusterIssuer
    name: letsencrypt-issuer
  dnsNames:
  - blog.example.com
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-pvc
  namespace: default
  labels:
    app: wordpress
spec:
  storageClassName: longhorn
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name:  wordpress
  namespace: default
  labels:
    app:  wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
  replicas: 2 
  template:
    metadata:
      labels:
        app:  wordpress
    spec:
      containers:
      - name:  wordpress
        image:  wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql.mysql.svc.cluster.local:3306
        - name: WORDPRESS_DB_PASSWORD
          value: wordpress
        - name: WORDPRESS_DB_USER 
          value: wordpress
        - name: WORDPRESS_DB_NAME  
          value: wordpress
        ports:
        - containerPort: 80
          name:  http
        volumeMounts:
        - mountPath: /var/www/html
          name: wordpress
      volumes:
        - name: wordpress
          persistentVolumeClaim:
            claimName: wordpress-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  namespace: default
  labels:
    app: wordpress
spec:
  selector:
    app: wordpress
  type: ClusterIP
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: wordpress
  namespace: default
  labels:
    app: wordpress
spec:
  rules:
  - host: blog.example.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: wordpress
            port:
              name: http
  tls:
    - hosts:
      - blog.example.com
      secretName: blog-example-com-tls
  • 记得把里面的域名信息换成自己的,安装完成,域名解析完成,就可以使用了。
  • 注意这里创建的wordpress-pvc也要去把副本数改成2。
  • Deployment中的spec.replicas 设置成2,这样就会启动两个pod
  • wordpress-pvc的accessModes为ReadWriteOnce,我试过,设置成ReadWriteMany,运行多个WordPress实例,但是性能特别差,就是那种无法接受的差。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装longhorn
  • 安装MySQL
  • 安装WordPress
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档