基于K3s与本地服务器创建小型WordPress站点

一、本地Linux服务器部署Rancher

本文主要讨论的是小型集群管理,所以这里使用K3s部署Rancher。Linux版本:Centos7。

1.首先需要在Linux服务器上安装K3s集群

curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=<VERSION> sh -s - server --cluster-init

2.将kubeconfig保存至本地工作站并编辑Rancher Server URL

kubeconfig文件对于访问kubernetes集群很重要。可以从Linux主机复制 /etc/rancher/k3s/k3s.yaml中的文件,并将其保存到本地工作站的 ~/.kube/config目录中。接下来需将server字段的value改为<IP_OF_LINUX_NODE>:6643。

3.安装kubectl

这里提供最简洁的方法,如果遇到问题可以访问官方文档:在 Linux 系统中安装并设置 kubectl | Kubernetes

# 下载最新发行版kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 安装kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 安装完成后查看版本详细信息
kubectl version --client --output=yaml

4.安装Helm

这里提供最简洁的方法,如果遇到问题可以访问官方文档:Helm | 安装Helm

# 安装Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 初始化Helm,添加chart仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 安装chart
helm repo update
---
helm install bitnami/mysql --generate-name

5.使用Helm安装Rancher

helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
---
kubectl create namespace cattle-system
---
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/<VERSION>/cert-manager.crds.yaml
---
helm repo add jetstack https://charts.jetstack.io
---
helm repo update
---
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace
---
# 以下NODE节点为本地LinuxIP,PASSWORD为自定义登录密码
helm install rancher rancher-latest/rancher \
  --namespace cattle-system \
  --set hostname=<IP_OF_LINUX_NODE>.sslip.io \
  --set replicas=1 \
  --set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN>

此时浏览器导航输入<IP_OF_LINUX_NODE>.sslip.io即可导航至Rancher页面(这里为我的Linux地址):

二、部署WordPress

1.创建 yaml文件

说明:本文部署均基于yaml文件手动部署

kustomization.yaml:

Secret是存储诸如密码或密钥之类敏感数据的对象。 从 1.14 开始,kubectl支持使用一个kustomization文件来管理Kubernetes对象。通过kustomization.yaml中的生成器创建一个 Secret。 

secretGenerator:
- name: mysql-pass
  literals:
  - password=123456
resources:
  - mysql-deployment.yaml
  - wordpress-deployment.yaml

mysql-deployment.yaml:

mysql-deployment说明:MySQL容器将PersistentVolume挂载在/var/lib/mysql,而MYSQL_ROOT_PASSWORD环境变量根据 Secret 设置数据库密码。 

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          value: wordpress
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

wordpress-deployment.yaml:

WordPress容器将PersistentVolume挂载到/var/www/html,用于保存网站数据文件。WORDPRESS_DB_HOST环境变量设置上面定义的MySQL Service的名称,WordPress将通过Service访问数据库。 WORDPRESS_环境变量根据使用kustomize生成的Secret设置数据库密码。  

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: NodePort
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:6.2.1-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        - name: WORDPRESS_DB_USER
          value: wordpress
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim

这里特别要注意的问题是,在Service块内,ports的type值。这里的值为NodePort,可以理解为本地节点,因为上文说明用途仅为本地使用。如需接入公有云服务器,则需改为LoadBalancer。

 

以上yaml文件均创建完成后(确保三个文件均在同一目录下),可以用如下命令进行部署:

kubectl apply -k ./

再进行验证:

# 查看secret
kubectl get secrets
# 查看服务
kubectl get svc
# 查看pods
kubectl get pods
# 查看pvc
kubectl get pvc

2.进入WordPress页面

浏览器输入<IP_OF_LINUX_NODE>:端口号。端口号可以在Rancher页面的服务内找到:

WordPress界面:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值