一、本地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界面: